From 6be1820306ce6b91c762633dbcc264990cc569d4 Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 07:54:33 -0500 Subject: [PATCH 01/16] chore: init trunk --- .github/CODEOWNERS | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 4 +- .github/actionlint.yml | 7 + .github/labeler.yml | 108 +- .github/workflows/cd-dgraph.yml | 77 +- .../ci-aqua-security-trivy-tests.yml | 45 - .github/workflows/ci-dgraph-code-coverage.yml | 14 +- .github/workflows/ci-dgraph-core-tests.yml | 15 +- .../ci-dgraph-core-upgrade-tests.yml | 11 +- .github/workflows/ci-dgraph-fuzz.yml | 11 +- .../ci-dgraph-integration2-tests.yml | 11 +- .github/workflows/ci-dgraph-jepsen-tests.yml | 10 +- .github/workflows/ci-dgraph-ldbc-tests.yml | 13 +- .github/workflows/ci-dgraph-load-tests.yml | 11 +- .github/workflows/ci-dgraph-oss-build.yml | 11 +- .../ci-dgraph-system-upgrade-tests.yml | 11 +- .github/workflows/ci-dgraph-systest-tests.yml | 17 +- .github/workflows/ci-dgraph-tests-arm64.yml | 12 +- ...ci-dgraph-upgrade-fixed-versions-tests.yml | 7 +- .github/workflows/ci-dgraph-vector-tests.yml | 15 +- .github/workflows/ci-golang-lint.yml | 33 - .github/workflows/codeql.yml | 55 +- .github/workflows/labeler.yml | 8 +- .golangci.yml | 41 - .trunk/.gitignore | 9 + .trunk/configs/.checkov.yaml | 2 + .trunk/configs/.golangci.json | 5 + .trunk/configs/.hadolint.yaml | 4 + .trunk/configs/.markdownlint.json | 8 + .trunk/configs/.prettierrc | 5 + .trunk/configs/.shellcheckrc | 7 + .trunk/configs/.yamllint.yaml | 7 + .trunk/trunk.yaml | 50 + .vscode/extensions.json | 3 + .vscode/settings.json | 6 + CHANGELOG.md | 3690 +- CONTRIBUTING.md | 220 +- LICENSE.md | 14 +- README.md | 134 +- compose/run.sh | 126 +- contrib/README.md | 7 +- contrib/config/backups/README.md | 23 +- contrib/config/backups/azure/README.md | 65 +- .../config/backups/azure/azure_cli/README.md | 26 +- .../backups/azure/azure_cli/create_blob.sh | 163 +- .../backups/azure/azure_cli/create_secrets.sh | 111 +- .../config/backups/azure/terraform/README.md | 21 +- contrib/config/backups/client/README.md | 119 +- .../config/backups/client/backup_helper.sh | 339 +- .../config/backups/client/compose-setup.sh | 400 +- .../config/backups/client/dgraph-backup.sh | 307 +- contrib/config/backups/gcp/README.md | 70 +- .../config/backups/gcp/terraform/README.md | 43 +- contrib/config/backups/nfs/README.md | 166 +- .../backups/nfs/charts/rook/fetch-operator.sh | 13 +- .../config/backups/nfs/charts/rook/helmify.sh | 52 +- .../backups/nfs/efs-terraform/README.md | 71 +- contrib/config/backups/nfs/gcfs-cli/README.md | 30 +- .../backups/nfs/gcfs-cli/create_gcfs.sh | 103 +- .../backups/nfs/gcfs-terraform/README.md | 42 +- .../config/backups/nfs/vagrant/provision.sh | 219 +- contrib/config/backups/s3/README.md | 53 +- contrib/config/backups/s3/terraform/README.md | 28 +- contrib/config/monitoring/jaeger/README.md | 10 +- .../config/monitoring/jaeger/chart/README.md | 20 +- .../monitoring/jaeger/operator/README.md | 19 +- .../monitoring/jaeger/operator/helmify.sh | 52 +- .../config/monitoring/prometheus/README.md | 33 +- .../prometheus/chart-values/README.md | 66 +- contrib/config/terraform/aws/ha/README.md | 32 +- .../aws/ha/dgraph/ratel/variables.tf | 7 +- .../terraform/aws/ha/dgraph/zero/variables.tf | 12 +- .../config/terraform/aws/standalone/README.md | 29 +- .../config/terraform/gcp/standalone/README.md | 18 +- .../terraform/gcp/standalone/outputs.tf | 2 +- .../terraform/gcp/standalone/variables.tf | 8 +- contrib/config/terraform/kubernetes/README.md | 103 +- .../modules/aws/modules/eks/outputs.tf | 4 +- .../modules/aws/modules/eks/variables.tf | 8 +- .../modules/aws/modules/vpc/nacl-config.tf | 6 +- .../modules/aws/modules/vpc/outputs.tf | 6 +- .../modules/alpha/templates/alpha_init.sh | 2 +- .../modules/dgraph/modules/zero/variables.tf | 8 +- contrib/config/vault/README.md | 2 +- contrib/config/vault/docker/README.md | 91 +- contrib/docker-build/README.md | 15 +- contrib/docker-build/build.sh | 2 +- contrib/local-test/README.md | 310 +- contrib/manual_tests/README.md | 4 +- contrib/manual_tests/log.sh | 10 +- contrib/manual_tests/test.sh | 888 +- contrib/scripts/cover.sh | 33 +- contrib/scripts/functions.sh | 86 +- contrib/scripts/goldendata-queries.sh | 77 +- contrib/scripts/install-dependencies.sh | 1 - contrib/scripts/load-test.sh | 14 +- contrib/scripts/loader.sh | 36 +- contrib/scripts/transactions.sh | 12 +- contrib/standalone/hooks/build | 2 +- contrib/standalone/run.sh | 3 +- contrib/systemd/centos/README.md | 7 +- contrib/systemd/centos/add_dgraph_account.sh | 26 +- contrib/systemd/ha_cluster/README.md | 44 +- contrib/systemd/ha_cluster/tests/README.md | 54 +- .../ha_cluster/tests/centos8/provision.sh | 229 +- .../ha_cluster/tests/ubuntu1804/provision.sh | 229 +- contrib/tlstest/README.md | 21 +- contrib/tlstest/alpha_notls.sh | 2 +- contrib/tlstest/alpha_tls.sh | 2 +- contrib/tlstest/alpha_tls_auth.sh | 2 +- contrib/tlstest/live_notls.sh | 2 +- contrib/tlstest/live_tls.sh | 2 +- contrib/tlstest/live_tls_auth.sh | 2 +- contrib/tlstest/run.sh | 2 +- contrib/tlstest/server_nopass.sh | 2 +- contrib/tlstest/server_pass.sh | 2 +- contrib/tlstest/test.sh | 26 +- contrib/tlstest/test_reload.sh | 16 +- contrib/wait-for-it.sh | 267 +- .../alpha/mutations_mode/docker-compose.yml | 115 +- dgraph/cmd/alpha/testrun.sh | 49 +- dgraph/cmd/alpha/testrun/conf1.yaml | 1 - dgraph/cmd/alpha/testrun/conf2.yaml | 1 - dgraph/cmd/alpha/testrun/conf3.yaml | 1 - dgraph/cmd/alpha/thoughts.md | 20 +- dgraph/cmd/bulk/speed_tests/run.sh | 31 +- dgraph/cmd/bulk/split_gz.sh | 22 +- dgraph/cmd/bulk/systest/run.sh | 21 +- dgraph/cmd/bulk/systest/test-bulk-schema.sh | 257 +- dgraph/cmd/migrate/README.md | 22 +- dgraph/docker-compose.yml | 67 +- dgraphtest/README.md | 11 +- dql/README.md | 8 +- ee/README.md | 5 +- go.mod | 3 +- graphql/bench/README.md | 42 +- .../poorman_auth/docker-compose.yml | 13 +- .../poorman_auth_with_acl/docker-compose.yml | 15 +- graphql/e2e/auth/debug_off/docker-compose.yml | 13 +- graphql/e2e/auth/docker-compose.yml | 14 +- .../auth_closed_by_default/docker-compose.yml | 14 +- graphql/e2e/common/README.md | 4 +- graphql/e2e/common/error_test.yaml | 289 +- graphql/e2e/custom_logic/README.md | 7 +- graphql/e2e/custom_logic/cmd/go.mod | 4 +- .../e2e/custom_logic/cmd/graphqlresponse.yaml | 339 +- graphql/e2e/custom_logic/cmd/index.js | 8 +- graphql/e2e/custom_logic/docker-compose.yml | 38 +- graphql/e2e/directives/docker-compose.yml | 15 +- graphql/e2e/directives/script.js | 101 +- graphql/e2e/multi_tenancy/docker-compose.yml | 108 +- graphql/e2e/normal/docker-compose.yml | 15 +- graphql/e2e/normal/script.js | 101 +- graphql/e2e/schema/docker-compose.yml | 78 +- graphql/e2e/subscription/docker-compose.yml | 78 +- graphql/resolve/add_mutation_test.yaml | 753 +- graphql/resolve/auth_add_test.yaml | 165 +- .../auth_closed_by_default_add_test.yaml | 20 +- .../auth_closed_by_default_delete_test.yaml | 30 +- .../auth_closed_by_default_query_test.yaml | 10 +- .../auth_closed_by_default_update_test.yaml | 14 +- graphql/resolve/auth_delete_test.yaml | 126 +- graphql/resolve/auth_query_test.yaml | 322 +- graphql/resolve/auth_tests.yaml | 124 +- graphql/resolve/auth_update_test.yaml | 130 +- graphql/resolve/custom_mutation_test.yaml | 12 +- graphql/resolve/custom_query_test.yaml | 10 +- graphql/resolve/delete_mutation_test.yaml | 43 +- graphql/resolve/mutation_query_test.yaml | 48 +- graphql/resolve/query_test.yaml | 340 +- graphql/resolve/resolver_error_test.yaml | 342 +- graphql/resolve/update_mutation_test.yaml | 330 +- graphql/resolve/validate_mutation_test.yaml | 36 +- graphql/schema/auth_schemas_test.yaml | 165 +- graphql/schema/custom_http_config_test.yaml | 27 +- graphql/schema/dgraph_schemagen_test.yml | 67 +- graphql/schema/gqlschema_test.yml | 434 +- .../schemagen/input/password-type.graphql | 4 +- .../input/searchables-references.graphql | 16 +- .../schemagen/input/searchables.graphql | 58 +- .../input/single-type-with-enum.graphql | 2 +- .../schemagen/input/single-type.graphql | 10 +- ...ype-implements-multiple-interfaces.graphql | 12 +- .../type-with-arguments-on-field.graphql | 10 +- ...e-with-custom-field-on-dgraph-type.graphql | 23 +- ...-with-custom-fields-on-remote-type.graphql | 23 +- .../input/type-without-orderables.graphql | 10 +- .../testdata/schemagen/input/union.graphql | 39 +- .../output/apollo-federation.graphql | 767 +- .../output/auth-on-interfaces.graphql | 583 +- .../schemagen/output/authorization.graphql | 542 +- .../output/comments-and-descriptions.graphql | 477 +- .../output/created-updated-directives.graphql | 503 +- ...custom-dql-query-with-subscription.graphql | 483 +- .../schemagen/output/custom-mutation.graphql | 342 +- .../output/custom-nested-types.graphql | 294 +- .../output/custom-query-mixed-types.graphql | 343 +- .../custom-query-not-dgraph-type.graphql | 278 +- .../custom-query-with-dgraph-type.graphql | 339 +- .../schemagen/output/deprecated.graphql | 345 +- ...e-on-concrete-type-with-interfaces.graphql | 536 +- ...-reverse-directive-with-interfaces.graphql | 534 +- ...ing-directive-with-similar-queries.graphql | 603 +- .../output/field-with-id-directive.graphql | 529 +- .../field-with-multiple-@id-fields.graphql | 531 +- ...erse-predicate-in-dgraph-directive.graphql | 451 +- .../filter-cleanSchema-all-empty.graphql | 367 +- .../filter-cleanSchema-circular.graphql | 441 +- ...filter-cleanSchema-custom-mutation.graphql | 342 +- .../filter-cleanSchema-directLink.graphql | 407 +- .../output/generate-directive.graphql | 535 +- .../schemagen/output/geo-type.graphql | 403 +- ...se-with-interface-having-directive.graphql | 654 +- .../output/hasInverse-with-interface.graphql | 667 +- ...Inverse-with-type-having-directive.graphql | 654 +- .../schemagen/output/hasInverse.graphql | 385 +- .../hasInverse_withSubscription.graphql | 390 +- .../schemagen/output/hasfilter.graphql | 423 +- .../ignore-unsupported-directive.graphql | 383 +- .../output/interface-with-dgraph-pred.graphql | 527 +- .../interface-with-id-directive.graphql | 525 +- .../output/interface-with-no-ids.graphql | 459 +- ...interfaces-with-types-and-password.graphql | 712 +- .../output/interfaces-with-types.graphql | 692 +- .../schemagen/output/lambda-directive.graphql | 359 +- .../schemagen/output/language-tags.graphql | 575 +- .../no-id-field-with-searchables.graphql | 331 +- .../schemagen/output/no-id-field.graphql | 493 +- .../schemagen/output/password-type.graphql | 357 +- .../testdata/schemagen/output/random.graphql | 347 +- .../output/searchables-references.graphql | 481 +- .../schemagen/output/searchables.graphql | 763 +- .../output/single-type-with-enum.graphql | 369 +- .../schemagen/output/single-type.graphql | 389 +- ...ype-implements-multiple-interfaces.graphql | 542 +- .../schemagen/output/type-reference.graphql | 433 +- .../type-with-arguments-on-field.graphql | 445 +- ...e-with-custom-field-on-dgraph-type.graphql | 418 +- ...-with-custom-fields-on-remote-type.graphql | 352 +- .../output/type-without-orderables.graphql | 345 +- .../testdata/schemagen/output/union.graphql | 820 +- graphql/testdata/custom_bench/README.md | 108 +- .../profiling/benchmarks/0/schema.graphql | 80 +- .../benchmarks/1_batch/schema.graphql | 93 +- .../benchmarks/1_single/schema.graphql | 93 +- .../benchmarks/2_batch/schema.graphql | 106 +- .../benchmarks/2_single/schema.graphql | 106 +- .../benchmarks/3_batch/schema.graphql | 93 +- .../benchmarks/3_single/schema.graphql | 93 +- .../benchmarks/4_batch/schema.graphql | 106 +- .../benchmarks/4_single/schema.graphql | 106 +- .../benchmarks/5_batch/schema.graphql | 93 +- .../benchmarks/5_single/schema.graphql | 93 +- .../benchmarks/6_batch/schema.graphql | 106 +- .../benchmarks/6_single/schema.graphql | 106 +- .../benchmarks/7_batch/schema.graphql | 132 +- .../benchmarks/7_single/schema.graphql | 132 +- .../benchmarks/8_batch/schema.graphql | 145 +- .../benchmarks/8_single/schema.graphql | 145 +- graphql/testdata/datagen/README.md | 64 +- graphql/testdata/datagen/schema.graphql | 82 +- logo-dark.png | Bin 13481 -> 6102 bytes logo.png | Bin 7234 -> 5747 bytes ocagent/ocagent-config.yaml | 6 +- paper/architecture.png | Bin 47000 -> 31993 bytes paper/datasharding.png | Bin 76148 -> 62249 bytes paper/integerstorage.png | Bin 29689 -> 23460 bytes paper/maxassigned-derivation.png | Bin 21503 -> 16790 bytes paper/maxassigned.png | Bin 20423 -> 15250 bytes paper/mvcc.png | Bin 35526 -> 28549 bytes paper/posting.png | Bin 65722 -> 49960 bytes posting/size_test.sh | 16 +- protos/depcheck.sh | 19 +- protos/patch_pb.sh | 18 +- protos/pb/pb.pb.go | 22 +- query/benchmark/README.md | 39 +- query/benchmark/run.sh | 28 +- query/thoughts.md | 25 +- systest/1million/test-reindex.sh | 50 +- systest/21million/test-21million.sh | 170 +- .../acl/restore/data/backups/manifest.json | 64 +- .../dgraph.20201125.173944.587/manifest.json | 26 +- .../dgraph.20210517.094442.220/manifest.json | 24 +- .../dgraph.20210517.094634.533/manifest.json | 24 +- .../dgraph.20210517.094648.003/manifest.json | 24 +- .../data/to_restore/3/manifest.json | 87 +- systest/backup/nfs-backup/docker-compose.yml | 254 +- systest/bgindex/test-bgindex.sh | 24 +- systest/group-delete/README.md | 4 +- systest/ldbc/test_cases.yaml | 156 +- systest/loader-benchmark/loader-benchmark.sh | 48 +- .../dgraph.20200617.210005.792/manifest.json | 9 +- .../dgraph.20200617.210012.038/manifest.json | 9 +- .../dgraph.20200617.210106.464/manifest.json | 9 +- .../dgraph.20200617.210343.124/manifest.json | 31 +- .../dgraph.20200617.212208.094/manifest.json | 12 +- .../dgraph.20210706.130427.532/manifest.json | 23 +- .../dgraph.20210706.130444.413/manifest.json | 23 +- .../dgraph.20210706.130453.552/manifest.json | 23 +- .../dgraph.20210706.130519.083/manifest.json | 23 +- .../dgraph.20210706.130544.666/manifest.json | 23 +- .../dgraph.20210706.130634.385/manifest.json | 23 +- t/README.md | 17 +- test.sh | 302 +- testutil/README.md | 2 +- tok/options/README.md | 66 +- types/testdata/aruba.json | 104 +- types/testdata/sudan.json | 166 +- types/testdata/us.json | 37514 +++++++++++++++- types/testdata/zip.json | 1866 +- worker/README.md | 2 +- 311 files changed, 63202 insertions(+), 21483 deletions(-) create mode 100644 .github/actionlint.yml delete mode 100644 .github/workflows/ci-aqua-security-trivy-tests.yml delete mode 100644 .github/workflows/ci-golang-lint.yml delete mode 100644 .golangci.yml create mode 100644 .trunk/.gitignore create mode 100644 .trunk/configs/.checkov.yaml create mode 100644 .trunk/configs/.golangci.json create mode 100644 .trunk/configs/.hadolint.yaml create mode 100644 .trunk/configs/.markdownlint.json create mode 100644 .trunk/configs/.prettierrc create mode 100644 .trunk/configs/.shellcheckrc create mode 100644 .trunk/configs/.yamllint.yaml create mode 100644 .trunk/trunk.yaml create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8ef236d6d31..908cced9a26 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,4 +1,4 @@ # CODEOWNERS info: https://help.github.com/en/articles/about-code-owners # Owners are automatically requested for review for PRs that changes code # that they own. -* @hypermodeinc/database +* @hypermodeinc/database \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index cae77b76401..e8c683fd5a7 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -8,8 +8,8 @@ Please explain the changes you made here. - [ ] For all _code_ changes, an entry added to the `CHANGELOG.md` file describing and linking to this PR - [ ] Tests added for new functionality, or regression tests for bug fixes added as applicable -- [ ] For public APIs, new features, etc., PR on [docs repo](https://github.com/dgraph-io/dgraph-docs) - staged and linked here +- [ ] For public APIs, new features, etc., PR on + [docs repo](https://github.com/dgraph-io/dgraph-docs) staged and linked here **Instructions** diff --git a/.github/actionlint.yml b/.github/actionlint.yml new file mode 100644 index 00000000000..03454752e8b --- /dev/null +++ b/.github/actionlint.yml @@ -0,0 +1,7 @@ +self-hosted-runner: + # Labels of self-hosted runner in array of string + labels: + - warp-ubuntu-latest-arm64-4x + - warp-ubuntu-latest-x64-4x + - warp-ubuntu-latest-arm64-16x + - warp-ubuntu-latest-x64-16x diff --git a/.github/labeler.yml b/.github/labeler.yml index cd3b29fce2a..5d26187207e 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,82 +1,82 @@ area/graphql: -- changed-files: - - any-glob-to-any-file: graphql/** + - changed-files: + - any-glob-to-any-file: graphql/** area/documentation: -- changed-files: - - any-glob-to-any-file: - - '**/*.md' - - '**/*.pdf' - - '**/*.tex' + - changed-files: + - any-glob-to-any-file: + - "**/*.md" + - "**/*.pdf" + - "**/*.tex" area/bulk-loader: -- changed-files: - - any-glob-to-any-file: dgraph/cmd/bulk/** + - changed-files: + - any-glob-to-any-file: dgraph/cmd/bulk/** area/live-loader: -- changed-files: - - any-glob-to-any-file: dgraph/cmd/live/** + - changed-files: + - any-glob-to-any-file: dgraph/cmd/live/** area/querylang: -- changed-files: - - any-glob-to-any-file: dql/** + - changed-files: + - any-glob-to-any-file: dql/** area/integrations: -- changed-files: - - any-glob-to-any-file: - - contrib/** - - .github/** - - .travis/** + - changed-files: + - any-glob-to-any-file: + - contrib/** + - .github/** + - .travis/** area/testing/jepsen: -- changed-files: - - any-glob-to-any-file: contrib/jepsen/** + - changed-files: + - any-glob-to-any-file: contrib/jepsen/** area/enterprise: -- changed-files: - - any-glob-to-any-file: ee/** + - changed-files: + - any-glob-to-any-file: ee/** area/enterprise/backup: -- changed-files: - - any-glob-to-any-file: ee/backup/** + - changed-files: + - any-glob-to-any-file: ee/backup/** area/enterprise/acl: -- changed-files: - - any-glob-to-any-file: ee/acl/** - + - changed-files: + - any-glob-to-any-file: ee/acl/** + area/schema: -- changed-files: - - any-glob-to-any-file: schema/** + - changed-files: + - any-glob-to-any-file: schema/** area/testing: -- changed-files: - - any-glob-to-any-file: - - systest/** - - '**/*test.go' - - graphql/e2e/** - - '**/*test.yaml' - - t/** - - testutil/** - - tlstest/** + - changed-files: + - any-glob-to-any-file: + - systest/** + - "**/*test.go" + - graphql/e2e/** + - "**/*test.yaml" + - t/** + - testutil/** + - tlstest/** area/core: -- changed-files: - - any-glob-to-any-file: - - protos/** - - posting/** - - raftwal/** - - query/** - - schema/** - - protos/** - - x/** - - xidmap/** - - worker/** - - graphql/** + - changed-files: + - any-glob-to-any-file: + - protos/** + - posting/** + - raftwal/** + - query/** + - schema/** + - protos/** + - x/** + - xidmap/** + - worker/** + - graphql/** go: -- changed-files: - - any-glob-to-any-file: '**/*.go' + - changed-files: + - any-glob-to-any-file: "**/*.go" python: -- changed-files: - - any-glob-to-any-file: '**/*.py' + - changed-files: + - any-glob-to-any-file: "**/*.py" diff --git a/.github/workflows/cd-dgraph.yml b/.github/workflows/cd-dgraph.yml index dbb09ede123..d5fe6f8ea6b 100644 --- a/.github/workflows/cd-dgraph.yml +++ b/.github/workflows/cd-dgraph.yml @@ -1,4 +1,5 @@ name: cd-dgraph + on: workflow_dispatch: inputs: @@ -13,14 +14,18 @@ on: custom-build: type: boolean default: false - description: if checked, images will be pushed to dgraph-custom repo in Dockerhub + description: if checked, images will be pushed to dgraph-custom repo in Dockerhub + +permissions: + contents: read + jobs: dgraph-build-amd64: runs-on: warp-ubuntu-latest-x64-16x steps: - uses: actions/checkout@v4 with: - ref: '${{ github.event.inputs.releasetag }}' + ref: "${{ github.event.inputs.releasetag }}" - name: Set up Go uses: actions/setup-go@v5 with: @@ -119,7 +124,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - ref: '${{ github.event.inputs.releasetag }}' + ref: "${{ github.event.inputs.releasetag }}" - name: Set up Go uses: actions/setup-go@v5 with: @@ -195,8 +200,9 @@ jobs: with: name: dgraph-docker-arm64 path: dgraph-docker-arm64.tar - - name: Make Dgraph Standalone Docker Image with Version - #No need to build and push Standalone Image when its a custom build + - name: + Make Dgraph Standalone Docker Image with Version + #No need to build and push Standalone Image when its a custom build if: inputs.custom-build == false run: | set -e @@ -217,7 +223,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - ref: '${{ github.event.inputs.releasetag }}' + ref: "${{ github.event.inputs.releasetag }}" - name: Set Dgraph Release Version run: | #!/bin/bash @@ -237,7 +243,7 @@ jobs: with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD_TOKEN }} - + # Download AMD64 Tar File - name: Download Dgraph AMD64 Tar uses: actions/download-artifact@v4 @@ -259,7 +265,7 @@ jobs: - name: Load ARM64 Docker Image run: | docker load -i dgraph-docker-arm64.tar - + # Download Standalone AMD64 Tar File - name: Download Standalone AMD64 Tar if: inputs.custom-build == false @@ -272,7 +278,7 @@ jobs: if: inputs.custom-build == false run: | docker load -i dgraph-standalone-amd64.tar - + # Download Standalone ARM64 Tar File - name: Download Standalone ARM64 Tar if: inputs.custom-build == false @@ -285,36 +291,33 @@ jobs: if: inputs.custom-build == false run: | docker load -i dgraph-standalone-arm64.tar - - + - name: Docker Manifest run: | - if [ "${{ github.event.inputs.custom-build }}" == "true" ]; then - #Push AMD and ARM images to dgraph-custom repo - docker push dgraph/dgraph-custom:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 - docker push dgraph/dgraph-custom:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 - docker manifest create dgraph/dgraph-custom:${{ env.DGRAPH_RELEASE_VERSION }} --amend dgraph/dgraph-custom:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 --amend dgraph/dgraph-custom:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 - docker manifest push dgraph/dgraph-custom:${{ env.DGRAPH_RELEASE_VERSION }} - else - # Push standalone Images and manifest - docker push dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 - docker push dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 - docker manifest create dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }} --amend dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 --amend dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 - docker manifest push dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }} - - # Push Dgraph Images and Manifest - docker push dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 - docker push dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 - docker manifest create dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }} --amend dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 --amend dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 - docker manifest push dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }} + if [ "${{ github.event.inputs.custom-build }}" == "true" ]; then + #Push AMD and ARM images to dgraph-custom repo + docker push dgraph/dgraph-custom:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 + docker push dgraph/dgraph-custom:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 + docker manifest create dgraph/dgraph-custom:${{ env.DGRAPH_RELEASE_VERSION }} --amend dgraph/dgraph-custom:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 --amend dgraph/dgraph-custom:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 + docker manifest push dgraph/dgraph-custom:${{ env.DGRAPH_RELEASE_VERSION }} + else + # Push standalone Images and manifest + docker push dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 + docker push dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 + docker manifest create dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }} --amend dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 --amend dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 + docker manifest push dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }} - - if [ "${{ github.event.inputs.latest }}" == "true" ]; then - docker manifest create dgraph/standalone:latest --amend dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 --amend dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 - docker manifest create dgraph/dgraph:latest --amend dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 --amend dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 - docker manifest push dgraph/standalone:latest - docker manifest push dgraph/dgraph:latest - fi - fi + # Push Dgraph Images and Manifest + docker push dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 + docker push dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 + docker manifest create dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }} --amend dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 --amend dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 + docker manifest push dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }} + if [ "${{ github.event.inputs.latest }}" == "true" ]; then + docker manifest create dgraph/standalone:latest --amend dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 --amend dgraph/standalone:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 + docker manifest create dgraph/dgraph:latest --amend dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }}-amd64 --amend dgraph/dgraph:${{ env.DGRAPH_RELEASE_VERSION }}-arm64 + docker manifest push dgraph/standalone:latest + docker manifest push dgraph/dgraph:latest + fi + fi diff --git a/.github/workflows/ci-aqua-security-trivy-tests.yml b/.github/workflows/ci-aqua-security-trivy-tests.yml deleted file mode 100644 index 26295e1d520..00000000000 --- a/.github/workflows/ci-aqua-security-trivy-tests.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: ci-aqua-security-trivy-tests -on: - pull_request: - paths: - - '**/*.go' - - '**/go.mod' - types: - - opened - - reopened - - synchronize - - ready_for_review - branches: - - main - - 'release/**' - schedule: - - cron: "0 0 * * *" - -permissions: - security-events: write - -jobs: - build: - name: trivy-tests - if: github.event.pull_request.draft == false - runs-on: warp-ubuntu-latest-x64-4x - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Set up Go - uses: actions/setup-go@v5 - with: - go-version-file: go.mod - - name: Build Docker image - run: | - make docker-image - - name: Run Trivy vulnerability scanner - uses: aquasecurity/trivy-action@master - with: - image-ref: 'dgraph/dgraph:local' - format: 'sarif' - output: 'trivy-results.sarif' - - name: Upload Trivy scan results to GitHub Security tab - uses: github/codeql-action/upload-sarif@v3 - with: - sarif_file: 'trivy-results.sarif' diff --git a/.github/workflows/ci-dgraph-code-coverage.yml b/.github/workflows/ci-dgraph-code-coverage.yml index 663dba9fe15..1bc85ab99eb 100644 --- a/.github/workflows/ci-dgraph-code-coverage.yml +++ b/.github/workflows/ci-dgraph-code-coverage.yml @@ -1,12 +1,17 @@ name: ci-dgraph-code-coverage + on: push: paths: - - '**/*.go' - - '**/go.mod' + - "**/*.go" + - "**/go.mod" branches: - main - - 'release/**' + - release/** + +permissions: + contents: read + jobs: dgraph-code-coverage: runs-on: warp-ubuntu-latest-x64-4x @@ -48,4 +53,5 @@ jobs: - name: Install Goveralls run: go install github.com/mattn/goveralls@latest - name: Send Coverage Results - run: cd t && goveralls -repotoken ${{ secrets.COVERALLSIO_TOKEN }} -coverprofile=coverage.out + run: + cd t && goveralls -repotoken ${{ secrets.COVERALLSIO_TOKEN }} -coverprofile=coverage.out diff --git a/.github/workflows/ci-dgraph-core-tests.yml b/.github/workflows/ci-dgraph-core-tests.yml index 1182308e5ad..d74b51150ed 100644 --- a/.github/workflows/ci-dgraph-core-tests.yml +++ b/.github/workflows/ci-dgraph-core-tests.yml @@ -1,9 +1,10 @@ name: ci-dgraph-core-tests + on: pull_request: paths: - - '**/*.go' - - '**/go.mod' + - "**/*.go" + - "**/go.mod" types: - opened - reopened @@ -11,9 +12,13 @@ on: - ready_for_review branches: - main - - 'release/**' + - release/** schedule: - - cron: "0 0 * * *" # 1 run per day + - cron: 0 0 * * * # 1 run per day + +permissions: + contents: read + jobs: dgraph-core-tests: if: github.event.pull_request.draft == false @@ -66,6 +71,6 @@ jobs: continue-on-error: true # don't fail this job if the upload fails uses: trunk-io/analytics-uploader@main with: - junit-paths: "./test-results.xml" + junit-paths: ./test-results.xml org-slug: hypermode token: ${{ secrets.TRUNK_TOKEN }} diff --git a/.github/workflows/ci-dgraph-core-upgrade-tests.yml b/.github/workflows/ci-dgraph-core-upgrade-tests.yml index 7b1230f87fe..ec6353ae1ca 100644 --- a/.github/workflows/ci-dgraph-core-upgrade-tests.yml +++ b/.github/workflows/ci-dgraph-core-upgrade-tests.yml @@ -1,9 +1,10 @@ name: ci-dgraph-core-upgrade-tests + on: pull_request: paths: - - '**/*.go' - - '**/go.mod' + - "**/*.go" + - "**/go.mod" types: - opened - reopened @@ -11,7 +12,11 @@ on: - ready_for_review branches: - main - - 'release/**' + - release/** + +permissions: + contents: read + jobs: dgraph-upgrade-tests: if: github.event.pull_request.draft == false diff --git a/.github/workflows/ci-dgraph-fuzz.yml b/.github/workflows/ci-dgraph-fuzz.yml index d8b46f53c3a..10f312499de 100644 --- a/.github/workflows/ci-dgraph-fuzz.yml +++ b/.github/workflows/ci-dgraph-fuzz.yml @@ -1,9 +1,10 @@ name: ci-dgraph-fuzz + on: pull_request: paths: - - '**/*.go' - - '**/go.mod' + - "**/*.go" + - "**/go.mod" types: - opened - reopened @@ -11,7 +12,11 @@ on: - ready_for_review branches: - main - - 'release/**' + - release/** + +permissions: + contents: read + jobs: fuzz-test: if: github.event.pull_request.draft == false diff --git a/.github/workflows/ci-dgraph-integration2-tests.yml b/.github/workflows/ci-dgraph-integration2-tests.yml index 722952a7478..44a5e246be5 100644 --- a/.github/workflows/ci-dgraph-integration2-tests.yml +++ b/.github/workflows/ci-dgraph-integration2-tests.yml @@ -1,9 +1,10 @@ name: ci-dgraph-integration2-tests + on: pull_request: paths: - - '**/*.go' - - '**/go.mod' + - "**/*.go" + - "**/go.mod" types: - opened - reopened @@ -11,7 +12,11 @@ on: - ready_for_review branches: - main - - 'release/**' + - release/** + +permissions: + contents: read + jobs: dgraph-integration2-tests: if: github.event.pull_request.draft == false diff --git a/.github/workflows/ci-dgraph-jepsen-tests.yml b/.github/workflows/ci-dgraph-jepsen-tests.yml index 18b0e57c879..e85992d7f76 100644 --- a/.github/workflows/ci-dgraph-jepsen-tests.yml +++ b/.github/workflows/ci-dgraph-jepsen-tests.yml @@ -1,9 +1,15 @@ name: ci-dgraph-jepsen-tests + on: schedule: - - cron: "0 4 * * 3,6" # run twice weekly + - cron: 0 4 * * 3,6 # run twice weekly + env: - GOPATH: /home/ubuntu/go + GOPATH: /home/ubuntu/go + +permissions: + contents: read + jobs: dgraph-jepsen-tests: runs-on: warp-ubuntu-latest-x64-4x diff --git a/.github/workflows/ci-dgraph-ldbc-tests.yml b/.github/workflows/ci-dgraph-ldbc-tests.yml index a039263fc38..bb98a0bf9ed 100644 --- a/.github/workflows/ci-dgraph-ldbc-tests.yml +++ b/.github/workflows/ci-dgraph-ldbc-tests.yml @@ -1,9 +1,10 @@ name: ci-dgraph-ldbc-tests + on: pull_request: paths: - - '**/*.go' - - '**/go.mod' + - "**/*.go" + - "**/go.mod" types: - opened - reopened @@ -11,7 +12,11 @@ on: - ready_for_review branches: - main - - 'release/**' + - release/** + +permissions: + contents: read + jobs: dgraph-ldbc-tests: if: github.event.pull_request.draft == false @@ -28,7 +33,7 @@ jobs: - name: Install gotestsum run: go install gotest.tools/gotestsum@latest - name: Build Test Binary - run : | + run: | #!/bin/bash # build the test binary cd t; go build . diff --git a/.github/workflows/ci-dgraph-load-tests.yml b/.github/workflows/ci-dgraph-load-tests.yml index 74b545b8f9e..f5822e7d642 100644 --- a/.github/workflows/ci-dgraph-load-tests.yml +++ b/.github/workflows/ci-dgraph-load-tests.yml @@ -1,9 +1,10 @@ name: ci-dgraph-load-tests + on: pull_request: paths: - - '**/*.go' - - '**/go.mod' + - "**/*.go" + - "**/go.mod" types: - opened - reopened @@ -11,7 +12,11 @@ on: - ready_for_review branches: - main - - 'release/**' + - release/** + +permissions: + contents: read + jobs: dgraph-load-tests: if: github.event.pull_request.draft == false diff --git a/.github/workflows/ci-dgraph-oss-build.yml b/.github/workflows/ci-dgraph-oss-build.yml index 4eb1d510595..771a7c01d45 100644 --- a/.github/workflows/ci-dgraph-oss-build.yml +++ b/.github/workflows/ci-dgraph-oss-build.yml @@ -1,9 +1,10 @@ name: ci-dgraph-oss-build + on: pull_request: paths: - - '**/*.go' - - '**/go.mod' + - "**/*.go" + - "**/go.mod" types: - opened - reopened @@ -11,7 +12,11 @@ on: - ready_for_review branches: - main - - 'release/**' + - release/** + +permissions: + contents: read + jobs: dgraph-oss-build: if: github.event.pull_request.draft == false diff --git a/.github/workflows/ci-dgraph-system-upgrade-tests.yml b/.github/workflows/ci-dgraph-system-upgrade-tests.yml index 5a1812fc232..766877595bd 100644 --- a/.github/workflows/ci-dgraph-system-upgrade-tests.yml +++ b/.github/workflows/ci-dgraph-system-upgrade-tests.yml @@ -1,9 +1,10 @@ name: ci-dgraph-system-upgrade-tests + on: pull_request: paths: - - '**/*.go' - - '**/go.mod' + - "**/*.go" + - "**/go.mod" types: - opened - reopened @@ -11,7 +12,11 @@ on: - ready_for_review branches: - main - - 'release/**' + - release/** + +permissions: + contents: read + jobs: dgraph-upgrade-tests: if: github.event.pull_request.draft == false diff --git a/.github/workflows/ci-dgraph-systest-tests.yml b/.github/workflows/ci-dgraph-systest-tests.yml index fe114150cdd..a50d0e868e1 100644 --- a/.github/workflows/ci-dgraph-systest-tests.yml +++ b/.github/workflows/ci-dgraph-systest-tests.yml @@ -1,9 +1,10 @@ name: ci-dgraph-system-tests + on: pull_request: paths: - - '**/*.go' - - '**/go.mod' + - "**/*.go" + - "**/go.mod" types: - opened - reopened @@ -11,9 +12,13 @@ on: - ready_for_review branches: - main - - 'release/**' + - release/** schedule: - - cron: "0 0 * * *" # 1 run per day + - cron: 0 0 * * * # 1 run per day + +permissions: + contents: read + jobs: dgraph-systest-tests: if: github.event.pull_request.draft == false @@ -66,6 +71,6 @@ jobs: continue-on-error: true # don't fail this job if the upload fails uses: trunk-io/analytics-uploader@main with: - junit-paths: "./test-results.xml" + junit-paths: ./test-results.xml org-slug: hypermode - token: ${{ secrets.TRUNK_TOKEN }} \ No newline at end of file + token: ${{ secrets.TRUNK_TOKEN }} diff --git a/.github/workflows/ci-dgraph-tests-arm64.yml b/.github/workflows/ci-dgraph-tests-arm64.yml index 60d9f45be8a..824bcde9582 100644 --- a/.github/workflows/ci-dgraph-tests-arm64.yml +++ b/.github/workflows/ci-dgraph-tests-arm64.yml @@ -1,9 +1,10 @@ name: ci-dgraph-tests-arm64 + on: pull_request: paths: - - '**/*.go' - - '**/go.mod' + - "**/*.go" + - "**/go.mod" types: - opened - reopened @@ -11,7 +12,11 @@ on: - ready_for_review branches: - main - - 'release/**' + - release/** + +permissions: + contents: read + jobs: dgraph-tests: if: github.event.pull_request.draft == false @@ -59,4 +64,3 @@ jobs: ./t -r # sleep sleep 5 - diff --git a/.github/workflows/ci-dgraph-upgrade-fixed-versions-tests.yml b/.github/workflows/ci-dgraph-upgrade-fixed-versions-tests.yml index 1cc5fdb6bab..23105cbdf2c 100644 --- a/.github/workflows/ci-dgraph-upgrade-fixed-versions-tests.yml +++ b/.github/workflows/ci-dgraph-upgrade-fixed-versions-tests.yml @@ -1,7 +1,12 @@ name: ci-dgraph-upgrade-fixed-versions-tests + on: schedule: - - cron: "00 20 * * *" # 1 run per day + - cron: 00 20 * * * # 1 run per day + +permissions: + contents: read + jobs: dgraph-upgrade-fixed-versions-tests: runs-on: warp-ubuntu-latest-x64-4x diff --git a/.github/workflows/ci-dgraph-vector-tests.yml b/.github/workflows/ci-dgraph-vector-tests.yml index 50561aa29bf..737421fee43 100644 --- a/.github/workflows/ci-dgraph-vector-tests.yml +++ b/.github/workflows/ci-dgraph-vector-tests.yml @@ -1,9 +1,10 @@ name: ci-dgraph-vector-tests + on: pull_request: paths: - - '**/*.go' - - '**/go.mod' + - "**/*.go" + - "**/go.mod" types: - opened - reopened @@ -11,9 +12,13 @@ on: - ready_for_review branches: - main - - 'release/**' + - release/** schedule: - - cron: "0 0 * * *" # 1 run per day + - cron: 0 0 * * * # 1 run per day + +permissions: + contents: read + jobs: dgraph-vector-tests: if: github.event.pull_request.draft == false @@ -66,6 +71,6 @@ jobs: continue-on-error: true # don't fail this job if the upload fails uses: trunk-io/analytics-uploader@main with: - junit-paths: "./test-results.xml" + junit-paths: ./test-results.xml org-slug: hypermode token: ${{ secrets.TRUNK_TOKEN }} diff --git a/.github/workflows/ci-golang-lint.yml b/.github/workflows/ci-golang-lint.yml deleted file mode 100644 index 6b935d52dc4..00000000000 --- a/.github/workflows/ci-golang-lint.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: ci-golang-lint -on: - pull_request: - paths: - - '**/*.go' - - '**/go.mod' - types: - - opened - - reopened - - synchronize - - ready_for_review - branches: - - main - - 'release/**' -jobs: - golang-lint: - if: github.event.pull_request.draft == false - name: lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Setup Go - uses: actions/setup-go@v5 - with: - go-version-file: go.mod - - name: golang-lint - uses: golangci/golangci-lint-action@v6 - with: - # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version. - version: latest - only-new-issues: true - args: --timeout=10m - skip-cache: true diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 0f4298f94f2..a73c5d1935b 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -1,4 +1,4 @@ -name: "CodeQL" +name: CodeQL on: push: @@ -10,7 +10,10 @@ on: - main - release/** schedule: - - cron: '0 0 * * *' + - cron: 0 0 * * * + +permissions: + contents: read jobs: analyze: @@ -25,29 +28,29 @@ jobs: fail-fast: false matrix: include: - - language: go - build-mode: autobuild + - language: go + build-mode: autobuild steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: ${{ matrix.language }} - build-mode: ${{ matrix.build-mode }} - - - if: matrix.build-mode == 'manual' - run: | - echo 'If you are using a "manual" build mode for one or more of the' \ - 'languages you are analyzing, replace this with the commands to build' \ - 'your code, for example:' - echo ' make bootstrap' - echo ' make release' - exit 1 - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 - with: - category: "/language:${{matrix.language}}" + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + build-mode: ${{ matrix.build-mode }} + + - if: matrix.build-mode == 'manual' + run: | + echo 'If you are using a "manual" build mode for one or more of the' \ + 'languages you are analyzing, replace this with the commands to build' \ + 'your code, for example:' + echo ' make bootstrap' + echo ' make release' + exit 1 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:${{matrix.language}}" diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 566d8acfa8d..c25112c363f 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -1,4 +1,5 @@ name: labeler + on: pull_request: types: @@ -8,7 +9,12 @@ on: - ready_for_review branches: - main - - 'release/**' + - release/** + +permissions: + contents: read + pull-requests: write + jobs: label: permissions: diff --git a/.golangci.yml b/.golangci.yml deleted file mode 100644 index a387ca1cd43..00000000000 --- a/.golangci.yml +++ /dev/null @@ -1,41 +0,0 @@ -run: - skip-dirs: - skip-files: - -linters-settings: - lll: - line-length: 120 - staticcheck: - checks: - - all - - '-SA1019' # it is okay to use math/rand at times. - gosec: - excludes: # these are not relevant for us right now - - G101 - - G107 - - G108 - - G110 - - G112 - - G114 - - G201 - - G204 - - G306 - - G402 - - G404 - -linters: - disable-all: true - enable: - - errcheck - - gofmt - - goimports - - gosec - - gosimple - - govet - - ineffassign - - lll - - staticcheck - - unconvert - - unused - - intrange - - bodyclose diff --git a/.trunk/.gitignore b/.trunk/.gitignore new file mode 100644 index 00000000000..15966d087eb --- /dev/null +++ b/.trunk/.gitignore @@ -0,0 +1,9 @@ +*out +*logs +*actions +*notifications +*tools +plugins +user_trunk.yaml +user.yaml +tmp diff --git a/.trunk/configs/.checkov.yaml b/.trunk/configs/.checkov.yaml new file mode 100644 index 00000000000..521b240fe2c --- /dev/null +++ b/.trunk/configs/.checkov.yaml @@ -0,0 +1,2 @@ +skip-check: + - CKV_GHA_7 diff --git a/.trunk/configs/.golangci.json b/.trunk/configs/.golangci.json new file mode 100644 index 00000000000..58c035f24c5 --- /dev/null +++ b/.trunk/configs/.golangci.json @@ -0,0 +1,5 @@ +{ + "run": { + "build-tags": ["integration"] + } +} diff --git a/.trunk/configs/.hadolint.yaml b/.trunk/configs/.hadolint.yaml new file mode 100644 index 00000000000..98bf0cd2ee9 --- /dev/null +++ b/.trunk/configs/.hadolint.yaml @@ -0,0 +1,4 @@ +# Following source doesn't work in most setups +ignored: + - SC1090 + - SC1091 diff --git a/.trunk/configs/.markdownlint.json b/.trunk/configs/.markdownlint.json new file mode 100644 index 00000000000..449148d135e --- /dev/null +++ b/.trunk/configs/.markdownlint.json @@ -0,0 +1,8 @@ +{ + "line-length": { "line_length": 150, "tables": false }, + "no-inline-html": false, + "no-bare-urls": false, + "no-space-in-emphasis": false, + "no-emphasis-as-heading": false, + "first-line-heading": false +} diff --git a/.trunk/configs/.prettierrc b/.trunk/configs/.prettierrc new file mode 100644 index 00000000000..577642c89aa --- /dev/null +++ b/.trunk/configs/.prettierrc @@ -0,0 +1,5 @@ +{ + "semi": false, + "proseWrap": "always", + "printWidth": 100 +} diff --git a/.trunk/configs/.shellcheckrc b/.trunk/configs/.shellcheckrc new file mode 100644 index 00000000000..8c7b1ada8a3 --- /dev/null +++ b/.trunk/configs/.shellcheckrc @@ -0,0 +1,7 @@ +enable=all +source-path=SCRIPTDIR +disable=SC2154 + +# If you're having issues with shellcheck following source, disable the errors via: +# disable=SC1090 +# disable=SC1091 diff --git a/.trunk/configs/.yamllint.yaml b/.trunk/configs/.yamllint.yaml new file mode 100644 index 00000000000..184e251f8de --- /dev/null +++ b/.trunk/configs/.yamllint.yaml @@ -0,0 +1,7 @@ +rules: + quoted-strings: + required: only-when-needed + extra-allowed: ["{|}"] + key-duplicates: {} + octal-values: + forbid-implicit-octal: true diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml new file mode 100644 index 00000000000..ac5f84c284d --- /dev/null +++ b/.trunk/trunk.yaml @@ -0,0 +1,50 @@ +# This file controls the behavior of Trunk: https://docs.trunk.io/cli +# To learn more about the format of this file, see https://docs.trunk.io/reference/trunk-yaml +version: 0.1 +cli: + version: 1.22.8 + +# Trunk provides extensibility via plugins. (https://docs.trunk.io/plugins) +plugins: + sources: + - id: trunk + ref: v1.6.6 + uri: https://github.com/trunk-io/plugins + +# Many linters and tools depend on runtimes - configure them here. (https://docs.trunk.io/runtimes) +runtimes: + enabled: + - go@1.23.4 + - node@18.20.5 + - python@3.10.8 + +# This is the section where you manage your linters. (https://docs.trunk.io/check/configuration) +lint: + ignore: + - linters: [ALL] + paths: + - contrib/** + enabled: + - actionlint@1.7.6 + - checkov@3.2.351 + - dotenv-linter@3.3.0 + - git-diff-check + - gofmt@1.20.4 + - golangci-lint@1.63.4 + - hadolint@2.12.1-beta + - markdownlint@0.43.0 + - osv-scanner@1.9.2 + - oxipng@9.1.3 + - prettier@3.4.2 + - renovate@39.92.0 + - shellcheck@0.10.0 + - shfmt@3.6.0 + - tflint@0.54.0 + - trufflehog@3.88.1 + - yamllint@1.35.1 +actions: + enabled: + - trunk-announce + - trunk-check-pre-push + - trunk-fmt-pre-commit + - trunk-upgrade-available diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000000..29d43383de0 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["trunk.io"] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000000..93ff3ace95b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "editor.formatOnSave": true, + "editor.defaultFormatter": "trunk.io", + "editor.trimAutoWhitespace": true, + "trunk.autoInit": false +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 2cab1071dcb..6e5c21a7638 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,24 +1,28 @@ # Changelog + All notable changes to this project will be documented in this file. -The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) -and this project will adhere to [Semantic Versioning](https://semver.org) starting `v22.0.0`. +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project will +adhere to [Semantic Versioning](https://semver.org) starting `v22.0.0`. ## [v24.0.5] - 2024-11-05 + [v24.0.5]: https://github.com/hypermodeinc/dgraph/compare/v24.0.4...v24.0.5 -### Fixed +- **Fixed** - **Core** + - fix(core): fix duplicate mutation entries for count index (#9208) - **Chore** - Update cd-dgraph.yml to create unique artifacts (#9194) ## [v24.0.4] - 2024-10-08 + [v24.0.4]: https://github.com/hypermodeinc/dgraph/compare/v24.0.2...v24.0.4 -### Fixed +- **Fixed** - **Vector** @@ -58,198 +62,217 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - chore(deps): bump google.golang.org/grpc from 1.66.0 to 1.66.1 (#9163) - chore(deps): bump google.golang.org/grpc from 1.65.0 to 1.66.0 (#9152) - chore(deps): bump github.com/Masterminds/semver/v3 from 3.2.1 to 3.3.0 (#9151) - - chore(deps): bump github.com/docker/docker from 27.1.2+incompatible to 27.2.0+incompatible (#9150) + - chore(deps): bump github.com/docker/docker from 27.1.2+incompatible to 27.2.0+incompatible + (#9150) - chore(deps): bump the minor-and-patch group across 1 directory with 2 updates (#9174) - - chore(deps): bump github.com/docker/docker from 24.0.5+incompatible to 25.0.6+incompatible (#9123) + - chore(deps): bump github.com/docker/docker from 24.0.5+incompatible to 25.0.6+incompatible + (#9123) - chore(deps): bump the minor-and-patch group with 2 updates (#9178) - - chore(deps): bump google.golang.org/grpc from 1.67.0 to 1.67.1 in the minor-and-patch group (#9178) + - chore(deps): bump google.golang.org/grpc from 1.67.0 to 1.67.1 in the minor-and-patch group + (#9178) ## [v24.0.2] - 2024-08-16 -[v24.0.1]: https://github.com/hypermodeinc/dgraph/compare/v24.0.1...v24.0.2 - +[v24.0.2]: https://github.com/hypermodeinc/dgraph/compare/v24.0.1...v24.0.2 - **Fixed** - - - fix(core): Fix namespace used by unique query https://github.com/hypermodeinc/dgraph/pull/9119 - - fix(core): Fix regression in computing cond variables https://github.com/hypermodeinc/dgraph/pull/9126 - - fix(live): Fix derigster while retrying https://github.com/hypermodeinc/dgraph/pull/9121 - + + - fix(core): Fix namespace used by unique query https://github.com/hypermodeinc/dgraph/pull/9119 + - fix(core): Fix regression in computing cond variables + https://github.com/hypermodeinc/dgraph/pull/9126 + - fix(live): Fix derigster while retrying https://github.com/hypermodeinc/dgraph/pull/9121 - **Chore** - - chore(deps): bump certifi from 2023.7.22 to 2024.7.4 in /contrib/config/marketplace/aws/tests https://github.com/hypermodeinc/dgraph/pull/9110 - - chore(deps): bump idna from 2.9 to 3.7 in /contrib/config/marketplace/aws/tests https://github.com/hypermodeinc/dgraph/pull/9072 + - chore(deps): bump certifi from 2023.7.22 to 2024.7.4 in /contrib/config/marketplace/aws/tests + https://github.com/hypermodeinc/dgraph/pull/9110 + - chore(deps): bump idna from 2.9 to 3.7 in /contrib/config/marketplace/aws/tests + https://github.com/hypermodeinc/dgraph/pull/9072 - **Perf** - - perf(query): Read just the latest value for scalar types https://github.com/hypermodeinc/dgraph/pull/8966 + - perf(query): Read just the latest value for scalar types + https://github.com/hypermodeinc/dgraph/pull/8966 - perf(vector): Add heap to neighbour edges https://github.com/hypermodeinc/dgraph/pull/9122 ## [v24.0.1] - 2024-07-30 + [v24.0.1]: https://github.com/hypermodeinc/dgraph/compare/v24.0.0...v24.0.1 -> **Warning** -> After upgrading to v24.0.1, vector index needs to be rebuilt as underlying data has changed. +> **Warning** After upgrading to v24.0.1, vector index needs to be rebuilt as underlying data has +> changed. - **Fixed** - - - fix(core): Fix regression in parsing json empty string #9108 - - fix(upgrade): fix failing upgrade tests #9042 - - fix(ci): fixing health endpoint issue #9116 - - Fix(graphql): issue with local variable squashing intended JWK index by @matthewmcneely in #9114 + + - fix(core): Fix regression in parsing json empty string #9108 + - fix(upgrade): fix failing upgrade tests #9042 + - fix(ci): fixing health endpoint issue #9116 + - Fix(graphql): issue with local variable squashing intended JWK index by @matthewmcneely in #9114 - **Chore** - - chore(deps): bump urllib3 from 1.26.18 to 1.26.19 /contrib/config/marketplace/aws/tests #9103 - - chore(deps): bump requests from 2.31.0 to 2.32.0 /contrib/config/marketplace/aws/tests #9090 + - chore(deps): bump urllib3 from 1.26.18 to 1.26.19 /contrib/config/marketplace/aws/tests #9103 + - chore(deps): bump requests from 2.31.0 to 2.32.0 /contrib/config/marketplace/aws/tests #9090 - **Perf** - - perf(vector): updated marshalling of vector #9109 - + - perf(vector): updated marshalling of vector #9109 ## [v24.0.0] - 2024-06-06 + [v24.0.0]: https://github.com/hypermodeinc/dgraph/compare/v24.0.0...v23.1.0 -> **Warning** -> This will be a breaking change for anyone moving from to `v.24.0.0`. -> If you have any duplicate users or groups in Dgraph ACL, they would not be accessible from now on. Please delete any -> duplicate users and groups before you upgrade. File format is the same, so binary can be directly replaced after. -> deleting duplicate users and groups. +> **Warning** This will be a breaking change for anyone moving from to `v.24.0.0`. If you have any +> duplicate users or groups in Dgraph ACL, they would not be accessible from now on. Please delete +> any duplicate users and groups before you upgrade. File format is the same, so binary can be +> directly replaced after. deleting duplicate users and groups. -### Added +**Added** - **Vector** - - feat(graphql): Add vector support to graphql (#9074) - - feat(vector): add vector to schema in #9060 - - feat(vector): Added similar_to in vector in #9062 - - feat(vector): Add vector type to Dgraph in #9050 - - feat(vector): fix live loader and add tests for dropall, drop namespace, live load in #9063 - - fix(vector): show error is invalid input is provided to vector predicate in #9064 - - fix(vector):fix similar_to() error return when data is not present in #9084 - - fix(vector): Update query_rewriter to fix dotproduct and cosine query conversion in #9083 + + - feat(graphql): Add vector support to graphql (#9074) + - feat(vector): add vector to schema in #9060 + - feat(vector): Added similar_to in vector in #9062 + - feat(vector): Add vector type to Dgraph in #9050 + - feat(vector): fix live loader and add tests for dropall, drop namespace, live load in #9063 + - fix(vector): show error is invalid input is provided to vector predicate in #9064 + - fix(vector):fix similar_to() error return when data is not present in #9084 + - fix(vector): Update query_rewriter to fix dotproduct and cosine query conversion in #9083 - **Core** - - feat(core): Add cache to dgraph.type predicate in #9068 - - [BREAKING]feat(core): add unique constraint support in schema for new predicates in #8827 - - feat(debug): add parse_key to debug tool in #7640 - - feat(acl): support more JWT algorithms for ACL by in #8912 - - feat(restore): add support for namespace aware restore by in #8968 + + - feat(core): Add cache to dgraph.type predicate in #9068 + - [BREAKING]feat(core): add unique constraint support in schema for new predicates in #8827 + - feat(debug): add parse_key to debug tool in #7640 + - feat(acl): support more JWT algorithms for ACL by in #8912 + - feat(restore): add support for namespace aware restore by in #8968 - **GraphQL** - - feat(vector): Added lang support by in #8924 - - feat(graphql): allow updatable and nullable id fields. (#7736) in #9020 -### Fixed + - feat(vector): Added lang support by in #8924 + - feat(graphql): allow updatable and nullable id fields. (#7736) in #9020 + +**Fixed** - **Core** - - Fix(debug): Close file correctly before exiting on error in #9076 - - fix(restore): fix incr restore and normal restore for vector predicates in #9078 - - Fix(core): Fix deadlock in runMutation and error handling in #9085 - - fix(core): Fixed deadlock that happens due to timeout in #9007 - - fix(core): limit #edges using LimitMutationsNquad config and add logs in #9010 - - fix(core): Update math parsing function by in #9053 - - fix(restore): use different map directory for each group (#8047) in #8972 - - fix(export): Support for any s3 endpoint by in #8978 - - fix(restore): use custom type for sensitive fields by in #8969 - - fix(export): Escape MySQL column names in #8961 - - fix(debug): fix debug tool for schema keys in #7939 - - fix(restore): allow incrementalFrom to be 1 in restore API by in #8988 - - fix(raft):alpha leader fails to stream snapshot to new alpha nodes in #9022 - - fix(query): fix has function in filter in #9043 - - fix(core):Reduce x.ParsedKey memory allocation from 72 to 56 bytes by optimizing struct memory alignment in #9047 - - fix(restore): do not retry restore proposal (#8058) in #9017 + + - Fix(debug): Close file correctly before exiting on error in #9076 + - fix(restore): fix incr restore and normal restore for vector predicates in #9078 + - Fix(core): Fix deadlock in runMutation and error handling in #9085 + - fix(core): Fixed deadlock that happens due to timeout in #9007 + - fix(core): limit #edges using LimitMutationsNquad config and add logs in #9010 + - fix(core): Update math parsing function by in #9053 + - fix(restore): use different map directory for each group (#8047) in #8972 + - fix(export): Support for any s3 endpoint by in #8978 + - fix(restore): use custom type for sensitive fields by in #8969 + - fix(export): Escape MySQL column names in #8961 + - fix(debug): fix debug tool for schema keys in #7939 + - fix(restore): allow incrementalFrom to be 1 in restore API by in #8988 + - fix(raft):alpha leader fails to stream snapshot to new alpha nodes in #9022 + - fix(query): fix has function in filter in #9043 + - fix(core):Reduce x.ParsedKey memory allocation from 72 to 56 bytes by optimizing struct memory + alignment in #9047 + - fix(restore): do not retry restore proposal (#8058) in #9017 - **Perf** - - perf(core): Fix performance issue in type filter (#9065) in #9089 - - perf(core): Update postinglistCountAndLength function to improve performance in #9088 - - perf(query): use quickselect instead of sorting while pagination by in #8995 - - perf(query): Update CompressedBin IntersectionAlgo by in #9000 + + - perf(core): Fix performance issue in type filter (#9065) in #9089 + - perf(core): Update postinglistCountAndLength function to improve performance in #9088 + - perf(query): use quickselect instead of sorting while pagination by in #8995 + - perf(query): Update CompressedBin IntersectionAlgo by in #9000 - **Chore** - - chore(upgrade): run tests from v23.1.0 -> main in #9097 - - chore(deps): upgrade etcd/raft to v3 by in #7688 - - chore(restore): add more logs for restore request (#8050) in #8975 - - upgrade(go): update go version to 1.22 in #9058 - - chore(deps): bump github.com/apache/thrift from 0.12.0 to 0.13.0 by in #8982 - - chore(deps): bump golang.org/x/net from 0.14.0 to 0.17.0 in #9015 - - chore(deps): use bleve 2.3.10 for more languages in full text search in #9030 - - chore(deps): bump golang.org/x/crypto from 0.12.0 to 0.17.0 in #9032 - - chore(deps): bump urllib3 from 1.26.5 to 1.26.18 in /contrib/config/marketplace/aws/tests in #9018 - - chore(deps): bump google.golang.org/grpc from 1.56.2 to 1.56.3 in #9024 - - chore(deps): bump google.golang.org/protobuf from 1.31.0 to 1.33.0in #9051[ - -## [23.1.1] - 2024-04-26 -[v23.1.1]: https://github.com/hypermodeinc/dgraph/compare/v23.1.0...v23.1.1 - -### Fixed + - chore(upgrade): run tests from v23.1.0 -> main in #9097 + - chore(deps): upgrade etcd/raft to v3 by in #7688 + - chore(restore): add more logs for restore request (#8050) in #8975 + - upgrade(go): update go version to 1.22 in #9058 + - chore(deps): bump github.com/apache/thrift from 0.12.0 to 0.13.0 by in #8982 + - chore(deps): bump golang.org/x/net from 0.14.0 to 0.17.0 in #9015 + - chore(deps): use bleve 2.3.10 for more languages in full text search in #9030 + - chore(deps): bump golang.org/x/crypto from 0.12.0 to 0.17.0 in #9032 + - chore(deps): bump urllib3 from 1.26.5 to 1.26.18 in /contrib/config/marketplace/aws/tests in + #9018 + - chore(deps): bump google.golang.org/grpc from 1.56.2 to 1.56.3 in #9024 + - chore(deps): bump google.golang.org/protobuf from 1.31.0 to 1.33.0in #9051[ + +## [23.1.1](https://github.com/hypermodeinc/dgraph/compare/v23.1.0...v23.1.1) - 2024-04-26 + +- **Fixed** - **Core Dgraph** - - perf(core): Fix performance issue in type filter (#9065) + - perf(core): Fix performance issue in type filter (#9065) - **CI & Testing** - - ci/cd optimizations (#9069) + - ci/cd optimizations (#9069) ## [v23.1.0] - 2023-08-17 + [v23.1.0]: https://github.com/hypermodeinc/dgraph/compare/v23.0.1...v23.1.0 -### Added +- **Added** - **Core Dgraph** - - perf(query): Improve IntersectCompressedWithBin for UID Pack (#8941) - - feat(query): add feature flag normalize-compatibility-mode (#8845) (#8929) - - feat(alpha): support RDF response via http query request (#8004) (#8639) - - perf(query): speed up parsing of a huge query (#8942) - - fix(live): replace panic in live loader with errors (#7798) (#8944) + + - perf(query): Improve IntersectCompressedWithBin for UID Pack (#8941) + - feat(query): add feature flag normalize-compatibility-mode (#8845) (#8929) + - feat(alpha): support RDF response via http query request (#8004) (#8639) + - perf(query): speed up parsing of a huge query (#8942) + - fix(live): replace panic in live loader with errors (#7798) (#8944) - **GraphQL** - - feat(graphql): This PR allows @id field in interface to be unique across all implementing types (#8876) + - feat(graphql): This PR allows @id field in interface to be unique across all implementing types + (#8876) -### Fixed +**Fixed** - **Core Dgraph** - - docs(zero): add comments in zero and clarify naming (#8945) - - fix(cdc): skip bad events in CDC (#8076) - - fix(bulk): enable running bulk loader with only gql schema (#8903) - - chore(badger): upgrade badger to v4.2.0 (#8932) (#8925) - - doc(restore): add docs for mutations in between incremental restores (#8908) - - chore: fix compilation on 32bit (#8895) - - chore(raft): add debug logs to print all transactions (#8890) - - chore(alpha): add logs for processing entries in applyCh (#8930) - - fix(acl): allow data deletion for non-reserved predicates (#8937) - - fix(alpha): convert numbers correctly in superflags (#7712) (#8943) - - chore(raft): better logging message for cleaning banned ns pred (#7886) + + - docs(zero): add comments in zero and clarify naming (#8945) + - fix(cdc): skip bad events in CDC (#8076) + - fix(bulk): enable running bulk loader with only gql schema (#8903) + - chore(badger): upgrade badger to v4.2.0 (#8932) (#8925) + - doc(restore): add docs for mutations in between incremental restores (#8908) + - chore: fix compilation on 32bit (#8895) + - chore(raft): add debug logs to print all transactions (#8890) + - chore(alpha): add logs for processing entries in applyCh (#8930) + - fix(acl): allow data deletion for non-reserved predicates (#8937) + - fix(alpha): convert numbers correctly in superflags (#7712) (#8943) + - chore(raft): better logging message for cleaning banned ns pred (#7886) - **Security** - - sec(acl): convert x.Sensitive to string type for auth hash (#8931) - - chore(deps): bump google.golang.org/grpc from 1.52.0 to 1.53.0 (#8900) - - chore(deps): bump certifi from 2022.12.7 to 2023.7.22 in /contrib/config/marketplace/aws/tests (#8920) - - chore(deps): bump certifi from 2022.12.7 to 2023.7.22 in /contrib/embargo (#8921) - - chore(deps): bump pygments from 2.7.4 to 2.15.0 in /contrib/embargo (#8913) - - chore: upgrade bleve to v2.3.9 (#8948) + + - sec(acl): convert x.Sensitive to string type for auth hash (#8931) + - chore(deps): bump google.golang.org/grpc from 1.52.0 to 1.53.0 (#8900) + - chore(deps): bump certifi from 2022.12.7 to 2023.7.22 in /contrib/config/marketplace/aws/tests + (#8920) + - chore(deps): bump certifi from 2022.12.7 to 2023.7.22 in /contrib/embargo (#8921) + - chore(deps): bump pygments from 2.7.4 to 2.15.0 in /contrib/embargo (#8913) + - chore: upgrade bleve to v2.3.9 (#8948) - **CI & Testing** - - chore: update cron job frequency to reset github notifications (#8956) - - test(upgrade): add v20.11 upgrade tests in query package (#8954) - - chore(contrib) - fixes for Vault (#7739) - - chore(build): make build codename configurable (#8951) - - fix(upgrade): look for version string in logs bottom up (#8926) - - fix(upgrade): check commit SHA to find running dgraph version (#8923) - - chore(upgrade): run upgrade tests for v23.0.1 (#8918) - - chore(upgrade): ensure we run right version of Dgraph (#8910) - - chore(upgrade): add workaround for multiple groot issue in export-import (#8897) - - test(upgrade): add upgrade tests for systest/license package (#8902) - - chore(upgrade): increase the upgrade job duration limit to 12h (#8907) - - chore(upgrade): increase the duration of the CI workflow (#8906) - - ci(upgrade): break down upgrade tests CI workflow (#8904) - - test(acl): add upgrade tests for ee/acl package (#8792) - - chore: update pull request template (#8899) + - chore: update cron job frequency to reset github notifications (#8956) + - test(upgrade): add v20.11 upgrade tests in query package (#8954) + - chore(contrib) - fixes for Vault (#7739) + - chore(build): make build codename configurable (#8951) + - fix(upgrade): look for version string in logs bottom up (#8926) + - fix(upgrade): check commit SHA to find running dgraph version (#8923) + - chore(upgrade): run upgrade tests for v23.0.1 (#8918) + - chore(upgrade): ensure we run right version of Dgraph (#8910) + - chore(upgrade): add workaround for multiple groot issue in export-import (#8897) + - test(upgrade): add upgrade tests for systest/license package (#8902) + - chore(upgrade): increase the upgrade job duration limit to 12h (#8907) + - chore(upgrade): increase the duration of the CI workflow (#8906) + - ci(upgrade): break down upgrade tests CI workflow (#8904) + - test(acl): add upgrade tests for ee/acl package (#8792) + - chore: update pull request template (#8899) ## [v23.0.1] - 2023-07-09 + [v23.0.1]: https://github.com/hypermodeinc/dgraph/compare/v23.0.0...v23.0.1 -### Fixed +- **Fixed** - **Core Dgraph** + - chore(restore): add log message when restore fails (#8893) - fix(zero): fix zero's health endpoint to return json response (#8858) - chore(zero): improve error message while unmarshalling WAL (#8882) @@ -259,922 +282,1154 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - upgrade dgo to v230.0.1 (#8785) - **CI** + - ci(dql): add workflow for fuzz testing (#8874) - chore(ci): add workflow for OSS build + unit tests (#8834) - **Security** - - chore(deps): bump requests from 2.23.0 to 2.31.0 in /contrib/config/marketplace/aws/tests (#8836) + - chore(deps): bump requests from 2.23.0 to 2.31.0 in /contrib/config/marketplace/aws/tests + (#8836) - chore(deps): bump requests from 2.23.0 to 2.31.0 in /contrib/embargo (#8835) - - chore(deps): bump github.com/docker/distribution from 2.8.0+incompatible to 2.8.2+incompatible (#8821) + - chore(deps): bump github.com/docker/distribution from 2.8.0+incompatible to 2.8.2+incompatible + (#8821) - chore(deps): bump github.com/cloudflare/circl from 1.1.0 to 1.3.3 (#8822) ## [v23.0.0] - 2023-05-08 + [v23.0.0]: https://github.com/hypermodeinc/dgraph/compare/v22.0.2...v23.0.0 -### Added +- **Added** - **GraphQL** - - fix(GraphQL): pass on HTTP request headers for subscriptions (https://github.com/hypermodeinc/dgraph/pull/8574) + + - fix(GraphQL): pass on HTTP request headers for subscriptions + (https://github.com/hypermodeinc/dgraph/pull/8574) - **Core Dgraph** - - feat(metrics): add badger metrics (#8034) (https://github.com/hypermodeinc/dgraph/pull/8737) - - feat(restore): introduce incremental restore (#7942) (https://github.com/hypermodeinc/dgraph/pull/8624) - - chore(debug): add `only-summary` flag in `dgraph debug` to show LSM tree and namespace size (https://github.com/hypermodeinc/dgraph/pull/8516) - - feat(cloud): add `shared-instance` flag in limit superflag in alpha (https://github.com/hypermodeinc/dgraph/pull/8625) - - chore(deps): update prometheus dependency, adds new metrics (https://github.com/hypermodeinc/dgraph/pull/8655) - - feat(cdc): add superflag `tls` to enable TLS without CA or certs (https://github.com/hypermodeinc/dgraph/pull/8564) - - feat(multitenancy): namespace aware drop data (https://github.com/hypermodeinc/dgraph/pull/8511) + - feat(metrics): add badger metrics (#8034) (https://github.com/hypermodeinc/dgraph/pull/8737) + - feat(restore): introduce incremental restore (#7942) + (https://github.com/hypermodeinc/dgraph/pull/8624) + - chore(debug): add `only-summary` flag in `dgraph debug` to show LSM tree and namespace size + (https://github.com/hypermodeinc/dgraph/pull/8516) + - feat(cloud): add `shared-instance` flag in limit superflag in alpha + (https://github.com/hypermodeinc/dgraph/pull/8625) + - chore(deps): update prometheus dependency, adds new metrics + (https://github.com/hypermodeinc/dgraph/pull/8655) + - feat(cdc): add superflag `tls` to enable TLS without CA or certs + (https://github.com/hypermodeinc/dgraph/pull/8564) + - feat(multitenancy): namespace aware drop data (https://github.com/hypermodeinc/dgraph/pull/8511) -### Fixed +**Fixed** - **GraphQL** - - fix(GraphQL): nested Auth Rules not working properly (https://github.com/hypermodeinc/dgraph/pull/8571) + + - fix(GraphQL): nested Auth Rules not working properly + (https://github.com/hypermodeinc/dgraph/pull/8571) - **Core Dgraph** - - Fix wal replay issue during rollup (https://github.com/hypermodeinc/dgraph/pull/8774) - - security(logging): fix aes implementation in audit logging (https://github.com/hypermodeinc/dgraph/pull/8323) - - chore(worker): unify mapper receiver names (https://github.com/hypermodeinc/dgraph/pull/8740) - - fix(dql): fix panic in parsing of regexp (https://github.com/hypermodeinc/dgraph/pull/8739) - - fix(Query): Do an error check before bubbling up nil error (https://github.com/hypermodeinc/dgraph/pull/8769) - - chore: replace global index with local one & fix typos (https://github.com/hypermodeinc/dgraph/pull/8719) - - chore(logs): add logs to track dropped proposals (https://github.com/hypermodeinc/dgraph/pull/8568) - - fix(debug): check length of wal entry before parsing (https://github.com/hypermodeinc/dgraph/pull/8560) - - opt(schema): optimize populateSchema() (https://github.com/hypermodeinc/dgraph/pull/8565) - - fix(zero): fix update membership to make bulk tablet proposal instead of multiple small (https://github.com/hypermodeinc/dgraph/pull/8573) - - fix(groot): do not upsert groot for all namespaces on restart (https://github.com/hypermodeinc/dgraph/pull/8561) - - fix(restore): set kv version to restoreTs for all keys (https://github.com/hypermodeinc/dgraph/pull/8563) - - fix(probe): do not contend for lock in lazy load (https://github.com/hypermodeinc/dgraph/pull/8566) - - fix(core): fixed infinite loop in CommitToDisk (https://github.com/hypermodeinc/dgraph/pull/8614) - - fix(proposals): incremental proposal key for zero proposals (https://github.com/hypermodeinc/dgraph/pull/8567) - - fix(zero): fix waiting for random time while rate limiting (https://github.com/hypermodeinc/dgraph/pull/8656) - - chore(deps): upgrade badger (https://github.com/hypermodeinc/dgraph/pull/8654, https://github.com/hypermodeinc/dgraph/pull/8658) - - opt(schema): load schema and types using Stream framework (https://github.com/hypermodeinc/dgraph/pull/8562) - - fix(backup): use StreamWriter instead of KVLoader during backup restore (https://github.com/hypermodeinc/dgraph/pull/8510) - - fix(audit): fixing audit logs for websocket connections (https://github.com/hypermodeinc/dgraph/pull/8627) - - fix(restore): consider the banned namespaces while bumping (https://github.com/hypermodeinc/dgraph/pull/8559) - - fix(backup): create directory before writing backup (https://github.com/hypermodeinc/dgraph/pull/8638) + + - Fix wal replay issue during rollup (https://github.com/hypermodeinc/dgraph/pull/8774) + - security(logging): fix aes implementation in audit logging + (https://github.com/hypermodeinc/dgraph/pull/8323) + - chore(worker): unify mapper receiver names (https://github.com/hypermodeinc/dgraph/pull/8740) + - fix(dql): fix panic in parsing of regexp (https://github.com/hypermodeinc/dgraph/pull/8739) + - fix(Query): Do an error check before bubbling up nil error + (https://github.com/hypermodeinc/dgraph/pull/8769) + - chore: replace global index with local one & fix typos + (https://github.com/hypermodeinc/dgraph/pull/8719) + - chore(logs): add logs to track dropped proposals + (https://github.com/hypermodeinc/dgraph/pull/8568) + - fix(debug): check length of wal entry before parsing + (https://github.com/hypermodeinc/dgraph/pull/8560) + - opt(schema): optimize populateSchema() (https://github.com/hypermodeinc/dgraph/pull/8565) + - fix(zero): fix update membership to make bulk tablet proposal instead of multiple small + (https://github.com/hypermodeinc/dgraph/pull/8573) + - fix(groot): do not upsert groot for all namespaces on restart + (https://github.com/hypermodeinc/dgraph/pull/8561) + - fix(restore): set kv version to restoreTs for all keys + (https://github.com/hypermodeinc/dgraph/pull/8563) + - fix(probe): do not contend for lock in lazy load + (https://github.com/hypermodeinc/dgraph/pull/8566) + - fix(core): fixed infinite loop in CommitToDisk + (https://github.com/hypermodeinc/dgraph/pull/8614) + - fix(proposals): incremental proposal key for zero proposals + (https://github.com/hypermodeinc/dgraph/pull/8567) + - fix(zero): fix waiting for random time while rate limiting + (https://github.com/hypermodeinc/dgraph/pull/8656) + - chore(deps): upgrade badger (https://github.com/hypermodeinc/dgraph/pull/8654, + https://github.com/hypermodeinc/dgraph/pull/8658) + - opt(schema): load schema and types using Stream framework + (https://github.com/hypermodeinc/dgraph/pull/8562) + - fix(backup): use StreamWriter instead of KVLoader during backup restore + (https://github.com/hypermodeinc/dgraph/pull/8510) + - fix(audit): fixing audit logs for websocket connections + (https://github.com/hypermodeinc/dgraph/pull/8627) + - fix(restore): consider the banned namespaces while bumping + (https://github.com/hypermodeinc/dgraph/pull/8559) + - fix(backup): create directory before writing backup + (https://github.com/hypermodeinc/dgraph/pull/8638) - **Test** - - chore(tests): add upgrade tests in query package (https://github.com/hypermodeinc/dgraph/pull/8750) - - simplify test setup in query package (https://github.com/hypermodeinc/dgraph/pull/8782) - - add a test for incremental restore (https://github.com/hypermodeinc/dgraph/pull/8754) - - chore(tests): run tests in query package against dgraph cloud (https://github.com/hypermodeinc/dgraph/pull/8726) - - fix the backup test cluster compose file (https://github.com/hypermodeinc/dgraph/pull/8775) - - cleanup tests to reduce the scope of err var (https://github.com/hypermodeinc/dgraph/pull/8771) - - use t.TempDir() for using a temp dir in tests (https://github.com/hypermodeinc/dgraph/pull/8772) - - fix(test): clan cruft from test run (https://github.com/hypermodeinc/dgraph/pull/8348) - - chore(tests): avoid calling os.Exit in TestMain (https://github.com/hypermodeinc/dgraph/pull/8765) - - chore: fix linter issue on main (https://github.com/hypermodeinc/dgraph/pull/8749) - - recreate the context variable for parallel test (https://github.com/hypermodeinc/dgraph/pull/8748) - - fix(tests): wait for license to be applied before trying to login (https://github.com/hypermodeinc/dgraph/pull/8744) - - fix(tests): sleep longer so that ACLs are updated (https://github.com/hypermodeinc/dgraph/pull/8745) - - chore(test): use pointer receiver for LocalCluster methods (https://github.com/hypermodeinc/dgraph/pull/8734) - - chore(linter): fix unconvert linter issues on linux (https://github.com/hypermodeinc/dgraph/pull/8718) - - chore(linter): add unconvert linter and address related issues (https://github.com/hypermodeinc/dgraph/pull/8685) - - chore(ci): resolve community PR goveralls failure (https://github.com/hypermodeinc/dgraph/pull/8716) - - chore(test): increased iterations of the health check (https://github.com/hypermodeinc/dgraph/pull/8711) - - fix(test): avoid host volume mount in minio container (https://github.com/hypermodeinc/dgraph/pull/8569) - - chore(test): add tests for lex/iri.go,chunker/chunk.go (https://github.com/hypermodeinc/dgraph/pull/8515) - - chore(test): add Backup/Restore test for NFS (https://github.com/hypermodeinc/dgraph/pull/8551) - - chore(test): add test that after snapshot is applied, GraphQL schema is refreshed (https://github.com/hypermodeinc/dgraph/pull/8619) - - chore(test): upgrade graphql tests to use go 1.19 (https://github.com/hypermodeinc/dgraph/pull/8662) - - chore(test): add automated test to test multitenant --limit flag (https://github.com/hypermodeinc/dgraph/pull/8646) - - chore(test): add restore test for more than 127 namespaces (https://github.com/hypermodeinc/dgraph/pull/8643) - - fix(test): fix the corner case for raft entries test (https://github.com/hypermodeinc/dgraph/pull/8617) + + - chore(tests): add upgrade tests in query package + (https://github.com/hypermodeinc/dgraph/pull/8750) + - simplify test setup in query package (https://github.com/hypermodeinc/dgraph/pull/8782) + - add a test for incremental restore (https://github.com/hypermodeinc/dgraph/pull/8754) + - chore(tests): run tests in query package against dgraph cloud + (https://github.com/hypermodeinc/dgraph/pull/8726) + - fix the backup test cluster compose file (https://github.com/hypermodeinc/dgraph/pull/8775) + - cleanup tests to reduce the scope of err var (https://github.com/hypermodeinc/dgraph/pull/8771) + - use t.TempDir() for using a temp dir in tests (https://github.com/hypermodeinc/dgraph/pull/8772) + - fix(test): clan cruft from test run (https://github.com/hypermodeinc/dgraph/pull/8348) + - chore(tests): avoid calling os.Exit in TestMain + (https://github.com/hypermodeinc/dgraph/pull/8765) + - chore: fix linter issue on main (https://github.com/hypermodeinc/dgraph/pull/8749) + - recreate the context variable for parallel test + (https://github.com/hypermodeinc/dgraph/pull/8748) + - fix(tests): wait for license to be applied before trying to login + (https://github.com/hypermodeinc/dgraph/pull/8744) + - fix(tests): sleep longer so that ACLs are updated + (https://github.com/hypermodeinc/dgraph/pull/8745) + - chore(test): use pointer receiver for LocalCluster methods + (https://github.com/hypermodeinc/dgraph/pull/8734) + - chore(linter): fix unconvert linter issues on linux + (https://github.com/hypermodeinc/dgraph/pull/8718) + - chore(linter): add unconvert linter and address related issues + (https://github.com/hypermodeinc/dgraph/pull/8685) + - chore(ci): resolve community PR goveralls failure + (https://github.com/hypermodeinc/dgraph/pull/8716) + - chore(test): increased iterations of the health check + (https://github.com/hypermodeinc/dgraph/pull/8711) + - fix(test): avoid host volume mount in minio container + (https://github.com/hypermodeinc/dgraph/pull/8569) + - chore(test): add tests for lex/iri.go,chunker/chunk.go + (https://github.com/hypermodeinc/dgraph/pull/8515) + - chore(test): add Backup/Restore test for NFS (https://github.com/hypermodeinc/dgraph/pull/8551) + - chore(test): add test that after snapshot is applied, GraphQL schema is refreshed + (https://github.com/hypermodeinc/dgraph/pull/8619) + - chore(test): upgrade graphql tests to use go 1.19 + (https://github.com/hypermodeinc/dgraph/pull/8662) + - chore(test): add automated test to test multitenant --limit flag + (https://github.com/hypermodeinc/dgraph/pull/8646) + - chore(test): add restore test for more than 127 namespaces + (https://github.com/hypermodeinc/dgraph/pull/8643) + - fix(test): fix the corner case for raft entries test + (https://github.com/hypermodeinc/dgraph/pull/8617) - **CD** - - fix(build): update dockerfile to use cache busting and reduce image size (https://github.com/hypermodeinc/dgraph/pull/8652) - - chore(deps): update min go build version (https://github.com/hypermodeinc/dgraph/pull/8423) - - chore(cd): add badger binary to dgraph docker image (https://github.com/hypermodeinc/dgraph/pull/8790) + + - fix(build): update dockerfile to use cache busting and reduce image size + (https://github.com/hypermodeinc/dgraph/pull/8652) + - chore(deps): update min go build version (https://github.com/hypermodeinc/dgraph/pull/8423) + - chore(cd): add badger binary to dgraph docker image + (https://github.com/hypermodeinc/dgraph/pull/8790) - **Security** - - chore(deps): bump certifi from 2020.4.5.1 to 2022.12.7 in /contrib/config/marketplace/aws/tests (https://github.com/hypermodeinc/dgraph/pull/8496) - - chore(deps): bump github.com/docker/distribution from 2.7.1+incompatible to 2.8.0+incompatible (https://github.com/hypermodeinc/dgraph/pull/8575) - - chore(deps): bump werkzeug from 0.16.1 to 2.2.3 in /contrib/embargo (https://github.com/hypermodeinc/dgraph/pull/8676) - - fix(sec): upgrade networkx to (https://github.com/hypermodeinc/dgraph/pull/8613) - - fix(sec): CVE-2022-41721 (https://github.com/hypermodeinc/dgraph/pull/8633) - - fix(sec): CVE & OS Patching (https://github.com/hypermodeinc/dgraph/pull/8634) - - -
- CVE Fixes (31 total) - - - CVE-2013-4235 - - CVE-2016-20013 - - CVE-2016-2781 - - CVE-2017-11164 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-39537 - - CVE-2021-44758 - - CVE-2022-28321 - - CVE-2022-29458 - - CVE-2022-3219 - - CVE-2022-3437 - - CVE-2022-3821 - - CVE-2022-41717 - - CVE-2022-41721 - - CVE-2022-41723 - - CVE-2022-42898 - - CVE-2022-4304 - - CVE-2022-43552 - - CVE-2022-4415 - - CVE-2022-4450 - - CVE-2022-44640 - - CVE-2022-48303 - - CVE-2023-0215 - - CVE-2023-0286 - - CVE-2023-0361 - - CVE-2023-0464 - - CVE-2023-0465 - - CVE-2023-0466 - - CVE-2023-23916 - - CVE-2023-26604 -
- -### Changed + + - chore(deps): bump certifi from 2020.4.5.1 to 2022.12.7 in /contrib/config/marketplace/aws/tests + (https://github.com/hypermodeinc/dgraph/pull/8496) + - chore(deps): bump github.com/docker/distribution from 2.7.1+incompatible to 2.8.0+incompatible + (https://github.com/hypermodeinc/dgraph/pull/8575) + - chore(deps): bump werkzeug from 0.16.1 to 2.2.3 in /contrib/embargo + (https://github.com/hypermodeinc/dgraph/pull/8676) + - fix(sec): upgrade networkx to (https://github.com/hypermodeinc/dgraph/pull/8613) + - fix(sec): CVE-2022-41721 (https://github.com/hypermodeinc/dgraph/pull/8633) + - fix(sec): CVE & OS Patching (https://github.com/hypermodeinc/dgraph/pull/8634) + + -
+ CVE Fixes (31 total) + + - CVE-2013-4235 + - CVE-2016-20013 + - CVE-2016-2781 + - CVE-2017-11164 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-39537 + - CVE-2021-44758 + - CVE-2022-28321 + - CVE-2022-29458 + - CVE-2022-3219 + - CVE-2022-3437 + - CVE-2022-3821 + - CVE-2022-41717 + - CVE-2022-41721 + - CVE-2022-41723 + - CVE-2022-42898 + - CVE-2022-4304 + - CVE-2022-43552 + - CVE-2022-4415 + - CVE-2022-4450 + - CVE-2022-44640 + - CVE-2022-48303 + - CVE-2023-0215 + - CVE-2023-0286 + - CVE-2023-0361 + - CVE-2023-0464 + - CVE-2023-0465 + - CVE-2023-0466 + - CVE-2023-23916 + - CVE-2023-26604 +
+ +**Changed** - **Core Dgraph** - - upgrade badger to v4.1.0 (https://github.com/hypermodeinc/dgraph/pull/8783) (https://github.com/hypermodeinc/dgraph/pull/8709) - - fix(multitenancy) store namespace in predicate as a hex separated by a hyphen to prevent json marshal issues (https://github.com/hypermodeinc/dgraph/pull/8601) - - fix(query): handle bad timezone correctly (https://github.com/hypermodeinc/dgraph/pull/8657) - - chore(ludicroud): remove ludicrous mode from the code (https://github.com/hypermodeinc/dgraph/pull/8612) - - fix(backup): make the /admin/backup and /admin/export API asynchronous (https://github.com/hypermodeinc/dgraph/pull/8554) - - fix(mutation): validate mutation before applying it (https://github.com/hypermodeinc/dgraph/pull/8623) + + - upgrade badger to v4.1.0 (https://github.com/hypermodeinc/dgraph/pull/8783) + (https://github.com/hypermodeinc/dgraph/pull/8709) + - fix(multitenancy) store namespace in predicate as a hex separated by a hyphen to prevent json + marshal issues (https://github.com/hypermodeinc/dgraph/pull/8601) + - fix(query): handle bad timezone correctly (https://github.com/hypermodeinc/dgraph/pull/8657) + - chore(ludicroud): remove ludicrous mode from the code + (https://github.com/hypermodeinc/dgraph/pull/8612) + - fix(backup): make the /admin/backup and /admin/export API asynchronous + (https://github.com/hypermodeinc/dgraph/pull/8554) + - fix(mutation): validate mutation before applying it + (https://github.com/hypermodeinc/dgraph/pull/8623) - **CI Enhancements** - - fix(ci): unpin curl (https://github.com/hypermodeinc/dgraph/pull/8577) - - fix(ci): adjust cron schedules (https://github.com/hypermodeinc/dgraph/pull/8592) - - chore(ci): Capture coverage from bulk load and LDBC tests (https://github.com/hypermodeinc/dgraph/pull/8478) - - chore(linter): enable gosec linter (https://github.com/hypermodeinc/dgraph/pull/8678) - - chore: apply go vet improvements (https://github.com/hypermodeinc/dgraph/pull/8620) - - chore(linter): fix some of the warnings from gas linter (https://github.com/hypermodeinc/dgraph/pull/8664) - - chore(linter): fix golangci config and some issues in tests (https://github.com/hypermodeinc/dgraph/pull/8669) - - fix(linter): address gosimple linter reports & errors (https://github.com/hypermodeinc/dgraph/pull/8628) + - fix(ci): unpin curl (https://github.com/hypermodeinc/dgraph/pull/8577) + - fix(ci): adjust cron schedules (https://github.com/hypermodeinc/dgraph/pull/8592) + - chore(ci): Capture coverage from bulk load and LDBC tests + (https://github.com/hypermodeinc/dgraph/pull/8478) + - chore(linter): enable gosec linter (https://github.com/hypermodeinc/dgraph/pull/8678) + - chore: apply go vet improvements (https://github.com/hypermodeinc/dgraph/pull/8620) + - chore(linter): fix some of the warnings from gas linter + (https://github.com/hypermodeinc/dgraph/pull/8664) + - chore(linter): fix golangci config and some issues in tests + (https://github.com/hypermodeinc/dgraph/pull/8669) + - fix(linter): address gosimple linter reports & errors + (https://github.com/hypermodeinc/dgraph/pull/8628) ## [v23.0.0-rc1] - 2023-04-11 + [v23.0.0-rc1]: https://github.com/hypermodeinc/dgraph/compare/v22.0.2...v23.0.0-rc1 -### Added +- **Added** - **GraphQL** - - fix(GraphQL): pass on HTTP request headers for subscriptions (https://github.com/hypermodeinc/dgraph/pull/8574) + + - fix(GraphQL): pass on HTTP request headers for subscriptions + (https://github.com/hypermodeinc/dgraph/pull/8574) - **Core Dgraph** - - feat(metrics): add badger metrics (#8034) (https://github.com/hypermodeinc/dgraph/pull/8737) - - feat(restore): introduce incremental restore (#7942) (https://github.com/hypermodeinc/dgraph/pull/8624) - - chore(debug): add `only-summary` flag in `dgraph debug` to show LSM tree and namespace size (https://github.com/hypermodeinc/dgraph/pull/8516) - - feat(cloud): add `shared-instance` flag in limit superflag in alpha (https://github.com/hypermodeinc/dgraph/pull/8625) - - chore(deps): update prometheus dependency, adds new metrics (https://github.com/hypermodeinc/dgraph/pull/8655) - - feat(cdc): add superflag `tls` to enable TLS without CA or certs (https://github.com/hypermodeinc/dgraph/pull/8564) - - feat(multitenancy): namespace aware drop data (https://github.com/hypermodeinc/dgraph/pull/8511) + - feat(metrics): add badger metrics (#8034) (https://github.com/hypermodeinc/dgraph/pull/8737) + - feat(restore): introduce incremental restore (#7942) + (https://github.com/hypermodeinc/dgraph/pull/8624) + - chore(debug): add `only-summary` flag in `dgraph debug` to show LSM tree and namespace size + (https://github.com/hypermodeinc/dgraph/pull/8516) + - feat(cloud): add `shared-instance` flag in limit superflag in alpha + (https://github.com/hypermodeinc/dgraph/pull/8625) + - chore(deps): update prometheus dependency, adds new metrics + (https://github.com/hypermodeinc/dgraph/pull/8655) + - feat(cdc): add superflag `tls` to enable TLS without CA or certs + (https://github.com/hypermodeinc/dgraph/pull/8564) + - feat(multitenancy): namespace aware drop data (https://github.com/hypermodeinc/dgraph/pull/8511) -### Fixed +**Fixed** - **GragphQL** - - fix(GraphQL): nested Auth Rules not working properly (https://github.com/hypermodeinc/dgraph/pull/8571) + + - fix(GraphQL): nested Auth Rules not working properly + (https://github.com/hypermodeinc/dgraph/pull/8571) - **Core Dgraph** - - Fix wal replay issue during rollup (https://github.com/hypermodeinc/dgraph/pull/8774) - - security(logging): fix aes implementation in audit logging (https://github.com/hypermodeinc/dgraph/pull/8323) - - chore(worker): unify mapper receiver names (https://github.com/hypermodeinc/dgraph/pull/8740) - - fix(dql): fix panic in parsing of regexp (https://github.com/hypermodeinc/dgraph/pull/8739) - - fix(Query): Do an error check before bubbling up nil error (https://github.com/hypermodeinc/dgraph/pull/8769) - - chore: replace global index with local one & fix typos (https://github.com/hypermodeinc/dgraph/pull/8719) - - chore(logs): add logs to track dropped proposals (https://github.com/hypermodeinc/dgraph/pull/8568) - - fix(debug): check length of wal entry before parsing (https://github.com/hypermodeinc/dgraph/pull/8560) - - opt(schema): optimize populateSchema() (https://github.com/hypermodeinc/dgraph/pull/8565) - - fix(zero): fix update membership to make bulk tablet proposal instead of multiple small (https://github.com/hypermodeinc/dgraph/pull/8573) - - fix(groot): do not upsert groot for all namespaces on restart (https://github.com/hypermodeinc/dgraph/pull/8561) - - fix(restore): set kv version to restoreTs for all keys (https://github.com/hypermodeinc/dgraph/pull/8563) - - fix(probe): do not contend for lock in lazy load (https://github.com/hypermodeinc/dgraph/pull/8566) - - fix(core): fixed infinite loop in CommitToDisk (https://github.com/hypermodeinc/dgraph/pull/8614) - - fix(proposals): incremental proposal key for zero proposals (https://github.com/hypermodeinc/dgraph/pull/8567) - - fix(zero): fix waiting for random time while rate limiting (https://github.com/hypermodeinc/dgraph/pull/8656) - - chore(deps): upgrade badger (https://github.com/hypermodeinc/dgraph/pull/8654, https://github.com/hypermodeinc/dgraph/pull/8658) - - opt(schema): load schema and types using Stream framework (https://github.com/hypermodeinc/dgraph/pull/8562) - - fix(backup): use StreamWriter instead of KVLoader during backup restore (https://github.com/hypermodeinc/dgraph/pull/8510) - - fix(audit): fixing audit logs for websocket connections (https://github.com/hypermodeinc/dgraph/pull/8627) - - fix(restore): consider the banned namespaces while bumping (https://github.com/hypermodeinc/dgraph/pull/8559) - - fix(backup): create directory before writing backup (https://github.com/hypermodeinc/dgraph/pull/8638) + + - Fix wal replay issue during rollup (https://github.com/hypermodeinc/dgraph/pull/8774) + - security(logging): fix aes implementation in audit logging + (https://github.com/hypermodeinc/dgraph/pull/8323) + - chore(worker): unify mapper receiver names (https://github.com/hypermodeinc/dgraph/pull/8740) + - fix(dql): fix panic in parsing of regexp (https://github.com/hypermodeinc/dgraph/pull/8739) + - fix(Query): Do an error check before bubbling up nil error + (https://github.com/hypermodeinc/dgraph/pull/8769) + - chore: replace global index with local one & fix typos + (https://github.com/hypermodeinc/dgraph/pull/8719) + - chore(logs): add logs to track dropped proposals + (https://github.com/hypermodeinc/dgraph/pull/8568) + - fix(debug): check length of wal entry before parsing + (https://github.com/hypermodeinc/dgraph/pull/8560) + - opt(schema): optimize populateSchema() (https://github.com/hypermodeinc/dgraph/pull/8565) + - fix(zero): fix update membership to make bulk tablet proposal instead of multiple small + (https://github.com/hypermodeinc/dgraph/pull/8573) + - fix(groot): do not upsert groot for all namespaces on restart + (https://github.com/hypermodeinc/dgraph/pull/8561) + - fix(restore): set kv version to restoreTs for all keys + (https://github.com/hypermodeinc/dgraph/pull/8563) + - fix(probe): do not contend for lock in lazy load + (https://github.com/hypermodeinc/dgraph/pull/8566) + - fix(core): fixed infinite loop in CommitToDisk + (https://github.com/hypermodeinc/dgraph/pull/8614) + - fix(proposals): incremental proposal key for zero proposals + (https://github.com/hypermodeinc/dgraph/pull/8567) + - fix(zero): fix waiting for random time while rate limiting + (https://github.com/hypermodeinc/dgraph/pull/8656) + - chore(deps): upgrade badger (https://github.com/hypermodeinc/dgraph/pull/8654, + https://github.com/hypermodeinc/dgraph/pull/8658) + - opt(schema): load schema and types using Stream framework + (https://github.com/hypermodeinc/dgraph/pull/8562) + - fix(backup): use StreamWriter instead of KVLoader during backup restore + (https://github.com/hypermodeinc/dgraph/pull/8510) + - fix(audit): fixing audit logs for websocket connections + (https://github.com/hypermodeinc/dgraph/pull/8627) + - fix(restore): consider the banned namespaces while bumping + (https://github.com/hypermodeinc/dgraph/pull/8559) + - fix(backup): create directory before writing backup + (https://github.com/hypermodeinc/dgraph/pull/8638) - **Test** - - chore(tests): add upgrade tests in query package (https://github.com/hypermodeinc/dgraph/pull/8750) - - simplify test setup in query package (https://github.com/hypermodeinc/dgraph/pull/8782) - - add a test for incremental restore (https://github.com/hypermodeinc/dgraph/pull/8754) - - chore(tests): run tests in query package against dgraph cloud (https://github.com/hypermodeinc/dgraph/pull/8726) - - fix the backup test cluster compose file (https://github.com/hypermodeinc/dgraph/pull/8775) - - cleanup tests to reduce the scope of err var (https://github.com/hypermodeinc/dgraph/pull/8771) - - use t.TempDir() for using a temp dir in tests (https://github.com/hypermodeinc/dgraph/pull/8772) - - fix(test): clan cruft from test run (https://github.com/hypermodeinc/dgraph/pull/8348) - - chore(tests): avoid calling os.Exit in TestMain (https://github.com/hypermodeinc/dgraph/pull/8765) - - chore: fix linter issue on main (https://github.com/hypermodeinc/dgraph/pull/8749) - - recreate the context variable for parallel test (https://github.com/hypermodeinc/dgraph/pull/8748) - - fix(tests): wait for license to be applied before trying to login (https://github.com/hypermodeinc/dgraph/pull/8744) - - fix(tests): sleep longer so that ACLs are updated (https://github.com/hypermodeinc/dgraph/pull/8745) - - chore(test): use pointer receiver for LocalCluster methods (https://github.com/hypermodeinc/dgraph/pull/8734) - - chore(linter): fix unconvert linter issues on linux (https://github.com/hypermodeinc/dgraph/pull/8718) - - chore(linter): add unconvert linter and address related issues (https://github.com/hypermodeinc/dgraph/pull/8685) - - chore(ci): resolve community PR goveralls failure (https://github.com/hypermodeinc/dgraph/pull/8716) - - chore(test): increased iterations of the health check (https://github.com/hypermodeinc/dgraph/pull/8711) - - fix(test): avoid host volume mount in minio container (https://github.com/hypermodeinc/dgraph/pull/8569) - - chore(test): add tests for lex/iri.go,chunker/chunk.go (https://github.com/hypermodeinc/dgraph/pull/8515) - - chore(test): add Backup/Restore test for NFS (https://github.com/hypermodeinc/dgraph/pull/8551) - - chore(test): add test that after snapshot is applied, GraphQL schema is refreshed (https://github.com/hypermodeinc/dgraph/pull/8619) - - chore(test): upgrade graphql tests to use go 1.19 (https://github.com/hypermodeinc/dgraph/pull/8662) - - chore(test): add automated test to test multitenant --limit flag (https://github.com/hypermodeinc/dgraph/pull/8646) - - chore(test): add restore test for more than 127 namespaces (https://github.com/hypermodeinc/dgraph/pull/8643) - - fix(test): fix the corner case for raft entries test (https://github.com/hypermodeinc/dgraph/pull/8617) + + - chore(tests): add upgrade tests in query package + (https://github.com/hypermodeinc/dgraph/pull/8750) + - simplify test setup in query package (https://github.com/hypermodeinc/dgraph/pull/8782) + - add a test for incremental restore (https://github.com/hypermodeinc/dgraph/pull/8754) + - chore(tests): run tests in query package against dgraph cloud + (https://github.com/hypermodeinc/dgraph/pull/8726) + - fix the backup test cluster compose file (https://github.com/hypermodeinc/dgraph/pull/8775) + - cleanup tests to reduce the scope of err var (https://github.com/hypermodeinc/dgraph/pull/8771) + - use t.TempDir() for using a temp dir in tests (https://github.com/hypermodeinc/dgraph/pull/8772) + - fix(test): clan cruft from test run (https://github.com/hypermodeinc/dgraph/pull/8348) + - chore(tests): avoid calling os.Exit in TestMain + (https://github.com/hypermodeinc/dgraph/pull/8765) + - chore: fix linter issue on main (https://github.com/hypermodeinc/dgraph/pull/8749) + - recreate the context variable for parallel test + (https://github.com/hypermodeinc/dgraph/pull/8748) + - fix(tests): wait for license to be applied before trying to login + (https://github.com/hypermodeinc/dgraph/pull/8744) + - fix(tests): sleep longer so that ACLs are updated + (https://github.com/hypermodeinc/dgraph/pull/8745) + - chore(test): use pointer receiver for LocalCluster methods + (https://github.com/hypermodeinc/dgraph/pull/8734) + - chore(linter): fix unconvert linter issues on linux + (https://github.com/hypermodeinc/dgraph/pull/8718) + - chore(linter): add unconvert linter and address related issues + (https://github.com/hypermodeinc/dgraph/pull/8685) + - chore(ci): resolve community PR goveralls failure + (https://github.com/hypermodeinc/dgraph/pull/8716) + - chore(test): increased iterations of the health check + (https://github.com/hypermodeinc/dgraph/pull/8711) + - fix(test): avoid host volume mount in minio container + (https://github.com/hypermodeinc/dgraph/pull/8569) + - chore(test): add tests for lex/iri.go,chunker/chunk.go + (https://github.com/hypermodeinc/dgraph/pull/8515) + - chore(test): add Backup/Restore test for NFS (https://github.com/hypermodeinc/dgraph/pull/8551) + - chore(test): add test that after snapshot is applied, GraphQL schema is refreshed + (https://github.com/hypermodeinc/dgraph/pull/8619) + - chore(test): upgrade graphql tests to use go 1.19 + (https://github.com/hypermodeinc/dgraph/pull/8662) + - chore(test): add automated test to test multitenant --limit flag + (https://github.com/hypermodeinc/dgraph/pull/8646) + - chore(test): add restore test for more than 127 namespaces + (https://github.com/hypermodeinc/dgraph/pull/8643) + - fix(test): fix the corner case for raft entries test + (https://github.com/hypermodeinc/dgraph/pull/8617) - **CD** - - fix(build): update dockerfile to use cache busting and reduce image size (https://github.com/hypermodeinc/dgraph/pull/8652) - - chore(deps): update min go build version (https://github.com/hypermodeinc/dgraph/pull/8423) - - chore(cd): add badger binary to dgraph docker image (https://github.com/hypermodeinc/dgraph/pull/8790) + + - fix(build): update dockerfile to use cache busting and reduce image size + (https://github.com/hypermodeinc/dgraph/pull/8652) + - chore(deps): update min go build version (https://github.com/hypermodeinc/dgraph/pull/8423) + - chore(cd): add badger binary to dgraph docker image + (https://github.com/hypermodeinc/dgraph/pull/8790) - **Security** - - chore(deps): bump certifi from 2020.4.5.1 to 2022.12.7 in /contrib/config/marketplace/aws/tests (https://github.com/hypermodeinc/dgraph/pull/8496) - - chore(deps): bump github.com/docker/distribution from 2.7.1+incompatible to 2.8.0+incompatible (https://github.com/hypermodeinc/dgraph/pull/8575) - - chore(deps): bump werkzeug from 0.16.1 to 2.2.3 in /contrib/embargo (https://github.com/hypermodeinc/dgraph/pull/8676) - - fix(sec): upgrade networkx to (https://github.com/hypermodeinc/dgraph/pull/8613) - - fix(sec): CVE-2022-41721 (https://github.com/hypermodeinc/dgraph/pull/8633) - - fix(sec): CVE & OS Patching (https://github.com/hypermodeinc/dgraph/pull/8634) + - chore(deps): bump certifi from 2020.4.5.1 to 2022.12.7 in /contrib/config/marketplace/aws/tests + (https://github.com/hypermodeinc/dgraph/pull/8496) + - chore(deps): bump github.com/docker/distribution from 2.7.1+incompatible to 2.8.0+incompatible + (https://github.com/hypermodeinc/dgraph/pull/8575) + - chore(deps): bump werkzeug from 0.16.1 to 2.2.3 in /contrib/embargo + (https://github.com/hypermodeinc/dgraph/pull/8676) + - fix(sec): upgrade networkx to (https://github.com/hypermodeinc/dgraph/pull/8613) + - fix(sec): CVE-2022-41721 (https://github.com/hypermodeinc/dgraph/pull/8633) + - fix(sec): CVE & OS Patching (https://github.com/hypermodeinc/dgraph/pull/8634) -### Changed +**Changed** - **Core Dgraph** - - upgrade badger to v4.1.0 (https://github.com/hypermodeinc/dgraph/pull/8783) (https://github.com/hypermodeinc/dgraph/pull/8709) - - fix(multitenancy) store namespace in predicate as a hex separated by a hyphen to prevent json marshal issues (https://github.com/hypermodeinc/dgraph/pull/8601) - - fix(query): handle bad timezone correctly (https://github.com/hypermodeinc/dgraph/pull/8657) - - chore(ludicroud): remove ludicrous mode from the code (https://github.com/hypermodeinc/dgraph/pull/8612) - - fix(backup): make the /admin/backup and /admin/export API asynchronous (https://github.com/hypermodeinc/dgraph/pull/8554) - - fix(mutation): validate mutation before applying it (https://github.com/hypermodeinc/dgraph/pull/8623) -- **CI Enhancements** - - fix(ci): unpin curl (https://github.com/hypermodeinc/dgraph/pull/8577) - - fix(ci): adjust cron schedules (https://github.com/hypermodeinc/dgraph/pull/8592) - - chore(ci): Capture coverage from bulk load and LDBC tests (https://github.com/hypermodeinc/dgraph/pull/8478) - - chore(linter): enable gosec linter (https://github.com/hypermodeinc/dgraph/pull/8678) - - chore: apply go vet improvements (https://github.com/hypermodeinc/dgraph/pull/8620) - - chore(linter): fix some of the warnings from gas linter (https://github.com/hypermodeinc/dgraph/pull/8664) - - chore(linter): fix golangci config and some issues in tests (https://github.com/hypermodeinc/dgraph/pull/8669) - - fix(linter): address gosimple linter reports & errors (https://github.com/hypermodeinc/dgraph/pull/8628) + - upgrade badger to v4.1.0 (https://github.com/hypermodeinc/dgraph/pull/8783) + (https://github.com/hypermodeinc/dgraph/pull/8709) + - fix(multitenancy) store namespace in predicate as a hex separated by a hyphen to prevent json + marshal issues (https://github.com/hypermodeinc/dgraph/pull/8601) + - fix(query): handle bad timezone correctly (https://github.com/hypermodeinc/dgraph/pull/8657) + - chore(ludicroud): remove ludicrous mode from the code + (https://github.com/hypermodeinc/dgraph/pull/8612) + - fix(backup): make the /admin/backup and /admin/export API asynchronous + (https://github.com/hypermodeinc/dgraph/pull/8554) + - fix(mutation): validate mutation before applying it + (https://github.com/hypermodeinc/dgraph/pull/8623) +- **CI Enhancements** + - fix(ci): unpin curl (https://github.com/hypermodeinc/dgraph/pull/8577) + - fix(ci): adjust cron schedules (https://github.com/hypermodeinc/dgraph/pull/8592) + - chore(ci): Capture coverage from bulk load and LDBC tests + (https://github.com/hypermodeinc/dgraph/pull/8478) + - chore(linter): enable gosec linter (https://github.com/hypermodeinc/dgraph/pull/8678) + - chore: apply go vet improvements (https://github.com/hypermodeinc/dgraph/pull/8620) + - chore(linter): fix some of the warnings from gas linter + (https://github.com/hypermodeinc/dgraph/pull/8664) + - chore(linter): fix golangci config and some issues in tests + (https://github.com/hypermodeinc/dgraph/pull/8669) + - fix(linter): address gosimple linter reports & errors + (https://github.com/hypermodeinc/dgraph/pull/8628) ## [v23.0.0-beta1] - 2023-03-01 + [v23.0.0-beta1]: https://github.com/hypermodeinc/dgraph/compare/v22.0.2...v23.0.0-beta1 -### Added +- **Added** - **GraphQL** - - fix(GraphQL): pass on HTTP request headers for subscriptions (https://github.com/hypermodeinc/dgraph/pull/8574) + + - fix(GraphQL): pass on HTTP request headers for subscriptions + (https://github.com/hypermodeinc/dgraph/pull/8574) - **Core Dgraph** - - chore(debug): add `only-summary` flag in `dgraph debug` to show LSM tree and namespace size (https://github.com/hypermodeinc/dgraph/pull/8516) - - feat(cloud): add `shared-instance` flag in limit superflag in alpha (https://github.com/hypermodeinc/dgraph/pull/8625) - - chore(deps): update prometheus dependency, adds new metrics (https://github.com/hypermodeinc/dgraph/pull/8655) - - feat(cdc): add superflag `tls` to enable TLS without CA or certs (https://github.com/hypermodeinc/dgraph/pull/8564) + - chore(debug): add `only-summary` flag in `dgraph debug` to show LSM tree and namespace size + (https://github.com/hypermodeinc/dgraph/pull/8516) + - feat(cloud): add `shared-instance` flag in limit superflag in alpha + (https://github.com/hypermodeinc/dgraph/pull/8625) + - chore(deps): update prometheus dependency, adds new metrics + (https://github.com/hypermodeinc/dgraph/pull/8655) + - feat(cdc): add superflag `tls` to enable TLS without CA or certs + (https://github.com/hypermodeinc/dgraph/pull/8564) - chore(deps): bump badger up to v4 (https://github.com/hypermodeinc/dgraph/pull/8709) - feat(multitenancy): namespace aware drop data (https://github.com/hypermodeinc/dgraph/pull/8511) -### Fixed +**Fixed** - **GragphQL** - - fix(GraphQL): nested Auth Rules not working properly (https://github.com/hypermodeinc/dgraph/pull/8571) + + - fix(GraphQL): nested Auth Rules not working properly + (https://github.com/hypermodeinc/dgraph/pull/8571) - **Core Dgraph** - - chore(logs): add logs to track dropped proposals (https://github.com/hypermodeinc/dgraph/pull/8568) - - fix(debug): check length of wal entry before parsing (https://github.com/hypermodeinc/dgraph/pull/8560) + + - chore(logs): add logs to track dropped proposals + (https://github.com/hypermodeinc/dgraph/pull/8568) + - fix(debug): check length of wal entry before parsing + (https://github.com/hypermodeinc/dgraph/pull/8560) - opt(schema): optimize populateSchema() (https://github.com/hypermodeinc/dgraph/pull/8565) - - fix(zero): fix update membership to make bulk tablet proposal instead of multiple small (https://github.com/hypermodeinc/dgraph/pull/8573) - - fix(groot): do not upsert groot for all namespaces on restart (https://github.com/hypermodeinc/dgraph/pull/8561) - - fix(restore): set kv version to restoreTs for all keys (https://github.com/hypermodeinc/dgraph/pull/8563) - - fix(probe): do not contend for lock in lazy load (https://github.com/hypermodeinc/dgraph/pull/8566) - - fix(core): fixed infinite loop in CommitToDisk (https://github.com/hypermodeinc/dgraph/pull/8614) - - fix(proposals): incremental proposal key for zero proposals (https://github.com/hypermodeinc/dgraph/pull/8567) - - fix(zero): fix waiting for random time while rate limiting (https://github.com/hypermodeinc/dgraph/pull/8656) - - chore(deps): upgrade badger (https://github.com/hypermodeinc/dgraph/pull/8654, https://github.com/hypermodeinc/dgraph/pull/8658) - - opt(schema): load schema and types using Stream framework (https://github.com/hypermodeinc/dgraph/pull/8562) - - fix(backup): use StreamWriter instead of KVLoader during backup restore (https://github.com/hypermodeinc/dgraph/pull/8510) - - fix(audit): fixing audit logs for websocket connections (https://github.com/hypermodeinc/dgraph/pull/8627) - - fix(restore): consider the banned namespaces while bumping (https://github.com/hypermodeinc/dgraph/pull/8559) - - fix(backup): create directory before writing backup (https://github.com/hypermodeinc/dgraph/pull/8638) + - fix(zero): fix update membership to make bulk tablet proposal instead of multiple small + (https://github.com/hypermodeinc/dgraph/pull/8573) + - fix(groot): do not upsert groot for all namespaces on restart + (https://github.com/hypermodeinc/dgraph/pull/8561) + - fix(restore): set kv version to restoreTs for all keys + (https://github.com/hypermodeinc/dgraph/pull/8563) + - fix(probe): do not contend for lock in lazy load + (https://github.com/hypermodeinc/dgraph/pull/8566) + - fix(core): fixed infinite loop in CommitToDisk + (https://github.com/hypermodeinc/dgraph/pull/8614) + - fix(proposals): incremental proposal key for zero proposals + (https://github.com/hypermodeinc/dgraph/pull/8567) + - fix(zero): fix waiting for random time while rate limiting + (https://github.com/hypermodeinc/dgraph/pull/8656) + - chore(deps): upgrade badger (https://github.com/hypermodeinc/dgraph/pull/8654, + https://github.com/hypermodeinc/dgraph/pull/8658) + - opt(schema): load schema and types using Stream framework + (https://github.com/hypermodeinc/dgraph/pull/8562) + - fix(backup): use StreamWriter instead of KVLoader during backup restore + (https://github.com/hypermodeinc/dgraph/pull/8510) + - fix(audit): fixing audit logs for websocket connections + (https://github.com/hypermodeinc/dgraph/pull/8627) + - fix(restore): consider the banned namespaces while bumping + (https://github.com/hypermodeinc/dgraph/pull/8559) + - fix(backup): create directory before writing backup + (https://github.com/hypermodeinc/dgraph/pull/8638) - **Test** - - fix(test): avoid host volume mount in minio container (https://github.com/hypermodeinc/dgraph/pull/8569) - - chore(test): add tests for lex/iri.go,chunker/chunk.go (https://github.com/hypermodeinc/dgraph/pull/8515) + + - fix(test): avoid host volume mount in minio container + (https://github.com/hypermodeinc/dgraph/pull/8569) + - chore(test): add tests for lex/iri.go,chunker/chunk.go + (https://github.com/hypermodeinc/dgraph/pull/8515) - chore(test): add Backup/Restore test for NFS (https://github.com/hypermodeinc/dgraph/pull/8551) - - chore(test): add test that after snapshot is applied, GraphQL schema is refreshed (https://github.com/hypermodeinc/dgraph/pull/8619) - - chore(test): upgrade graphql tests to use go 1.19 (https://github.com/hypermodeinc/dgraph/pull/8662) - - chore(test): add automated test to test multitenant --limit flag (https://github.com/hypermodeinc/dgraph/pull/8646) - - chore(test): add restore test for more than 127 namespaces (https://github.com/hypermodeinc/dgraph/pull/8643) - - fix(test): fix the corner case for raft entries test (https://github.com/hypermodeinc/dgraph/pull/8617) + - chore(test): add test that after snapshot is applied, GraphQL schema is refreshed + (https://github.com/hypermodeinc/dgraph/pull/8619) + - chore(test): upgrade graphql tests to use go 1.19 + (https://github.com/hypermodeinc/dgraph/pull/8662) + - chore(test): add automated test to test multitenant --limit flag + (https://github.com/hypermodeinc/dgraph/pull/8646) + - chore(test): add restore test for more than 127 namespaces + (https://github.com/hypermodeinc/dgraph/pull/8643) + - fix(test): fix the corner case for raft entries test + (https://github.com/hypermodeinc/dgraph/pull/8617) - **CD** - - fix(build): update dockerfile to use cache busting and reduce image size (https://github.com/hypermodeinc/dgraph/pull/8652) + + - fix(build): update dockerfile to use cache busting and reduce image size + (https://github.com/hypermodeinc/dgraph/pull/8652) - chore(deps): update min go build version (https://github.com/hypermodeinc/dgraph/pull/8423) - **Security** - - chore(deps): bump certifi from 2020.4.5.1 to 2022.12.7 in /contrib/config/marketplace/aws/tests (https://github.com/hypermodeinc/dgraph/pull/8496) - - chore(deps): bump github.com/docker/distribution from 2.7.1+incompatible to 2.8.0+incompatible (https://github.com/hypermodeinc/dgraph/pull/8575) - - chore(deps): bump werkzeug from 0.16.1 to 2.2.3 in /contrib/embargo (https://github.com/hypermodeinc/dgraph/pull/8676) - - fix(sec): upgrade networkx to (https://github.com/hypermodeinc/dgraph/pull/8613) + - chore(deps): bump certifi from 2020.4.5.1 to 2022.12.7 in /contrib/config/marketplace/aws/tests + (https://github.com/hypermodeinc/dgraph/pull/8496) + - chore(deps): bump github.com/docker/distribution from 2.7.1+incompatible to 2.8.0+incompatible + (https://github.com/hypermodeinc/dgraph/pull/8575) + - chore(deps): bump werkzeug from 0.16.1 to 2.2.3 in /contrib/embargo + (https://github.com/hypermodeinc/dgraph/pull/8676) + - fix(sec): upgrade networkx to (https://github.com/hypermodeinc/dgraph/pull/8613) - fix(sec): CVE-2022-41721 (https://github.com/hypermodeinc/dgraph/pull/8633) - fix(sec): CVE & OS Patching (https://github.com/hypermodeinc/dgraph/pull/8634) -### Changed +**Changed** - **Core Dgraph** - - fix(multitenancy) store namespace in predicate as a hex separated by a hyphen to prevent json marshal issues (https://github.com/hypermodeinc/dgraph/pull/8601) + + - fix(multitenancy) store namespace in predicate as a hex separated by a hyphen to prevent json + marshal issues (https://github.com/hypermodeinc/dgraph/pull/8601) - fix(query): handle bad timezone correctly (https://github.com/hypermodeinc/dgraph/pull/8657) - - chore(ludicroud): remove ludicrous mode from the code (https://github.com/hypermodeinc/dgraph/pull/8612) - - fix(backup): make the /admin/backup and /admin/export API asynchronous (https://github.com/hypermodeinc/dgraph/pull/8554) - - fix(mutation): validate mutation before applying it (https://github.com/hypermodeinc/dgraph/pull/8623) + - chore(ludicroud): remove ludicrous mode from the code + (https://github.com/hypermodeinc/dgraph/pull/8612) + - fix(backup): make the /admin/backup and /admin/export API asynchronous + (https://github.com/hypermodeinc/dgraph/pull/8554) + - fix(mutation): validate mutation before applying it + (https://github.com/hypermodeinc/dgraph/pull/8623) - **CI Enhancements** - - fix(ci): unpin curl (https://github.com/hypermodeinc/dgraph/pull/8577) - - fix(ci): adjust cron schedules (https://github.com/hypermodeinc/dgraph/pull/8592) - - chore(ci): Capture coverage from bulk load and LDBC tests (https://github.com/hypermodeinc/dgraph/pull/8478) - - chore(linter): enable gosec linter (https://github.com/hypermodeinc/dgraph/pull/8678) - - chore: apply go vet improvements (https://github.com/hypermodeinc/dgraph/pull/8620) - - chore(linter): fix some of the warnings from gas linter (https://github.com/hypermodeinc/dgraph/pull/8664) - - chore(linter): fix golangci config and some issues in tests (https://github.com/hypermodeinc/dgraph/pull/8669) - - fix(linter): address gosimple linter reports & errors (https://github.com/hypermodeinc/dgraph/pull/8628) + - fix(ci): unpin curl (https://github.com/hypermodeinc/dgraph/pull/8577) + - fix(ci): adjust cron schedules (https://github.com/hypermodeinc/dgraph/pull/8592) + - chore(ci): Capture coverage from bulk load and LDBC tests + (https://github.com/hypermodeinc/dgraph/pull/8478) + - chore(linter): enable gosec linter (https://github.com/hypermodeinc/dgraph/pull/8678) + - chore: apply go vet improvements (https://github.com/hypermodeinc/dgraph/pull/8620) + - chore(linter): fix some of the warnings from gas linter + (https://github.com/hypermodeinc/dgraph/pull/8664) + - chore(linter): fix golangci config and some issues in tests + (https://github.com/hypermodeinc/dgraph/pull/8669) + - fix(linter): address gosimple linter reports & errors + (https://github.com/hypermodeinc/dgraph/pull/8628) ## [v22.0.2] - 2022-12-16 + [v22.0.2]: https://github.com/hypermodeinc/dgraph/compare/v22.0.1...v22.0.2 -### Added +- **Added** -- **ARM Support** - Dgraph now supports ARM64 Architecture for development (https://github.com/hypermodeinc/dgraph/pull/8543 https://github.com/hypermodeinc/dgraph/pull/8520 https://github.com/hypermodeinc/dgraph/pull/8503 https://github.com/hypermodeinc/dgraph/pull/8436 https://github.com/hypermodeinc/dgraph/pull/8405 https://github.com/hypermodeinc/dgraph/pull/8395) +- **ARM Support** - Dgraph now supports ARM64 Architecture for development + (https://github.com/hypermodeinc/dgraph/pull/8543 https://github.com/hypermodeinc/dgraph/pull/8520 + https://github.com/hypermodeinc/dgraph/pull/8503 https://github.com/hypermodeinc/dgraph/pull/8436 + https://github.com/hypermodeinc/dgraph/pull/8405 https://github.com/hypermodeinc/dgraph/pull/8395) - Additional logging and trace tags for debugging (https://github.com/hypermodeinc/dgraph/pull/8490) -### Fixed +- **Fixed** - **EDgraph** - - fix(ACL): Prevents permissions overrride and merges acl cache to persist permissions across different namespaces (https://github.com/hypermodeinc/dgraph/pull/8506) + + - fix(ACL): Prevents permissions overrride and merges acl cache to persist permissions across + different namespaces (https://github.com/hypermodeinc/dgraph/pull/8506) - **Core Dgraph** - - Fix(badger): Upgrade badger version to fix manifest corruption (https://github.com/hypermodeinc/dgraph/pull/8365) - - fix(pagination): Fix after for regexp, match functions (https://github.com/hypermodeinc/dgraph/pull/8471) - - fix(query): Do not execute filters if there are no source uids(https://github.com/hypermodeinc/dgraph/pull/8452) - - fix(admin): make config changes to pass through gog middlewares (https://github.com/hypermodeinc/dgraph/pull/8442) - - fix(sort): Only filter out nodes with positive offsets (https://github.com/hypermodeinc/dgraph/pull/8441) - - fix(fragment): merge the nested fragments fields (https://github.com/hypermodeinc/dgraph/pull/8435) + + - Fix(badger): Upgrade badger version to fix manifest corruption + (https://github.com/hypermodeinc/dgraph/pull/8365) + - fix(pagination): Fix after for regexp, match functions + (https://github.com/hypermodeinc/dgraph/pull/8471) + - fix(query): Do not execute filters if there are no source + uids(https://github.com/hypermodeinc/dgraph/pull/8452) + - fix(admin): make config changes to pass through gog middlewares + (https://github.com/hypermodeinc/dgraph/pull/8442) + - fix(sort): Only filter out nodes with positive offsets + (https://github.com/hypermodeinc/dgraph/pull/8441) + - fix(fragment): merge the nested fragments fields + (https://github.com/hypermodeinc/dgraph/pull/8435) - Fix(lsbackup): Fix profiler in lsBackup (https://github.com/hypermodeinc/dgraph/pull/8432) - - fix(DQL): optimize query for has function with offset (https://github.com/hypermodeinc/dgraph/pull/8431) + - fix(DQL): optimize query for has function with offset + (https://github.com/hypermodeinc/dgraph/pull/8431) - **GraphQL** - - Fix(GraphQL): Make mutation rewriting tests more robust (https://github.com/hypermodeinc/dgraph/pull/8449) + + - Fix(GraphQL): Make mutation rewriting tests more robust + (https://github.com/hypermodeinc/dgraph/pull/8449) - **Security** - -
- CVE Fixes (35 total) - - #### CVE Fixes (35 total) - - CVE-2013-4235 - - CVE-2016-20013 - - CVE-2016-2781 - - CVE-2017-11164 - - CVE-2018-16886 - - CVE-2019-0205 - - CVE-2019-0210 - - CVE-2019-11254 - - CVE-2019-16167 - - CVE-2020-29652 - - CVE-2021-31525 - - CVE-2021-33194 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-38561 - - CVE-2021-39537 - - CVE-2021-43565 - - CVE-2021-44716 - - CVE-2021-44758 - - CVE-2022-21698 - - CVE-2022-27191 - - CVE-2022-27664 - - CVE-2022-29458 - - CVE-2022-29526 - - CVE-2022-3219 - - CVE-2022-32221 - - CVE-2022-3437 - - CVE-2022-35737 - - CVE-2022-3715 - - CVE-2022-3821 - - CVE-2022-39377 - - CVE-2022-41916 - - CVE-2022-42800 - - CVE-2022-42898 - - CVE-2022-44640 - -
- GHSA Fixes (2 total) - - #### GHSE Fixes (2 total) - - GHSA-69ch-w2m2-3vjp - - GHSA-m332-53r6-2w93 - -### Changed + + -
+ CVE Fixes (35 total) + + **CVE Fixes** (35 total) + + - CVE-2013-4235 + - CVE-2016-20013 + - CVE-2016-2781 + - CVE-2017-11164 + - CVE-2018-16886 + - CVE-2019-0205 + - CVE-2019-0210 + - CVE-2019-11254 + - CVE-2019-16167 + - CVE-2020-29652 + - CVE-2021-31525 + - CVE-2021-33194 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-38561 + - CVE-2021-39537 + - CVE-2021-43565 + - CVE-2021-44716 + - CVE-2021-44758 + - CVE-2022-21698 + - CVE-2022-27191 + - CVE-2022-27664 + - CVE-2022-29458 + - CVE-2022-29526 + - CVE-2022-3219 + - CVE-2022-32221 + - CVE-2022-3437 + - CVE-2022-35737 + - CVE-2022-3715 + - CVE-2022-3821 + - CVE-2022-39377 + - CVE-2022-41916 + - CVE-2022-42800 + - CVE-2022-42898 + - CVE-2022-44640 + + -
+ GHSA Fixes (2 total) + + **GHSE Fixes** (2 total) + + - GHSA-69ch-w2m2-3vjp + - GHSA-m332-53r6-2w93 + +**Changed** - **CI Enhancements** - - Added more unit tests (https://github.com/hypermodeinc/dgraph/pull/8470 https://github.com/hypermodeinc/dgraph/pull/8489 https://github.com/hypermodeinc/dgraph/pull/8479 https://github.com/hypermodeinc/dgraph/pull/8488 https://github.com/hypermodeinc/dgraph/pull/8433) - - [Coveralls](https://coveralls.io/github/dgraph-io/dgraph?branch=main) on CI is enhanced to measure code coverage for integration tests (https://github.com/hypermodeinc/dgraph/pull/8494) - - [**LDBC Benchmarking**](https://ldbcouncil.org) in enabled on [CI](https://github.com/hypermodeinc/dgraph/actions/workflows/ci-dgraph-ldbc-tests.yml) -- **CD Enhancements** - - Enhanced our [CD Pipeline](https://github.com/hypermodeinc/dgraph/actions/workflows/cd-dgraph.yml) to support ARM64 binaries and docker-images (https://github.com/hypermodeinc/dgraph/pull/8520) - - Enhanced [dgraph-lambda](https://github.com/hypermodeinc/dgraph-lambda) to support arm64 (https://github.com/hypermodeinc/dgraph-lambda/pull/39 https://github.com/hypermodeinc/dgraph-lambda/pull/38 https://github.com/hypermodeinc/dgraph-lambda/pull/37) - - Enhanced [badger](https://github.com/dgraph-io/badger) to support arm64 (https://github.com/dgraph-io/badger/pull/1838) + - Added more unit tests (https://github.com/hypermodeinc/dgraph/pull/8470 + https://github.com/hypermodeinc/dgraph/pull/8489 + https://github.com/hypermodeinc/dgraph/pull/8479 + https://github.com/hypermodeinc/dgraph/pull/8488 + https://github.com/hypermodeinc/dgraph/pull/8433) + - [Coveralls](https://coveralls.io/github/dgraph-io/dgraph?branch=main) on CI is enhanced to + measure code coverage for integration tests (https://github.com/hypermodeinc/dgraph/pull/8494) + - [**LDBC Benchmarking**](https://ldbcouncil.org) in enabled on + [CI](https://github.com/hypermodeinc/dgraph/actions/workflows/ci-dgraph-ldbc-tests.yml) +- **CD Enhancements** + - Enhanced our + [CD Pipeline](https://github.com/hypermodeinc/dgraph/actions/workflows/cd-dgraph.yml) to support + ARM64 binaries and docker-images (https://github.com/hypermodeinc/dgraph/pull/8520) + - Enhanced [dgraph-lambda](https://github.com/hypermodeinc/dgraph-lambda) to support arm64 + (https://github.com/hypermodeinc/dgraph-lambda/pull/39 + https://github.com/hypermodeinc/dgraph-lambda/pull/38 + https://github.com/hypermodeinc/dgraph-lambda/pull/37) + - Enhanced [badger](https://github.com/dgraph-io/badger) to support arm64 + (https://github.com/dgraph-io/badger/pull/1838) ## [v22.0.1] - 2022-11-10 + [v22.0.1]: https://github.com/hypermodeinc/dgraph/compare/v22.0.0...v22.0.1 -### Fixed +- **Fixed** + - **CD Release Pipeline** - - Badger Binary fetch steps added to the release CD pipeline (https://github.com/hypermodeinc/dgraph/pull/8425) + - Badger Binary fetch steps added to the release CD pipeline + (https://github.com/hypermodeinc/dgraph/pull/8425) - Corresponding Badger artifacts will be fetched & uploaded from v22.0.1 onwards ## [v22.0.0] - 2022-10-21 + [v22.0.0]: https://github.com/hypermodeinc/dgraph/compare/v21.03.2...v22.0.0 -> **Note** -> `v22.0.0` release is based of `v21.03.2` release. -> https://discuss.dgraph.io/t/dgraph-v22-0-0-rc1-20221003-release-candidate/17839 +**Note** > `v22.0.0` release is based of `v21.03.2` release. +https://discuss.dgraph.io/t/dgraph-v22-0-0-rc1-20221003-release-candidate/17839 -> **Warning** -> We are discontinuing support for `v21.12.0`. -> This will be a breaking change for anyone moving from `v21.12.0` to `v.22.0.0`. +> **Warning** We are discontinuing support for `v21.12.0`. This will be a breaking change for anyone +> moving from `v21.12.0` to `v.22.0.0`. + +- **Fixed** -### Fixed - **GraphQL** - fix(GraphQL): optimize eq filter queries (https://github.com/hypermodeinc/dgraph/pull/7895) - - fix(GraphQL): add validation of null values with correct order of graphql rule validation (https://github.com/hypermodeinc/dgraph/pull/8333) - - fix(GraphQL) fix auth query rewriting with ID filter (https://github.com/hypermodeinc/dgraph/pull/8157) + - fix(GraphQL): add validation of null values with correct order of graphql rule validation + (https://github.com/hypermodeinc/dgraph/pull/8333) + - fix(GraphQL) fix auth query rewriting with ID filter + (https://github.com/hypermodeinc/dgraph/pull/8157) - **EDgraph** - - fix(query): Prevent multiple entries for same predicate in mutations (https://github.com/hypermodeinc/dgraph/pull/8332) + - fix(query): Prevent multiple entries for same predicate in mutations + (https://github.com/hypermodeinc/dgraph/pull/8332) - **Posting** - fix(rollups): Fix splits in roll-up (https://github.com/hypermodeinc/dgraph/pull/8297) - **Security** - -
- CVE Fixes (417 total) - - #### CVE Fixes (417 total) - - CVE-2019-0210 - - CVE-2019-0205 - - CVE-2021-43565 - - CVE-2022-27664 - - CVE-2021-38561 - - CVE-2021-44716 - - CVE-2021-33194 - - CVE-2022-27191 - - CVE-2020-29652 - - CVE-2018-16886 - - CVE-2022-21698 - - CVE-2022-37434 - - CVE-2020-16156 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2022-37434 - - CVE-2020-16156 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2022-37434 - - CVE-2020-16156 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2022-3116 - - CVE-2022-37434 - - CVE-2020-16156 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2022-37434 - - CVE-2020-16156 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2022-37434 - - CVE-2020-16156 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2022-37434 - - CVE-2020-16156 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2022-37434 - - CVE-2020-16156 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2022-37434 - - CVE-2020-16156 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2022-37434 - - CVE-2020-16156 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2022-37434 - - CVE-2020-16156 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2022-37434 - - CVE-2020-16156 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2021-37750 - - CVE-2021-36222 - - CVE-2020-35525 - - CVE-2020-35527 - - CVE-2021-20223 - - CVE-2020-9794 - - CVE-2022-29526 - - CVE-2021-31525 - - CVE-2019-11254 - - CVE-2022-3219 - - CVE-2019-16167 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2017-11164 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-43618 - - CVE-2016-20013 - - CVE-2016-2781 - - CVE-2022-1587 - - CVE-2022-1586 - - CVE-2019-16167 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2017-11164 - - CVE-2022-1587 - - CVE-2022-1586 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-43618 - - CVE-2016-20013 - - CVE-2022-3219 - - CVE-2016-2781 - - CVE-2022-1587 - - CVE-2022-1586 - - CVE-2019-16167 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2017-11164 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-43618 - - CVE-2016-20013 - - CVE-2022-3219 - - CVE-2016-2781 - - CVE-2021-3671 - - CVE-2022-3219 - - CVE-2019-16167 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2013-4235 - - CVE-2021-3671 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2017-11164 - - CVE-2022-1587 - - CVE-2022-1586 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2021-43618 - - CVE-2016-20013 - - CVE-2021-3671 - - CVE-2016-2781 - - CVE-2021-3671 - - CVE-2022-3219 - - CVE-2019-16167 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2013-4235 - - CVE-2021-3671 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2017-11164 - - CVE-2022-1587 - - CVE-2022-1586 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2021-43618 - - CVE-2016-20013 - - CVE-2021-3671 - - CVE-2016-2781 - - CVE-2019-16167 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2013-4235 - - CVE-2021-3671 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2017-11164 - - CVE-2022-1587 - - CVE-2022-1586 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2021-43618 - - CVE-2016-20013 - - CVE-2021-3671 - - CVE-2022-3219 - - CVE-2016-2781 - - CVE-2019-16167 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2013-4235 - - CVE-2021-3671 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2017-11164 - - CVE-2022-1587 - - CVE-2022-1586 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2021-43618 - - CVE-2016-20013 - - CVE-2021-3671 - - CVE-2016-2781 - - CVE-2019-16167 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2013-4235 - - CVE-2021-3671 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2017-11164 - - CVE-2022-1587 - - CVE-2022-1586 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2021-43618 - - CVE-2016-20013 - - CVE-2021-3671 - - CVE-2016-2781 - - CVE-2019-16167 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2013-4235 - - CVE-2021-3671 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2017-11164 - - CVE-2022-1587 - - CVE-2022-1586 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2021-43618 - - CVE-2016-20013 - - CVE-2021-3671 - - CVE-2016-2781 - - CVE-2019-16167 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2013-4235 - - CVE-2021-3671 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2017-11164 - - CVE-2022-1587 - - CVE-2022-1586 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2021-43618 - - CVE-2016-20013 - - CVE-2021-3671 - - CVE-2016-2781 - - CVE-2019-16167 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2013-4235 - - CVE-2021-3671 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2017-11164 - - CVE-2022-1587 - - CVE-2022-1586 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2021-43618 - - CVE-2016-20013 - - CVE-2021-3671 - - CVE-2016-2781 - - CVE-2019-16167 - - CVE-2013-4235 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2013-4235 - - CVE-2021-3671 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2017-11164 - - CVE-2022-1587 - - CVE-2022-1586 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2022-29458 - - CVE-2021-39537 - - CVE-2021-3671 - - CVE-2021-43618 - - CVE-2016-20013 - - CVE-2021-3671 - - CVE-2016-2781 - - CVE-2021-3671 - - CVE-2022-1587 - - CVE-2022-1586 - - CVE-2021-3671 - - CVE-2020-9991 - - CVE-2020-9849 -
- -
- GHSA Fixes (5 total) - - #### GHSA Fixes (5 total) - - GHSA-jq7p-26h5-w78r - - GHSA-8c26-wmh5-6g9v - - GHSA-h6xx-pmxh-3wgp - - GHSA-cg3q-j54f-5p7p - - GHSA-wxc4-f4m6-wwqv -
- - fix(sec): fixing HIGH CVEs (https://github.com/hypermodeinc/dgraph/pull/8289) - - fix(sec): CVE High Vulnerability (https://github.com/hypermodeinc/dgraph/pull/8277) - - fix(sec): Fixing CVE-2021-31525 (https://github.com/hypermodeinc/dgraph/pull/8274) - - fix(sec): CVE-2019-11254 (https://github.com/hypermodeinc/dgraph/pull/8270) - -### Changed + + -
+ CVE Fixes (417 total) + + **CVE Fixes** (417 total) + + - CVE-2019-0210 + - CVE-2019-0205 + - CVE-2021-43565 + - CVE-2022-27664 + - CVE-2021-38561 + - CVE-2021-44716 + - CVE-2021-33194 + - CVE-2022-27191 + - CVE-2020-29652 + - CVE-2018-16886 + - CVE-2022-21698 + - CVE-2022-37434 + - CVE-2020-16156 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2022-37434 + - CVE-2020-16156 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2022-37434 + - CVE-2020-16156 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2022-3116 + - CVE-2022-37434 + - CVE-2020-16156 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2022-37434 + - CVE-2020-16156 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2022-37434 + - CVE-2020-16156 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2022-37434 + - CVE-2020-16156 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2022-37434 + - CVE-2020-16156 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2022-37434 + - CVE-2020-16156 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2022-37434 + - CVE-2020-16156 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2022-37434 + - CVE-2020-16156 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2022-37434 + - CVE-2020-16156 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2021-37750 + - CVE-2021-36222 + - CVE-2020-35525 + - CVE-2020-35527 + - CVE-2021-20223 + - CVE-2020-9794 + - CVE-2022-29526 + - CVE-2021-31525 + - CVE-2019-11254 + - CVE-2022-3219 + - CVE-2019-16167 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2017-11164 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-43618 + - CVE-2016-20013 + - CVE-2016-2781 + - CVE-2022-1587 + - CVE-2022-1586 + - CVE-2019-16167 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2017-11164 + - CVE-2022-1587 + - CVE-2022-1586 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-43618 + - CVE-2016-20013 + - CVE-2022-3219 + - CVE-2016-2781 + - CVE-2022-1587 + - CVE-2022-1586 + - CVE-2019-16167 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2017-11164 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-43618 + - CVE-2016-20013 + - CVE-2022-3219 + - CVE-2016-2781 + - CVE-2021-3671 + - CVE-2022-3219 + - CVE-2019-16167 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2013-4235 + - CVE-2021-3671 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2017-11164 + - CVE-2022-1587 + - CVE-2022-1586 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2021-43618 + - CVE-2016-20013 + - CVE-2021-3671 + - CVE-2016-2781 + - CVE-2021-3671 + - CVE-2022-3219 + - CVE-2019-16167 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2013-4235 + - CVE-2021-3671 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2017-11164 + - CVE-2022-1587 + - CVE-2022-1586 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2021-43618 + - CVE-2016-20013 + - CVE-2021-3671 + - CVE-2016-2781 + - CVE-2019-16167 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2013-4235 + - CVE-2021-3671 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2017-11164 + - CVE-2022-1587 + - CVE-2022-1586 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2021-43618 + - CVE-2016-20013 + - CVE-2021-3671 + - CVE-2022-3219 + - CVE-2016-2781 + - CVE-2019-16167 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2013-4235 + - CVE-2021-3671 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2017-11164 + - CVE-2022-1587 + - CVE-2022-1586 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2021-43618 + - CVE-2016-20013 + - CVE-2021-3671 + - CVE-2016-2781 + - CVE-2019-16167 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2013-4235 + - CVE-2021-3671 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2017-11164 + - CVE-2022-1587 + - CVE-2022-1586 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2021-43618 + - CVE-2016-20013 + - CVE-2021-3671 + - CVE-2016-2781 + - CVE-2019-16167 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2013-4235 + - CVE-2021-3671 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2017-11164 + - CVE-2022-1587 + - CVE-2022-1586 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2021-43618 + - CVE-2016-20013 + - CVE-2021-3671 + - CVE-2016-2781 + - CVE-2019-16167 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2013-4235 + - CVE-2021-3671 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2017-11164 + - CVE-2022-1587 + - CVE-2022-1586 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2021-43618 + - CVE-2016-20013 + - CVE-2021-3671 + - CVE-2016-2781 + - CVE-2019-16167 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2013-4235 + - CVE-2021-3671 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2017-11164 + - CVE-2022-1587 + - CVE-2022-1586 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2021-43618 + - CVE-2016-20013 + - CVE-2021-3671 + - CVE-2016-2781 + - CVE-2019-16167 + - CVE-2013-4235 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2013-4235 + - CVE-2021-3671 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2017-11164 + - CVE-2022-1587 + - CVE-2022-1586 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2022-29458 + - CVE-2021-39537 + - CVE-2021-3671 + - CVE-2021-43618 + - CVE-2016-20013 + - CVE-2021-3671 + - CVE-2016-2781 + - CVE-2021-3671 + - CVE-2022-1587 + - CVE-2022-1586 + - CVE-2021-3671 + - CVE-2020-9991 + - CVE-2020-9849 +
+ + -
+ GHSA Fixes (5 total) + + **GHSA Fixes** (5 total) + + - GHSA-jq7p-26h5-w78r + - GHSA-8c26-wmh5-6g9v + - GHSA-h6xx-pmxh-3wgp + - GHSA-cg3q-j54f-5p7p + - GHSA-wxc4-f4m6-wwqv +
+ + - fix(sec): fixing HIGH CVEs (https://github.com/hypermodeinc/dgraph/pull/8289) + - fix(sec): CVE High Vulnerability (https://github.com/hypermodeinc/dgraph/pull/8277) + - fix(sec): Fixing CVE-2021-31525 (https://github.com/hypermodeinc/dgraph/pull/8274) + - fix(sec): CVE-2019-11254 (https://github.com/hypermodeinc/dgraph/pull/8270) + +**Changed** + - **CI Test Infrastructure** - - Configured to run with [Github Actions](https://github.com/hypermodeinc/dgraph/tree/main/.github/workflows) + - Configured to run with + [Github Actions](https://github.com/hypermodeinc/dgraph/tree/main/.github/workflows) - Stability Improvements to test harness - - Enabled [Unit/Integration Tests](https://github.com/hypermodeinc/dgraph/actions/workflows/ci-dgraph-tests.yml) - - Enabled [Load Tests](https://github.com/hypermodeinc/dgraph/actions/workflows/ci-dgraph-load-tests.yml) + - Enabled + [Unit/Integration Tests](https://github.com/hypermodeinc/dgraph/actions/workflows/ci-dgraph-tests.yml) + - Enabled + [Load Tests](https://github.com/hypermodeinc/dgraph/actions/workflows/ci-dgraph-load-tests.yml) - Enabled [Linters](https://github.com/hypermodeinc/dgraph/actions/workflows/ci-golang-lint.yml) - Enabled [Code Coverage](https://coveralls.io/github/dgraph-io/dgraph?branch=main) - **CI Security** - - Configured to run with [Github Actions](https://github.com/hypermodeinc/dgraph/blob/main/.github/workflows/ci-aqua-security-trivy-tests.yml) - - Enabled [Trivy Scans](https://github.com/hypermodeinc/dgraph/actions/workflows/ci-aqua-security-trivy-tests.yml) + - Configured to run with + [Github Actions](https://github.com/hypermodeinc/dgraph/blob/main/.github/workflows/ci-aqua-security-trivy-tests.yml) + - Enabled + [Trivy Scans](https://github.com/hypermodeinc/dgraph/actions/workflows/ci-aqua-security-trivy-tests.yml) - Enabled dependabot scans - - Configured to run with [Github Actions](https://github.com/hypermodeinc/dgraph/blob/main/.github/workflows/ci-aqua-security-trivy-tests.yml) + - Configured to run with + [Github Actions](https://github.com/hypermodeinc/dgraph/blob/main/.github/workflows/ci-aqua-security-trivy-tests.yml) - **CD Release Pipeline** - - Automated [Release Pipeline](https://github.com/hypermodeinc/dgraph/blob/main/.github/workflows/cd-dgraph.yml) to facilitate building of dgraph-binary & corresponding docker-images. The built artifacts are published to repositories through the same pipeline. + - Automated + [Release Pipeline](https://github.com/hypermodeinc/dgraph/blob/main/.github/workflows/cd-dgraph.yml) + to facilitate building of dgraph-binary & corresponding docker-images. The built artifacts are + published to repositories through the same pipeline. - [**Github Issues Enabled**](https://github.com/hypermodeinc/dgraph/issues/new/choose) - ## [21.03.2] - 2021-08-26 + [21.03.2]: https://github.com/hypermodeinc/dgraph/compare/v21.03.1...v21.03.2 -### Fixed +- **Fixed** - GraphQL + - Handle extend keyword for Queries and Mutations ([#7923][]) - Core Dgraph @@ -1188,12 +1443,12 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - fix(live): quote the xid when doing upsert ([#7999][]) - fix(export): Write temporary files for export to the t directory. ([#7998][]) -### Changed +**Changed** - protobuf: upgrade golang/protobuf library v1.4.1 -> v1.5.2 ([#7949][]) - chore(raft): Log packets message less frequently. ([#7913][]) -### Added +**Added** - feat(acl): allow access to all the predicates using wildcard. ([#7993][]) - feat(Multi-tenancy): Add namespaces field to state. ([#7936][]) @@ -1214,14 +1469,17 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#7936]: https://github.com/hypermodeinc/dgraph/issues/7936 ## [21.03.1] - 2021-06-16 + [21.03.1]: https://github.com/hypermodeinc/dgraph/compare/v21.03.0...v21.03.1 -### Fixed +- **Fixed** + - GraphQL + - fix(GraphQL): fix @cascade with Pagination for @auth queries ([#7695][]) - Fix(GraphQL): Fix GraphQL encoding in case of empty list ([#7726][]) ([#7730][]) - Fix(GraphQL): Add filter in DQL query in case of reverse predicate ([#7728][]) ([#7733][]) - - Fix(graphql): Fix error message of lambdaOnMutate directive ([#7751][]) ([#7754][]) + - Fix(graphql): Fix error message of lambdaOnMutate directive ([#7751][]) ([#7754][]) - Core Dgraph - fix(vault): Hide ACL flags when not required ([#7701][]) @@ -1233,7 +1491,8 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - bug fix to permit audit streaming to stdout writer([#7803][]) ([#7804][]) - fix(drop): attach galaxy namespace to drop attr done on 20.11 backup ([#7827][]) - fix: Prevent proposal from being dropped accidentally ([#7741][]) ([#7811][]) - - fix(schema-update): Start opIndexing only when index creation is required. ([#7845][]) ([#7847][]) + - fix(schema-update): Start opIndexing only when index creation is required. ([#7845][]) + ([#7847][]) - fix(export): Fix facet export of reference type postings to JSON format ([#7744][]) ([#7756][]) - fix(lease): don't do rate limiting when not limit is not specified ([#7787][]) - fix(lease): prevent ID lease overflow ([#7802][]) @@ -1244,14 +1503,17 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - fix(DQL): revert changes related to cascade pagination with sort ([#7885][]) ([#7888][]) - fix(metrics): Expose dgraph_num_backups_failed_total metric view. ([#7900][]) ([#7904][]) -### Changed - - opt(GraphQL): filter existence queries on GraphQL side instead of using @filter(type) ([#7757][]) ([#7760][]) +**Changed** + +- opt(GraphQL): filter existence queries on GraphQL side instead of using @filter(type) ([#7757][]) + ([#7760][]) -### Added - - feat(cdc): Add support for SCRAM SASL mechanism ([#7765][]) ([#7767][]) - - Add asynchronous task API ([#7781][]) - - make exports synchronous again ([#7877][]) - - feat(schema): do schema versioning and make backup non-blocking for i… ([#7856][]) ([#7873][]) +**Added** + +- feat(cdc): Add support for SCRAM SASL mechanism ([#7765][]) ([#7767][]) +- Add asynchronous task API ([#7781][]) +- make exports synchronous again ([#7877][]) +- feat(schema): do schema versioning and make backup non-blocking for i… ([#7856][]) ([#7873][]) [#7701]: https://github.com/hypermodeinc/dgraph/issues/7701 [#7737]: https://github.com/hypermodeinc/dgraph/issues/7737 @@ -1279,7 +1541,6 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#7802]: https://github.com/hypermodeinc/dgraph/issues/7802 [#7832]: https://github.com/hypermodeinc/dgraph/issues/7832 [#7834]: https://github.com/hypermodeinc/dgraph/issues/7834 -[#7796]: https://github.com/hypermodeinc/dgraph/issues/7796 [#7781]: https://github.com/hypermodeinc/dgraph/issues/7781 [#7713]: https://github.com/hypermodeinc/dgraph/issues/7713 [#7797]: https://github.com/hypermodeinc/dgraph/issues/7797 @@ -1303,52 +1564,62 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#7900]: https://github.com/hypermodeinc/dgraph/issues/7900 [#7904]: https://github.com/hypermodeinc/dgraph/issues/7904 - ## [21.03.0] - 2021-04-07 + [21.03.0]: https://github.com/hypermodeinc/dgraph/compare/v20.11.0...v21.03.0 -### Changed +- **Changed** - [BREAKING] Feat(flags): expand badger to accept all valid options ([#7677][]) - [BREAKING] Feat(Dgraph): Read-Only replicas ([#7272][]) -- [BREAKING] Consolidate multiple flags into a few SuPerflags ([#7436][]) ([#7337][]) ([#7560][]) ([#7652][]) ([#7675][]) +- [BREAKING] Consolidate multiple flags into a few SuPerflags ([#7436][]) ([#7337][]) ([#7560][]) + ([#7652][]) ([#7675][]) - [BREAKING] Feat(zero): Make zero lease out namespace IDs ([#7341][]) - [BREAKING] Fix(commit): make txn context more robust ([#7659][]) - [BREAKING] Fix(Query): Return error for illegal math operations. ([#7631][]) - [BREAKING] Rename Badger metrics. ([#7507][]) - [BREAKING] Fix(Backups): new badger Superflag, NumGoroutines option solves OOM crashes ([#7387][]) - [BREAKING] Remove restore tracker as its not necessary ([#7148][]) -- [BREAKING] Chore(GraphQL): Remove `dgraph.graphql.p_sha256hash` predicate and merge it into `dgraph.graphql.p_query` ([#7451][]) -- [BREAKING] Introducing Multi-Tenancy in dgraph ([#7293][]) ([#7400][]) ([#7397][]) ([#7399][]) ([#7377][]) ([#7414][]) ([#7418][]) +- [BREAKING] Chore(GraphQL): Remove `dgraph.graphql.p_sha256hash` predicate and merge it into + `dgraph.graphql.p_query` ([#7451][]) +- [BREAKING] Introducing Multi-Tenancy in dgraph ([#7293][]) ([#7400][]) ([#7397][]) ([#7399][]) + ([#7377][]) ([#7414][]) ([#7418][]) -### Added +**Added** - GraphQL - - Feat(GraphQL): Zero HTTP endpoints are now available at GraphQL admin (GraphQL-1118) ([#6649][]) ([#7670][]) + + - Feat(GraphQL): Zero HTTP endpoints are now available at GraphQL admin (GraphQL-1118) ([#6649][]) + ([#7670][]) - Feat(GraphQL): Webhooks on add/update/delete mutations (GraphQL-1045) ([#7494][]) ([#7616][]) - Feat(GraphQL): Allow Multiple JWKUrls for auth. ([#7528][]) ([#7581][]) - Feat(GraphQL): allow string --> Int64 hardcoded coercing ([#7584][]) - - Feat(Apollo): Add support for `@provides` and `@requires` directive. ([#7503][]) - - Feat(GraphQL): Handle upsert with multiple XIDs in case one of the XIDs does not exist ([#7472][]) + - Feat(Apollo): Add support for `@provides` and `@requires` directive. ([#7503][]) + - Feat(GraphQL): Handle upsert with multiple XIDs in case one of the XIDs does not exist + ([#7472][]) - Feat(GraphQL): Delete redundant reference to inverse object ([#7469][]) - Feat(GraphQL): upgarde GraphQL-transport-ws module ([#7441][]) - Feat(GraphQL): This PR allow multiple `@id` fields in a type. ([#7235][]) - Feat(GraphQL): Add support for GraphQL Upsert Mutations ([#7433][]) - - Feat(GraphQL): This PR adds subscriptions to custom DQL. ([#7385][]) - - Feat(GraphQL): Make XID node referencing invariant of order in which XIDs are referenced in Mutation Rewriting ([#7448][]) - - Feat(GraphQL): Dgraph.Authorization should with irrespective of number of spaces after # ([#7410][]) - - Feat(GraphQL): adding auth token support for regexp, in and arrays ([#7039][]) + - Feat(GraphQL): This PR adds subscriptions to custom DQL. ([#7385][]) + - Feat(GraphQL): Make XID node referencing invariant of order in which XIDs are referenced in + Mutation Rewriting ([#7448][]) + - Feat(GraphQL): Dgraph.Authorization should with irrespective of number of spaces after # + ([#7410][]) + - Feat(GraphQL): adding auth token support for regexp, in and arrays ([#7039][]) - Feat(GraphQL): Extend Support of IN filter to all the scalar data types ([#7340][]) - Feat(GraphQL): Add `@include` and `@skip` to the Directives ([#7314][]) - Feat(GraphQL): add support for has filter with list of arguments. ([#7406][]) - Feat(GraphQL): Add support for has filter on list of fields. ([#7363][]) - Feat(GraphQL): Allow standard claims into auth variables ([#7381][]) - - Perf(GraphQL): Generate GraphQL query response by optimized JSON encoding (GraphQL-730) ([#7371][]) + - Perf(GraphQL): Generate GraphQL query response by optimized JSON encoding (GraphQL-730) + ([#7371][]) - Feat(GraphQL): Extend Support For Apollo Federation ([#7275][]) - Feat(GraphQL): Support using custom DQL with `@groupby` ([#7476][]) - Feat(GraphQL): Add support for passing OAuth Bearer token as authorization JWT ([#7490][]) - Core Dgraph + - Feat(query): Add mechanism to have a limit on number of pending queries ([#7603][]) - Perf(bulk): Reuse allocator ([#7360][]) - Perf(compression): Use gzip with BestSpeed in export and backup ([#7643][]) ([#7683][]) @@ -1374,8 +1645,10 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Perf(dgraph) - Use badger sinceTs in backups ([#7392][]) - Perf(backup): Reorganize the output of lsbackup command ([#7354][]) -### Fixed +**Fixed** + - GraphQL + - Fix(GraphQL): Fix Execution Trace for Add and Update Mutations ([#7656][]) - Fix(GraphQL): Add error handling for unrecognized args to generate directive. ([#7612][]) - Fix(GraphQL): Fix panic when no schema exists for a new namespace ([#7630][]) @@ -1390,28 +1663,37 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Fix(GraphQL): Fix custom(dql: ...) with `__typename` (GraphQL-1098) ([#7569][]) - Fix(GraphQL): Change variable name generation for interface auth rules ([#7559][]) - Fix(GraphQL): Apollo federation now works with lambda (GraphQL-1084) ([#7558][]) - - Fix(GraphQL): Fix empty remove in update mutation patch, that remove all the data for nodes in filter. ([#7563][]) - - Fix(GraphQL): Fix order of entities query result ([#7542][]) + - Fix(GraphQL): Fix empty remove in update mutation patch, that remove all the data for nodes in + filter. ([#7563][]) + - Fix(GraphQL): Fix order of entities query result ([#7542][]) - Fix(GraphQL): Change variable name generation from `Type` to `Type_` ([#7556][]) - Fix(GraphQL): Fix duplicate xid error for multiple xid fields. ([#7546][]) - Fix(GraphQL): Fix query rewriting for multiple order on nested field. ([#7523][]) - - Fix(GraphQL) Fix empty `type Query` with single extended type definition in the schema. ([#7517][]) + - Fix(GraphQL) Fix empty `type Query` with single extended type definition in the schema. + ([#7517][]) - Fix(GraphQL): Added support for parameterized cascade with variables. ([#7477][]) - Fix(GraphQL): Fix fragment expansion in auth queries (GraphQL-1030) ([#7467][]) - Fix(GraphQL): Refactor Mutation Rewriter for Add and Update Mutations ([#7409][]) - - Fix(GraphQL): Fix `@auth` rules evaluation in case of null variables in custom claims. ([#7380][]) + - Fix(GraphQL): Fix `@auth` rules evaluation in case of null variables in custom claims. + ([#7380][]) - Fix(GraphQL): Fix interface query with auth rules. ([#7401][]) - - Fix(GraphQL): Added error for case when multiple filter functions are used in filter. ([#7368][]) + - Fix(GraphQL): Added error for case when multiple filter functions are used in filter. + ([#7368][]) - Fix(subscriptions): Fix subscription to use the kv with the max version ([#7349][]) - - Fix(GraphQL):This PR Fix a panic when we pass a single ID as a integer and expected type is `[ID]`.We now coerce that to type array of string. ([#7325][]) - - Fix(GraphQL): This PR Fix multi cors and multi schema nodes issue by selecting one of the latest added nodes, and add dgraph type to cors. ([#7270][]) + - Fix(GraphQL):This PR Fix a panic when we pass a single ID as a integer and expected type is + `[ID]`.We now coerce that to type array of string. ([#7325][]) + - Fix(GraphQL): This PR Fix multi cors and multi schema nodes issue by selecting one of the latest + added nodes, and add dgraph type to cors. ([#7270][]) - Fix(GraphQL): This PR allow to use `__typename` in mutation. ([#7285][]) - - Fix(GraphQL): Fix auth-token propagation for HTTP endpoints resolved through GraphQL (GraphQL-946) ([#7245][]) - - Fix(GraphQL): This PR addd input coercion from single object to list and Fix panic when we pass single ID in filter as a string. ([#7133][]) + - Fix(GraphQL): Fix auth-token propagation for HTTP endpoints resolved through GraphQL + (GraphQL-946) ([#7245][]) + - Fix(GraphQL): This PR addd input coercion from single object to list and Fix panic when we pass + single ID in filter as a string. ([#7133][]) - Fix(GraphQL): adding support for `@id` with type other than strings ([#7019][]) - Fix(GraphQL): Fix panic caused by incorrect input coercion of scalar to list ([#7405][]) - Core Dgraph + - Fix(flag): Fix bulk loader flag and remove flag parsing from critical path ([#7679][]) - Fix(query): Fix pagination with match functions ([#7668][]) - Fix(postingList): Acquire lock before reading the cached posting list ([#7632][]) @@ -1459,7 +1741,8 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Fix(export-backup): Fix memory leak in backup export ([#7452][]) - Fix(ACL): use acl for export, add GoG admin resolvers ([#7420][]) - Fix(restore): reset acl accounts once restore is done if necessary ([#7202][]) - - Fix(restore): multiple restore requests should be rejected and proposals should not be submitted ([#7118][]) + - Fix(restore): multiple restore requests should be rejected and proposals should not be submitted + ([#7118][]) [#7677]: https://github.com/hypermodeinc/dgraph/issues/7677 [#7272]: https://github.com/hypermodeinc/dgraph/issues/7272 @@ -1474,7 +1757,6 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#7507]: https://github.com/hypermodeinc/dgraph/issues/7507 [#7387]: https://github.com/hypermodeinc/dgraph/issues/7387 [#7148]: https://github.com/hypermodeinc/dgraph/issues/7148 -[#7143]: https://github.com/hypermodeinc/dgraph/issues/7143 [#7451]: https://github.com/hypermodeinc/dgraph/issues/7451 [#6649]: https://github.com/hypermodeinc/dgraph/issues/6649 [#7670]: https://github.com/hypermodeinc/dgraph/issues/7670 @@ -1612,9 +1894,10 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#7118]: https://github.com/hypermodeinc/dgraph/issues/7118 ## [20.07.1] - 2020-09-17 + [20.07.1]: https://github.com/hypermodeinc/dgraph/compare/v20.07.0...v20.07.1 -### Changed +- **Changed** - GraphQL - Remove github issues link from the error messages. ([#6183][]) @@ -1622,7 +1905,7 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Add retry for schema update ([#6098][]) - Queue keys for rollup during mutation. ([#6151][]) -### Added +**Added** - GraphQL - Adds auth for subscriptions. ([#6165][]) @@ -1630,7 +1913,7 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Add flags to set table and vlog loading mode for zero. ([#6342][]) - Add flag to set up compression in zero. ([#6355][]) -### Fixed +**Fixed** - GraphQL - Multiple queries in a single request should not share the same variables. ([#6158][]) @@ -1655,7 +1938,7 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Sort manifests by BackupNum in file handler. ([#6279][]) - Fixes queries which use variable at the top level. ([#6290][]) - Return error on closed DB. ([#6320][]) -- Optimize splits by doing binary search. Clear the pack from the main list. ([#6332][]) +- Optimize splits by doing binary search. Clear the pack from the main list. ([#6332][]) - Proto fix needed for PR [#6331][]. ([#6346][]) - Sentry nil pointer check. ([#6374][]) - Don't store start_ts in postings. ([#6213][]) @@ -1700,8 +1983,6 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#6180]: https://github.com/hypermodeinc/dgraph/issues/6180 [#6183]: https://github.com/hypermodeinc/dgraph/issues/6183 [#6179]: https://github.com/hypermodeinc/dgraph/issues/6179 -[#6009]: https://github.com/hypermodeinc/dgraph/issues/6009 -[#6095]: https://github.com/hypermodeinc/dgraph/issues/6095 [#6098]: https://github.com/hypermodeinc/dgraph/issues/6098 [#6151]: https://github.com/hypermodeinc/dgraph/issues/6151 [#6165]: https://github.com/hypermodeinc/dgraph/issues/6165 @@ -1717,20 +1998,21 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#6213]: https://github.com/hypermodeinc/dgraph/issues/6213 ## [20.03.5] - 2020-09-17 + [20.03.5]: https://github.com/hypermodeinc/dgraph/compare/v20.03.4...v20.03.5 -### Changed +- **Changed** - Add retry for schema update. ([#6097][]) - Queue keys for rollup during mutation. ([#6150][]) -### Added +**Added** - Add --cache_mb and --cache_percentage flags. ([#6287][]) - Add flag to set up compression in zero. ([#6356][]) - Add flags to set table and vlog loading mode for zero. ([#6343][]) -### Fixed +**Fixed** - GraphQL - Prevent empty values in fields having `id` directive. ([#6197][]) @@ -1740,19 +2022,19 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Perform rollups more aggresively. ([#6147][]) - Don't allow idx flag to be set to 0 on dgraph zero. ([#6156][]) - Stop forcing RAM mode for the write-ahead log. ([#6260][]) -- Fix panicwrap parent check. ([#6300][]) +- Fix panicwrap parent check. ([#6300][]) - Sort manifests by backup number. ([#6280][]) - Don't store start_ts in postings. ([#6214][]) - Update reverse index when updating single UID predicates. ([#6006][]) -- Return error on closed DB. ([#6321][]) -- Optimize splits by doing binary search. Clear the pack from the main list. ([#6333][]) +- Return error on closed DB. ([#6321][]) +- Optimize splits by doing binary search. Clear the pack from the main list. ([#6333][]) - Sentry nil pointer check. ([#6375][]) - Use z.Closer instead of y.Closer. ([#6398][]) - Make Alpha Shutdown Again. ([#6403][]) - Force exit if CTRL-C is caught before initialization. ([#6409][]) - Batch list in bulk loader to avoid panic. ([#6445][]) - Enterprise features - - Make backups cancel other tasks. ([#6244][]) + - Make backups cancel other tasks. ([#6244][]) - Add a lock to backups to process one request at a time. ([#6340][]) [#6409]: https://github.com/hypermodeinc/dgraph/issues/6409 @@ -1773,9 +2055,7 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#6375]: https://github.com/hypermodeinc/dgraph/issues/6375 [#6287]: https://github.com/hypermodeinc/dgraph/issues/6287 [#6356]: https://github.com/hypermodeinc/dgraph/issues/6356 -[#5988]: https://github.com/hypermodeinc/dgraph/issues/5988 [#6097]: https://github.com/hypermodeinc/dgraph/issues/6097 -[#6094]: https://github.com/hypermodeinc/dgraph/issues/6094 [#6150]: https://github.com/hypermodeinc/dgraph/issues/6150 [#6125]: https://github.com/hypermodeinc/dgraph/issues/6125 [#6138]: https://github.com/hypermodeinc/dgraph/issues/6138 @@ -1784,21 +2064,22 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#6147]: https://github.com/hypermodeinc/dgraph/issues/6147 ## [1.2.7] - 2020-09-21 + [1.2.7]: https://github.com/hypermodeinc/dgraph/compare/v1.2.6...v1.2.7 -### Added +- **Added** - Add --cache_mb and --cache_percentage flags. ([#6288][]) - Add flag to set up compression in zero. ([#6357][]) - Add flags to set table and vlog loading mode for zero. ([#6344][]) -### Fixed +- **Fixed** - Don't allow idx flag to be set to 0 on dgraph zero. ([#6193][]) - Stop forcing RAM mode for the write-ahead log. ([#6261][]) - Return error on closed DB. ([#6319][]) - Don't store start_ts in postings. ([#6212][]) -- Optimize splits by doing binary search. Clear the pack from the main list. ([#6334][]) +- Optimize splits by doing binary search. Clear the pack from the main list. ([#6334][]) - Add a lock to backups to process one request at a time. ([#6341][]) - Use z.Closer instead of y.Closer' ([#6396][]) - Force exit if CTRL-C is caught before initialization. ([#6408][]) @@ -1820,13 +2101,13 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#6288]: https://github.com/hypermodeinc/dgraph/issues/6288 [#6357]: https://github.com/hypermodeinc/dgraph/issues/6357 [#6344]: https://github.com/hypermodeinc/dgraph/issues/6344 -[#5987]: https://github.com/hypermodeinc/dgraph/issues/5987 [#6193]: https://github.com/hypermodeinc/dgraph/issues/6193 ## [20.07.0] - 2020-07-28 + [20.07.0]: https://github.com/hypermodeinc/dgraph/compare/v20.03.4...v20.07.0 -### Changed +- **Changed** - GraphQL - Make updateGQLSchema always return the new schema. ([#5540][]) @@ -1861,7 +2142,7 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - **Breaking changes** - [BREAKING] GraphQL: Add camelCase for add/update mutation. Fixes [#5380][]. ([#5547][]) -### Added +**Added** - GraphQL - Add Graphql-TouchedUids header in HTTP response. ([#5572][]) @@ -1885,7 +2166,8 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Add support for xidmap in bulkloader. Fixes [#4917][]. ([#5090][]) - Add GraphQL admin endpoint to list backups. ([#5307][]) - Enterprise features - - GraphQL schema get/update, Dgraph schema query/alter and /login are now admin operations. ([#5833][]) + - GraphQL schema get/update, Dgraph schema query/alter and /login are now admin operations. + ([#5833][]) - Backup can take S3 credentials from IAM. ([#5387][]) - Online restore. ([#5095][]) - Retry restore proposals. ([#5765][]) @@ -1893,7 +2175,7 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - **Breaking changes** - [BREAKING] Vault Integration. ([#5402][]) -### Fixed +**Fixed** - GraphQL - Validate JWT Claims and test JWT expiry. ([#6050][]) @@ -1901,7 +2183,8 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Nested auth queries no longer search through all possible records. ([#5950][]) - Apply auth rules on type having @dgraph directive. ([#5863][]) - Custom Claim will be parsed as JSON if it is encoded as a string. ([#5862][]) - - Dgraph directive with reverse edge should work smoothly with interfaces. Fixed [#5744][]. ([#5982][]) + - Dgraph directive with reverse edge should work smoothly with interfaces. Fixed [#5744][]. + ([#5982][]) - Fix case where Dgraph type was not generated for GraphQL interface. Fixes [#5311][]. ([#5828][]) - Fix panic error when there is no @withSubscription directive on any type. ([#5921][]) - Fix OOM issue in graphql mutation rewriting. ([#5854][]) @@ -1909,11 +2192,13 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Maintain Master's backward compatibility for `Dgraph.Authorization` in schema. ([#6014][]) - Remote schema introspection for single remote endpoint. ([#5824][]) - Requesting only \_\-typename now returns results. ([#5823][]) - - Typename for types should be filled in query for schema introspection queries. Fixes [#5792][]. ([#5891][]) + - Typename for types should be filled in query for schema introspection queries. Fixes [#5792][]. + ([#5891][]) - Update GraphQL schema only on Group-1 leader. ([#5829][]) - Add more validations for coercion of object/scalar and vice versa. ([#5534][]) - Apply type filter for get query at root level. ([#5497][]) - - Fix mutation on predicate with special characters having dgraph directive. Fixes [#5296][]. ([#5526][]) + - Fix mutation on predicate with special characters having dgraph directive. Fixes [#5296][]. + ([#5526][]) - Return better error message if a type only contains ID field. ([#5531][]) - Coerce value for scalar types correctly. ([#5487][]) - Minor delete mutation msg fix. ([#5316][]) @@ -1940,7 +2225,7 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Replace TxnWriter with WriteBatch. ([#5007][]) - Add a check to throw an error is a nil pointer is passed to unmarshalOrCopy. ([#5334][]) - Remove noisy logs in tablet move. ([#5333][]) -- Support bulk loader use-case to import unencrypted export and encrypt the result. ([#5209][]) +- Support bulk loader use-case to import unencrypted export and encrypt the result. ([#5209][]) - Handle Dgraph shutdown gracefully. Fixes [#3873][]. ([#5137][], [#5138][]) - If we don't have any schema updates, avoid running the indexing sequence. ([#5126][]) - Pass read timestamp to getNew. ([#5085][]) @@ -1950,15 +2235,17 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Fix alpha start in ludicrous mode. Fixes [#5601][]. ([#5912][]) - Handle schema updates correctly in ludicrous mode. ([#5970][]) - Fix Panic because of nil map in groups.go. ([#6008][]) -- update reverse index when updating single UID predicates. Fixes [#5732][]. ([#6005][]), ([#6015][]) +- update reverse index when updating single UID predicates. Fixes [#5732][]. ([#6005][]), + ([#6015][]) - Fix expand(\_all\_) queries in ACL. Fixes [#5687][]. ([#5993][]) - Fix val queries when ACL is enabled. Fixes [#5687][]. ([#5995][]) - Return error if server is not ready. ([#6020][]) - Reduce memory consumption of the map. ([#5957][]) - Cancel the context when opening connection to leader for streaming snapshot. ([#6045][]) - **Breaking changes** - - [BREAKING] Namespace dgraph internal types/predicates with `dgraph.` Fixes [#4878][]. ([#5185][]) - - [BREAKING] Remove shorthand for store_xids in bulk loader. ([#5148][]) + - [BREAKING] Namespace dgraph internal types/predicates with `dgraph.` Fixes [#4878][]. + ([#5185][]) + - [BREAKING] Remove shorthand for store_xids in bulk loader. ([#5148][]) - [BREAKING] Introduce new facets format. Fixes [#4798][], [#4581][], [#4907][]. ([#5424][]) - Enterprise: - Backup: Change groupId from int to uint32. ([#5605][]) @@ -1994,7 +2281,6 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#5162]: https://github.com/hypermodeinc/dgraph/issues/5162 [#5457]: https://github.com/hypermodeinc/dgraph/issues/5457 [#5004]: https://github.com/hypermodeinc/dgraph/issues/5004 -[#5134]: https://github.com/hypermodeinc/dgraph/issues/5134 [#5157]: https://github.com/hypermodeinc/dgraph/issues/5157 [#5197]: https://github.com/hypermodeinc/dgraph/issues/5197 [#5387]: https://github.com/hypermodeinc/dgraph/issues/5387 @@ -2015,7 +2301,6 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#5292]: https://github.com/hypermodeinc/dgraph/issues/5292 [#5234]: https://github.com/hypermodeinc/dgraph/issues/5234 [#5293]: https://github.com/hypermodeinc/dgraph/issues/5293 -[#5234]: https://github.com/hypermodeinc/dgraph/issues/5234 [#5308]: https://github.com/hypermodeinc/dgraph/issues/5308 [#4963]: https://github.com/hypermodeinc/dgraph/issues/4963 [#5380]: https://github.com/hypermodeinc/dgraph/issues/5380 @@ -2056,7 +2341,6 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#5209]: https://github.com/hypermodeinc/dgraph/issues/5209 [#3873]: https://github.com/hypermodeinc/dgraph/issues/3873 [#5138]: https://github.com/hypermodeinc/dgraph/issues/5138 -[#3873]: https://github.com/hypermodeinc/dgraph/issues/3873 [#5137]: https://github.com/hypermodeinc/dgraph/issues/5137 [#5126]: https://github.com/hypermodeinc/dgraph/issues/5126 [#5085]: https://github.com/hypermodeinc/dgraph/issues/5085 @@ -2117,24 +2401,26 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#5993]: https://github.com/hypermodeinc/dgraph/issues/5993 [#5687]: https://github.com/hypermodeinc/dgraph/issues/5687 [#5995]: https://github.com/hypermodeinc/dgraph/issues/5995 -[#5687]: https://github.com/hypermodeinc/dgraph/issues/5687 [#6020]: https://github.com/hypermodeinc/dgraph/issues/6020 [#5950]: https://github.com/hypermodeinc/dgraph/issues/5950 -[#5809]: https://github.com/hypermodeinc/dgraph/issues/5809 [#6034]: https://github.com/hypermodeinc/dgraph/issues/6034 [#6043]: https://github.com/hypermodeinc/dgraph/issues/6043 ## [20.03.4] - 2020-07-23 + [20.03.4]: https://github.com/hypermodeinc/dgraph/compare/v20.03.3...v20.03.4 -### Changed +**Changed** + - Update Badger 07/13/2020. ([#5941][], [#5616][]) -### Added +**Added** + - Sentry opt out banner. ([#5729][]) - Tag sentry events with additional version details. ([#5728][]) -### Fixed +**Fixed** + - GraphQL - Minor delete mutation msg fix. ([#5564][]) - Make updateGQLSchema always return the new schema. ([#5582][]) @@ -2153,7 +2439,8 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Send CID for sentry events. ([#5633][]) - Use rampMeter for Executor. ([#5503][]) - Fix snapshot calculation in ludicrous mode. ([#5636][]) -- Update badger: Avoid panic in fillTables(). Fix assert in background compression and encryption. ([#5680][]) +- Update badger: Avoid panic in fillTables(). Fix assert in background compression and encryption. + ([#5680][]) - Avoid panic in handleValuePostings. ([#5678][]) - Fix facets response with normalize. Fixes [#5241][]. ([#5691][]) - Badger iterator key copy in count index query. ([#5916][]) @@ -2175,7 +2462,6 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#5907]: https://github.com/hypermodeinc/dgraph/issues/5907 [#5860]: https://github.com/hypermodeinc/dgraph/issues/5860 [#5971]: https://github.com/hypermodeinc/dgraph/issues/5971 -[#5311]: https://github.com/hypermodeinc/dgraph/issues/5311 [#5844]: https://github.com/hypermodeinc/dgraph/issues/5844 [#5857]: https://github.com/hypermodeinc/dgraph/issues/5857 [#5941]: https://github.com/hypermodeinc/dgraph/issues/5941 @@ -2189,7 +2475,6 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#5557]: https://github.com/hypermodeinc/dgraph/issues/5557 [#5555]: https://github.com/hypermodeinc/dgraph/issues/5555 [#5584]: https://github.com/hypermodeinc/dgraph/issues/5584 -[#3873]: https://github.com/hypermodeinc/dgraph/issues/3873 [#5597]: https://github.com/hypermodeinc/dgraph/issues/5597 [#5548]: https://github.com/hypermodeinc/dgraph/issues/5548 [#5594]: https://github.com/hypermodeinc/dgraph/issues/5594 @@ -2197,20 +2482,19 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#4536]: https://github.com/hypermodeinc/dgraph/issues/4536 [#5604]: https://github.com/hypermodeinc/dgraph/issues/5604 [#5633]: https://github.com/hypermodeinc/dgraph/issues/5633 -[#5503]: https://github.com/hypermodeinc/dgraph/issues/5503 [#5636]: https://github.com/hypermodeinc/dgraph/issues/5636 [#5680]: https://github.com/hypermodeinc/dgraph/issues/5680 [#5614]: https://github.com/hypermodeinc/dgraph/issues/5614 -[#5579]: https://github.com/hypermodeinc/dgraph/issues/5579 [#5678]: https://github.com/hypermodeinc/dgraph/issues/5678 [#5969]: https://github.com/hypermodeinc/dgraph/issues/5969 [#6007]: https://github.com/hypermodeinc/dgraph/issues/6007 [#6021]: https://github.com/hypermodeinc/dgraph/issues/6021 ## [1.2.6] - 2020-07-31 + [1.2.6]: https://github.com/hypermodeinc/dgraph/compare/v1.2.5...v1.2.6 -### Changed +**Changed** - Update Badger. ([#5940][], [#5990][]) - Fix assert in background compression and encryption. (dgraph-io/badger#1366) @@ -2228,14 +2512,16 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Add a contribution guide (dgraph-io/badger#1379) - Add assert to check integer overflow for table size (dgraph-io/badger#1402) - Return error if the vlog writes exceeds more that 4GB. (dgraph-io/badger#1400) - - Revert "add assert to check integer overflow for table size (dgraph-io/badger#1402)" (dgraph-io/badger#1406) + - Revert "add assert to check integer overflow for table size (dgraph-io/badger#1402)" + (dgraph-io/badger#1406) - Revert "fix: Fix race condition in block.incRef (dgraph-io/badger#1337)" (dgraph-io/badger#1407) - Revert "Buffer pool for decompression (dgraph-io/badger#1308)" (dgraph-io/badger#1408) - - Revert "Compress/Encrypt Blocks in the background (dgraph-io/badger#1227)" (dgraph-io/badger#1409) + - Revert "Compress/Encrypt Blocks in the background (dgraph-io/badger#1227)" + (dgraph-io/badger#1409) - Add missing changelog for v2.0.3 (dgraph-io/badger#1410) - Changelog for v20.07.0 (dgraph-io/badger#1411) -### Fixed +**Fixed** - Alpha: Enable bloom filter caching. ([#5554][]) - K shortest paths queries fix. ([#5596][]) @@ -2243,7 +2529,8 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Change error message in case of successful license application. ([#5593][]) - Remove noisy logs in tablet move. ([#5592][]) - Avoid assigning duplicate RAFT IDs to new nodes. Fixes [#5436][]. ([#5603][]) -- Update badger: Set KeepL0InMemory to false (badger default), and Set DetectConflicts to false. ([#5615][]) +- Update badger: Set KeepL0InMemory to false (badger default), and Set DetectConflicts to false. + ([#5615][]) - Use /tmp dir to store temporary index. Fixes [#4600][]. ([#5730][]) - Split posting lists recursively. ([#4867][]) - Set version when rollup is called with no splits. ([#4945][]) @@ -2258,7 +2545,6 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#4600]: https://github.com/hypermodeinc/dgraph/issues/4600 [#4682]: https://github.com/hypermodeinc/dgraph/issues/4682 [#4867]: https://github.com/hypermodeinc/dgraph/issues/4867 -[#5579]: https://github.com/hypermodeinc/dgraph/issues/5579 [#4945]: https://github.com/hypermodeinc/dgraph/issues/4945 [#5908]: https://github.com/hypermodeinc/dgraph/issues/5908 [#5749]: https://github.com/hypermodeinc/dgraph/issues/5749 @@ -2268,7 +2554,6 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#5595]: https://github.com/hypermodeinc/dgraph/issues/5595 [#5593]: https://github.com/hypermodeinc/dgraph/issues/5593 [#5592]: https://github.com/hypermodeinc/dgraph/issues/5592 -[#5436]: https://github.com/hypermodeinc/dgraph/issues/5436 [#5603]: https://github.com/hypermodeinc/dgraph/issues/5603 [#5615]: https://github.com/hypermodeinc/dgraph/issues/5615 [#5613]: https://github.com/hypermodeinc/dgraph/issues/5613 @@ -2276,20 +2561,24 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#5990]: https://github.com/hypermodeinc/dgraph/issues/5613 ## [20.03.3] - 2020-06-02 + [20.03.3]: https://github.com/hypermodeinc/dgraph/compare/v20.03.1...v20.03.3 -### Changed +**Changed** -- Sentry Improvements: Segregate dev and prod events into their own Sentry projects. Remove Panic back-traces, Set the type of exception to the panic message. ([#5305][]) +- Sentry Improvements: Segregate dev and prod events into their own Sentry projects. Remove Panic + back-traces, Set the type of exception to the panic message. ([#5305][]) - /health endpoint now shows EE Features available and GraphQL changes. ([#5304][]) -- Return error response if encoded response is > 4GB in size. Replace idMap with idSlice in encoder. ([#5359][]) +- Return error response if encoded response is > 4GB in size. Replace idMap with idSlice in encoder. + ([#5359][]) - Initialize sentry at the beginning of alpha.Run(). ([#5429][]) -### Added +**Added** + - Adds ludicrous mode to live loader. ([#5419][]) - GraphQL: adds transactions to graphql mutations ([#5485][]) -### Fixed +**Fixed** - Export: Ignore deleted predicates from schema. Fixes [#5053][]. ([#5326][]) - GraphQL: ensure upserts don't have accidental edge removal. Fixes [#5355][]. ([#5356][]) @@ -2313,13 +2602,15 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - GraphQL: Fix non-unique schema issue. ([#5481][]) - Enterprise features - Print error when applying enterprise license fails. ([#5342][]) - - Apply the option enterprise_license only after the node's Raft is initialized and it is the leader. Don't apply the trial license if a license already exists. Disallow the enterprise_license option for OSS build and bail out. Apply the option even if there is a license from a previous life of the Zero. ([#5384][]) + - Apply the option enterprise_license only after the node's Raft is initialized and it is the + leader. Don't apply the trial license if a license already exists. Disallow the + enterprise_license option for OSS build and bail out. Apply the option even if there is a + license from a previous life of the Zero. ([#5384][]) ### Security - Use SensitiveByteSlice type for hmac secret. ([#5450][]) - [#5444]: https://github.com/hypermodeinc/dgraph/issues/5444 [#5305]: https://github.com/hypermodeinc/dgraph/issues/5305 [#5304]: https://github.com/hypermodeinc/dgraph/issues/5304 @@ -2347,23 +2638,24 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti [#5488]: https://github.com/hypermodeinc/dgraph/issues/5488 [#5483]: https://github.com/hypermodeinc/dgraph/issues/5483 [#5481]: https://github.com/hypermodeinc/dgraph/issues/5481 -[#5481]: https://github.com/hypermodeinc/dgraph/issues/5481 +[#5521]: https://github.com/hypermodeinc/dgraph/issues/5521 [#5235]: https://github.com/hypermodeinc/dgraph/issues/5235 [#5419]: https://github.com/hypermodeinc/dgraph/issues/5419 [#5485]: https://github.com/hypermodeinc/dgraph/issues/5485 [#5479]: https://github.com/hypermodeinc/dgraph/issues/5479 [#5361]: https://github.com/hypermodeinc/dgraph/issues/5361 -[#5537]: https://github.com/hypermodeinc/dgraph/issues/5537 ## [1.2.5] - 2020-06-02 + [1.2.5]: https://github.com/hypermodeinc/dgraph/compare/v1.2.3...v1.2.5 -### Changed +**Changed** -- Return error response if encoded response is > 4GB in size. Replace idMap with idSlice in encoder. ([#5359][]) +- Return error response if encoded response is > 4GB in size. Replace idMap with idSlice in encoder. + ([#5359][]) - Change the default ratio of traces from 1 to 0.01. ([#5405][]) -### Fixed +**Fixed** - Export: Ignore deleted predicates from schema. Fixes [#5053][]. ([#5327][]) - Fix segmentation fault in query.go. ([#5377][]) @@ -2379,42 +2671,29 @@ and this project will adhere to [Semantic Versioning](https://semver.org) starti - Move runVlogGC to x and use it in zero as well. ([#5468][]) - Fix inconsistent bulk loader failures. Fixes [#5361][]. ([#5537][]) -### Security +**Security** - Use SensitiveByteSlice type for hmac secret. ([#5451][]) -[#5444]: https://github.com/hypermodeinc/dgraph/issues/5444 -[#5359]: https://github.com/hypermodeinc/dgraph/issues/5359 -[#5405]: https://github.com/hypermodeinc/dgraph/issues/5405 [#5327]: https://github.com/hypermodeinc/dgraph/issues/5327 -[#5377]: https://github.com/hypermodeinc/dgraph/issues/5377 -[#5394]: https://github.com/hypermodeinc/dgraph/issues/5394 [#5396]: https://github.com/hypermodeinc/dgraph/issues/5396 -[#5053]: https://github.com/hypermodeinc/dgraph/issues/5053 -[#5368]: https://github.com/hypermodeinc/dgraph/issues/5368 [#5451]: https://github.com/hypermodeinc/dgraph/issues/5451 -[#5381]: https://github.com/hypermodeinc/dgraph/issues/5381 -[#5327]: https://github.com/hypermodeinc/dgraph/issues/5327 -[#5377]: https://github.com/hypermodeinc/dgraph/issues/5377 [#5508]: https://github.com/hypermodeinc/dgraph/issues/5508 -[#5494]: https://github.com/hypermodeinc/dgraph/issues/5494 -[#5469]: https://github.com/hypermodeinc/dgraph/issues/5469 -[#5476]: https://github.com/hypermodeinc/dgraph/issues/5476 -[#5488]: https://github.com/hypermodeinc/dgraph/issues/5488 [#5468]: https://github.com/hypermodeinc/dgraph/issues/5468 -[#5361]: https://github.com/hypermodeinc/dgraph/issues/5361 -[#5537]: https://github.com/hypermodeinc/dgraph/issues/5537 ## [20.03.2] - 2020-05-15 + This release was removed ## [1.2.4] - 2020-05-15 + This release was removed ## [20.03.1] - 2020-04-24 + [20.03.1]: https://github.com/hypermodeinc/dgraph/compare/v20.03.0...v20.03.1 -### Changed +**Changed** - Support comma separated list of zero addresses in alpha. ([#5258][]) - Optimization: Optimize snapshot creation ([#4901][]) @@ -2428,7 +2707,7 @@ This release was removed - Backup/restore: Force users to explicitly tell restore command to run without zero. ([#5206][]) - Alpha: Expose compression_level option. ([#5280][]) -### Fixed +**Fixed** - Implement json.Marshal just for strings. ([#4979][]) - Change error message in case of successful license application. Fixes [#4965][]. ([#5230][]) @@ -2447,9 +2726,10 @@ This release was removed - Shutdown executor goroutines. ([#5150][]) - Update RAFT checkpoint when doing a clean shutdown. ([#5097][]) - Enterprise features - - Backup schema keys in incremental backups. Before, the schema was only stored in the full backup. ([#5158][]) + - Backup schema keys in incremental backups. Before, the schema was only stored in the full + backup. ([#5158][]) -### Added +**Added** - Return list of ongoing tasks in /health endpoint. ([#4961][]) - Propose snapshot once indexing is complete. ([#5005][]) @@ -2461,7 +2741,9 @@ This release was removed - Support bulk loader use-case to import unencrypted export and encrypt. ([#5213][]) - Create encrypted restore directory from encrypted backups. ([#5144][]) - Add option "--encryption_key_file"/"-k" to debug tool for encryption support. ([#5146][]) - - Support for encrypted backups/restore. **Note**: Older backups without encryption will be incompatible with this Dgraph version. Solution is to force a full backup before creating further incremental backups. ([#5103][]) + - Support for encrypted backups/restore. **Note**: Older backups without encryption will be + incompatible with this Dgraph version. Solution is to force a full backup before creating + further incremental backups. ([#5103][]) - Add encryption support for export and import (via bulk, live loaders). ([#5155][]) - Add Badger expvar metrics to Prometheus metrics. Fixes [#4772][]. ([#5094][]) - Add option to apply enterprise license at zero's startup. ([#5170][]) @@ -2494,16 +2776,16 @@ This release was removed [#5158]: https://github.com/hypermodeinc/dgraph/issues/5158 [#5213]: https://github.com/hypermodeinc/dgraph/issues/5213 [#5144]: https://github.com/hypermodeinc/dgraph/issues/5144 -[#5146]: https://github.com/hypermodeinc/dgraph/issues/5146 [#5103]: https://github.com/hypermodeinc/dgraph/issues/5103 [#5155]: https://github.com/hypermodeinc/dgraph/issues/5155 [#5238]: https://github.com/hypermodeinc/dgraph/issues/5238 [#5272]: https://github.com/hypermodeinc/dgraph/issues/5272 ## [1.2.3] - 2020-04-24 + [1.2.3]: https://github.com/hypermodeinc/dgraph/compare/v1.2.2...v1.2.3 -### Changed +**Changed** - Support comma separated list of zero addresses in alpha. ([#5258][]) - Optimization: Optimize snapshot creation. ([#4901][]) @@ -2516,7 +2798,7 @@ This release was removed - Enterprise features - Backup/restore: Force users to explicitly tell restore command to run without zero. ([#5206][]) -### Fixed +**Fixed** - Check uid list is empty when filling shortest path vars. ([#5152][]) - Return error for invalid UID 0x0. Fixes [#5238][]. ([#5252][]) @@ -2526,41 +2808,30 @@ This release was removed - Fix bug, aggregate value var works with blank node in upsert. Fixes [#4712][]. ([#4767][]) - Always set BlockSize in encoder. Fixes [#5102][]. ([#5255][]) - Enterprise features - - Backup schema keys in incremental backups. Before, the schema was only stored in the full backup. ([#5158][]) + - Backup schema keys in incremental backups. Before, the schema was only stored in the full + backup. ([#5158][]) -### Added +**Added** - Add Badger expvar metrics to Prometheus metrics. Fixes [#4772][]. ([#5094][]) - Enterprise features - - Support bulk loader use-case to import unencrypted export and encrypt. ([#5213][]) + - Support bulk loader use-case to import unencrypted export and encrypt. ([#5213][]) - Create encrypted restore directory from encrypted backups. ([#5144][]) - Add option "--encryption_key_file"/"-k" to debug tool for encryption support. ([#5146][]) - - Support for encrypted backups/restore. **Note**: Older backups without encryption will be incompatible with this Dgraph version. Solution is to force a full backup before creating further incremental backups. ([#5103][]) + - Support for encrypted backups/restore. **Note**: Older backups without encryption will be + incompatible with this Dgraph version. Solution is to force a full backup before creating + further incremental backups. ([#5103][]) - Add encryption support for export and import (via bulk, live loaders). ([#5155][]) -[#5146]: https://github.com/hypermodeinc/dgraph/issues/5146 -[#5206]: https://github.com/hypermodeinc/dgraph/issues/5206 -[#5152]: https://github.com/hypermodeinc/dgraph/issues/5152 -[#5252]: https://github.com/hypermodeinc/dgraph/issues/5252 -[#5199]: https://github.com/hypermodeinc/dgraph/issues/5199 [#5163]: https://github.com/hypermodeinc/dgraph/issues/5163 -[#5158]: https://github.com/hypermodeinc/dgraph/issues/5158 -[#5213]: https://github.com/hypermodeinc/dgraph/issues/5213 -[#5144]: https://github.com/hypermodeinc/dgraph/issues/5144 -[#5146]: https://github.com/hypermodeinc/dgraph/issues/5146 -[#5103]: https://github.com/hypermodeinc/dgraph/issues/5103 -[#5155]: https://github.com/hypermodeinc/dgraph/issues/5155 -[#5238]: https://github.com/hypermodeinc/dgraph/issues/5238 [#5012]: https://github.com/hypermodeinc/dgraph/issues/5012 [#4674]: https://github.com/hypermodeinc/dgraph/issues/4674 [#4842]: https://github.com/hypermodeinc/dgraph/issues/4842 -[#5116]: https://github.com/hypermodeinc/dgraph/issues/5116 [#5258]: https://github.com/hypermodeinc/dgraph/issues/5258 [#4901]: https://github.com/hypermodeinc/dgraph/issues/4901 [#5184]: https://github.com/hypermodeinc/dgraph/issues/5184 [#5088]: https://github.com/hypermodeinc/dgraph/issues/5088 [#5273]: https://github.com/hypermodeinc/dgraph/issues/5273 -[#5216]: https://github.com/hypermodeinc/dgraph/issues/5216 [#5268]: https://github.com/hypermodeinc/dgraph/issues/5268 [#5102]: https://github.com/hypermodeinc/dgraph/issues/5102 [#5255]: https://github.com/hypermodeinc/dgraph/issues/5255 @@ -2568,10 +2839,13 @@ This release was removed [#5094]: https://github.com/hypermodeinc/dgraph/issues/5094 ## [20.03.0] - 2020-03-30 + [20.03.0]: https://github.com/hypermodeinc/dgraph/compare/v1.2.2...v20.03.0 -** Note: This release requires you to export and re-import data prior to upgrading or rolling back. The underlying data format has been changed. ** -### Changed +** Note: This release requires you to export and re-import data prior to upgrading or rolling back. +The underlying data format has been changed. ** + +**Changed** - Report GraphQL stats from alpha. ([#4607][]) - During backup, collapse split posting lists into a single list. ([#4682][]) @@ -2587,11 +2861,13 @@ This release was removed - Add support for tinyint in migrate tool. Fixes [#4674][]. ([#4842][]) - Enterprise features - **Breaking changes** - - [BREAKING] Underlying schema for ACL has changed. Use the upgrade tool to migrate to the new data format. ([#4725][]) + - [BREAKING] Underlying schema for ACL has changed. Use the upgrade tool to migrate to the new + data format. ([#4725][]) -### Added +**Added** -- Add GraphQL API for Dgraph accessible via the `/graphql` and `/admin` HTTP endpoints on Dgraph Alpha. ([#933][]) +- Add GraphQL API for Dgraph accessible via the `/graphql` and `/admin` HTTP endpoints on Dgraph + Alpha. ([#933][]) - Add support for sorting on multiple facets. Fixes [#3638][]. ([#4579][]) - Expose Badger Compression Level option in Bulk Loader. ([#4669][]) - GraphQL Admin API: Support Backup operation. ([#4706][]) @@ -2599,16 +2875,18 @@ This release was removed - GraphQL Admin API: duplicate `/health` in GraphQL `/admin` ([#4768][]) - GraphQL Admin API: Add `/admin/schema` endpoint ([#4777][]) - Perform indexing in background. ([#4819][]) -- Basic Sentry Integration - Capture manual panics with Sentry exception and runtime panics with a wrapper on panic. ([#4756][]) +- Basic Sentry Integration - Capture manual panics with Sentry exception and runtime panics with a + wrapper on panic. ([#4756][]) - Ludicrous Mode. ([#4872][]) - Enterprise features - ACL: Allow users to query data for their groups, username, and permissions. ([#4774][]) - ACL: Support ACL operations using the admin GraphQL API. ([#4760][]) - ACL: Add tool to upgrade ACLs. ([#5016][]) -### Fixed +**Fixed** -- Avoid running GC frequently. Only run for every 2GB of increase. Small optimizations in Bulk.reduce. +- Avoid running GC frequently. Only run for every 2GB of increase. Small optimizations in + Bulk.reduce. - Check response status when posting telemetry data. ([#4726][]) - Add support for $ in quoted string. Fixes [#4695][]. ([#4702][]) - Do not include empty nodes in the export output. Fixes [#3610][]. ([#4773][]) @@ -2620,13 +2898,14 @@ This release was removed - Change split keys to have a different prefix. Fixes [#4905][]. ([#4908][]) - Various optimizations for facets filter queries. ([#4923][]) - Throw errors returned by retrieveValuesAndFacets. Fixes [#4958][]. ([#4970][]) -- Add "runInBackground" option to Alter to run indexing in background. When set to `true`, then the Alter call returns immediately. When set to `false`, the call blocks until indexing is complete. This is set to `false` by default. ([#4981][]) +- Add "runInBackground" option to Alter to run indexing in background. When set to `true`, then the + Alter call returns immediately. When set to `false`, the call blocks until indexing is complete. + This is set to `false` by default. ([#4981][]) - Set correct posting list type while creating it in the live loader. Fixes [#4889][]. ([#5012][]) - **Breaking changes** - [BREAKING] Language sorting on Indexed data. Fixes [#4005][]. ([#4316][]) [#5016]: https://github.com/hypermodeinc/dgraph/issues/5016 -[#5012]: https://github.com/hypermodeinc/dgraph/issues/5012 [#4889]: https://github.com/hypermodeinc/dgraph/issues/4889 [#4958]: https://github.com/hypermodeinc/dgraph/issues/4958 [#4905]: https://github.com/hypermodeinc/dgraph/issues/4905 @@ -2644,14 +2923,11 @@ This release was removed [#4935]: https://github.com/hypermodeinc/dgraph/issues/4935 [#4972]: https://github.com/hypermodeinc/dgraph/issues/4972 [#4916]: https://github.com/hypermodeinc/dgraph/issues/4916 -[#4945]: https://github.com/hypermodeinc/dgraph/issues/4945 [#4875]: https://github.com/hypermodeinc/dgraph/issues/4875 -[#4867]: https://github.com/hypermodeinc/dgraph/issues/4867 [#4872]: https://github.com/hypermodeinc/dgraph/issues/4872 [#4756]: https://github.com/hypermodeinc/dgraph/issues/4756 [#4819]: https://github.com/hypermodeinc/dgraph/issues/4819 [#4755]: https://github.com/hypermodeinc/dgraph/issues/4755 -[#4600]: https://github.com/hypermodeinc/dgraph/issues/4600 [#4766]: https://github.com/hypermodeinc/dgraph/issues/4766 [#4468]: https://github.com/hypermodeinc/dgraph/issues/4468 [#4793]: https://github.com/hypermodeinc/dgraph/issues/4793 @@ -2664,7 +2940,6 @@ This release was removed [#933]: https://github.com/hypermodeinc/dgraph/issues/933 [#3638]: https://github.com/hypermodeinc/dgraph/issues/3638 [#4579]: https://github.com/hypermodeinc/dgraph/issues/4579 -[#4682]: https://github.com/hypermodeinc/dgraph/issues/4682 [#4725]: https://github.com/hypermodeinc/dgraph/issues/4725 [#4669]: https://github.com/hypermodeinc/dgraph/issues/4669 [#4774]: https://github.com/hypermodeinc/dgraph/issues/4774 @@ -2677,23 +2952,26 @@ This release was removed [#4316]: https://github.com/hypermodeinc/dgraph/issues/4316 ## [1.2.2] - 2020-03-19 + [1.2.2]: https://github.com/hypermodeinc/dgraph/compare/v1.2.1...v1.2.2 -### Changed +**Changed** - Wrap errors thrown in posting/list.go for easier debugging. ([#4880][]) - Print keys using hex encoding in error messages in list.go. ([#4891][]) -### Fixed +**Fixed** - Do not include empty nodes in the export output. ([#4896][]) - Fix error when lexing language list. ([#4784][]) - Properly initialize posting package in debug tool. ([#4893][]) - Handle special characters in schema and type queries. Fixes [#4933][]. ([#4937][]) -- Overwrite values for uid predicates. Fixes [#4879][]. ([#4883][]) -- Disable @* language queries when the predicate does not support langs. ([#4881][]) +- Overwrite values for uid predicates. Fixes [#4879][]. ([#4883][]) +- Disable @\* language queries when the predicate does not support langs. ([#4881][]) - Fix bug in exporting types with reverse predicates. Fixes [#4856][]. ([#4857][]) -- Do not skip over split keys. (Trying to skip over the split keys sometimes skips over keys belonging to a different split key. This is a fix just for this release as the actual fix requires changes to the data format.) ([#4951][]) +- Do not skip over split keys. (Trying to skip over the split keys sometimes skips over keys + belonging to a different split key. This is a fix just for this release as the actual fix requires + changes to the data format.) ([#4951][]) - Fix point-in-time Prometheus metrics. Fixes [#4532][]. ([#4948][]) - Split lists in the bulk loader. ([#4967][]) - Allow remote MySQL server with dgraph migrate tool. Fixes [#4707][]. ([#4860][]) @@ -2703,12 +2981,10 @@ This release was removed - Backups: Verify host when default and custom credentials are used. Fixes [#4855][]. ([#4858][]) - Backups: Split lists when restoring from backup. ([#4912][]) - [#4967]: https://github.com/hypermodeinc/dgraph/issues/4967 [#4951]: https://github.com/hypermodeinc/dgraph/issues/4951 [#4532]: https://github.com/hypermodeinc/dgraph/issues/4532 [#4948]: https://github.com/hypermodeinc/dgraph/issues/4948 -[#4893]: https://github.com/hypermodeinc/dgraph/issues/4893 [#4784]: https://github.com/hypermodeinc/dgraph/issues/4784 [#4896]: https://github.com/hypermodeinc/dgraph/issues/4896 [#4856]: https://github.com/hypermodeinc/dgraph/issues/4856 @@ -2729,21 +3005,23 @@ This release was removed [#4707]: https://github.com/hypermodeinc/dgraph/issues/4707 [#4860]: https://github.com/hypermodeinc/dgraph/issues/4860 - ## [1.2.1] - 2020-02-06 + [1.2.1]: https://github.com/hypermodeinc/dgraph/compare/v1.2.0...v1.2.1 -### Fixed +**Fixed** -- Fix bug related to posting list split, and re-enable posting list splits. Fixes [#4733][]. ([#4742][]) +- Fix bug related to posting list split, and re-enable posting list splits. Fixes [#4733][]. + ([#4742][]) [#4733]: https://github.com/hypermodeinc/dgraph/issues/4733 [#4742]: https://github.com/hypermodeinc/dgraph/issues/4742 ## [1.2.0] - 2020-01-27 + [1.2.0]: https://github.com/hypermodeinc/dgraph/compare/v1.1.1...v1.2.0 -### Changed +**Changed** - Allow overwriting values of predicates of type uid. Fixes [#4136][]. ([#4411][]) - Algorithms to handle UidPack. ([#4321][]) @@ -2757,29 +3035,34 @@ This release was removed - Change default behavior to block operations with ACLs enabled. ([#4390][]) - Remove unauthorized predicates from query instead of rejecting the query entirely. ([#4479][]) -### Added +**Added** - Add `debuginfo` subcommand to dgraph. ([#4464][]) - Support filtering on non-indexed predicate. Fixes [#4305][]. ([#4531][]) - Add support for variables in recurse. Fixes [#3301][]. ([#4385][]). -- Adds `@noconflict` schema directive to prevent conflict detection. This is an experimental feature. This is not a recommended directive, but exists to help avoid conflicts for predicates which don't have high correctness requirements. Fixes [#4079][]. ([#4454][]) +- Adds `@noconflict` schema directive to prevent conflict detection. This is an experimental + feature. This is not a recommended directive, but exists to help avoid conflicts for predicates + which don't have high correctness requirements. Fixes [#4079][]. ([#4454][]) - Implement the state HTTP endpoint on Alpha. Login is required if ACL is enabled. ([#4435][]). - Implement `/health?all` endpoint on Alpha nodes. ([#4535][]) - Add `/health` endpoint to Zero. ([#4405][]) - **Breaking changes** - - Support for fetching facets from value edge list. The query response format is backwards-incompatible. Fixes [#4081][]. ([#4267][]) + - Support for fetching facets from value edge list. The query response format is + backwards-incompatible. Fixes [#4081][]. ([#4267][]) - Enterprise features - Add guardians group with full authorization. ([#4447][]) - ### Fixed +**Fixed** -- Infer type of schema from JSON and RDF mutations. Fixes [#3788][]. ([#4328][]) -- Fix retrieval of facets with cascade. Fixes [#4310][]. ([#4530][]) -- Do not use type keys during tablet size calculation. Fixes [#4473][]. ([#4517][]) -- Fix Levenshtein distance calculation with match function. Fixes [#4494][]. ([#4545][]) +- Infer type of schema from JSON and RDF mutations. Fixes [#3788][]. ([#4328][]) +- Fix retrieval of facets with cascade. Fixes [#4310][]. ([#4530][]) +- Do not use type keys during tablet size calculation. Fixes [#4473][]. ([#4517][]) +- Fix Levenshtein distance calculation with match function. Fixes [#4494][]. ([#4545][]) - Add `` RDF type for int schema type. Fixes [#4460][]. ([#4465][]) - Allow `@filter` directive with expand queries. Fixes [#3904][]. ([#4404][]). -- A multi-part posting list should only be accessed via the main key. Accessing the posting list via one of the other keys was causing issues during rollup and adding spurious keys to the database. Now fixed. ([#4574][]) +- A multi-part posting list should only be accessed via the main key. Accessing the posting list via + one of the other keys was causing issues during rollup and adding spurious keys to the database. + Now fixed. ([#4574][]) - Enterprise features - Backup types. Fixes [#4507][]. ([#4514][]) @@ -2808,7 +3091,6 @@ This release was removed [#4390]: https://github.com/hypermodeinc/dgraph/issues/4390 [#4479]: https://github.com/hypermodeinc/dgraph/issues/4479 [#4136]: https://github.com/hypermodeinc/dgraph/issues/4136 -[#4411]: https://github.com/hypermodeinc/dgraph/issues/4411 [#4464]: https://github.com/hypermodeinc/dgraph/issues/4464 [#4531]: https://github.com/hypermodeinc/dgraph/issues/4531 [#4305]: https://github.com/hypermodeinc/dgraph/issues/4305 @@ -2817,22 +3099,23 @@ This release was removed [#4405]: https://github.com/hypermodeinc/dgraph/issues/4405 [#4267]: https://github.com/hypermodeinc/dgraph/issues/4267 [#4081]: https://github.com/hypermodeinc/dgraph/issues/4081 -[#4447]: https://github.com/hypermodeinc/dgraph/issues/4447 [#4535]: https://github.com/hypermodeinc/dgraph/issues/4535 [#4385]: https://github.com/hypermodeinc/dgraph/issues/4385 [#3301]: https://github.com/hypermodeinc/dgraph/issues/3301 [#4435]: https://github.com/hypermodeinc/dgraph/issues/4435 ## [1.1.1] - 2019-12-16 + [1.1.1]: https://github.com/hypermodeinc/dgraph/compare/v1.1.0...v1.1.1 -### Changed +**Changed** - **Breaking changes for expand() queries** - Remove `expand(_forward_)` and `expand(_reverse_)`. ([#4119][]) - Change `expand(_all_)` functionality to only include the predicates in the type. ([#4171][]) - Add support for Go Modules. ([#4146][]) -- Simplify type definitions: type definitions no longer require the type (string, int, etc.) per field name. ([#4017][]) +- Simplify type definitions: type definitions no longer require the type (string, int, etc.) per + field name. ([#4017][]) - Adding log lines to help troubleshoot snapshot and rollup. ([#3889][]) - Add `--http` flag to configure pprof endpoint for live loader. ([#3846][]) - Use snappy compression for internal gRPC communication. ([#3368][]) @@ -2852,7 +3135,7 @@ Enterprise features: - ACL: Disallow schema queries when an user has not logged in. ([#4107][]) - Block delete if predicate permission is zero. Fixes [#4265][]. ([#4349][]) -### Added +**Added** - Support `@cascade` directive at subqueries. ([#4006][]) - Support `@normalize` directive for subqueries. ([#4042][]) @@ -2869,28 +3152,30 @@ Enterprise features: - Add encryption-at-rest. ([#4351][]) -### Removed +**Removed** -- **Breaking change**: Remove `@type` directive from query language. To filter - an edge by a type, use `@filter(type(TypeName))` instead of `@type(TypeName)`. - ([#4016][]) +- **Breaking change**: Remove `@type` directive from query language. To filter an edge by a type, + use `@filter(type(TypeName))` instead of `@type(TypeName)`. ([#4016][]) Enterprise features: - Remove regexp ACL rules. ([#4360][]) -### Fixed +**Fixed** - Avoid changing order if multiple versions of the same edge is found. -- Consider reverse count index keys for conflict detection in transactions. Fixes [#3893][]. ([#3932][]) +- Consider reverse count index keys for conflict detection in transactions. Fixes [#3893][]. + ([#3932][]) - Clear the unused variable tlsCfg. ([#3937][]) - Do not require the last type declaration to have a new line. ([#3926][]) - Verify type definitions do not have duplicate fields. Fixes [#3924][]. ([#3925][]) - Fix bug in bulk loader when store_xids is true. Fixes [#3922][]. ([#3950][]) - Call cancel function only if err is not nil. Fixes [#3966][]. ([#3990][]) -- Change the mapper output directory from $TMP/shards to $TMP/map_output. Fixes [#3959][]. ([#3960][]) +- Change the mapper output directory from $TMP/shards to $TMP/map_output. Fixes [#3959][]. + ([#3960][]) - Return error if keywords used as alias in groupby. ([#3725][]) -- Fix bug where language strings are not filtered when using custom tokenizer. Fixes [#3991][]. ([#3992][]) +- Fix bug where language strings are not filtered when using custom tokenizer. Fixes [#3991][]. + ([#3992][]) - Support named queries without query variables. Fixes [#3994][]. ([#4028][]) - Correctly set up client connection in x package. ([#4036][]) - Fix data race in regular expression processing. Fixes [#4030][]. ([#4065][]) @@ -2899,7 +3184,8 @@ Enterprise features: - Ensure that clients can send OpenCensus spans over to the server. ([#4144][]) - Change lexer to allow unicode escape sequences. Fixes [#4157][].([#4175][]) - Handle the count(uid) subgraph correctly. Fixes [#4038][]. ([#4122][]) -- Don't traverse immutable layer while calling iterate if deleteBelowTs > 0. Fixes [#4182][]. ([#4204][]) +- Don't traverse immutable layer while calling iterate if deleteBelowTs > 0. Fixes [#4182][]. + ([#4204][]) - Bulk loader allocates reserved predicates in first reduce shard. Fixes [#3968][]. ([#4202][]) - Only allow one alias per predicate. ([#4236][]) - Change member removal logic to remove members only once. ([#4254][]) @@ -2915,13 +3201,15 @@ Enterprise features: - Limit UIDs per variable in upsert. Fixes [#4021][]. ([#4268][]) - Return error instead of panic when geo data is corrupted. Fixes [#3740][]. ([#4318][]) - Use txn writer to write schema postings. ([#4296][]) -- Fix connection log message in dgraph alpha from "CONNECTED" to "CONNECTING" when establishing a connection to a peer. Fixes [#4298][]. ([#4303][]) +- Fix connection log message in dgraph alpha from "CONNECTED" to "CONNECTING" when establishing a + connection to a peer. Fixes [#4298][]. ([#4303][]) - Fix segmentation fault in backup. ([#4314][]) - Close store after stoping worker. ([#4356][]) - Don't pre allocate mutation map. ([#4343][]) - Cmd: fix config file from env variable issue in subcommands. Fixes [#4311][]. ([#4344][]) - Fix segmentation fault in Alpha. Fixes [#4288][]. ([#4394][]) -- Fix handling of depth parameter for shortest path query for numpaths=1 case. Fixes [#4169][]. ([#4347][]) +- Fix handling of depth parameter for shortest path query for numpaths=1 case. Fixes [#4169][]. + ([#4347][]) - Do not return dgo.ErrAborted when client calls txn.Discard(). ([#4389][]) - Fix `has` pagination when predicate is queried with `@lang`. Fixes [#4282][]. ([#4331][]) - Make uid function work with value variables in upsert blocks. Fixes [#4424][]. ([#4425][]) @@ -3019,12 +3307,10 @@ Enterprise features: [#4351]: https://github.com/hypermodeinc/dgraph/issues/4351 [#3268]: https://github.com/hypermodeinc/dgraph/issues/3268 [#4132]: https://github.com/hypermodeinc/dgraph/issues/4132 -[#4005]: https://github.com/hypermodeinc/dgraph/issues/4005 [#4298]: https://github.com/hypermodeinc/dgraph/issues/4298 [#4021]: https://github.com/hypermodeinc/dgraph/issues/4021 [#3740]: https://github.com/hypermodeinc/dgraph/issues/3740 [#4311]: https://github.com/hypermodeinc/dgraph/issues/4311 -[#4047]: https://github.com/hypermodeinc/dgraph/issues/4047 [#4375]: https://github.com/hypermodeinc/dgraph/issues/4375 [#4394]: https://github.com/hypermodeinc/dgraph/issues/4394 [#4288]: https://github.com/hypermodeinc/dgraph/issues/4288 @@ -3043,50 +3329,53 @@ Enterprise features: [#4425]: https://github.com/hypermodeinc/dgraph/issues/4425 ## [1.1.0] - 2019-09-03 + [1.1.0]: https://github.com/hypermodeinc/dgraph/compare/v1.0.17...v1.1.0 -### Changed +**Changed** - **Breaking changes** - - **uid schema type**: The `uid` schema type now means a one-to-one relation, - **not** a one-to-many relation as in Dgraph v1.1. To specify a one-to-many - relation in Dgraph v1.0, use the `[uid]` schema type. ([#2895][], [#3173][], [#2921][]) + - **uid schema type**: The `uid` schema type now means a one-to-one relation, **not** a + one-to-many relation as in Dgraph v1.1. To specify a one-to-many relation in Dgraph v1.0, use + the `[uid]` schema type. ([#2895][], [#3173][], [#2921][]) - **\_predicate\_** is removed from the query language. - - **expand(\_all\_)** only works for nodes with attached type information via - the type system. The type system is used to determine the predicates to expand - out from a node. ([#3262][]) + - **expand(\_all\_)** only works for nodes with attached type information via the type system. The + type system is used to determine the predicates to expand out from a node. ([#3262][]) + + - **S \* \* deletion** only works for nodes with attached type information via the type system. + The type system is used to determine the predicates to delete from a node. For `S * *` + deletions, only the predicates specified by the type are deleted. - - **S \* \* deletion** only works for nodes with attached type information via - the type system. The type system is used to determine the predicates to - delete from a node. For `S * *` deletions, only the predicates specified by - the type are deleted. + - **HTTP API**: The HTTP API has been updated to replace the custom HTTP headers with standard + headers. - - **HTTP API**: The HTTP API has been updated to replace the custom HTTP headers - with standard headers. - Change `/commit` endpoint to accept a list of preds for conflict detection. ([#3020][]) - Remove custom HTTP Headers, cleanup API. ([#3365][]) - - The startTs path parameter is now a query parameter `startTs` for the - `/query`, `/mutate`, and `/commit` endpoints. - - Dgraph custom HTTP Headers `X-Dgraph-CommitNow`, - `X-Dgraph-MutationType`, and `X-Dgraph-Vars` are now ignored. + - The startTs path parameter is now a query parameter `startTs` for the `/query`, `/mutate`, + and `/commit` endpoints. + - Dgraph custom HTTP Headers `X-Dgraph-CommitNow`, `X-Dgraph-MutationType`, and + `X-Dgraph-Vars` are now ignored. - Update HTTP API Content-Type headers. ([#3550][]) ([#3532][]) - - Queries over HTTP must have the Content-Type header `application/graphql+-` or `application/json`. - - Queries over HTTP with GraphQL Variables (e.g., `query queryName($a: string) { ... }`) must use the query format via `application/json` to pass query variables. - - Mutations over HTTP must have the Content-Type header set to `application/rdf` for RDF format or `application/json` for JSON format. - - Commits over HTTP must have the `startTs` query parameter along with the JSON map of conflict keys and predicates. - - - **Datetime index**: Use UTC Hour, Day, Month, Year for datetime - comparison. This is a bug fix that may result in different query results for - existing queries involving the datetime index. ([#3251][]) - - - **Blank node name generation for JSON mutations.** For JSON mutations that - do not explicitly set the `"uid"` field, the blank name format has changed - to contain randomly generated identifiers. This fixes a bug where two JSON - objects within a single mutation are assigned the same blank node. - ([#3795][]) + - Queries over HTTP must have the Content-Type header `application/graphql+-` or + `application/json`. + - Queries over HTTP with GraphQL Variables (e.g., `query queryName($a: string) { ... }`) must + use the query format via `application/json` to pass query variables. + - Mutations over HTTP must have the Content-Type header set to `application/rdf` for RDF + format or `application/json` for JSON format. + - Commits over HTTP must have the `startTs` query parameter along with the JSON map of + conflict keys and predicates. + + - **Datetime index**: Use UTC Hour, Day, Month, Year for datetime comparison. This is a bug fix + that may result in different query results for existing queries involving the datetime index. + ([#3251][]) + + - **Blank node name generation for JSON mutations.** For JSON mutations that do not explicitly set + the `"uid"` field, the blank name format has changed to contain randomly generated identifiers. + This fixes a bug where two JSON objects within a single mutation are assigned the same blank + node. ([#3795][]) - Improve hash index. ([#2887][]) - Use a stream connection for internal connection health checking. ([#2956][]) @@ -3099,7 +3388,8 @@ Enterprise features: - Prevent alphas from asking zero to serve tablets during queries. ([#3091][]) - Put data before extensions in JSON response. ([#3194][]) - Always parse language tag. ([#3243][]) -- Populate the StartTs for the commit gRPC call so that clients can double check the startTs still matches. ([#3228][]) +- Populate the StartTs for the commit gRPC call so that clients can double check the startTs still + matches. ([#3228][]) - Replace MD5 with SHA-256 in `dgraph cert ls`. ([#3254][]) - Fix use of deprecated function `grpc.WithTimeout()`. ([#3253][]) - Introduce multi-part posting lists. ([#3105][]) @@ -3109,12 +3399,12 @@ Enterprise features: - Remove list.SetForDeletion method, remnant of the global LRU cache. ([#3481][]) - Whitelist by hostname. ([#2953][]) - Use CIDR format for whitelists instead of the previous range format. -- Introduce Badger's DropPrefix API into Dgraph to simplify how predicate deletions and drop all work internally. ([#3060][]) +- Introduce Badger's DropPrefix API into Dgraph to simplify how predicate deletions and drop all + work internally. ([#3060][]) - Replace integer compression in UID Pack with groupvarint algorithm. ([#3527][], [#3650][]) - Rebuild reverse index before count reverse. ([#3688][]) -- **Breaking change**: Use one atomic variable to generate blank node ids for - json objects. This changes the format of automatically generated blank node - names in JSON mutations. ([#3795][]) +- **Breaking change**: Use one atomic variable to generate blank node ids for json objects. This + changes the format of automatically generated blank node names in JSON mutations. ([#3795][]) - Print commit SHA256 when invoking "make install". ([#3786][]) - Print SHA-256 checksum of Dgraph binary in the version section logs. ([#3828][]) - Change anonynmous telemetry endpoint. ([#3872][]) @@ -3123,6 +3413,7 @@ Enterprise features: - Allow glog flags to be set via config file. ([#3062][], [#3077][]) - Logging + - Suppress logging before `flag.Parse` from glog. ([#2970][]) - Move glog of missing value warning to verbosity level 3. ([#3092][]) - Change time threshold for Raft.Ready warning logs. ([#3901][]) @@ -3130,6 +3421,7 @@ Enterprise features: - Add additional logs to show progress of reindexing operation. ([#3746][]) - Error messages + - Output the line and column number in schema parsing error messages. ([#2986][]) - Improve error of empty block queries. ([#3015][]) - Update flag description and error messaging related to `--query_edge_limit` flag. ([#2979][]) @@ -3138,6 +3430,7 @@ Enterprise features: - Return GraphQL compliant `"errors"` field for HTTP requests. ([#3728][]) - Optimizations + - Don't read posting lists from disk when mutating indices. ([#3695][], [#3713][]) - Avoid preallocating uid slice. It was slowing down unpackBlock. - Reduce memory consumption in bulk loader. ([#3724][]) @@ -3170,12 +3463,16 @@ Dgraph Debug Tool Dgraph Live Loader / Dgraph Bulk Loader -- Add `--format` flag to Dgraph Live Loader and Dgraph Bulk Loader to specify input data format type. ([#2991][]) +- Add `--format` flag to Dgraph Live Loader and Dgraph Bulk Loader to specify input data format + type. ([#2991][]) - Update live loader flag help text. ([#3278][]) - Improve reporting of aborts and retries during live load. ([#3313][]) - Remove xidmap storage on disk from bulk loader. - Optimize XidtoUID map used by live and bulk loader. ([#2998][]) -- Export data contains UID literals instead of blank nodes. Using Live Loader or Bulk Loader to load exported data will result in the same UIDs as the original database. ([#3004][], [#3045][]) To preserve the previous behavior, set the `--new_uids` flag in the live or bulk loader. ([18277872f][]) +- Export data contains UID literals instead of blank nodes. Using Live Loader or Bulk Loader to load + exported data will result in the same UIDs as the original database. ([#3004][], [#3045][]) To + preserve the previous behavior, set the `--new_uids` flag in the live or bulk loader. + ([18277872f][]) - Use StreamWriter in bulk loader. ([#3542][], [#3635][], [#3649][]) - Add timestamps during bulk/live load. ([#3287][]) - Use initial schema during bulk load. ([#3333][]) @@ -3191,16 +3488,17 @@ Dgraph Increment Tool - Add `--retries` flag to specify number of retry requests to set up a gRPC connection. ([#3584][]) - Add TLS support to `dgraph increment` command. ([#3257][]) -### Added +**Added** -- Add bash and zsh shell completion. See `dgraph completion bash --help` or `dgraph completion zsh --help` for usage instructions. ([#3084][]) +- Add bash and zsh shell completion. See `dgraph completion bash --help` or + `dgraph completion zsh --help` for usage instructions. ([#3084][]) - Add support for ECDSA in dgraph cert. ([#3269][]) - Add support for JSON export via `/admin/export?format=json`. ([#3309][]) - Add the SQL-to-Dgraph migration tool `dgraph migrate`. ([#3295][]) -- Add `assign_timestamp_ns` latency field to fix encoding_ns calculation. Fixes [#3668][]. ([#3692][], [#3711][]) +- Add `assign_timestamp_ns` latency field to fix encoding_ns calculation. Fixes [#3668][]. + ([#3692][], [#3711][]) - Adding draining mode to Alpha. ([#3880][]) - - Enterprise features - Support applying a license using /enterpriseLicense endpoint in Zero. ([#3824][]) - Don't apply license state for oss builds. ([#3847][]) @@ -3208,6 +3506,7 @@ Dgraph Increment Tool Query - Type system + - Add `type` function to query types. ([#2933][]) - Parser for type declaration. ([#2950][]) - Add `@type` directive to enforce type constraints. ([#3003][]) @@ -3218,9 +3517,10 @@ Query - Include types in results of export operation. ([#3493][]) - Support types in the bulk loader. ([#3506][]) -- Add the `upsert` block to send "query-mutate-commit" updates as a single - call to Dgraph. This is especially helpful to do upserts with the `@upsert` - schema directive. Addresses [#3059][]. ([#3412][]) +- Add the `upsert` block to send "query-mutate-commit" updates as a single call to Dgraph. This is + especially helpful to do upserts with the `@upsert` schema directive. Addresses [#3059][]. + ([#3412][]) + - Add support for conditional mutation in Upsert Block. ([#3612][]) - Allow querying all lang values of a predicate. ([#2910][]) @@ -3234,11 +3534,12 @@ Query - Support for GraphQL variables in arrays. ([#2981][]) - Show total weight of path in shortest path algorithm. ([#2954][]) - Rename dgraph `--dgraph` option to `--alpha`. ([#3273][]) -- Support uid variables in `from` and `to` arguments for shortest path query. Fixes [#1243][]. ([#3710][]) +- Support uid variables in `from` and `to` arguments for shortest path query. Fixes [#1243][]. + ([#3710][]) -- Add support for `len()` function in query language. The `len()` function is - only used in the `@if` directive for upsert blocks. `len(v)` It returns the - length of a variable `v`. ([#3756][], [#3769][]) +- Add support for `len()` function in query language. The `len()` function is only used in the `@if` + directive for upsert blocks. `len(v)` It returns the length of a variable `v`. ([#3756][], + [#3769][]) Mutation @@ -3251,8 +3552,10 @@ Alter Schema -- **Breaking change**: Add ability to set schema to a single UID schema. Fixes [#2511][]. ([#2895][], [#3173][], [#2921][]) - - If you wish to create one-to-one edges, use the schema type `uid`. The `uid` schema type in v1.0.x must be changed to `[uid]` to denote a one-to-many uid edge. +- **Breaking change**: Add ability to set schema to a single UID schema. Fixes [#2511][]. + ([#2895][], [#3173][], [#2921][]) + - If you wish to create one-to-one edges, use the schema type `uid`. The `uid` schema type in + v1.0.x must be changed to `[uid]` to denote a one-to-many uid edge. - Prevent dropping or altering reserved predicates. ([#2967][]) ([#2997][]) - Reserved predicate names start with `dgraph.` . - Support comments in schema. ([#3133][]) @@ -3263,8 +3566,8 @@ Schema Enterprise feature: Access Control Lists (ACLs) -Enterprise ACLs provide read/write/admin permissions to defined users and groups -at the predicate-level. +Enterprise ACLs provide read/write/admin permissions to defined users and groups at the +predicate-level. - Enforcing ACLs for query, mutation and alter requests. ([#2862][]) - Don't create ACL predicates when the ACL feature is not turned on. ([#2924][]) @@ -3281,10 +3584,9 @@ at the predicate-level. Enterprise feature: Backups -Enterprise backups are Dgraph backups in a binary format designed to be restored -to a cluster of the same version and configuration. Backups can be stored on -local disk or stored directly to the cloud via AWS S3 or any Minio-compatible -backend. +Enterprise backups are Dgraph backups in a binary format designed to be restored to a cluster of the +same version and configuration. Backups can be stored on local disk or stored directly to the cloud +via AWS S3 or any Minio-compatible backend. - Fixed bug with backup fan-out code. ([#2973][]) - Incremental backups / partial restore. ([#2963][]) @@ -3298,7 +3600,7 @@ backend. - Store group to predicate mapping as part of the backup manifest. ([#3570][]) - Only backup the predicates belonging to a group. ([#3621][]) - Introduce backup data formats for cross-version compatibility. ([#3575][]) -- Add series and backup number information to manifest. ([#3559][]) +- Add series and backup number information to manifest. ([#3559][]) - Use backwards-compatible formats during backup ([#3629][]) - Use manifest to only restore preds assigned to each group. ([#3648][]) - Fixes the toBackupList function by removing the loop. ([#3869][]) @@ -3322,17 +3624,19 @@ Tracing - Support exporting tracing data to oc_agent, then to datadog agent. ([#3398][]) - Measure latency of Alpha's Raft loop. (63f545568) -### Removed +**Removed** - **Breaking change**: Remove `_predicate_` predicate within queries. ([#3262][]) - Remove `--debug_mode` option. ([#3441][]) -- Remove deprecated and unused IgnoreIndexConflict field in mutations. This functionality is superceded by the `@upsert` schema directive since v1.0.4. ([#3854][]) +- Remove deprecated and unused IgnoreIndexConflict field in mutations. This functionality is + superceded by the `@upsert` schema directive since v1.0.4. ([#3854][]) - Enterprise features - - Remove `--enterprise_feature` flag. Enterprise license can be applied via /enterpriseLicense endpoint in Zero. ([#3824][]) + - Remove `--enterprise_feature` flag. Enterprise license can be applied via /enterpriseLicense + endpoint in Zero. ([#3824][]) -### Fixed +**Fixed** - Fix `anyofterms()` query for facets from mutations in JSON format. Fixes [#2867][]. ([#2885][]) - Fixes error found by gofuzz. ([#2914][]) @@ -3350,9 +3654,11 @@ Tracing - Fix race condition in numShutDownSig in Alpha. ([#3402][]) - Fix race condition in oracle.go. ([#3417][]) - Fix tautological condition in zero.go. ([#3516][]) -- Correctness fix: Block before proposing mutations and improve conflict key generation. Fixes [#3528][]. ([#3565][]) +- Correctness fix: Block before proposing mutations and improve conflict key generation. Fixes + [#3528][]. ([#3565][]) -- Reject requests with predicates larger than the max size allowed (longer than 65,535 characters). ([#3052][]) +- Reject requests with predicates larger than the max size allowed (longer than 65,535 characters). + ([#3052][]) - Upgrade raft lib and fix group checksum. ([#3085][]) - Check that uid is not used as function attribute. ([#3112][]) - Do not retrieve facets when max recurse depth has been reached. ([#3190][]) @@ -3379,7 +3685,6 @@ Tracing [#3365]: https://github.com/hypermodeinc/dgraph/issues/3365 [#3550]: https://github.com/hypermodeinc/dgraph/issues/3550 [#3532]: https://github.com/hypermodeinc/dgraph/issues/3532 -[#3526]: https://github.com/hypermodeinc/dgraph/issues/3526 [#3528]: https://github.com/hypermodeinc/dgraph/issues/3528 [#3565]: https://github.com/hypermodeinc/dgraph/issues/3565 [#2914]: https://github.com/hypermodeinc/dgraph/issues/2914 @@ -3410,7 +3715,6 @@ Tracing [#3243]: https://github.com/hypermodeinc/dgraph/issues/3243 [#3228]: https://github.com/hypermodeinc/dgraph/issues/3228 [#3254]: https://github.com/hypermodeinc/dgraph/issues/3254 -[#3274]: https://github.com/hypermodeinc/dgraph/issues/3274 [#3253]: https://github.com/hypermodeinc/dgraph/issues/3253 [#3105]: https://github.com/hypermodeinc/dgraph/issues/3105 [#3310]: https://github.com/hypermodeinc/dgraph/issues/3310 @@ -3460,8 +3764,6 @@ Tracing [#3287]: https://github.com/hypermodeinc/dgraph/issues/3287 [#3333]: https://github.com/hypermodeinc/dgraph/issues/3333 [#3560]: https://github.com/hypermodeinc/dgraph/issues/3560 -[#3613]: https://github.com/hypermodeinc/dgraph/issues/3613 -[#3560]: https://github.com/hypermodeinc/dgraph/issues/3560 [#3628]: https://github.com/hypermodeinc/dgraph/issues/3628 [#3681]: https://github.com/hypermodeinc/dgraph/issues/3681 [#3659]: https://github.com/hypermodeinc/dgraph/issues/3659 @@ -3488,7 +3790,6 @@ Tracing [#3493]: https://github.com/hypermodeinc/dgraph/issues/3493 [#3506]: https://github.com/hypermodeinc/dgraph/issues/3506 [#3059]: https://github.com/hypermodeinc/dgraph/issues/3059 -[#3412]: https://github.com/hypermodeinc/dgraph/issues/3412 [#3612]: https://github.com/hypermodeinc/dgraph/issues/3612 [#2910]: https://github.com/hypermodeinc/dgraph/issues/2910 [#2913]: https://github.com/hypermodeinc/dgraph/issues/2913 @@ -3519,7 +3820,6 @@ Tracing [#2924]: https://github.com/hypermodeinc/dgraph/issues/2924 [#2951]: https://github.com/hypermodeinc/dgraph/issues/2951 [#3124]: https://github.com/hypermodeinc/dgraph/issues/3124 -[#3141]: https://github.com/hypermodeinc/dgraph/issues/3141 [#3164]: https://github.com/hypermodeinc/dgraph/issues/3164 [#3218]: https://github.com/hypermodeinc/dgraph/issues/3218 [#3207]: https://github.com/hypermodeinc/dgraph/issues/3207 @@ -3532,7 +3832,6 @@ Tracing [#3172]: https://github.com/hypermodeinc/dgraph/issues/3172 [#3219]: https://github.com/hypermodeinc/dgraph/issues/3219 [#3227]: https://github.com/hypermodeinc/dgraph/issues/3227 -[#3387]: https://github.com/hypermodeinc/dgraph/issues/3387 [#3515]: https://github.com/hypermodeinc/dgraph/issues/3515 [#3536]: https://github.com/hypermodeinc/dgraph/issues/3536 [#3547]: https://github.com/hypermodeinc/dgraph/issues/3547 @@ -3551,10 +3850,8 @@ Tracing [#3262]: https://github.com/hypermodeinc/dgraph/issues/3262 [#3441]: https://github.com/hypermodeinc/dgraph/issues/3441 [#3854]: https://github.com/hypermodeinc/dgraph/issues/3854 -[#3824]: https://github.com/hypermodeinc/dgraph/issues/3824 [#2867]: https://github.com/hypermodeinc/dgraph/issues/2867 [#2885]: https://github.com/hypermodeinc/dgraph/issues/2885 -[#2914]: https://github.com/hypermodeinc/dgraph/issues/2914 [#2893]: https://github.com/hypermodeinc/dgraph/issues/2893 [#2891]: https://github.com/hypermodeinc/dgraph/issues/2891 [#2925]: https://github.com/hypermodeinc/dgraph/issues/2925 @@ -3565,7 +3862,6 @@ Tracing [#3027]: https://github.com/hypermodeinc/dgraph/issues/3027 [#3182]: https://github.com/hypermodeinc/dgraph/issues/3182 [#3505]: https://github.com/hypermodeinc/dgraph/issues/3505 -[#3402]: https://github.com/hypermodeinc/dgraph/issues/3402 [#3417]: https://github.com/hypermodeinc/dgraph/issues/3417 [#3516]: https://github.com/hypermodeinc/dgraph/issues/3516 [#3052]: https://github.com/hypermodeinc/dgraph/issues/3052 @@ -3574,7 +3870,6 @@ Tracing [#3085]: https://github.com/hypermodeinc/dgraph/issues/3085 [#3112]: https://github.com/hypermodeinc/dgraph/issues/3112 [#3190]: https://github.com/hypermodeinc/dgraph/issues/3190 -[#3172]: https://github.com/hypermodeinc/dgraph/issues/3172 [#3216]: https://github.com/hypermodeinc/dgraph/issues/3216 [#3205]: https://github.com/hypermodeinc/dgraph/issues/3205 [#3169]: https://github.com/hypermodeinc/dgraph/issues/3169 @@ -3597,17 +3892,17 @@ Tracing [#3874]: https://github.com/hypermodeinc/dgraph/issues/3874 [#3900]: https://github.com/hypermodeinc/dgraph/issues/3900 [3271f64e0]: https://github.com/hypermodeinc/dgraph/commit/3271f64e0 -[63f545568]: https://github.com/hypermodeinc/dgraph/commit/63f545568 [18277872f]: https://github.com/hypermodeinc/dgraph/commit/18277872f [802ec4c39]: https://github.com/hypermodeinc/dgraph/commit/802ec4c39 ## [1.0.18] - 2019-12-16 + [1.0.18]: https://github.com/hypermodeinc/dgraph/compare/v1.0.17...v1.0.18 -### Fixed +**Fixed** -- Preserve the order of entries in a mutation if multiple versions of the same - edge are found. This addresses the mutation re-ordering change ([#2987][]) from v1.0.15. +- Preserve the order of entries in a mutation if multiple versions of the same edge are found. This + addresses the mutation re-ordering change ([#2987][]) from v1.0.15. - Fixing the zero client in live loader to avoid using TLS. Fixes [#3919][]. ([#3936][]) - Remove query cache which is causing contention. ([#4071][]). - Fix bug when querying with nested levels of `expand(_all_)`. Fixes [#3807][]. ([#4143][]). @@ -3620,24 +3915,25 @@ Tracing [#3807]: https://github.com/hypermodeinc/dgraph/issues/3807 [#4143]: https://github.com/hypermodeinc/dgraph/issues/4143 [#4212]: https://github.com/hypermodeinc/dgraph/issues/4212 -[#4157]: https://github.com/hypermodeinc/dgraph/issues/4157 [#4252]: https://github.com/hypermodeinc/dgraph/issues/4252 ## [1.0.17] - 2019-08-30 + [1.0.17]: https://github.com/hypermodeinc/dgraph/compare/v1.0.16...v1.0.17 -### Changed +**Changed** - Increase max trace logs per span in Alpha. ([#3886][]) - Include line and column numbers in lexer errors. Fixes [#2900][]. ([#3772][]) - Release binaries built with Go 1.12.7. -### Fixed +**Fixed** - Decrease rate of Raft heartbeat messages. ([#3708][], [#3753][]) - Fix bug when exporting a predicate name to the schema. Fixes [#3699][]. ([#3701][]) - Return error instead of asserting in handleCompareFunction. ([#3665][]) -- Fix bug where aliases in a query incorrectly alias the response depending on alias order. Fixes [#3814][]. ([#3837][]) +- Fix bug where aliases in a query incorrectly alias the response depending on alias order. Fixes + [#3814][]. ([#3837][]) - Fix for panic in fillGroupedVars. Fixes [#3768][]. ([#3781][]) [#3886]: https://github.com/hypermodeinc/dgraph/issues/3886 @@ -3654,13 +3950,14 @@ Tracing [#3781]: https://github.com/hypermodeinc/dgraph/issues/3781 ## [1.0.16] - 2019-07-11 + [1.0.16]: https://github.com/hypermodeinc/dgraph/compare/v1.0.15...v1.0.16 -### Changed +**Changed** - Vendor in prometheus/client_golang/prometheus v0.9.4. ([#3653][]) -### Fixed +**Fixed** - Fix panic with value variables in queries. Fixes [#3470][]. ([#3554][]) - Remove unused reserved predicates in the schema. Fixes [#3535][]. ([#3557][]) @@ -3674,46 +3971,62 @@ Tracing [#3653]: https://github.com/hypermodeinc/dgraph/issue/3653 ## [1.0.15] - 2019-05-30 + [1.0.15]: https://github.com/hypermodeinc/dgraph/compare/v1.0.14...v1.0.15 -### Fixed +**Fixed** - Fix bug that can cause a Dgraph cluster to get stuck in infinite leader election. ([#3391][]) - Fix bug in bulk loader that prevented loading data from JSON files. ([#3464][]) - Fix bug with a potential deadlock by breaking circular lock acquisition. ([#3393][]) -- Properly escape strings containing Unicode control characters for data exports. Fixes [#3383]. ([#3429][]) +- Properly escape strings containing Unicode control characters for data exports. Fixes [#3383]. + ([#3429][]) - Initialize tablets map when creating a group. ([#3360][]) -- Fix queries with `offset` not working with multiple `orderasc` or `orderdesc` statements. Fixes [#3366][]. ([#3455][]) +- Fix queries with `offset` not working with multiple `orderasc` or `orderdesc` statements. Fixes + [#3366][]. ([#3455][]) - Vendor in bug fixes from badger. ([#3348][], [#3371][], [#3460][]) -### Changed +**Changed** - Use Go v1.12.5 to build Dgraph release binaries. - Truncate Raft logs even when no txn commits are happening. ([3be380b8a][]) -- Reduce memory usage by setting a limit on the size of committed entries that can be served per Ready. ([#3308][]) +- Reduce memory usage by setting a limit on the size of committed entries that can be served per + Ready. ([#3308][]) - Reduce memory usage of pending txns by only keeping deltas in memory. ([#3349][]) - Reduce memory usage by limiting the number of pending proposals in apply channel. ([#3340][]) - Reduce memory usage when calculating snapshots by retrieving entries in batches. ([#3409][]) - Allow snapshot calculations during snapshot streaming. ([ecb454754][]) -- Allow quick recovery from partitions by shortening the deadline of sending Raft messages to 10s. ([77b52aca1][]) -- Take snapshots less frequently so straggling Alpha followers can catch up to the leader. Snapshot frequency is configurable via a flag (see Added section). ([#3367][]) -- Allow partial snapshot streams to reduce the amount of data needed to be transferred between Alphas. ([#3454][]) -- Use Badger's StreamWriter to improve write speeds during snapshot streaming. ([#3457][]) ([#3442][]) +- Allow quick recovery from partitions by shortening the deadline of sending Raft messages to 10s. + ([77b52aca1][]) +- Take snapshots less frequently so straggling Alpha followers can catch up to the leader. Snapshot + frequency is configurable via a flag (see Added section). ([#3367][]) +- Allow partial snapshot streams to reduce the amount of data needed to be transferred between + Alphas. ([#3454][]) +- Use Badger's StreamWriter to improve write speeds during snapshot streaming. ([#3457][]) + ([#3442][]) - Call file sync explicitly at the end of TxnWriter to improve performance. ([#3418][]) -- Optimize mutation and delta application. **Breaking: With these changes, the mutations within a single call are rearranged. So, no assumptions must be made about the order in which they get executed.** - ([#2987][]) +- Optimize mutation and delta application. **Breaking: With these changes, the mutations within a + single call are rearranged. So, no assumptions must be made about the order in which they get + executed.** ([#2987][]) - Add logs to show Dgraph config options. ([#3337][]) -- Add `-v=3` logs for reporting Raft communication for debugging. These logs start with `RaftComm:`. ([9cd628f6f][]) - -### Added - -- Add Alpha flag `--snapshot_after` (default: 10000) to configure the number of Raft entries to keep before taking a snapshot. ([#3367][]) -- Add Alpha flag `--abort_older_than` (default: 5m) to configure the amount of time since a pending txn's last mutation until it is aborted. ([#3367][]) -- Add Alpha flag `--normalize_node_limit` (default: 10000) to configure the limit for the maximum number of nodes that can be returned in a query that uses the `@normalize` directive. Fixes [#3335][]. ([#3467][]) -- Add Prometheus metrics for latest Raft applied index (`dgraph_raft_applied_index`) and the max assigned txn timestamp (`dgraph_max_assigned_ts`). These are useful to track cluster progress. ([#3338][]) +- Add `-v=3` logs for reporting Raft communication for debugging. These logs start with `RaftComm:`. + ([9cd628f6f][]) + +**Added** + +- Add Alpha flag `--snapshot_after` (default: 10000) to configure the number of Raft entries to keep + before taking a snapshot. ([#3367][]) +- Add Alpha flag `--abort_older_than` (default: 5m) to configure the amount of time since a pending + txn's last mutation until it is aborted. ([#3367][]) +- Add Alpha flag `--normalize_node_limit` (default: 10000) to configure the limit for the maximum + number of nodes that can be returned in a query that uses the `@normalize` directive. Fixes + [#3335][]. ([#3467][]) +- Add Prometheus metrics for latest Raft applied index (`dgraph_raft_applied_index`) and the max + assigned txn timestamp (`dgraph_max_assigned_ts`). These are useful to track cluster progress. + ([#3338][]) - Add Raft checkpoint index to WAL for quicker recovery after restart. ([#3444][]) -### Removed +**Removed** - Remove size calculation in posting list. ([0716dc4e1][]) - Remove a `-v=2` log which can be too noisy during Raft replay. ([2377d9f56][]). @@ -3721,7 +4034,6 @@ Tracing [#3337]: https://github.com/hypermodeinc/dgraph/pull/3337 [#3391]: https://github.com/hypermodeinc/dgraph/pull/3391 -[#3400]: https://github.com/hypermodeinc/dgraph/pull/3400 [#3464]: https://github.com/hypermodeinc/dgraph/pull/3464 [#2987]: https://github.com/hypermodeinc/dgraph/pull/2987 [#3349]: https://github.com/hypermodeinc/dgraph/pull/3349 @@ -3742,10 +4054,8 @@ Tracing [#3418]: https://github.com/hypermodeinc/dgraph/pull/3418 [#3454]: https://github.com/hypermodeinc/dgraph/pull/3454 [#3457]: https://github.com/hypermodeinc/dgraph/pull/3457 -[#3442]: https://github.com/hypermodeinc/dgraph/pull/3442 [#3467]: https://github.com/hypermodeinc/dgraph/pull/3467 [#3338]: https://github.com/hypermodeinc/dgraph/pull/3338 -[#3444]: https://github.com/hypermodeinc/dgraph/pull/3444 [3be380b8a]: https://github.com/hypermodeinc/dgraph/commit/3be380b8a [ecb454754]: https://github.com/hypermodeinc/dgraph/commit/ecb454754 [77b52aca1]: https://github.com/hypermodeinc/dgraph/commit/77b52aca1 @@ -3754,19 +4064,22 @@ Tracing [2377d9f56]: https://github.com/hypermodeinc/dgraph/commit/2377d9f56 ## [1.0.14] - 2019-04-12 + [1.0.14]: https://github.com/hypermodeinc/dgraph/compare/v1.0.13...v1.0.14 -### Fixed +**Fixed** - Fix bugs related to best-effort queries. ([#3125][]) - Stream Raft Messages and Fix Check Quorum. ([#3138][]) - Fix lin reads timeouts and AssignUid recursion in Zero. ([#3203][]) - Fix panic when running `@groupby(uid)` which is not allowed and other logic fixes. ([#3232][]) -- Fix a StartTs Mismatch bug which happens when running multiple best effort queries using the same txn. Reuse the same timestamp instead of allocating a new one. ([#3187][]) ([#3246][]) +- Fix a StartTs Mismatch bug which happens when running multiple best effort queries using the same + txn. Reuse the same timestamp instead of allocating a new one. ([#3187][]) ([#3246][]) - Shutdown extra connections. ([#3280][]) - Fix bug for queries with `@recurse` and `expand(_all_)`. ([#3179][]) - Fix assorted cases of goroutine leaks. ([#3074][]) -- Increment tool: Fix best-effort flag name so best-effort queries run as intended from the tool. ([d386fa5][]) +- Increment tool: Fix best-effort flag name so best-effort queries run as intended from the tool. + ([d386fa5][]) [#3125]: https://github.com/hypermodeinc/dgraph/pull/3125 [#3138]: https://github.com/hypermodeinc/dgraph/pull/3138 @@ -3779,569 +4092,708 @@ Tracing [#3074]: https://github.com/hypermodeinc/dgraph/pull/3074 [d386fa5]: https://github.com/hypermodeinc/dgraph/commit/d386fa5 -### Added +**Added** -- Add timeout option while running queries over HTTP. Setting the `timeout` query parameter `/query?timeout=60s` will timeout queries after 1 minute. ([#3238][]) +- Add timeout option while running queries over HTTP. Setting the `timeout` query parameter + `/query?timeout=60s` will timeout queries after 1 minute. ([#3238][]) - Add `badger` tool to release binaries and Docker image. [#3238]: https://github.com/hypermodeinc/dgraph/pull/3238 ## [1.0.13] - 2019-03-10 + [1.0.13]: https://github.com/hypermodeinc/dgraph/compare/v1.0.12...v1.0.13 -**Note: This release supersedes v1.0.12 with bug fixes. If you're running v1.0.12, please upgrade to v1.0.13. It is safe to upgrade in-place without a data export and import.** +**Note: This release supersedes v1.0.12 with bug fixes. If you're running v1.0.12, please upgrade to +v1.0.13. It is safe to upgrade in-place without a data export and import.** -### Fixed +**Fixed** - Fix Raft panic. ([8cb69ea](https://github.com/hypermodeinc/dgraph/commit/8cb69ea)) -- Log an error instead of an assertion check for SrcUIDs being nil. ([691b3b3](https://github.com/hypermodeinc/dgraph/commit/691b3b3)) +- Log an error instead of an assertion check for SrcUIDs being nil. + ([691b3b3](https://github.com/hypermodeinc/dgraph/commit/691b3b3)) ## [1.0.12] - 2019-03-05 + [1.0.12]: https://github.com/hypermodeinc/dgraph/compare/v1.0.11...v1.0.12 -**Note: This release requires you to export and re-import data prior to -upgrading or rolling back. The underlying data format has been changed.** +**Note: This release requires you to export and re-import data prior to upgrading or rolling back. +The underlying data format has been changed.** -### Added +**Added** - Support gzip compression for gRPC and HTTP requests. ([#2843](https://github.com/hypermodeinc/dgraph/issues/2843)) -- Restore is available from a full binary backup. This is an enterprise - feature licensed under the Dgraph Community License. -- Strict schema mode via `--mutations` flag. By default `--mutations=allow` is - set to allow all mutations; `--mutations=disallow` disables all mutations; - `--mutations=strict` allows mutations only for predicates which are defined in - the schema. Fixes [#2277](https://github.com/hypermodeinc/dgraph/issues/2277). -- Add `dgraph increment` tool for debugging and testing. The increment tool - queries for the specified predicate (default: `counter.val`), increments its - integer counter value, and mutates the result back to Dgraph. Useful for - testing end-to-end txns to verify cluster health. +- Restore is available from a full binary backup. This is an enterprise feature licensed under the + Dgraph Community License. +- Strict schema mode via `--mutations` flag. By default `--mutations=allow` is set to allow all + mutations; `--mutations=disallow` disables all mutations; `--mutations=strict` allows mutations + only for predicates which are defined in the schema. Fixes + [#2277](https://github.com/hypermodeinc/dgraph/issues/2277). +- Add `dgraph increment` tool for debugging and testing. The increment tool queries for the + specified predicate (default: `counter.val`), increments its integer counter value, and mutates + the result back to Dgraph. Useful for testing end-to-end txns to verify cluster health. ([#2955](https://github.com/hypermodeinc/dgraph/issues/2955)) -- Support best-effort queries. This would relax the requirement of linearizible - reads. For best-effort queries, Alpha would request timestamps from memory - instead of making an outbound request to Zero. - ([#3071](https://github.com/hypermodeinc/dgraph/issues/3071)) - -### Changed - -- Use the new Stream API from Badger instead of Dgraph's Stream framework. ([#2852](https://github.com/hypermodeinc/dgraph/issues/2852)) -- Discard earlier versions of posting lists. ([#2859](https://github.com/hypermodeinc/dgraph/issues/2859)) -- Make HTTP JSON response encoding more efficient by operating on a bytes buffer - directly. ([ae1d9f3](https://github.com/hypermodeinc/dgraph/commit/ae1d9f3)) -- Optimize and refactor facet filtering. ([#2829](https://github.com/hypermodeinc/dgraph/issues/2829)) +- Support best-effort queries. This would relax the requirement of linearizible reads. For + best-effort queries, Alpha would request timestamps from memory instead of making an outbound + request to Zero. ([#3071](https://github.com/hypermodeinc/dgraph/issues/3071)) + +**Changed** + +- Use the new Stream API from Badger instead of Dgraph's Stream framework. + ([#2852](https://github.com/hypermodeinc/dgraph/issues/2852)) +- Discard earlier versions of posting lists. + ([#2859](https://github.com/hypermodeinc/dgraph/issues/2859)) +- Make HTTP JSON response encoding more efficient by operating on a bytes buffer directly. + ([ae1d9f3](https://github.com/hypermodeinc/dgraph/commit/ae1d9f3)) +- Optimize and refactor facet filtering. + ([#2829](https://github.com/hypermodeinc/dgraph/issues/2829)) - Show badger.Item meta information in `dgraph debug` output. -- Add new option to `dgraph debug` tool to get a histogram of key and value sizes. ([#2844](https://github.com/hypermodeinc/dgraph/issues/2844)) +- Add new option to `dgraph debug` tool to get a histogram of key and value sizes. + ([#2844](https://github.com/hypermodeinc/dgraph/issues/2844)) - Add new option to `dgraph debug` tool to get info from a particular read timestamp. -- Refactor rebuild index logic. ([#2851](https://github.com/hypermodeinc/dgraph/issues/2851), [#2866](https://github.com/hypermodeinc/dgraph/issues/2866)) -- For gRPC clients, schema queries are returned in the Json field. The Schema proto field is deprecated. -- Simplify design and make tablet moves robust. ([#2800](https://github.com/hypermodeinc/dgraph/issues/2800)) -- Switch all node IDs to hex in logs (e.g., ID 0xa instead of ID 10), so they are consistent with Raft logs. -- Refactor reindexing code to only reindex specific tokenizers. ([#2948](https://github.com/hypermodeinc/dgraph/issues/2948)) -- Introduce group checksums. ([#2964](https://github.com/hypermodeinc/dgraph/issues/2964), [#3085](https://github.com/hypermodeinc/dgraph/issues/3085)) +- Refactor rebuild index logic. ([#2851](https://github.com/hypermodeinc/dgraph/issues/2851), + [#2866](https://github.com/hypermodeinc/dgraph/issues/2866)) +- For gRPC clients, schema queries are returned in the Json field. The Schema proto field is + deprecated. +- Simplify design and make tablet moves robust. + ([#2800](https://github.com/hypermodeinc/dgraph/issues/2800)) +- Switch all node IDs to hex in logs (e.g., ID 0xa instead of ID 10), so they are consistent with + Raft logs. +- Refactor reindexing code to only reindex specific tokenizers. + ([#2948](https://github.com/hypermodeinc/dgraph/issues/2948)) +- Introduce group checksums. ([#2964](https://github.com/hypermodeinc/dgraph/issues/2964), + [#3085](https://github.com/hypermodeinc/dgraph/issues/3085)) - Return aborted error if commit ts is 0. -- Reduce number of "ClusterInfoOnly" requests to Zero by making VerifyUid wait for membership information. ([#2974](https://github.com/hypermodeinc/dgraph/issues/2974)) +- Reduce number of "ClusterInfoOnly" requests to Zero by making VerifyUid wait for membership + information. ([#2974](https://github.com/hypermodeinc/dgraph/issues/2974)) - Simplify Raft WAL storage caching. ([#3102](https://github.com/hypermodeinc/dgraph/issues/3102)) - Build release binary with Go version 1.11.5. -### Removed +**Removed** -- **Remove LRU cache from Alpha for big wins in query latency reduction (5-10x) - and mutation throughput (live loading 1.7x faster).** Setting `--lru_mb` is - still required but will not have any effect since the cache is removed. The - flag will be used later version when LRU cache is introduced within Badger and - configurable from Dgraph. -- Remove `--nomutations` flag. Its functionality has moved into strict schema - mode with the `--mutations` flag (see Added section). +- **Remove LRU cache from Alpha for big wins in query latency reduction (5-10x) and mutation + throughput (live loading 1.7x faster).** Setting `--lru_mb` is still required but will not have + any effect since the cache is removed. The flag will be used later version when LRU cache is + introduced within Badger and configurable from Dgraph. +- Remove `--nomutations` flag. Its functionality has moved into strict schema mode with the + `--mutations` flag (see Added section). -### Fixed +**Fixed** -- Use json.Marshal for strings and blobs. Fixes [#2662](https://github.com/hypermodeinc/dgraph/issues/2662). -- Let eq use string "uid" as value. Fixes [#2827](https://github.com/hypermodeinc/dgraph/issues/2827). +- Use json.Marshal for strings and blobs. Fixes + [#2662](https://github.com/hypermodeinc/dgraph/issues/2662). +- Let eq use string "uid" as value. Fixes + [#2827](https://github.com/hypermodeinc/dgraph/issues/2827). - Skip empty posting lists in `has` function. - Fix Rollup to pick max update commit ts. -- Fix a race condition when processing concurrent queries. Fixes [#2849](https://github.com/hypermodeinc/dgraph/issues/2849). -- Show an error when running multiple mutation blocks. Fixes [#2815](https://github.com/hypermodeinc/dgraph/issues/2815). +- Fix a race condition when processing concurrent queries. Fixes + [#2849](https://github.com/hypermodeinc/dgraph/issues/2849). +- Show an error when running multiple mutation blocks. Fixes + [#2815](https://github.com/hypermodeinc/dgraph/issues/2815). - Bring in optimizations and bug fixes over from Badger. -- Bulk Loader for multi-group (sharded data) clusters writes out per-group - schema with only the predicates owned by the group instead of all predicates - in the cluster. This fixes an issue where queries made to one group may not - return data served by other groups. +- Bulk Loader for multi-group (sharded data) clusters writes out per-group schema with only the + predicates owned by the group instead of all predicates in the cluster. This fixes an issue where + queries made to one group may not return data served by other groups. ([#3065](https://github.com/hypermodeinc/dgraph/issues/3065)) - Remove the assert failure in raftwal/storage.go. ## [1.0.11] - 2018-12-17 + [1.0.11]: https://github.com/hypermodeinc/dgraph/compare/v1.0.10...v1.0.11 -### Added +**Added** - Integrate OpenCensus in Dgraph. ([#2739](https://github.com/hypermodeinc/dgraph/issues/2739)) - Add Dgraph Community License for proprietary features. -- Feature: Full binary backups. This is an enterprise feature licensed under the Dgraph Community License. ([#2710](https://github.com/hypermodeinc/dgraph/issues/2710)) -- Add `--enterprise_features` flag to enable enterprise features. By enabling enterprise features, you accept the terms of the Dgraph Community License. -- Add minio dep and its deps in govendor. ([94daeaf7](https://github.com/hypermodeinc/dgraph/commit/94daeaf7), [35a73e81](https://github.com/hypermodeinc/dgraph/commit/35a73e81)) -- Add network partitioning tests with blockade tool. ([./contrib/blockade](https://github.com/hypermodeinc/dgraph/tree/v1.0.11/contrib/blockade)) -- Add Zero endpoints `/assign?what=uids&num=10` and `/assign?what=timestamps&num=10` to assign UIDs or transaction timestamp leases. -- Adding the acl subcommand to support acl features (still work-in-progress). ([#2795](https://github.com/hypermodeinc/dgraph/issues/2795)) -- Support custom tokenizer in bulk loader ([#2820](https://github.com/hypermodeinc/dgraph/issues/2820)) -- Support JSON data with Dgraph Bulk Loader. ([#2799](https://github.com/hypermodeinc/dgraph/issues/2799)) - -### Changed - -- Make posting list memory rollup happen right after disk. ([#2731](https://github.com/hypermodeinc/dgraph/issues/2731)) -- Do not retry proposal if already found in CommittedEntries. ([#2740](https://github.com/hypermodeinc/dgraph/issues/2740)) -- Remove ExportPayload from protos. Export returns Status and ExportRequest. ([#2741](https://github.com/hypermodeinc/dgraph/issues/2741)) -- Allow more escape runes to be skipped over when parsing string literal. ([#2734](https://github.com/hypermodeinc/dgraph/issues/2734)) -- Clarify message of overloaded pending proposals for live loader. ([#2732](https://github.com/hypermodeinc/dgraph/issues/2732)) +- Feature: Full binary backups. This is an enterprise feature licensed under the Dgraph Community + License. ([#2710](https://github.com/hypermodeinc/dgraph/issues/2710)) +- Add `--enterprise_features` flag to enable enterprise features. By enabling enterprise features, + you accept the terms of the Dgraph Community License. +- Add minio dep and its deps in govendor. + ([94daeaf7](https://github.com/hypermodeinc/dgraph/commit/94daeaf7), + [35a73e81](https://github.com/hypermodeinc/dgraph/commit/35a73e81)) +- Add network partitioning tests with blockade tool. + ([./contrib/blockade](https://github.com/hypermodeinc/dgraph/tree/v1.0.11/contrib/blockade)) +- Add Zero endpoints `/assign?what=uids&num=10` and `/assign?what=timestamps&num=10` to assign UIDs + or transaction timestamp leases. +- Adding the acl subcommand to support acl features (still work-in-progress). + ([#2795](https://github.com/hypermodeinc/dgraph/issues/2795)) +- Support custom tokenizer in bulk loader + ([#2820](https://github.com/hypermodeinc/dgraph/issues/2820)) +- Support JSON data with Dgraph Bulk Loader. + ([#2799](https://github.com/hypermodeinc/dgraph/issues/2799)) + +**Changed** + +- Make posting list memory rollup happen right after disk. + ([#2731](https://github.com/hypermodeinc/dgraph/issues/2731)) +- Do not retry proposal if already found in CommittedEntries. + ([#2740](https://github.com/hypermodeinc/dgraph/issues/2740)) +- Remove ExportPayload from protos. Export returns Status and ExportRequest. + ([#2741](https://github.com/hypermodeinc/dgraph/issues/2741)) +- Allow more escape runes to be skipped over when parsing string literal. + ([#2734](https://github.com/hypermodeinc/dgraph/issues/2734)) +- Clarify message of overloaded pending proposals for live loader. + ([#2732](https://github.com/hypermodeinc/dgraph/issues/2732)) - Posting List Evictions. (e2bcfdad) - Log when removing a tablet. ([#2746](https://github.com/hypermodeinc/dgraph/issues/2746)) -- Deal better with network partitions in leaders. ([#2749](https://github.com/hypermodeinc/dgraph/issues/2749)) +- Deal better with network partitions in leaders. + ([#2749](https://github.com/hypermodeinc/dgraph/issues/2749)) - Keep maxDelay during timestamp req to 1s. - Updates to the version output info. - - Print the go version used to build Dgraph when running `dgraph version` and in the logs when Dgraph runs. ([#2768](https://github.com/hypermodeinc/dgraph/issues/2768)) - - Print the Dgraph version when running live or bulk loader. ([#2736](https://github.com/hypermodeinc/dgraph/issues/2736)) -- Checking nil values in the equal function ([#2769](https://github.com/hypermodeinc/dgraph/issues/2769)) + - Print the go version used to build Dgraph when running `dgraph version` and in the logs when + Dgraph runs. ([#2768](https://github.com/hypermodeinc/dgraph/issues/2768)) + - Print the Dgraph version when running live or bulk loader. + ([#2736](https://github.com/hypermodeinc/dgraph/issues/2736)) +- Checking nil values in the equal function + ([#2769](https://github.com/hypermodeinc/dgraph/issues/2769)) - Optimize query: UID expansion. ([#2772](https://github.com/hypermodeinc/dgraph/issues/2772)) -- Split membership sync endpoints and remove PurgeTs endpoint. ([#2773](https://github.com/hypermodeinc/dgraph/issues/2773)) -- Set the Prefix option during iteration. ([#2780](https://github.com/hypermodeinc/dgraph/issues/2780)) +- Split membership sync endpoints and remove PurgeTs endpoint. + ([#2773](https://github.com/hypermodeinc/dgraph/issues/2773)) +- Set the Prefix option during iteration. + ([#2780](https://github.com/hypermodeinc/dgraph/issues/2780)) - Replace Zero's `/assignIds?num=10` endpoint with `/assign?what=uids&num=10` (see Added section). -### Removed +**Removed** -- Remove type hinting for JSON and RDF schema-less types. ([#2742](https://github.com/hypermodeinc/dgraph/issues/2742)) -- Remove deprecated logic that was found using vet. ([#2758](https://github.com/hypermodeinc/dgraph/issues/2758)) -- Remove assert for zero-length posting lists. ([#2763](https://github.com/hypermodeinc/dgraph/issues/2763)) +- Remove type hinting for JSON and RDF schema-less types. + ([#2742](https://github.com/hypermodeinc/dgraph/issues/2742)) +- Remove deprecated logic that was found using vet. + ([#2758](https://github.com/hypermodeinc/dgraph/issues/2758)) +- Remove assert for zero-length posting lists. + ([#2763](https://github.com/hypermodeinc/dgraph/issues/2763)) -### Fixed +**Fixed** - Restore schema states on error. ([#2730](https://github.com/hypermodeinc/dgraph/issues/2730)) -- Refactor bleve tokenizer usage ([#2738](https://github.com/hypermodeinc/dgraph/issues/2738)). Fixes [#2622](https://github.com/hypermodeinc/dgraph/issues/2622) and [#2601](https://github.com/hypermodeinc/dgraph/issues/2601). +- Refactor bleve tokenizer usage ([#2738](https://github.com/hypermodeinc/dgraph/issues/2738)). + Fixes [#2622](https://github.com/hypermodeinc/dgraph/issues/2622) and + [#2601](https://github.com/hypermodeinc/dgraph/issues/2601). - Switch to Badger's Watermark library, which has a memory leak fix. (0cd9d82e) - Fix tiny typo. ([#2761](https://github.com/hypermodeinc/dgraph/issues/2761)) - Fix Test: TestMillion. - Fix Jepsen bank test. ([#2764](https://github.com/hypermodeinc/dgraph/issues/2764)) - Fix link to help_wanted. ([#2774](https://github.com/hypermodeinc/dgraph/issues/2774)) -- Fix invalid division by zero error. Fixes [#2733](https://github.com/hypermodeinc/dgraph/issues/2733). -- Fix missing predicates after export and bulk load. Fixes [#2616](https://github.com/hypermodeinc/dgraph/issues/2616). -- Handle various edge cases around cluster memberships. ([#2791](https://github.com/hypermodeinc/dgraph/issues/2791)) -- Change Encrypt to not re-encrypt password values. Fixes [#2765](https://github.com/hypermodeinc/dgraph/issues/2765). -- Correctly parse facet types for both JSON and RDF formats. Previously the - parsing was handled differently depending on the input format. ([#2797](https://github.com/hypermodeinc/dgraph/issues/2797)) +- Fix invalid division by zero error. Fixes + [#2733](https://github.com/hypermodeinc/dgraph/issues/2733). +- Fix missing predicates after export and bulk load. Fixes + [#2616](https://github.com/hypermodeinc/dgraph/issues/2616). +- Handle various edge cases around cluster memberships. + ([#2791](https://github.com/hypermodeinc/dgraph/issues/2791)) +- Change Encrypt to not re-encrypt password values. Fixes + [#2765](https://github.com/hypermodeinc/dgraph/issues/2765). +- Correctly parse facet types for both JSON and RDF formats. Previously the parsing was handled + differently depending on the input format. + ([#2797](https://github.com/hypermodeinc/dgraph/issues/2797)) ## [1.0.10] - 2018-11-05 + [1.0.10]: https://github.com/hypermodeinc/dgraph/compare/v1.0.9...v1.0.10 -**Note: This release requires you to export and re-import data. We have changed the underlying storage format.** +**Note: This release requires you to export and re-import data. We have changed the underlying +storage format.** -### Added +**Added** -- The Alter endpoint can be protected by an auth token that is set on the Dgraph Alphas via the `--auth_token` option. This can help prevent accidental schema updates and drop all operations. ([#2692](https://github.com/hypermodeinc/dgraph/issues/2692)) +- The Alter endpoint can be protected by an auth token that is set on the Dgraph Alphas via the + `--auth_token` option. This can help prevent accidental schema updates and drop all operations. + ([#2692](https://github.com/hypermodeinc/dgraph/issues/2692)) - Optimize has function ([#2724](https://github.com/hypermodeinc/dgraph/issues/2724)) -- Expose the health check API via gRPC. ([#2721](https://github.com/hypermodeinc/dgraph/issues/2721)) +- Expose the health check API via gRPC. + ([#2721](https://github.com/hypermodeinc/dgraph/issues/2721)) -### Changed +**Changed** - Dgraph is relicensed to Apache 2.0. ([#2652](https://github.com/hypermodeinc/dgraph/issues/2652)) -- **Breaking change**. Rename Dgraph Server to Dgraph Alpha to clarify discussions of the Dgraph cluster. The top-level command `dgraph server` is now `dgraph alpha`. ([#2667](https://github.com/hypermodeinc/dgraph/issues/2667)) -- Prometheus metrics have been renamed for consistency for alpha, memory, and lru cache metrics. ([#2636](https://github.com/hypermodeinc/dgraph/issues/2636), [#2670](https://github.com/hypermodeinc/dgraph/issues/2670), [#2714](https://github.com/hypermodeinc/dgraph/issues/2714)) -- The `dgraph-converter` command is available as the subcommand `dgraph conv`. ([#2635](https://github.com/hypermodeinc/dgraph/issues/2635)) +- **Breaking change**. Rename Dgraph Server to Dgraph Alpha to clarify discussions of the Dgraph + cluster. The top-level command `dgraph server` is now `dgraph alpha`. + ([#2667](https://github.com/hypermodeinc/dgraph/issues/2667)) +- Prometheus metrics have been renamed for consistency for alpha, memory, and lru cache metrics. + ([#2636](https://github.com/hypermodeinc/dgraph/issues/2636), + [#2670](https://github.com/hypermodeinc/dgraph/issues/2670), + [#2714](https://github.com/hypermodeinc/dgraph/issues/2714)) +- The `dgraph-converter` command is available as the subcommand `dgraph conv`. + ([#2635](https://github.com/hypermodeinc/dgraph/issues/2635)) - Updating protobuf version. ([#2639](https://github.com/hypermodeinc/dgraph/issues/2639)) - Allow checkpwd to be aliased ([#2641](https://github.com/hypermodeinc/dgraph/issues/2641)) -- Better control excessive traffic to Dgraph ([#2678](https://github.com/hypermodeinc/dgraph/issues/2678)) -- Export format now exports on the Alpha receiving the export request. The naming scheme of the export files has been simplified. -- Improvements to the `dgraph debug` tool that can be used to inspect the contents of the posting lists directory. +- Better control excessive traffic to Dgraph + ([#2678](https://github.com/hypermodeinc/dgraph/issues/2678)) +- Export format now exports on the Alpha receiving the export request. The naming scheme of the + export files has been simplified. +- Improvements to the `dgraph debug` tool that can be used to inspect the contents of the posting + lists directory. - Bring in Badger updates ([#2697](https://github.com/hypermodeinc/dgraph/issues/2697)) -### Fixed +**Fixed** -- Make raft leader resume probing after snapshot crash ([#2707](https://github.com/hypermodeinc/dgraph/issues/2707)) -- **Breaking change:** Create a lot simpler sorted uint64 codec ([#2716](https://github.com/hypermodeinc/dgraph/issues/2716)) -- Increase the size of applyCh, to give Raft some breathing space. Otherwise, it fails to maintain quorum health. +- Make raft leader resume probing after snapshot crash + ([#2707](https://github.com/hypermodeinc/dgraph/issues/2707)) +- **Breaking change:** Create a lot simpler sorted uint64 codec + ([#2716](https://github.com/hypermodeinc/dgraph/issues/2716)) +- Increase the size of applyCh, to give Raft some breathing space. Otherwise, it fails to maintain + quorum health. - Zero should stream last commit update - Send commit timestamps in order ([#2687](https://github.com/hypermodeinc/dgraph/issues/2687)) - Query blocks with the same name are no longer allowed. -- Fix out-of-range values in query parser. ([#2690](https://github.com/hypermodeinc/dgraph/issues/2690)) +- Fix out-of-range values in query parser. + ([#2690](https://github.com/hypermodeinc/dgraph/issues/2690)) ## [1.0.9] - 2018-10-02 + [1.0.9]: https://github.com/hypermodeinc/dgraph/compare/v1.0.8...v1.0.9 -### Added +**Added** -- This version switches Badger Options to reasonable settings for p and w directories. This removes the need to expose `--badger.options` option and removes the `none` option from `--badger.vlog`. ([#2605](https://github.com/hypermodeinc/dgraph/issues/2605)) -- Add support for ignoring parse errors in bulk loader with the option `--ignore_error`. ([#2599](https://github.com/hypermodeinc/dgraph/issues/2599)) -- Introduction of new command `dgraph cert` to simplify initial TLS setup. See [TLS configuration docs](https://dgraph.io/docs/deploy/#tls-configuration) for more info. -- Add `expand(_forward_)` and `expand(_reverse_)` to GraphQL+- query language. If `_forward_` is passed as an argument to `expand()`, all predicates at that level (minus any reverse predicates) are retrieved. -If `_reverse_` is passed as an argument to `expand()`, only the reverse predicates are retrieved. +- This version switches Badger Options to reasonable settings for p and w directories. This removes + the need to expose `--badger.options` option and removes the `none` option from `--badger.vlog`. + ([#2605](https://github.com/hypermodeinc/dgraph/issues/2605)) +- Add support for ignoring parse errors in bulk loader with the option `--ignore_error`. + ([#2599](https://github.com/hypermodeinc/dgraph/issues/2599)) +- Introduction of new command `dgraph cert` to simplify initial TLS setup. See + [TLS configuration docs](https://dgraph.io/docs/deploy/#tls-configuration) for more info. +- Add `expand(_forward_)` and `expand(_reverse_)` to GraphQL+- query language. If `_forward_` is + passed as an argument to `expand()`, all predicates at that level (minus any reverse predicates) + are retrieved. If `_reverse_` is passed as an argument to `expand()`, only the reverse predicates + are retrieved. -### Changed +**Changed** - Rename intern pkg to pb ([#2608](https://github.com/hypermodeinc/dgraph/issues/2608)) -### Fixed +**Fixed** - Remove LinRead map logic from Dgraph ([#2570](https://github.com/hypermodeinc/dgraph/issues/2570)) - Sanity length check for facets mostly. -- Make has function correct w.r.t. transactions ([#2585](https://github.com/hypermodeinc/dgraph/issues/2585)) -- Increase the snapshot calculation interval, while decreasing the min number of entries required; so we take snapshots even when there's little activity. -- Convert an assert during DropAll to inf retry. ([#2578](https://github.com/hypermodeinc/dgraph/issues/2578)) -- Fix a bug which caused all transactions to abort if `--expand_edge` was set to false. Fixes [#2547](https://github.com/hypermodeinc/dgraph/issues/2547). -- Set the Applied index in Raft directly, so it does not pick up an index older than the snapshot. Ensure that it is in sync with the Applied watermark. Fixes [#2581](https://github.com/hypermodeinc/dgraph/issues/2581). +- Make has function correct w.r.t. transactions + ([#2585](https://github.com/hypermodeinc/dgraph/issues/2585)) +- Increase the snapshot calculation interval, while decreasing the min number of entries required; + so we take snapshots even when there's little activity. +- Convert an assert during DropAll to inf retry. + ([#2578](https://github.com/hypermodeinc/dgraph/issues/2578)) +- Fix a bug which caused all transactions to abort if `--expand_edge` was set to false. Fixes + [#2547](https://github.com/hypermodeinc/dgraph/issues/2547). +- Set the Applied index in Raft directly, so it does not pick up an index older than the snapshot. + Ensure that it is in sync with the Applied watermark. Fixes + [#2581](https://github.com/hypermodeinc/dgraph/issues/2581). - Pull in Badger updates. This also fixes the Unable to find log file, retry error. -- Improve efficiency of readonly transactions by reusing the same read ts ([#2604](https://github.com/hypermodeinc/dgraph/issues/2604)) +- Improve efficiency of readonly transactions by reusing the same read ts + ([#2604](https://github.com/hypermodeinc/dgraph/issues/2604)) - Fix a bug in Raft.Run loop. ([#2606](https://github.com/hypermodeinc/dgraph/issues/2606)) -- Fix a few issues regarding snapshot.Index for raft.Cfg.Applied. Do not overwrite any existing data when apply txn commits. Do not let CreateSnapshot fail. -- Consider all future versions of the key as well, when deciding whether to write a key or not during txn commits. Otherwise, we'll end up in an endless loop of trying to write a stale key but failing to do so. -- When testing inequality value vars with non-matching values, the response was sent as an error although it should return empty result if the query has correct syntax. ([#2611](https://github.com/hypermodeinc/dgraph/issues/2611)) -- Switch traces to glogs in worker/export.go ([#2614](https://github.com/hypermodeinc/dgraph/issues/2614)) -- Improve error handling for `dgraph live` for errors when processing RDF and schema files. ([#2596](https://github.com/hypermodeinc/dgraph/issues/2596)) -- Fix task conversion from bool to int that used uint32 ([#2621](https://github.com/hypermodeinc/dgraph/issues/2621)) -- Fix `expand(_all_)` in recurse queries ([#2600](https://github.com/hypermodeinc/dgraph/issues/2600)). -- Add language aliases for broader support for full text indices. ([#2602](https://github.com/hypermodeinc/dgraph/issues/2602)) +- Fix a few issues regarding snapshot.Index for raft.Cfg.Applied. Do not overwrite any existing data + when apply txn commits. Do not let CreateSnapshot fail. +- Consider all future versions of the key as well, when deciding whether to write a key or not + during txn commits. Otherwise, we'll end up in an endless loop of trying to write a stale key but + failing to do so. +- When testing inequality value vars with non-matching values, the response was sent as an error + although it should return empty result if the query has correct syntax. + ([#2611](https://github.com/hypermodeinc/dgraph/issues/2611)) +- Switch traces to glogs in worker/export.go + ([#2614](https://github.com/hypermodeinc/dgraph/issues/2614)) +- Improve error handling for `dgraph live` for errors when processing RDF and schema files. + ([#2596](https://github.com/hypermodeinc/dgraph/issues/2596)) +- Fix task conversion from bool to int that used uint32 + ([#2621](https://github.com/hypermodeinc/dgraph/issues/2621)) +- Fix `expand(_all_)` in recurse queries + ([#2600](https://github.com/hypermodeinc/dgraph/issues/2600)). +- Add language aliases for broader support for full text indices. + ([#2602](https://github.com/hypermodeinc/dgraph/issues/2602)) ## [1.0.8] - 2018-08-29 + [1.0.8]: https://github.com/hypermodeinc/dgraph/compare/v1.0.7...v1.0.8 -### Added +**Added** - Introduce a new /assignIds HTTP endpoint in Zero, so users can allocate UIDs to nodes externally. -- Add a new tool which retrieves and increments a counter by 1 transactionally. This can be used to test the sanity of Dgraph cluster. +- Add a new tool which retrieves and increments a counter by 1 transactionally. This can be used to + test the sanity of Dgraph cluster. -### Changed +**Changed** -- This version introduces tracking of a few anonymous metrics to measure Dgraph adoption ([#2554](https://github.com/hypermodeinc/dgraph/issues/2554)). These metrics do not contain any specifically identifying information about the user, so most users can leave it on. This can be turned off by setting `--telemetry=false` flag if needed in Dgraph Zero. +- This version introduces tracking of a few anonymous metrics to measure Dgraph adoption + ([#2554](https://github.com/hypermodeinc/dgraph/issues/2554)). These metrics do not contain any + specifically identifying information about the user, so most users can leave it on. This can be + turned off by setting `--telemetry=false` flag if needed in Dgraph Zero. -### Fixed +**Fixed** -- Correctly handle a list of type geo in json ([#2482](https://github.com/hypermodeinc/dgraph/issues/2482), [#2485](https://github.com/hypermodeinc/dgraph/issues/2485)). +- Correctly handle a list of type geo in json + ([#2482](https://github.com/hypermodeinc/dgraph/issues/2482), + [#2485](https://github.com/hypermodeinc/dgraph/issues/2485)). - Fix the graceful shutdown of Dgraph server, so a single Ctrl+C would now suffice to stop it. -- Fix various deadlocks in Dgraph and set ConfState in Raft correctly ([#2548](https://github.com/hypermodeinc/dgraph/issues/2548)). -- Significantly decrease the number of transaction aborts by using SPO as key for entity to entity connections. ([#2556](https://github.com/hypermodeinc/dgraph/issues/2556)). -- Do not print error while sending Raft message by default. No action needs to be taken by the user, so it is set to V(3) level. +- Fix various deadlocks in Dgraph and set ConfState in Raft correctly + ([#2548](https://github.com/hypermodeinc/dgraph/issues/2548)). +- Significantly decrease the number of transaction aborts by using SPO as key for entity to entity + connections. ([#2556](https://github.com/hypermodeinc/dgraph/issues/2556)). +- Do not print error while sending Raft message by default. No action needs to be taken by the user, + so it is set to V(3) level. ## [1.0.7] - 2018-08-10 + [1.0.7]: https://github.com/hypermodeinc/dgraph/compare/v1.0.6...v1.0.7 -### Changed +**Changed** - Set the `--conc` flag in live loader default to 1, as a temporary fix to avoid tons of aborts. -### Fixed +**Fixed** -- All Oracle delta streams are applied via Raft proposals. This deals better with network partition like edge-cases. [#2463](https://github.com/hypermodeinc/dgraph/issues/2463) -- Fix deadlock in 10-node cluster convergence. Fixes [#2286](https://github.com/hypermodeinc/dgraph/issues/2286). +- All Oracle delta streams are applied via Raft proposals. This deals better with network partition + like edge-cases. [#2463](https://github.com/hypermodeinc/dgraph/issues/2463) +- Fix deadlock in 10-node cluster convergence. Fixes + [#2286](https://github.com/hypermodeinc/dgraph/issues/2286). - Make ReadIndex work safely. [#2469](https://github.com/hypermodeinc/dgraph/issues/2469) -- Simplify snapshots, leader now calculates and proposes snapshots to the group. [#2475](https://github.com/hypermodeinc/dgraph/issues/2475). +- Simplify snapshots, leader now calculates and proposes snapshots to the group. + [#2475](https://github.com/hypermodeinc/dgraph/issues/2475). - Make snapshot streaming more robust. [#2487](https://github.com/hypermodeinc/dgraph/issues/2487) -- Consolidate all txn tracking logic into Oracle, remove inSnapshot logic. [#2480](https://github.com/hypermodeinc/dgraph/issues/2480). +- Consolidate all txn tracking logic into Oracle, remove inSnapshot logic. + [#2480](https://github.com/hypermodeinc/dgraph/issues/2480). - Bug fix in Badger, to stop panics when exporting. - Use PreVote to avoid leader change on a node join. -- Fix a long-standing bug where `raft.Step` was being called via goroutines. It is now called serially. -- Fix context deadline issues with proposals. [#2501](https://github.com/hypermodeinc/dgraph/issues/2501). +- Fix a long-standing bug where `raft.Step` was being called via goroutines. It is now called + serially. +- Fix context deadline issues with proposals. + [#2501](https://github.com/hypermodeinc/dgraph/issues/2501). ## [1.0.6] - 2018-06-20 -[1.0.6]: https://github.com/hypermodeinc/dgraph/compare/v1.0.5...v1.0.6 -### Added - -* Support GraphQL vars as args for Regexp function. [#2353](https://github.com/hypermodeinc/dgraph/issues/2353) -* Support GraphQL vars with filters. [#2359](https://github.com/hypermodeinc/dgraph/issues/2359) -* Add JSON mutations to raw HTTP. [#2396](https://github.com/hypermodeinc/dgraph/issues/2396) - -### Fixed - -* Fix math >= evaluation. [#2365](https://github.com/hypermodeinc/dgraph/issues/2365) -* Avoid race condition between mutation commit and predicate move. [#2392](https://github.com/hypermodeinc/dgraph/issues/2392) -* Ability to correctly distinguish float from int in JSON. [#2398](https://github.com/hypermodeinc/dgraph/issues/2398) -* Remove _dummy_ data key. [#2401](https://github.com/hypermodeinc/dgraph/issues/2401) -* Serialize applying of Raft proposals. Concurrent application was complex and - cause of multiple bugs. [#2428](https://github.com/hypermodeinc/dgraph/issues/2428). -* Improve Zero connections. -* Fix bugs in snapshot move, refactor code and improve performance significantly. [#2440](https://github.com/hypermodeinc/dgraph/issues/2440), [#2442](https://github.com/hypermodeinc/dgraph/issues/2442) -* Add error handling to GetNoStore. Fixes [#2373](https://github.com/hypermodeinc/dgraph/issues/2373). -* Fix bugs in Bulk loader. [#2449](https://github.com/hypermodeinc/dgraph/issues/2449) -* Posting List and Raft bug fixes. [#2457](https://github.com/hypermodeinc/dgraph/issues/2457) - -### Changed - -* Pull in Badger v1.5.2. -* Raft storage is now done entirely via Badger. This reduces RAM - consumption by previously used MemoryStorage. [#2433](https://github.com/hypermodeinc/dgraph/issues/2433) -* Trace how node.Run loop performs. -* Allow tweaking Badger options. +[1.0.6]: https://github.com/hypermodeinc/dgraph/compare/v1.0.5...v1.0.6 -**Note:** This change modifies some flag names. In particular, Badger options -are now exposed via flags named with `--badger.` prefix. +**Added** + +- Support GraphQL vars as args for Regexp function. + [#2353](https://github.com/hypermodeinc/dgraph/issues/2353) +- Support GraphQL vars with filters. [#2359](https://github.com/hypermodeinc/dgraph/issues/2359) +- Add JSON mutations to raw HTTP. [#2396](https://github.com/hypermodeinc/dgraph/issues/2396) + +**Fixed** + +- Fix math >= evaluation. [#2365](https://github.com/hypermodeinc/dgraph/issues/2365) +- Avoid race condition between mutation commit and predicate move. + [#2392](https://github.com/hypermodeinc/dgraph/issues/2392) +- Ability to correctly distinguish float from int in JSON. + [#2398](https://github.com/hypermodeinc/dgraph/issues/2398) +- Remove _dummy_ data key. [#2401](https://github.com/hypermodeinc/dgraph/issues/2401) +- Serialize applying of Raft proposals. Concurrent application was complex and cause of multiple + bugs. [#2428](https://github.com/hypermodeinc/dgraph/issues/2428). +- Improve Zero connections. +- Fix bugs in snapshot move, refactor code and improve performance significantly. + [#2440](https://github.com/hypermodeinc/dgraph/issues/2440), + [#2442](https://github.com/hypermodeinc/dgraph/issues/2442) +- Add error handling to GetNoStore. Fixes + [#2373](https://github.com/hypermodeinc/dgraph/issues/2373). +- Fix bugs in Bulk loader. [#2449](https://github.com/hypermodeinc/dgraph/issues/2449) +- Posting List and Raft bug fixes. [#2457](https://github.com/hypermodeinc/dgraph/issues/2457) + +**Changed** + +- Pull in Badger v1.5.2. +- Raft storage is now done entirely via Badger. This reduces RAM consumption by previously used + MemoryStorage. [#2433](https://github.com/hypermodeinc/dgraph/issues/2433) +- Trace how node.Run loop performs. +- Allow tweaking Badger options. + +**Note:** This change modifies some flag names. In particular, Badger options are now exposed via +flags named with `--badger.` prefix. ## [1.0.5] - 2018-04-20 -[1.0.5]: https://github.com/hypermodeinc/dgraph/compare/v1.0.4...v1.0.5 - -### Added -* Option to have server side sequencing. -* Ability to specify whitelisted IP addresses for admin actions. - - -### Fixed - -* Fix bug where predicate with string type sometimes appeared as `_:uidffffffffffffffff` in exports. -* Validate facet value should be according to the facet type supplied when mutating using N-Quads ([#2074](https://github.com/hypermodeinc/dgraph/issues/2074)). -* Use `time.Equal` function for comparing predicates with `datetime`([#2219](https://github.com/hypermodeinc/dgraph/issues/2219)). -* Skip `BitEmptyPosting` for `has` queries. -* Return error from query if we don't serve the group for the attribute instead of crashing ([#2227](https://github.com/hypermodeinc/dgraph/issues/2227)). -* Send `maxpending` in connection state to server ([#2236](https://github.com/hypermodeinc/dgraph/issues/2236)). -* Fix bug in SP* transactions ([#2148](https://github.com/hypermodeinc/dgraph/issues/2148)). -* Batch and send during snapshot to make snapshots faster. -* Don't skip schema keys while calculating tablets served. -* Fix the issue which could lead to snapshot getting blocked for a cluster with replicas ([#2266](https://github.com/hypermodeinc/dgraph/issues/2266)). -* Dgraph server retries indefinitely to connect to Zero. -* Allow filtering and regex queries for list types with lossy tokenizers. -* Dgraph server segfault in worker package ([#2322](https://github.com/hypermodeinc/dgraph/issues/2322)). -* Node crashes can lead to the loss of inserted triples ([#2290](https://github.com/hypermodeinc/dgraph/issues/2290)). - - -### Changed +[1.0.5]: https://github.com/hypermodeinc/dgraph/compare/v1.0.4...v1.0.5 -* Cancel pending transactions for a predicate when predicate move is initiated. -* Move Go client to its own repo at `dgraph-io/dgo`. -* Make `expand(_all_)` return value and uid facets. -* Add an option to specify a `@lang` directive in schema for predicates with lang tags. -* Flag `memory_mb` has been changed to `lru_mb`. The default recommended value for `lru_mb` is +**Added** + +- Option to have server side sequencing. +- Ability to specify whitelisted IP addresses for admin actions. + +**Fixed** + +- Fix bug where predicate with string type sometimes appeared as `_:uidffffffffffffffff` in exports. +- Validate facet value should be according to the facet type supplied when mutating using N-Quads + ([#2074](https://github.com/hypermodeinc/dgraph/issues/2074)). +- Use `time.Equal` function for comparing predicates with + `datetime`([#2219](https://github.com/hypermodeinc/dgraph/issues/2219)). +- Skip `BitEmptyPosting` for `has` queries. +- Return error from query if we don't serve the group for the attribute instead of crashing + ([#2227](https://github.com/hypermodeinc/dgraph/issues/2227)). +- Send `maxpending` in connection state to server + ([#2236](https://github.com/hypermodeinc/dgraph/issues/2236)). +- Fix bug in SP\* transactions ([#2148](https://github.com/hypermodeinc/dgraph/issues/2148)). +- Batch and send during snapshot to make snapshots faster. +- Don't skip schema keys while calculating tablets served. +- Fix the issue which could lead to snapshot getting blocked for a cluster with replicas + ([#2266](https://github.com/hypermodeinc/dgraph/issues/2266)). +- Dgraph server retries indefinitely to connect to Zero. +- Allow filtering and regex queries for list types with lossy tokenizers. +- Dgraph server segfault in worker package + ([#2322](https://github.com/hypermodeinc/dgraph/issues/2322)). +- Node crashes can lead to the loss of inserted triples + ([#2290](https://github.com/hypermodeinc/dgraph/issues/2290)). + +**Changed** + +- Cancel pending transactions for a predicate when predicate move is initiated. +- Move Go client to its own repo at `dgraph-io/dgo`. +- Make `expand(_all_)` return value and uid facets. +- Add an option to specify a `@lang` directive in schema for predicates with lang tags. +- Flag `memory_mb` has been changed to `lru_mb`. The default recommended value for `lru_mb` is one-third of the total RAM available on the server. ## [1.0.4] - 2018-03-09 + [1.0.4]: https://github.com/hypermodeinc/dgraph/compare/v1.0.3...v1.0.4 -### Added +**Added** -* Support for empty strings in query attributes. -* Support GraphQL vars in first, offset and after at root. -* Add support for query_edge_limit flag which can be used to limit number of results for shortest +- Support for empty strings in query attributes. +- Support GraphQL vars in first, offset and after at root. +- Add support for query_edge_limit flag which can be used to limit number of results for shortest path, recurse queries. -* Make rebalance interval a flag in Zero. -* Return latency information for mutation operations. -* Support @upsert directive in schema. - -### Fixed - -* Issues with predicate deletion in a cluster. -* Handle errors from posting.Get. -* Correctly update commitTs while committing and startTs == deleteTs. -* Error handling in abort http handler. -* Get latest membership state from Zero if uid in mutation > maxLeaseId. -* Fix bug in Mutate where mutated keys were not filled. -* Update membership state if we can't find a leader while doing snapshot retrieval. -* Make snapshotting more frequent, also try aborting long pending transactions. -* Trim null character from end of strings before exporting. -* Sort facets after parsing RDF's using bulk loader. -* Fig bug in SyncIfDirty. -* Fix fatal error due to TxnTooBig error. -* Fix bug in dgraph live where some batches could be skipped on conflict error. -* Fix a bug related to expand(_all_) queries. -* Run cleanPredicate and proposeKeyValues sequentially. -* Serialize connect requests in Zero. - -### Changed - -* Retry snapshot retrieval and join cluster indefinitely. -* Make client directory optional in dgraph live. -* Do snapshot in Zero in a goroutine so that Run loop isn't blocked. - +- Make rebalance interval a flag in Zero. +- Return latency information for mutation operations. +- Support @upsert directive in schema. + +**Fixed** + +- Issues with predicate deletion in a cluster. +- Handle errors from posting.Get. +- Correctly update commitTs while committing and startTs == deleteTs. +- Error handling in abort http handler. +- Get latest membership state from Zero if uid in mutation > maxLeaseId. +- Fix bug in Mutate where mutated keys were not filled. +- Update membership state if we can't find a leader while doing snapshot retrieval. +- Make snapshotting more frequent, also try aborting long pending transactions. +- Trim null character from end of strings before exporting. +- Sort facets after parsing RDF's using bulk loader. +- Fig bug in SyncIfDirty. +- Fix fatal error due to TxnTooBig error. +- Fix bug in dgraph live where some batches could be skipped on conflict error. +- Fix a bug related to expand(_all_) queries. +- Run cleanPredicate and proposeKeyValues sequentially. +- Serialize connect requests in Zero. + +**Changed** + +- Retry snapshot retrieval and join cluster indefinitely. +- Make client directory optional in dgraph live. +- Do snapshot in Zero in a goroutine so that Run loop isn't blocked. ## [1.0.3] - 2018-02-08 + [1.0.3]: https://github.com/hypermodeinc/dgraph/compare/v1.0.2...v1.0.3 -### Added +**Added** -* Support for specifying blank nodes as part of JSON mutation. -* `dgraph version` command to check current version. -* `curl` to Docker image. -* `moveTablet` endpoint to Zero to allow initiating a predicate move. +- Support for specifying blank nodes as part of JSON mutation. +- `dgraph version` command to check current version. +- `curl` to Docker image. +- `moveTablet` endpoint to Zero to allow initiating a predicate move. -### Fixed +**Fixed** -* Out of range error while doing `eq` query. -* Reduce `maxBackOffDelay` to 10 sec so that leader election is faster after restart. -* Fix bugs with predicate move where some data was not sent and schema not loaded properly on +- Out of range error while doing `eq` query. +- Reduce `maxBackOffDelay` to 10 sec so that leader election is faster after restart. +- Fix bugs with predicate move where some data was not sent and schema not loaded properly on replicas. -* Fix the total number of RDF's processed when live loader ends. -* Reindex data when schema is changed to list type to fix adding and deleting new data. -* Correctly upate uidMatrix when facetOrder is supplied. -* Inequality operator(`gt` and `lt`) result for non lossy tokenizers. +- Fix the total number of RDF's processed when live loader ends. +- Reindex data when schema is changed to list type to fix adding and deleting new data. +- Correctly upate uidMatrix when facetOrder is supplied. +- Inequality operator(`gt` and `lt`) result for non lossy tokenizers. -### Changed +**Changed** -* `--zero_addr` flag changed to `--zero` for `dgraph bulk` command. -* Default ports for Zero have been changed `7080` => `5080`(grpc) and `8080` => `6080`(http). -* Update badger version and how purging is done to fix CPU spiking when Dgraph is idle. -* Print predicate name as part of the warning about long term for exact index. +- `--zero_addr` flag changed to `--zero` for `dgraph bulk` command. +- Default ports for Zero have been changed `7080` => `5080`(grpc) and `8080` => `6080`(http). +- Update badger version and how purging is done to fix CPU spiking when Dgraph is idle. +- Print predicate name as part of the warning about long term for exact index. ## [1.0.2] - 2018-01-17 + [1.0.2]: https://github.com/hypermodeinc/dgraph/compare/v1.0.1...v1.0.2 -### Fixed - -* Always return predicates of list type in an array. -* Edges without facet values are also returned when performing sort on facet. -* Don't derive schema while deleting edges. -* Better error checking when accessing posting lists. Fixes bug where parts of - queries are sometimes omitted when system is under heavy load. -* Fix missing error check in mutation handling when using CommitNow (gave incorrect error). -* Fix bug where eq didn't work correctly for the fulltext index. -* Fix race because of which `replicas` flag was not respected. -* Fix bug with key copy during predicate move. -* Fix race in merging keys keys from btree and badger iterator. -* Fix snapshot retrieval for new nodes by retrieving it before joining the cluster. -* Write schema at timestamp 1 in bulk loader. -* Fix unexpected meta fatal error. -* Fix groupby result incase the child being grouped open has multiple parents. - -### Changed - -* Remove StartTs field from `api.Operation`. -* Print error message in live loader if its not ErrAborted. Also, stop using membership state and -instead use the address given by user. -* Only send keys corresponding to data that was mutated. +**Fixed** + +- Always return predicates of list type in an array. +- Edges without facet values are also returned when performing sort on facet. +- Don't derive schema while deleting edges. +- Better error checking when accessing posting lists. Fixes bug where parts of queries are sometimes + omitted when system is under heavy load. +- Fix missing error check in mutation handling when using CommitNow (gave incorrect error). +- Fix bug where eq didn't work correctly for the fulltext index. +- Fix race because of which `replicas` flag was not respected. +- Fix bug with key copy during predicate move. +- Fix race in merging keys keys from btree and badger iterator. +- Fix snapshot retrieval for new nodes by retrieving it before joining the cluster. +- Write schema at timestamp 1 in bulk loader. +- Fix unexpected meta fatal error. +- Fix groupby result incase the child being grouped open has multiple parents. + +**Changed** + +- Remove StartTs field from `api.Operation`. +- Print error message in live loader if its not ErrAborted. Also, stop using membership state and + instead use the address given by user. +- Only send keys corresponding to data that was mutated. ## [1.0.1] - 2017-12-20 + [1.0.1]: https://github.com/hypermodeinc/dgraph/compare/v1.0.0...v1.0.1 -### Fixed +**Fixed** -* Wait for background goroutines to finish in posting package on shutdown. -* Return error if we cant parse the uid given in json input for mutations. -* Don't remove `_predicate_` schema from disk during drop all. -* Fix panic in expand(_all_) +- Wait for background goroutines to finish in posting package on shutdown. +- Return error if we cant parse the uid given in json input for mutations. +- Don't remove `_predicate_` schema from disk during drop all. +- Fix panic in expand(_all_) -### Changed +**Changed** -* Make sure at least one field is set while doing Alter. +- Make sure at least one field is set while doing Alter. ## [1.0.0] - 2017-12-18 + [1.0.0]: https://github.com/hypermodeinc/dgraph/compare/v0.9.3...v1.0.0 -### Added +**Added** -* Allow doing Mutate and Alter Operations using dgraph UI. -* Provide option to user to ignore conflicts on index keys. +- Allow doing Mutate and Alter Operations using dgraph UI. +- Provide option to user to ignore conflicts on index keys. -### Fixed +**Fixed** -* Language tag parsing in queries now accepts digits (in line with RDF parsing). -* Ensure that GraphQL variables are declared before use. -* Export now uses correct blank node syntax. -* Membership stream doesn't get stuck if node steps down as leader. -* Fix issue where sets were not being returned after doing a S P * deletion when part of same +- Language tag parsing in queries now accepts digits (in line with RDF parsing). +- Ensure that GraphQL variables are declared before use. +- Export now uses correct blank node syntax. +- Membership stream doesn't get stuck if node steps down as leader. +- Fix issue where sets were not being returned after doing a S P \* deletion when part of same transaction. -* Empty string values are stored as it is and no strings have special meaning now. -* Correctly update order of facetMatrix when orderdesc/orderasc is applied. -* Allow live and bulk loaders to work with multiple zeros. -* Fix sorting with for predicates with multiple language tags. -* Fix alias edge cases in normalize directive. -* Allow reading new index key mutated as part of same transaction. -* Fix bug in value log GC in badger. -* SIGINT now forces a shutdown after 5 seconds when there are pending RPCs. - -### Changed - -* `DropAttr` now also removes the schema for the attribute (previously it just removed the edges). -* Tablet metadata is removed from zero after deletion of predicate. -* LRU size is changed dynamically now based on `max_memory_mb` -* Call RunValueLogGC for every GB increase in size of value logs. Upgrade vendored version of - Badger. -* Prohibit string to password schema change. -* Make purging less aggressive. -* Check if GraphQL Variable is defined before using. +- Empty string values are stored as it is and no strings have special meaning now. +- Correctly update order of facetMatrix when orderdesc/orderasc is applied. +- Allow live and bulk loaders to work with multiple zeros. +- Fix sorting with for predicates with multiple language tags. +- Fix alias edge cases in normalize directive. +- Allow reading new index key mutated as part of same transaction. +- Fix bug in value log GC in badger. +- SIGINT now forces a shutdown after 5 seconds when there are pending RPCs. + +**Changed** + +- `DropAttr` now also removes the schema for the attribute (previously it just removed the edges). +- Tablet metadata is removed from zero after deletion of predicate. +- LRU size is changed dynamically now based on `max_memory_mb` +- Call RunValueLogGC for every GB increase in size of value logs. Upgrade vendored version of + Badger. +- Prohibit string to password schema change. +- Make purging less aggressive. +- Check if GraphQL Variable is defined before using. ## [0.9.3] - 2017-12-01 + [0.9.3]: https://github.com/hypermodeinc/dgraph/compare/v0.9.2...v0.9.3 -### Added +**Added** -* Support for alias while asking for facets. -* Support for general configuration via environment variables and configuration files. -* `IgnoreIndexConflict` field in Txn which allows ignoring conflicts on index keys. +- Support for alias while asking for facets. +- Support for general configuration via environment variables and configuration files. +- `IgnoreIndexConflict` field in Txn which allows ignoring conflicts on index keys. -### Fixed +**Fixed** -* `expand(_all_)` now correctly gives all language variants of a string. -* Indexes now correctly maintained when deleting via `S * *` and `S P *`. -* `expand(_all_)` now follows reverse edges. -* Don't return uid for nodes without any children when requested through debug flag. -* GraphQL variables for HTTP endpoints. Variable map can be set as a JSON - object using the `X-Dgraph-Vars` header. -* Abort if CommitNow flag is set and the mutation fails. -* Live loader treats subjects/predicates that look like UIDs as existing nodes - rather than new nodes. -* Fix bug in `@groupby` queries where predicate was converted to lower case in queries. +- `expand(_all_)` now correctly gives all language variants of a string. +- Indexes now correctly maintained when deleting via `S * *` and `S P *`. +- `expand(_all_)` now follows reverse edges. +- Don't return uid for nodes without any children when requested through debug flag. +- GraphQL variables for HTTP endpoints. Variable map can be set as a JSON object using the + `X-Dgraph-Vars` header. +- Abort if CommitNow flag is set and the mutation fails. +- Live loader treats subjects/predicates that look like UIDs as existing nodes rather than new + nodes. +- Fix bug in `@groupby` queries where predicate was converted to lower case in queries. - Fix race condition in IsPeer. (#3432) -### Changed +**Changed** -* When showing a predicate with list type, only values without a language tag are shown. To get the values of the predicate that are tagged with a language, query the predicate with that language explicitly. -* Validate the address advertised by dgraph nodes. -* Store/Restore peer map on snapshot. -* Fix rdfs per second reporting in live loader. -* Fix bug in lru eviction. -* Proto definitions are split into intern and api. +- When showing a predicate with list type, only values without a language tag are shown. To get the + values of the predicate that are tagged with a language, query the predicate with that language + explicitly. +- Validate the address advertised by dgraph nodes. +- Store/Restore peer map on snapshot. +- Fix rdfs per second reporting in live loader. +- Fix bug in lru eviction. +- Proto definitions are split into intern and api. ## [0.9.2] - 2017-11-20 + [0.9.2]: https://github.com/hypermodeinc/dgraph/compare/v0.9.1...v0.9.2 -### Added +**Added** -* Support for removing dead node from quorum. -* Support for alias in groupby queries. -* Add DeleteEdges helper function for Go client. +- Support for removing dead node from quorum. +- Support for alias in groupby queries. +- Add DeleteEdges helper function for Go client. -### Changed +**Changed** -* Dgraph tries to abort long running/abandoned transactions. -* Fix TLS flag parsing for Dgraph server and live loader. -* Reduce dependencies for Go client. -* `depth` and `loop` arguments should be inside @recurse(). -* Base36 encode keys that are part of TxnContext and are sent to the client. -* Fix race condition in expand(_all_) queries. -* Fix (--ui) flag not being parsed properly. +- Dgraph tries to abort long running/abandoned transactions. +- Fix TLS flag parsing for Dgraph server and live loader. +- Reduce dependencies for Go client. +- `depth` and `loop` arguments should be inside @recurse(). +- Base36 encode keys that are part of TxnContext and are sent to the client. +- Fix race condition in expand(_all_) queries. +- Fix (--ui) flag not being parsed properly. ## [0.9.1] - 2017-11-15 + [0.9.1]: https://github.com/hypermodeinc/dgraph/compare/v0.9.0...v0.9.1 -### Changed +**Changed** -* Transaction HTTP API has been modified slightly. `start_ts` is now a path parameter instead of a header. -For `/commit` API, keys are passed in the body. +- Transaction HTTP API has been modified slightly. `start_ts` is now a path parameter instead of a + header. For `/commit` API, keys are passed in the body. ## [0.9.0] - 2017-11-14 + [0.9.0]: https://github.com/hypermodeinc/dgraph/compare/v0.8.3...v0.9.0 -**The latest release has a lot of breaking changes but also brings powerful features like Transactions, support for CJK and custom tokenization.** +**The latest release has a lot of breaking changes but also brings powerful features like +Transactions, support for CJK and custom tokenization.** -### Added +**Added** -* Dgraph adds support for distributed ACID transactions (a blog post is in works). Transactions can be done via the Go, Java or HTTP clients (JS client coming). See [docs here](https://dgraph.io/docs/clients/). -* Support for Indexing via [Custom tokenizers](https://dgraph.io/docs/query-language/#indexing-with-custom-tokenizers). -* Support for CJK languages in the full-text index. +- Dgraph adds support for distributed ACID transactions (a blog post is in works). Transactions can + be done via the Go, Java or HTTP clients (JS client coming). See + [docs here](https://dgraph.io/docs/clients/). +- Support for Indexing via + [Custom tokenizers](https://dgraph.io/docs/query-language/#indexing-with-custom-tokenizers). +- Support for CJK languages in the full-text index. -### Changed +**Changed** -#### Running Dgraph +**Running Dgraph** -* We have consolidated all the `server`, `zero`, `live/bulk-loader` binaries into a single `dgraph` binary for convenience. Instructions for running Dgraph can be found in the [docs](https://dgraph.io/docs/get-started/). -* For Dgraph server, Raft ids can be assigned automatically. A user can optionally still specify an ID, via `--idx` flag. -* `--peer` flag which was used to specify another Zero instance’s IP address is being replaced by `--zero` flag to indicate the address corresponds to Dgraph zero. -* `port`, `grpc_port` and `worker_port` flags have been removed from Dgraph server and Zero. The ports are: +- We have consolidated all the `server`, `zero`, `live/bulk-loader` binaries into a single `dgraph` + binary for convenience. Instructions for running Dgraph can be found in the + [docs](https://dgraph.io/docs/get-started/). +- For Dgraph server, Raft ids can be assigned automatically. A user can optionally still specify an + ID, via `--idx` flag. +- `--peer` flag which was used to specify another Zero instance’s IP address is being replaced by + `--zero` flag to indicate the address corresponds to Dgraph zero. +- `port`, `grpc_port` and `worker_port` flags have been removed from Dgraph server and Zero. The + ports are: -- Internal Grpc: 7080 -- HTTP: 8080 -- External Grpc: 9080 (Dgraph server only) +> Internal Grpc: 7080 HTTP: 8080 External Grpc: 9080 (Dgraph server only) Users can set `port_offset` flag, to modify these fixed ports. -#### Queries +**Queries** -* Queries, mutations and schema updates are done through separate endpoints. **Queries can no longer have a mutation block.** -* Queries can be done via `Query` Grpc endpoint (it was called `Run` before) or the `/query` HTTP handler. -* `_uid_` is renamed to `uid`. So queries now need to request for `uid`. Example -``` +- Queries, mutations and schema updates are done through separate endpoints. **Queries can no longer + have a mutation block.** +- Queries can be done via `Query` Grpc endpoint (it was called `Run` before) or the `/query` HTTP + handler. +- `_uid_` is renamed to `uid`. So queries now need to request for `uid`. Example + +```dql { bladerunner(func: eq(name@en, "Blade Runner")) { uid @@ -4349,18 +4801,26 @@ Users can set `port_offset` flag, to modify these fixed ports. } } ``` -* Facets response structure has been modified and is a lot flatter. Facet key is now `predicate|facet_name`. -Examples for [Go client](https://godoc.org/github.com/dgraph-io/dgraph/client#example-Txn-Mutate-Facets) and [HTTP](https://dgraph.io/docs/query-language/#facets-edge-attributes). -* Query latency is now returned as numeric (ns) instead of string. -* [`Recurse`](https://dgraph.io/docs/query-language/#recurse-query) is now a directive. So queries with `recurse` keyword at root won't work anymore. -* Syntax for [`count` at root](https://dgraph.io/docs/query-language/#count) has changed. You need to ask for `count(uid)`, instead of `count()`. - -#### Mutations -* Mutations can only be done via `Mutate` Grpc endpoint or via [`/mutate` HTTP handler](https://dgraph.io/docs/clients/#transactions). -* `Mutate` Grpc endpoint can be used to set/ delete JSON, or set/ delete a list of N-Quads and set/ delete raw RDF strings. -* Mutation blocks don't require the mutation keyword anymore. Here is an example of the new syntax. -``` +- Facets response structure has been modified and is a lot flatter. Facet key is now + `predicate|facet_name`. Examples for + [Go client](https://godoc.org/github.com/dgraph-io/dgraph/client#example-Txn-Mutate-Facets) and + [HTTP](https://dgraph.io/docs/query-language/#facets-edge-attributes). +- Query latency is now returned as numeric (ns) instead of string. +- [`Recurse`](https://dgraph.io/docs/query-language/#recurse-query) is now a directive. So queries + with `recurse` keyword at root won't work anymore. +- Syntax for [`count` at root](https://dgraph.io/docs/query-language/#count) has changed. You need + to ask for `count(uid)`, instead of `count()`. + +**Mutations** + +- Mutations can only be done via `Mutate` Grpc endpoint or via + [`/mutate` HTTP handler](https://dgraph.io/docs/clients/#transactions). +- `Mutate` Grpc endpoint can be used to set/ delete JSON, or set/ delete a list of N-Quads and set/ + delete raw RDF strings. +- Mutation blocks don't require the mutation keyword anymore. Here is an example of the new syntax. + +```dql { set { . @@ -4368,21 +4828,33 @@ Examples for [Go client](https://godoc.org/github.com/dgraph-io/dgraph/client#ex } } ``` -* [`Upsert`](https://dgraph.io/docs/v0.8.3/query-language/#upsert) directive and [mutation variables](https://dgraph.io/docs/v0.8.3/query-language/#variables-in-mutations) go away. Both these functionalities can now easily be achieved via transactions. -#### Schema +- [`Upsert`](https://dgraph.io/docs/v0.8.3/query-language/#upsert) directive and + [mutation variables](https://dgraph.io/docs/v0.8.3/query-language/#variables-in-mutations) go + away. Both these functionalities can now easily be achieved via transactions. + +**Schema** + +- `<*> <*>` operations, that is deleting a predicate can't be done via mutations anymore. + They need to be done via `Alter` Grpc endpoint or via the `/alter` HTTP handler. +- Drop all is now done via `Alter`. +- Schema updates are now done via `Alter` Grpc endpoint or via `/alter` HTTP handler. -* `<*> <*>` operations, that is deleting a predicate can't be done via mutations anymore. They need to be done via `Alter` Grpc endpoint or via the `/alter` HTTP handler. -* Drop all is now done via `Alter`. -* Schema updates are now done via `Alter` Grpc endpoint or via `/alter` HTTP handler. +**Go client** -#### Go client +- `Query` Grpc endpoint returns response in JSON under `Json` field instead of protocol buffer. + `client.Unmarshal` method also goes away from the Go client. Users can use `json.Unmarshal` for + unmarshalling the response. +- Response for predicate of type `geo` can be unmarshalled into a struct. Example + [here](https://godoc.org/github.com/dgraph-io/dgraph/client#example-package--SetObject). +- `Node` and `Edge` structs go away along with the `SetValue...` methods. We recommend using + [`SetJson`](https://godoc.org/github.com/dgraph-io/dgraph/client#example-package--SetObject) and + `DeleteJson` fields to do mutations. +- Examples of how to use transactions using the client can be found at + https://dgraph.io/docs/clients/#go. -* `Query` Grpc endpoint returns response in JSON under `Json` field instead of protocol buffer. `client.Unmarshal` method also goes away from the Go client. Users can use `json.Unmarshal` for unmarshalling the response. -* Response for predicate of type `geo` can be unmarshalled into a struct. Example [here](https://godoc.org/github.com/dgraph-io/dgraph/client#example-package--SetObject). -* `Node` and `Edge` structs go away along with the `SetValue...` methods. We recommend using [`SetJson`](https://godoc.org/github.com/dgraph-io/dgraph/client#example-package--SetObject) and `DeleteJson` fields to do mutations. -* Examples of how to use transactions using the client can be found at https://dgraph.io/docs/clients/#go. +**Removed** -### Removed -- Embedded dgraph goes away. We haven’t seen much usage of this feature. And it adds unnecessary maintenance overhead to the code. +- Embedded dgraph goes away. We haven’t seen much usage of this feature. And it adds unnecessary + maintenance overhead to the code. - Dgraph live no longer stores external ids. And hence the `xid` flag is gone. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index efb35f2961b..749fda70d92 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,20 +1,19 @@ # Contributing to Dgraph -* [Getting Started](#getting-started) -* [Setting Up the Development Environment](#setting-up-the-development-environment) - * [Prerequisites](#prerequisites) - * [Setup Dgraph from source repo](#setup-dgraph-from-source-repo) - * [Setup Badger from source repo](#setup-badger-from-source-repo) - * [Protocol buffers](#protocol-buffers) - * [Build Dgraph](#build-dgraph) - * [Build Docker Image](#build-docker-image) - * [Testing](#testing) -* [Doing a release](#doing-a-release) -* [Contributing](#contributing) - * [Guidelines](#guidelines) - * [Code style](#code-style) - * [License Header](#license-header) - * [Signed Commits](#signed-commits) +- [Getting Started](#getting-started) +- [Setting Up the Development Environment](#setting-up-the-development-environment) + - [Prerequisites](#prerequisites) + - [Setup Dgraph from source repo](#setup-dgraph-from-source-repo) + - [Setup Badger from source repo](#setup-badger-from-source-repo) + - [Protocol buffers](#protocol-buffers) + - [Build Dgraph](#build-dgraph) + - [Build Docker Image](#build-docker-image) + - [Testing](#testing) +- [Contributing](#contributing) + - [Guidelines](#guidelines) + - [Code style](#code-style) + - [License Header](#license-header) + - [Signed Commits](#signed-commits) ## Getting Started @@ -25,59 +24,78 @@ ### Prerequisites -- Install [Git](https://git-scm.com/) (may be already installed on your system, or available through your OS package manager) -- Install [Make](https://www.gnu.org/software/make/) (may be already installed on your system, or available through your OS package manager) -- Install [Docker](https://docs.docker.com/install/) and [Docker Compose](https://docs.docker.com/compose/install/). +- Install [Git](https://git-scm.com/) (may be already installed on your system, or available through + your OS package manager) +- Install [Make](https://www.gnu.org/software/make/) (may be already installed on your system, or + available through your OS package manager) +- Install [Docker](https://docs.docker.com/install/) and + [Docker Compose](https://docs.docker.com/compose/install/). - [Install Go 1.13 or above](https://golang.org/doc/install). ### Setup Dgraph from source repo It's best to put the Dgraph repo somewhere in `$GOPATH`. - $ mkdir -p "$(go env GOPATH)/src/github.com/dgraph-io" - $ cd "$(go env GOPATH)/src/github.com/dgraph-io" - $ git clone https://github.com/hypermodeinc/dgraph.git - $ cd ./dgraph - $ make install +```bash +mkdir -p "$(go env GOPATH)/src/github.com/dgraph-io" +cd "$(go env GOPATH)/src/github.com/dgraph-io" +git clone https://github.com/hypermodeinc/dgraph.git +cd ./dgraph +make install +``` -This will put the source code in a Git repo under `$GOPATH/src/github.com/dgraph-io/dgraph` and compile the binaries to `$GOPATH/bin`. +This will put the source code in a Git repo under `$GOPATH/src/github.com/dgraph-io/dgraph` and +compile the binaries to `$GOPATH/bin`. ### Setup Badger from source repo -Dgraph source repo vendors its own version of Badger. If you are just working on Dgraph, you do not necessarily need to check out Badger from its own repo. However, if you want to contribute to Badger as well, you will need to check it out from its own repo. - +Dgraph source repo vendors its own version of Badger. If you are just working on Dgraph, you do not +necessarily need to check out Badger from its own repo. However, if you want to contribute to Badger +as well, you will need to check it out from its own repo. - $ go get -t -v github.com/dgraph-io/badger +```bash +go get -t -v github.com/dgraph-io/badger +``` This will put the source code in a Git repo under `$GOPATH/src/github.com/dgraph-io/badger`. ### Protocol buffers -We use [protocol buffers](https://developers.google.com/protocol-buffers/) to serialize data between our server and the Go client and also for inter-worker communication. If you make any changes to the `.proto` files, you would have to recompile them. +We use [protocol buffers](https://developers.google.com/protocol-buffers/) to serialize data between +our server and the Go client and also for inter-worker communication. If you make any changes to the +`.proto` files, you would have to recompile them. -Install the `protoc` compiler which is required for compiling proto files used for gRPC communication. Get `protoc` version 3.0.0 or above from [GitHub releases page](https://github.com/google/protobuf/releases/latest) (look for the binary releases at the bottom, or compile from sources [following the instructions](https://github.com/google/protobuf/tree/main/src)). +Install the `protoc` compiler which is required for compiling proto files used for gRPC +communication. Get `protoc` version 3.0.0 or above from +[GitHub releases page](https://github.com/google/protobuf/releases/latest) (look for the binary +releases at the bottom, or compile from sources +[following the instructions](https://github.com/google/protobuf/tree/main/src)). -We use [gogo protobuf](https://github.com/gogo/protobuf) in Dgraph. To get the protocol buffer compiler plugin from gogo run +We use [gogo protobuf](https://github.com/gogo/protobuf) in Dgraph. To get the protocol buffer +compiler plugin from gogo run +```bash +go get -u github.com/gogo/protobuf/protoc-gen-gofast +``` - $ go get -u github.com/gogo/protobuf/protoc-gen-gofast - -To compile the proto file using the `protoc` plugin and the gogo compiler plugin run the command `make regenerate` from within the directory containing the `.proto` files. - +To compile the proto file using the `protoc` plugin and the gogo compiler plugin run the command +`make regenerate` from within the directory containing the `.proto` files. - $ cd protos - $ make regenerate +```bash +cd protos +make regenerate +``` This should generate the required `.pb.go` file. ### Build Dgraph -You can build Dgraph using `make dgraph` or `make install` -which add the version information to the binary. +You can build Dgraph using `make dgraph` or `make install` which add the version information to the +binary. - `make dgraph`: Creates a `dgraph` binary at `./dgraph/dgraph` -- `make install`: Creates a `dgraph` binary at `$GOPATH/bin/dgraph`. You can add - `$GOPATH/bin` to your `$PATH`. +- `make install`: Creates a `dgraph` binary at `$GOPATH/bin/dgraph`. You can add `$GOPATH/bin` to + your `$PATH`. ```text $ make install @@ -104,12 +122,13 @@ Copyright 2015-2025 Hypermode Inc. make image ``` -To build a test Docker image from source, use `make image`. This builds a Dgraph -binary using `make dgraph` and creates a Docker image named `dgraph/dgraph` -tagged as the current branch name. The image only contains the `dgraph` binary. +To build a test Docker image from source, use `make image`. This builds a Dgraph binary using +`make dgraph` and creates a Docker image named `dgraph/dgraph` tagged as the current branch name. +The image only contains the `dgraph` binary. Example: -``` + +```bash $ git rev-parse --abbrev-ref HEAD # current branch main $ make image @@ -132,66 +151,72 @@ Licensed variously under the Apache Public License 2.0 and Dgraph Community Lice Copyright 2015-2025 Hypermode Inc. ``` -For release images, follow [Doing a release](#doing-a-release). It creates -Docker images that contains `dgraph` and `badger` commands. - ### Testing #### Dgraph -1. Change directory to t directory. -2. If all packages need to be tested, run - make test - If only a specific package needs to be tested, run - make test args="--pkg=desired_package_name" - - example 1: make test args="--pkg=tok" - example 2: make test args="--pkg=tlstest/acl" - - The first example will run all the tests in the 'tok' directory (if there are any) - The second one will run all the test in the acl subfolder of the tlstest directory. - Note: running make test args="--pkg=tlstest" will return an error saying no packages - found because all the tests in the tlstest package are in subdirectories of the package. - So the subdirectories must be specified as shown in example 2. + +1. Change directory to t directory. +2. If all packages need to be tested, run make test If only a specific package needs to be tested, + run make test args="--pkg=desired_package_name" + + example 1: make test args="--pkg=tok" example 2: make test args="--pkg=tlstest/acl" + + The first example will run all the tests in the 'tok' directory (if there are any) The second one + will run all the test in the acl subfolder of the tlstest directory. Note: running make test + args="--pkg=tlstest" will return an error saying no packages found because all the tests in the + tlstest package are in subdirectories of the package. So the subdirectories must be specified as + shown in example 2. Tests should be written in Go and use the Dgraph cluster set up in `dgraph/docker-compose.yml` whenever possible. If the functionality being tested requires a different cluster setup (e.g. different commandline options), the `*_test.go` files should be put in a separate directory that also contains a `docker-compose.yml` to set up the cluster as needed. - **IMPORTANT:** All containers should be labeled with `cluster: test` so they may be correctly - restarted and cleaned up by the test script. +**IMPORTANT:** All containers should be labeled with `cluster: test` so they may be correctly +restarted and cleaned up by the test script. #### Badger -Run `go test` in the root folder. +Run `go test` in the root folder. - $ go test ./... - ok github.com/dgraph-io/badger 24.853s - ok github.com/dgraph-io/badger/skl 0.027s - ok github.com/dgraph-io/badger/table 0.478s - ok github.com/dgraph-io/badger/y 0.004s +```bash +$ go test ./... +ok github.com/dgraph-io/badger 24.853s +ok github.com/dgraph-io/badger/skl 0.027s +ok github.com/dgraph-io/badger/table 0.478s +ok github.com/dgraph-io/badger/y 0.004s +``` ## Contributing ### Guidelines -Over years of writing big scalable systems, we are convinced that striving for simplicity wherever possible is the only way to build robust systems. This simplicity could be in design, could be in coding, or could be achieved by rewriting an entire module, that you may have painstakingly finished yesterday. +Over years of writing big scalable systems, we are convinced that striving for simplicity wherever +possible is the only way to build robust systems. This simplicity could be in design, could be in +coding, or could be achieved by rewriting an entire module, that you may have painstakingly finished +yesterday. -- **Pull requests are welcome**, as long as you're willing to put in the effort to meet the guidelines. After you fork dgraph, create your pull request against our `main` branch -- Contributors are required to execute our [Individual Contributor License Agreement](https://cla-assistant.io/dgraph-io/dgraph) +- **Pull requests are welcome**, as long as you're willing to put in the effort to meet the + guidelines. After you fork dgraph, create your pull request against our `main` branch +- Contributors are required to execute our + [Individual Contributor License Agreement](https://cla-assistant.io/dgraph-io/dgraph) - Aim for clear, well written, maintainable code - Simple and minimal approach to features, like Go - New features must include passing unit tests, and integration tests when appropriate -- Refactoring existing code now for better performance, better readability or better testability wins over adding a new feature -- Don't add a function to a module that you don't use right now, or doesn't clearly enable a planned functionality +- Refactoring existing code now for better performance, better readability or better testability + wins over adding a new feature +- Don't add a function to a module that you don't use right now, or doesn't clearly enable a planned + functionality - Don't ship a half done feature, which would require significant alterations to work fully - Avoid [Technical debt](https://en.wikipedia.org/wiki/Technical_debt) like cancer - Leave the code cleaner than when you began ### Code style + - We're following [Go Code Review](https://github.com/golang/go/wiki/CodeReviewComments) - Use `go fmt` to format your code before committing -- If you see *any code* which clearly violates the style guide, please fix it and send a pull request. No need to ask for permission +- If you see _any code_ which clearly violates the style guide, please fix it and send a pull + request. No need to ask for permission - Avoid unnecessary vertical spaces. Use your judgment or follow the code review comments - Wrap your code and comments to 120 characters, unless doing so makes the code less legible @@ -199,27 +224,32 @@ Over years of writing big scalable systems, we are convinced that striving for s Every new source file must begin with a license header. -Most of Dgraph, Badger, and the Dgraph clients (dgo, dgraph-js, pydgraph and dgraph4j) are licensed under the Apache 2.0 license: - - /* - * Copyright 2016-2025 Hypermode Inc. and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +Most of Dgraph, Badger, and the Dgraph clients (dgo, dgraph-js, pydgraph and dgraph4j) are licensed +under the Apache 2.0 license: -### Signed Commits +```sh +/* + * Copyright 2016-2025 Hypermode Inc. and Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +``` -Signed commits help in verifying the authenticity of the contributor. We use signed commits in Dgraph, and we prefer it, though it's not compulsory to have signed commits. This is a recommended step for people who intend to contribute to Dgraph on a regular basis. +### Signed Commits -Follow instructions to generate and setup GPG keys for signing code commits on this [Github Help page](https://help.github.com/articles/signing-commits-with-gpg/). +Signed commits help in verifying the authenticity of the contributor. We use signed commits in +Dgraph, and we prefer it, though it's not compulsory to have signed commits. This is a recommended +step for people who intend to contribute to Dgraph on a regular basis. +Follow instructions to generate and setup GPG keys for signing code commits on this +[Github Help page](https://help.github.com/articles/signing-commits-with-gpg/). diff --git a/LICENSE.md b/LICENSE.md index 05a216ab4a7..b45af6becc8 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -2,14 +2,14 @@ Copyright 2016-2025 Hypermode Inc. -Source code in this repository is variously licensed under the Apache Public -License 2.0 (APL) and the Dgraph Community License (DCL). A copy of each license -can be found in the [licenses](./licenses/) directory. +Source code in this repository is variously licensed under the Apache Public License 2.0 (APL) and +the Dgraph Community License (DCL). A copy of each license can be found in the +[licenses](./licenses/) directory. -Unless required by applicable law or agreed to in writing, software distributed -under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR -CONDITIONS OF ANY KIND, either express or implied. See the License for the -specific language governing permissions and limitations under the License. +Unless required by applicable law or agreed to in writing, software distributed under the License is +distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied. See the License for the specific language governing permissions and limitations under the +License. ## Trademark diff --git a/README.md b/README.md index feb8e5affbd..ff61991b1ba 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ - @@ -21,43 +21,54 @@ [![Go Report Card](https://goreportcard.com/badge/github.com/hypermodeinc/dgraph)](https://goreportcard.com/report/github.com/hypermodeinc/dgraph) [![TODOs](https://badgen.net/https/api.tickgit.com/badgen/github.com/hypermodeinc/dgraph/main)](https://www.tickgit.com/browse?repo=github.com/hypermodeinc/dgraph&branch=main) -Dgraph is a horizontally scalable and distributed GraphQL database with a graph backend. It provides ACID transactions, consistent replication, and linearizable reads. It's built from the ground up to perform -a rich set of queries. Being a native GraphQL database, it tightly controls how the -data is arranged on disk to optimize for query performance and throughput, -reducing disk seeks and network calls in a cluster. - +Dgraph is a horizontally scalable and distributed GraphQL database with a graph backend. It provides +ACID transactions, consistent replication, and linearizable reads. It's built from the ground up to +perform a rich set of queries. Being a native GraphQL database, it tightly controls how the data is +arranged on disk to optimize for query performance and throughput, reducing disk seeks and network +calls in a cluster. -Dgraph's goal is to provide Google production-level scale and throughput, -with low enough latency to serve real-time user queries over terabytes of structured data. -Dgraph supports [GraphQL query syntax](https://dgraph.io/docs/main/query-language/), and responds in [JSON](http://www.json.org/) and [Protocol Buffers](https://developers.google.com/protocol-buffers/) over [GRPC](http://www.grpc.io/) and HTTP. Dgraph is written using the Go Programming Language. +Dgraph's goal is to provide Google production-level scale and throughput, with low enough latency to +serve real-time user queries over terabytes of structured data. Dgraph supports +[GraphQL query syntax](https://dgraph.io/docs/main/query-language/), and responds in +[JSON](http://www.json.org/) and [Protocol Buffers](https://developers.google.com/protocol-buffers/) +over [GRPC](http://www.grpc.io/) and HTTP. Dgraph is written using the Go Programming Language. ## Status -Dgraph is at [version v24.0.5][rel] and is production-ready. Apart from the vast open source community, it is being used in -production at multiple Fortune 500 companies, and by -[Intuit Katlas](https://github.com/intuit/katlas) and [VMware Purser](https://github.com/vmware/purser). A hosted version of Dgraph is available at [https://cloud.dgraph.io](https://cloud.dgraph.io). +Dgraph is at [version v24.0.5][rel] and is production-ready. Apart from the vast open source +community, it is being used in production at multiple Fortune 500 companies, and by +[Intuit Katlas](https://github.com/intuit/katlas) and +[VMware Purser](https://github.com/vmware/purser). A hosted version of Dgraph is available at +[https://cloud.dgraph.io](https://cloud.dgraph.io). [rel]: https://github.com/hypermodeinc/dgraph/releases/tag/v24.0.5 ## Supported Platforms -Dgraph officially supports the Linux/amd64 architecture. Support for Linux/arm64 is in development. In order to take advantage of memory performance gains and other architecture-specific advancements in Linux, we dropped official support Mac and Windows in 2021, see [this blog post](https://discuss.dgraph.io/t/dropping-support-for-windows-and-mac/12913) for more information. You can still build and use Dgraph on other platforms (for live or bulk loading for instance), but support for platforms other than Linux/amd64 is not available. +Dgraph officially supports the Linux/amd64 architecture. Support for Linux/arm64 is in development. +In order to take advantage of memory performance gains and other architecture-specific advancements +in Linux, we dropped official support Mac and Windows in 2021, see +[this blog post](https://discuss.dgraph.io/t/dropping-support-for-windows-and-mac/12913) for more +information. You can still build and use Dgraph on other platforms (for live or bulk loading for +instance), but support for platforms other than Linux/amd64 is not available. Running Dgraph in a Docker environment is the recommended testing and deployment method. ## Install with Docker -If you're using Docker, you can use the [official Dgraph image](https://hub.docker.com/r/dgraph/dgraph/). +If you're using Docker, you can use the +[official Dgraph image](https://hub.docker.com/r/dgraph/dgraph/). ```bash docker pull dgraph/dgraph:latest ``` -For more information on a variety Docker deployment methods including Docker Compose and Kubernetes, see the [docs](https://dgraph.io/docs/installation/single-host-setup/#docker). +For more information on a variety Docker deployment methods including Docker Compose and Kubernetes, +see the [docs](https://dgraph.io/docs/installation/single-host-setup/#docker). ## Run a Quick Standalone Cluster -``` +```bash docker run -it -p 8080:8080 -p 9080:9080 -v ~/dgraph:/dgraph dgraph/standalone:latest ``` @@ -65,7 +76,7 @@ docker run -it -p 8080:8080 -p 9080:9080 -v ~/dgraph:/dgraph dgraph/standalone:l If you want to install from source, install Go 1.19+ or later and the following dependencies: -#### Ubuntu +### Ubuntu ```bash sudo apt-get update @@ -74,7 +85,9 @@ sudo apt-get install build-essential ### Build and Install -Then clone the Dgraph repository and use `make install` to install the Dgraph binary in the directory named by the GOBIN environment variable, which defaults to $GOPATH/bin or $HOME/go/bin if the GOPATH environment variable is not set. +Then clone the Dgraph repository and use `make install` to install the Dgraph binary in the +directory named by the GOBIN environment variable, which defaults to $GOPATH/bin or $HOME/go/bin if +the GOPATH environment variable is not set. ```bash git clone https://github.com/hypermodeinc/dgraph.git @@ -83,67 +96,76 @@ make install ``` ## Get Started + **To get started with Dgraph, follow:** - Installation to queries in 3 steps via [dgraph.io/docs/](https://dgraph.io/docs/get-started/). - A longer interactive tutorial via [dgraph.io/tour/](https://dgraph.io/tour/). -- Tutorial and -presentation videos on [YouTube channel](https://www.youtube.com/channel/UCghE41LR8nkKFlR3IFTRO4w/featured). +- Tutorial and presentation videos on + [YouTube channel](https://www.youtube.com/channel/UCghE41LR8nkKFlR3IFTRO4w/featured). ## Is Dgraph the right choice for me? - Do you have more than 10 SQL tables connected via foreign keys? - Do you have sparse data, which doesn't elegantly fit into SQL tables? -- Do you want a simple and flexible schema, which is readable and maintainable - over time? +- Do you want a simple and flexible schema, which is readable and maintainable over time? - Do you care about speed and performance at scale? -If the answers to the above are YES, then Dgraph would be a great fit for your -application. Dgraph provides NoSQL like scalability while providing SQL like -transactions and the ability to select, filter, and aggregate data points. It -combines that with distributed joins, traversals, and graph operations, which -makes it easy to build applications with it. +If the answers to the above are YES, then Dgraph would be a great fit for your application. Dgraph +provides NoSQL like scalability while providing SQL like transactions and the ability to select, +filter, and aggregate data points. It combines that with distributed joins, traversals, and graph +operations, which makes it easy to build applications with it. ## Dgraph compared to other graph DBs -| Features | Dgraph | Neo4j | Janus Graph | -| -------- | ------ | ----- | ----------- | -| Architecture | Sharded and Distributed | Single server (+ replicas in enterprise) | Layer on top of other distributed DBs | -| Replication | Consistent | None in community edition (only available in enterprise) | Via underlying DB | -| Data movement for shard rebalancing | Automatic | Not applicable (all data lies on each server) | Via underlying DB | -| Language | GraphQL inspired | Cypher, Gremlin | Gremlin | -| Protocols | Grpc / HTTP + JSON / RDF | Bolt + Cypher | Websocket / HTTP | -| Transactions | Distributed ACID transactions | Single server ACID transactions | Not typically ACID -| Full-Text Search | Native support | Native support | Via External Indexing System | -| Regular Expressions | Native support | Native support | Via External Indexing System | -| Geo Search | Native support | External support only | Via External Indexing System | -| License | Apache 2.0 | GPL v3 | Apache 2.0 | +| Features | Dgraph | Neo4j | Janus Graph | +| ----------------------------------- | ----------------------------- | -------------------------------------------------------- | ------------------------------------- | +| Architecture | Sharded and Distributed | Single server (+ replicas in enterprise) | Layer on top of other distributed DBs | +| Replication | Consistent | None in community edition (only available in enterprise) | Via underlying DB | +| Data movement for shard rebalancing | Automatic | Not applicable (all data lies on each server) | Via underlying DB | +| Language | GraphQL inspired | Cypher, Gremlin | Gremlin | +| Protocols | Grpc / HTTP + JSON / RDF | Bolt + Cypher | Websocket / HTTP | +| Transactions | Distributed ACID transactions | Single server ACID transactions | Not typically ACID | +| Full-Text Search | Native support | Native support | Via External Indexing System | +| Regular Expressions | Native support | Native support | Via External Indexing System | +| Geo Search | Native support | External support only | Via External Indexing System | +| License | Apache 2.0 | GPL v3 | Apache 2.0 | ## Users + - **Dgraph official documentation is present at [dgraph.io/docs/](https://dgraph.io/docs/).** -- For feature requests or questions, visit - [https://discuss.dgraph.io](https://discuss.dgraph.io). -- Check out [the demo at dgraph.io](http://dgraph.io) and [the visualization at - play.dgraph.io](http://play.dgraph.io/). -- Please see [releases tab](https://github.com/hypermodeinc/dgraph/releases) to - find the latest release and corresponding release notes. -- [See the Roadmap](https://discuss.dgraph.io/t/product-roadmap-2020/8479) for a list of - working and planned features. -- Read about the latest updates from the Dgraph team [on our - blog](https://open.dgraph.io/). -- Watch tech talks on our [YouTube - channel](https://www.youtube.com/channel/UCghE41LR8nkKFlR3IFTRO4w/featured). +- For feature requests or questions, visit [https://discuss.dgraph.io](https://discuss.dgraph.io). +- Check out [the demo at dgraph.io](http://dgraph.io) and + [the visualization at play.dgraph.io](http://play.dgraph.io/). +- Please see [releases tab](https://github.com/hypermodeinc/dgraph/releases) to find the latest + release and corresponding release notes. +- [See the Roadmap](https://discuss.dgraph.io/t/product-roadmap-2020/8479) for a list of working and + planned features. +- Read about the latest updates from the Dgraph team [on our blog](https://open.dgraph.io/). +- Watch tech talks on our + [YouTube channel](https://www.youtube.com/channel/UCghE41LR8nkKFlR3IFTRO4w/featured). ## Developers -- See a list of issues [that we need help with](https://github.com/hypermodeinc/dgraph/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22). -- Please see [Contributing to Dgraph](https://github.com/hypermodeinc/dgraph/blob/main/CONTRIBUTING.md) for guidelines on contributions. + +- See a list of issues + [that we need help with](https://github.com/hypermodeinc/dgraph/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22). +- Please see + [Contributing to Dgraph](https://github.com/hypermodeinc/dgraph/blob/main/CONTRIBUTING.md) for + guidelines on contributions. ## Client Libraries -The Dgraph team maintains several [officially supported client libraries](https://dgraph.io/docs/clients/). There are also libraries contributed by the community [unofficial client libraries](https://dgraph.io/docs/clients#unofficial-dgraph-clients). + +The Dgraph team maintains several +[officially supported client libraries](https://dgraph.io/docs/clients/). There are also libraries +contributed by the community +[unofficial client libraries](https://dgraph.io/docs/clients#unofficial-dgraph-clients). ## ## Contact -- Please use [discuss.dgraph.io](https://discuss.dgraph.io) for documentation, questions, feature requests and discussions. -- Please use [discuss.dgraph.io](https://discuss.dgraph.io/c/issues/dgraph/38) for filing bugs or feature requests. + +- Please use [discuss.dgraph.io](https://discuss.dgraph.io) for documentation, questions, feature + requests and discussions. +- Please use [discuss.dgraph.io](https://discuss.dgraph.io/c/issues/dgraph/38) for filing bugs or + feature requests. - Follow us on Twitter [@dgraphlabs](https://twitter.com/dgraphlabs). diff --git a/compose/run.sh b/compose/run.sh index 2d116050274..de25e1cff57 100755 --- a/compose/run.sh +++ b/compose/run.sh @@ -1,30 +1,30 @@ #!/bin/bash main() { - setup $@ + setup $@ - set -e - build_compose_tool $@ - build_dgraph_docker_image - launch_environment + set -e + build_compose_tool $@ + build_dgraph_docker_image + launch_environment } setup() { - readonly ME=${0##*/} - DGRAPH_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. - readonly COMPOSE_FILE="./docker-compose.yml" + readonly ME=${0##*/} + DGRAPH_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. + readonly COMPOSE_FILE="./docker-compose.yml" - if [[ $1 == "-h" || $1 == "--help" ]]; then usage; fi + if [[ $1 == "-h" || $1 == "--help" ]]; then usage; fi - check_environment + check_environment } Info() { - echo -e "INFO: $*" + echo -e "INFO: $*" } usage() { - cat < /dev/null || \ - { echo "ERROR: 'make' command not not found" 1>&2; exit 1; } - command -v go > /dev/null || \ - { echo "ERROR: 'go' command not not found" 1>&2; exit 1; } - command -v docker-compose > /dev/null || \ - { echo "ERROR: 'docker-compose' command not not found" 1>&2; exit 1; } - ## GOPATH required for locally built docker images - [[ -z "${GOPATH}" ]] && \ - { echo "ERROR: The env var of 'GOPATH' was not defined. Exiting" 1>&2; exit 1; } + command -v make >/dev/null || + { + echo "ERROR: 'make' command not not found" 1>&2 + exit 1 + } + command -v go >/dev/null || + { + echo "ERROR: 'go' command not not found" 1>&2 + exit 1 + } + command -v docker-compose >/dev/null || + { + echo "ERROR: 'docker-compose' command not not found" 1>&2 + exit 1 + } + ## GOPATH required for locally built docker images + [[ -z ${GOPATH} ]] && + { + echo "ERROR: The env var of 'GOPATH' was not defined. Exiting" 1>&2 + exit 1 + } } build_compose_tool() { - ## Always make compose if it doesn't exist - make compose - - ## Create compose file if it does not exist or compose parameters passed - if [[ $# -gt 0 ]] || ! [[ -f $COMPOSE_FILE ]]; then - Info "creating compose file ..." - ./compose "$@" - fi - - if [[ ! -e $COMPOSE_FILE ]]; then - echo >&2 "$ME: no '$COMPOSE_FILE' found" - exit 1 - fi + ## Always make compose if it doesn't exist + make compose + + ## Create compose file if it does not exist or compose parameters passed + if [[ $# -gt 0 ]] || ! [[ -f ${COMPOSE_FILE} ]]; then + Info "creating compose file ..." + ./compose "$@" + fi + + if [[ ! -e ${COMPOSE_FILE} ]]; then + echo >&2 "${ME}: no '${COMPOSE_FILE}' found" + exit 1 + fi } build_dgraph_docker_image() { - ## linux binary required for docker image - export GOOS=linux - Info "rebuilding dgraph ..." - ( cd $DGRAPH_ROOT/dgraph && make install ) + ## linux binary required for docker image + export GOOS=linux + Info "rebuilding dgraph ..." + (cd "${DGRAPH_ROOT}"/dgraph && make install) } launch_environment() { - # Detect if $GOPATH/bin/$GOOS_$GOARCH path - if [[ -f $GOPATH/bin/linux_amd64/dgraph ]]; then - Info "Found '$GOPATH/bin/linux_amd64/dgraph'. Updating $COMPOSE_FILE." - sed -i 's/\$GOPATH\/bin$/\$GOPATH\/bin\/linux_amd64/' $COMPOSE_FILE - # if no dgraph binary found, abort - elif ! [[ -f $GOPATH/bin/dgraph ]]; then - echo "ERROR: '$GOPATH/bin/dgraph' not found. Exiting" 1>&2 - exit 1 - else - Info "Found '$GOPATH/bin/dgraph'" - fi - - # No need to down existing containers, if any. - # The up command handles that automatically - - Info "Bringing up containers" - docker-compose -p dgraph down - docker-compose --compatibility -p dgraph up --force-recreate --remove-orphans + # Detect if $GOPATH/bin/$GOOS_$GOARCH path + if [[ -f ${GOPATH}/bin/linux_amd64/dgraph ]]; then + Info "Found '${GOPATH}/bin/linux_amd64/dgraph'. Updating ${COMPOSE_FILE}." + sed -i 's/\$GOPATH\/bin$/\$GOPATH\/bin\/linux_amd64/' "${COMPOSE_FILE}" + # if no dgraph binary found, abort + elif ! [[ -f ${GOPATH}/bin/dgraph ]]; then + echo "ERROR: '${GOPATH}/bin/dgraph' not found. Exiting" 1>&2 + exit 1 + else + Info "Found '${GOPATH}/bin/dgraph'" + fi + + # No need to down existing containers, if any. + # The up command handles that automatically + + Info "Bringing up containers" + docker-compose -p dgraph down + docker-compose --compatibility -p dgraph up --force-recreate --remove-orphans } main $@ diff --git a/contrib/README.md b/contrib/README.md index a75357901ae..4c7967e6d5f 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -1,4 +1,3 @@ -The `contrib` directory contains scripts, images, and other helpful things -which are not part of the core dgraph distribution. Please note that they -could be out of date, since they do not receive the same attention as the -rest of the repository. +The `contrib` directory contains scripts, images, and other helpful things which are not part of the +core dgraph distribution. Please note that they could be out of date, since they do not receive the +same attention as the rest of the repository. diff --git a/contrib/config/backups/README.md b/contrib/config/backups/README.md index cd23f625fc2..14917d629d2 100644 --- a/contrib/config/backups/README.md +++ b/contrib/config/backups/README.md @@ -1,12 +1,17 @@ # Binary Backups -These will be a collection of scripts to assist backup process for Binary Backups (Enterprise feature). +These will be a collection of scripts to assist backup process for Binary Backups (Enterprise +feature). -* Client - * [Client](client/README.md) - a client `dgraph-backup.sh` that can used to automate backups. -* Cloud Object Storage - * [Azure Blob Storage](azure/README.md) - use `minio` destination scheme with MinIO Azure Gateway to backup to Azure Blob Storage. - * [GCS (Google Cloud Storage)](gcp/README.md) - use `minio` destination scheme with MinIO GCS Gateway to a GCS bucket. - * [AWS S3 (Simple Storage Service)](s3/README.md) - use `s3` destination scheme to backup to an S3 bucket. -* File Storage - * [NFS (Network File System)](nfs/README.md) - use file destination to backup to remote file storage +- Client + - [Client](client/README.md) - a client `dgraph-backup.sh` that can used to automate backups. +- Cloud Object Storage + - [Azure Blob Storage](azure/README.md) - use `minio` destination scheme with MinIO Azure Gateway + to backup to Azure Blob Storage. + - [GCS (Google Cloud Storage)](gcp/README.md) - use `minio` destination scheme with MinIO GCS + Gateway to a GCS bucket. + - [AWS S3 (Simple Storage Service)](s3/README.md) - use `s3` destination scheme to backup to an S3 + bucket. +- File Storage + - [NFS (Network File System)](nfs/README.md) - use file destination to backup to remote file + storage diff --git a/contrib/config/backups/azure/README.md b/contrib/config/backups/azure/README.md index 51d0821079e..eca58310113 100644 --- a/contrib/config/backups/azure/README.md +++ b/contrib/config/backups/azure/README.md @@ -1,13 +1,14 @@ # Binary Backups to Azure Blob -Binary backups can use Azure Blob Storage for object storage using [MinIO Azure Gateway](https://docs.min.io/docs/minio-gateway-for-azure.html). +Binary backups can use Azure Blob Storage for object storage using +[MinIO Azure Gateway](https://docs.min.io/docs/minio-gateway-for-azure.html). ## Provisioning Azure Blob Some example scripts have been provided to illustrate how to create Azure Blob. -* [azure_cli](azure_cli/README.md) - shell scripts to provision Azure Blob -* [terraform](terraform/README.md) - terraform scripts to provision Azure Blob +- [azure_cli](azure_cli/README.md) - shell scripts to provision Azure Blob +- [terraform](terraform/README.md) - terraform scripts to provision Azure Blob ## Setting up the Environment @@ -15,18 +16,23 @@ Some example scripts have been provided to illustrate how to create Azure Blob. You will need these tools: -* Docker Environment - * [Docker](https://docs.docker.com/get-docker/) - container engine platform - * [Docker Compose](https://docs.docker.com/compose/install/) - orchestrates running dokcer containers -* Kubernetes Environment - * [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) - required for interacting with Kubenetes platform - * [helm](https://helm.sh/docs/intro/install/) - deploys Kuberetes packages called helm charts - * [helm-diff](https://github.com/databus23/helm-diff) [optional] - displays differences that will be applied to Kubernetes cluster - * [helmfile](https://github.com/roboll/helmfile#installation) [optional] - orchestrates helm chart deployments +- Docker Environment + - [Docker](https://docs.docker.com/get-docker/) - container engine platform + - [Docker Compose](https://docs.docker.com/compose/install/) - orchestrates running dokcer + containers +- Kubernetes Environment + - [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) - required for interacting + with Kubenetes platform + - [helm](https://helm.sh/docs/intro/install/) - deploys Kuberetes packages called helm charts + - [helm-diff](https://github.com/databus23/helm-diff) [optional] - displays differences that + will be applied to Kubernetes cluster + - [helmfile](https://github.com/roboll/helmfile#installation) [optional] - orchestrates helm chart + deployments ### Using Docker Compose -A `docker-compose.yml` configuration is provided that will run the [MinIO Azure Gateway](https://docs.min.io/docs/minio-gateway-for-azure.html) and Dgraph cluster. +A `docker-compose.yml` configuration is provided that will run the +[MinIO Azure Gateway](https://docs.min.io/docs/minio-gateway-for-azure.html) and Dgraph cluster. #### Configuring Docker Compose @@ -37,9 +43,11 @@ MINIO_ACCESS_KEY= MINIO_SECRET_KEY= ``` -These values are used to both access the [MinIO Azure Gateway](https://docs.min.io/docs/minio-gateway-for-azure.html) using the same credentials used to access Azure Storage Account. As a convenience, both example [Terraform](terraform/README.md) and [azure_cli](azure_cli/README.md) scripts will auto-generate the `minio.env`. - -#### Using Docker Compose +These values are used to both access the +[MinIO Azure Gateway](https://docs.min.io/docs/minio-gateway-for-azure.html) using the same +credentials used to access Azure Storage Account. As a convenience, both example +[Terraform](terraform/README.md) and [azure_cli](azure_cli/README.md) scripts will auto-generate the +`minio.env`. ```bash ## Run Minio Azure Gateway and Dgraph Cluster @@ -48,8 +56,8 @@ docker-compose up --detach #### Access Minio and Ratel UI -* MinIO UI: http://localhost:9000 -* Ratel UI: http://localhost:8000 +- MinIO UI: http://localhost:9000 +- Ratel UI: http://localhost:8000 #### Clean Up Docker Environment @@ -60,11 +68,15 @@ docker-compose rm ### Using Kubernetes with Helm Charts -For Kubernetes, you can deploy [MinIO Azure Gateway](https://docs.min.io/docs/minio-gateway-for-azure.html), Dgraph cluster, and a Kubernetes Cronjob that triggers backups using [helm](https://helm.sh/docs/intro/install/). +For Kubernetes, you can deploy +[MinIO Azure Gateway](https://docs.min.io/docs/minio-gateway-for-azure.html), Dgraph cluster, and a +Kubernetes Cronjob that triggers backups using [helm](https://helm.sh/docs/intro/install/). #### Configuring Secrets Values -These values are auto-generated if you used either [terraform](terraform/README.md) and [azure_cli](azure_cli/README.md) scripts. If you already an existing Azure Blob you would like to use, you will need to create `charts/dgraph_secrets.yaml` and `charts/minio_secrets.yaml` files. +These values are auto-generated if you used either [terraform](terraform/README.md) and +[azure_cli](azure_cli/README.md) scripts. If you already an existing Azure Blob you would like to +use, you will need to create `charts/dgraph_secrets.yaml` and `charts/minio_secrets.yaml` files. For the `charts/dgraph_secrets.yaml`, you would create a file like this: @@ -85,12 +97,16 @@ secretKey: #### Deploy Using Helmfile -If you have [helmfile](https://github.com/roboll/helmfile#installation) and [helm-diff](https://github.com/databus23/helm-diff) installed, you can deploy [MinIO Azure Gateway](https://docs.min.io/docs/minio-gateway-for-azure.html) and Dgraph cluster with the following: +If you have [helmfile](https://github.com/roboll/helmfile#installation) and +[helm-diff](https://github.com/databus23/helm-diff) installed, you can deploy +[MinIO Azure Gateway](https://docs.min.io/docs/minio-gateway-for-azure.html) and Dgraph cluster with +the following: ```bash export BACKUP_BUCKET_NAME= # corresponds to Azure Container Name helmfile apply ``` + #### Deploy Using Helm ```bash @@ -114,7 +130,7 @@ helm install "my-release" \ #### Access Resources -For MinIO UI, you can use this to access it at http://localhost:9000: +For MinIO UI, you can use this to access it at http://localhost:9000: ```bash export MINIO_POD_NAME=$( @@ -170,8 +186,11 @@ helm delete azuregw --namespace minio ## Triggering a Backup -This is run from the host with the alpha node accessible on localhost at port `8080`. Can be done by running the docker-compose environment, or running `kubectl port-forward pod/dgraph-dgraph-alpha-0 8080:8080`. -In the docker-compose environment, the host for `MINIO_HOST` is `gateway`. In the Kubernetes environment, using the scripts above, the `MINIO_HOST` is `azuregw-minio.minio.svc`. +This is run from the host with the alpha node accessible on localhost at port `8080`. Can be done by +running the docker-compose environment, or running +`kubectl port-forward pod/dgraph-dgraph-alpha-0 8080:8080`. In the docker-compose environment, the +host for `MINIO_HOST` is `gateway`. In the Kubernetes environment, using the scripts above, the +`MINIO_HOST` is `azuregw-minio.minio.svc`. ### Using GraphQL diff --git a/contrib/config/backups/azure/azure_cli/README.md b/contrib/config/backups/azure/azure_cli/README.md index 0f6b6d0e5ed..0ce1d2fe974 100644 --- a/contrib/config/backups/azure/azure_cli/README.md +++ b/contrib/config/backups/azure/azure_cli/README.md @@ -2,26 +2,32 @@ ## About -This script will create the required resources needed to create Azure Blob Storage using (`simple-azure-blob`)[https://github.com/darkn3rd/simple-azure-blob] module. +This script will create the required resources needed to create Azure Blob Storage using +(`simple-azure-blob`)[https://github.com/darkn3rd/simple-azure-blob] module. ## Prerequisites You need the following installed to use this automation: -* [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) with an active Azure subscription configured. -* [jq](https://stedolan.github.io/jq/) - command-line JSON process that makes it easy to parse JSON output from Azure CLI. -* [bash](https://www.gnu.org/software/bash/) - shell environment +- [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) + with an active Azure subscription configured. +- [jq](https://stedolan.github.io/jq/) - command-line JSON process that makes it easy to parse JSON + output from Azure CLI. +- [bash](https://www.gnu.org/software/bash/) - shell environment ## Configuration You will need to define these environment variables: -* Required Variables: - * `MY_RESOURCE_GROUP` (required) - Azure resource group that contains the resources. If the resource group does not exist, this script will create it. - * `MY_STORAGE_ACCT` (required) - Azure storage account (unique global name) to contain storage. If the storage account does not exist, this script will create it. - * `MY_CONTAINER_NAME` (required) - Azure container to host the blob storage. -* Optional Variables: - * `MY_LOCATION` (default = `eastus2`)- the location where to create the resource group if it doesn't exist +- Required Variables: + - `MY_RESOURCE_GROUP` (required) - Azure resource group that contains the resources. If the + resource group does not exist, this script will create it. + - `MY_STORAGE_ACCT` (required) - Azure storage account (unique global name) to contain storage. If + the storage account does not exist, this script will create it. + - `MY_CONTAINER_NAME` (required) - Azure container to host the blob storage. +- Optional Variables: + - `MY_LOCATION` (default = `eastus2`)- the location where to create the resource group if it + doesn't exist ## Steps diff --git a/contrib/config/backups/azure/azure_cli/create_blob.sh b/contrib/config/backups/azure/azure_cli/create_blob.sh index 0de16227fb4..4f7909d9cc0 100755 --- a/contrib/config/backups/azure/azure_cli/create_blob.sh +++ b/contrib/config/backups/azure/azure_cli/create_blob.sh @@ -4,127 +4,132 @@ # main ################## main() { - check_environment $@ - create_resource_group - create_storage_acct - authorize_ad_user - create_storage_container - create_config_files + check_environment $@ + create_resource_group + create_storage_acct + authorize_ad_user + create_storage_container + create_config_files } ##### # check_environment ################## check_environment() { - ## Check for Azure CLI command - command -v az > /dev/null || \ - { echo "[ERROR]: 'az' command not not found" 1>&2; exit 1; } - command -v jq > /dev/null || \ - { echo "[ERROR]: 'jq' command not not found" 1>&2; exit 1; } + ## Check for Azure CLI command + command -v az >/dev/null || + { + echo "[ERROR]: 'az' command not not found" 1>&2 + exit 1 + } + command -v jq >/dev/null || + { + echo "[ERROR]: 'jq' command not not found" 1>&2 + exit 1 + } - ## Defaults - MY_CONTAINER_NAME=${MY_CONTAINER_NAME:-$1} - MY_STORAGE_ACCT=${MY_STORAGE_ACCT:-""} - MY_RESOURCE_GROUP=${MY_RESOURCE_GROUP:=""} - MY_LOCATION=${MY_LOCATION:-"eastus2"} - MY_ACCOUNT_ID="$(az account show | jq '.id' -r)" - CREATE_MINIO_ENV=${CREATE_MINIO_ENV:-"true"} - CREATE_MINIO_CHART_SECRETS=${CREATE_MINIO_CHART_SECRETS:-"true"} - CREATE_DGRAPH_CHART_SECRETS=${CREATE_DGRAPH_CHART_SECRETS:-"true"} + ## Defaults + MY_CONTAINER_NAME=${MY_CONTAINER_NAME:-$1} + MY_STORAGE_ACCT=${MY_STORAGE_ACCT:-""} + MY_RESOURCE_GROUP=${MY_RESOURCE_GROUP:=""} + MY_LOCATION=${MY_LOCATION:-"eastus2"} + MY_ACCOUNT_ID="$(az account show | jq '.id' -r)" + CREATE_MINIO_ENV=${CREATE_MINIO_ENV:-"true"} + CREATE_MINIO_CHART_SECRETS=${CREATE_MINIO_CHART_SECRETS:-"true"} + CREATE_DGRAPH_CHART_SECRETS=${CREATE_DGRAPH_CHART_SECRETS:-"true"} - if [[ -z "${MY_CONTAINER_NAME}" ]]; then - if (( $# < 1 )); then - printf "[ERROR]: Need at least one parameter or define 'MY_CONTAINER_NAME'\n\n" 1>&2 - printf "Usage:\n\t$0 \n\tMY_CONTAINER_NAME= $0\n" 1>&2 - exit 1 - fi - fi + if [[ -z ${MY_CONTAINER_NAME} ]]; then + if (($# < 1)); then + printf "[ERROR]: Need at least one parameter or define 'MY_CONTAINER_NAME'\n\n" 1>&2 + printf "Usage:\n\t$0 \n\tMY_CONTAINER_NAME= $0\n" 1>&2 + exit 1 + fi + fi - if [[ -z "${MY_STORAGE_ACCT}" ]]; then - printf "[ERROR]: The env var of 'MY_STORAGE_ACCT' was not defined. Exiting\n" 1>&2 - exit 1 - fi + if [[ -z ${MY_STORAGE_ACCT} ]]; then + printf "[ERROR]: The env var of 'MY_STORAGE_ACCT' was not defined. Exiting\n" 1>&2 + exit 1 + fi - if [[ -z "${MY_RESOURCE_GROUP}" ]]; then - printf "[ERROR]: The env var of 'MY_RESOURCE_GROUP' was not defined. Exiting\n" 1>&2 - exit 1 - fi + if [[ -z ${MY_RESOURCE_GROUP} ]]; then + printf "[ERROR]: The env var of 'MY_RESOURCE_GROUP' was not defined. Exiting\n" 1>&2 + exit 1 + fi } ##### # create_resource_group ################## create_resource_group() { - ## create resource (idempotently) - if ! az group list | jq '.[].name' -r | grep -q ${MY_RESOURCE_GROUP}; then - echo "[INFO]: Creating Resource Group '${MY_RESOURCE_GROUP}' at Location '${MY_LOCATION}'" - az group create --name=${MY_RESOURCE_GROUP} --location=${MY_LOCATION} > /dev/null - fi + ## create resource (idempotently) + if ! az group list | jq '.[].name' -r | grep -q "${MY_RESOURCE_GROUP}"; then + echo "[INFO]: Creating Resource Group '${MY_RESOURCE_GROUP}' at Location '${MY_LOCATION}'" + az group create --name="${MY_RESOURCE_GROUP}" --location="${MY_LOCATION}" >/dev/null + fi } ##### # create_storage_acct ################## create_storage_acct() { - ## create globally unique storage account (idempotently) - if ! az storage account list | jq '.[].name' -r | grep -q ${MY_STORAGE_ACCT}; then - echo "[INFO]: Creating Storage Account '${MY_STORAGE_ACCT}'" - az storage account create \ - --name ${MY_STORAGE_ACCT} \ - --resource-group ${MY_RESOURCE_GROUP} \ - --location ${MY_LOCATION} \ - --sku Standard_ZRS \ - --encryption-services blob > /dev/null - fi + ## create globally unique storage account (idempotently) + if ! az storage account list | jq '.[].name' -r | grep -q "${MY_STORAGE_ACCT}"; then + echo "[INFO]: Creating Storage Account '${MY_STORAGE_ACCT}'" + az storage account create \ + --name "${MY_STORAGE_ACCT}" \ + --resource-group "${MY_RESOURCE_GROUP}" \ + --location "${MY_LOCATION}" \ + --sku Standard_ZRS \ + --encryption-services blob >/dev/null + fi } ##### # authorize_ad_user ################## authorize_ad_user() { - ## Use Azure AD Account to Authorize Operation - az ad signed-in-user show --query objectId -o tsv | az role assignment create \ - --role "Storage Blob Data Contributor" \ - --assignee @- \ - --scope "/subscriptions/${MY_ACCOUNT_ID}/resourceGroups/${MY_RESOURCE_GROUP}/providers/Microsoft.Storage/storageAccounts/${MY_STORAGE_ACCT}" > /dev/null + ## Use Azure AD Account to Authorize Operation + az ad signed-in-user show --query objectId -o tsv | az role assignment create \ + --role "Storage Blob Data Contributor" \ + --assignee @- \ + --scope "/subscriptions/${MY_ACCOUNT_ID}/resourceGroups/${MY_RESOURCE_GROUP}/providers/Microsoft.Storage/storageAccounts/${MY_STORAGE_ACCT}" >/dev/null } ##### # create_storage_container ################## create_storage_container() { - ## Create Container Using Credentials - if ! az storage container list \ - --account-name ${MY_STORAGE_ACCT} \ - --auth-mode login | jq '.[].name' -r | grep -q ${MY_CONTAINER_NAME} - then - echo "[INFO]: Creating Storage Container '${MY_CONTAINER_NAME}'" - az storage container create \ - --account-name ${MY_STORAGE_ACCT} \ - --name ${MY_CONTAINER_NAME} \ - --auth-mode login > /dev/null - fi + ## Create Container Using Credentials + if ! az storage container list \ + --account-name "${MY_STORAGE_ACCT}" \ + --auth-mode login | jq '.[].name' -r | grep -q "${MY_CONTAINER_NAME}"; then + echo "[INFO]: Creating Storage Container '${MY_CONTAINER_NAME}'" + az storage container create \ + --account-name "${MY_STORAGE_ACCT}" \ + --name "${MY_CONTAINER_NAME}" \ + --auth-mode login >/dev/null + fi } ##### # create_config_files ################## create_config_files() { - ## Create Minio env file and Helm Chart secret files - if [[ "${CREATE_MINIO_ENV}" =~ true|(y)es ]]; then - echo "[INFO]: Creating Docker Compose 'minio.env' file" - ./create_secrets.sh minio_env - fi + ## Create Minio env file and Helm Chart secret files + if [[ ${CREATE_MINIO_ENV} =~ true|(y)es ]]; then + echo "[INFO]: Creating Docker Compose 'minio.env' file" + ./create_secrets.sh minio_env + fi - if [[ "${CREATE_MINIO_CHART_SECRETS}" =~ true|(y)es ]]; then - echo "[INFO]: Creating Helm Chart 'minio_secrets.yaml' file" - ./create_secrets.sh minio_chart - fi + if [[ ${CREATE_MINIO_CHART_SECRETS} =~ true|(y)es ]]; then + echo "[INFO]: Creating Helm Chart 'minio_secrets.yaml' file" + ./create_secrets.sh minio_chart + fi - if [[ "${CREATE_DGRAPH_CHART_SECRETS}" =~ true|(y)es ]]; then - echo "[INFO]: Creating Helm Chart 'dgraph_secrets.yaml' file" - ./create_secrets.sh dgraph_chart - fi + if [[ ${CREATE_DGRAPH_CHART_SECRETS} =~ true|(y)es ]]; then + echo "[INFO]: Creating Helm Chart 'dgraph_secrets.yaml' file" + ./create_secrets.sh dgraph_chart + fi } main $@ diff --git a/contrib/config/backups/azure/azure_cli/create_secrets.sh b/contrib/config/backups/azure/azure_cli/create_secrets.sh index b3d3aed8444..ba126e6dafe 100755 --- a/contrib/config/backups/azure/azure_cli/create_secrets.sh +++ b/contrib/config/backups/azure/azure_cli/create_secrets.sh @@ -4,94 +4,101 @@ # main ################## main() { - check_environment $@ + check_environment $@ - ## Fetch Secrets from Azure - get_secrets + ## Fetch Secrets from Azure + get_secrets - ## Create Configuration with Secrets - case $1 in - minio_env) - create_minio_env - ;; - minio_chart) - create_minio_secrets - ;; - dgraph_chart) - create_dgraph_secrets - ;; - esac + ## Create Configuration with Secrets + case $1 in + minio_env) + create_minio_env + ;; + minio_chart) + create_minio_secrets + ;; + dgraph_chart) + create_dgraph_secrets + ;; + esac } ##### # check_environment ################## check_environment() { - ## Check for Azure CLI command - command -v az > /dev/null || \ - { echo "[ERROR]: 'az' command not not found" 1>&2; exit 1; } - command -v jq > /dev/null || \ - { echo "[ERROR]: 'jq' command not not found" 1>&2; exit 1; } + ## Check for Azure CLI command + command -v az >/dev/null || + { + echo "[ERROR]: 'az' command not not found" 1>&2 + exit 1 + } + command -v jq >/dev/null || + { + echo "[ERROR]: 'jq' command not not found" 1>&2 + exit 1 + } - MY_STORAGE_ACCT=${MY_STORAGE_ACCT:-""} - MY_RESOURCE_GROUP=${MY_RESOURCE_GROUP:=""} + MY_STORAGE_ACCT=${MY_STORAGE_ACCT:-""} + MY_RESOURCE_GROUP=${MY_RESOURCE_GROUP:=""} - if [[ -z "${MY_STORAGE_ACCT}" ]]; then - printf "[ERROR]: The env var of 'MY_STORAGE_ACCT' was not defined. Exiting\n" 1>&2 - exit 1 - fi + if [[ -z ${MY_STORAGE_ACCT} ]]; then + printf "[ERROR]: The env var of 'MY_STORAGE_ACCT' was not defined. Exiting\n" 1>&2 + exit 1 + fi - if [[ -z "${MY_RESOURCE_GROUP}" ]]; then - printf "[ERROR]: The env var of 'MY_RESOURCE_GROUP' was not defined. Exiting\n" 1>&2 - exit 1 - fi + if [[ -z ${MY_RESOURCE_GROUP} ]]; then + printf "[ERROR]: The env var of 'MY_RESOURCE_GROUP' was not defined. Exiting\n" 1>&2 + exit 1 + fi } ##### # get_secrets ################## get_secrets() { - CONN_STR=$(az storage account show-connection-string \ - --name "${MY_STORAGE_ACCT}" \ - --resource-group "${MY_RESOURCE_GROUP}" \ - | jq .connectionString -r - ) + CONN_STR=$( + az storage account show-connection-string \ + --name "${MY_STORAGE_ACCT}" \ + --resource-group "${MY_RESOURCE_GROUP}" | + jq .connectionString -r + ) - export MINIO_SECRET_KEY=$(grep -oP '(?<=AccountKey=).*' <<< $CONN_STR) - export MINIO_ACCESS_KEY=$(grep -oP '(?<=AccountName=)[^;]*' <<< $CONN_STR) + export MINIO_SECRET_KEY=$(grep -oP '(?<=AccountKey=).*' <<<"${CONN_STR}") + export MINIO_ACCESS_KEY=$(grep -oP '(?<=AccountName=)[^;]*' <<<"${CONN_STR}") } ##### # create_minio_env ################## create_minio_env() { - cat <<-EOF > ../minio.env -MINIO_SECRET_KEY=$(grep -oP '(?<=AccountKey=).*' <<< $CONN_STR) -MINIO_ACCESS_KEY=$(grep -oP '(?<=AccountName=)[^;]*' <<< $CONN_STR) -EOF + cat <<-EOF >../minio.env + MINIO_SECRET_KEY=$(grep -oP '(?<=AccountKey=).*' <<<"${CONN_STR}") + MINIO_ACCESS_KEY=$(grep -oP '(?<=AccountName=)[^;]*' <<<"${CONN_STR}") + EOF } ##### # create_minio_secrets ################## create_minio_secrets() { - cat <<-EOF > ../charts/minio_secrets.yaml -accessKey: ${MINIO_ACCESS_KEY} -secretKey: ${MINIO_SECRET_KEY} -EOF + cat <<-EOF >../charts/minio_secrets.yaml + accessKey: ${MINIO_ACCESS_KEY} + secretKey: ${MINIO_SECRET_KEY} + EOF } ##### # create_dgraph_secrets ################## create_dgraph_secrets() { - cat <<-EOF > ../charts/dgraph_secrets.yaml -backups: - keys: - minio: - access: ${MINIO_ACCESS_KEY} - secret: ${MINIO_SECRET_KEY} -EOF + cat <<-EOF >../charts/dgraph_secrets.yaml + backups: + keys: + minio: + access: ${MINIO_ACCESS_KEY} + secret: ${MINIO_SECRET_KEY} + EOF } main $@ diff --git a/contrib/config/backups/azure/terraform/README.md b/contrib/config/backups/azure/terraform/README.md index fe8d5a6c471..c3384ec224d 100644 --- a/contrib/config/backups/azure/terraform/README.md +++ b/contrib/config/backups/azure/terraform/README.md @@ -2,29 +2,34 @@ ## About -This script will create the required resources needed to create Azure Blob Storage using [`simple-azure-blob`](https://github.com/darkn3rd/simple-azure-blob) module. +This script will create the required resources needed to create Azure Blob Storage using +[`simple-azure-blob`](https://github.com/darkn3rd/simple-azure-blob) module. ## Prerequisites You need the following installed to use this automation: -* [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) with an active Azure subscription configured. -* [Terraform](https://www.terraform.io/downloads.html) tool that is used to provision resources and create configuration files from templates +- [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) + with an active Azure subscription configured. +- [Terraform](https://www.terraform.io/downloads.html) tool that is used to provision resources and + create configuration files from templates ## Configuration You will need to define the following variables: -* Required Variables: - * `resource_group_name` (required) - Azure resource group that contains the resources - * `storage_account_name` (required) - Azure storage account (unique global name) to contain storage - * `storage_container_name` (default = `dgraph-backups`) - Azure container to host the blob storage +- Required Variables: + - `resource_group_name` (required) - Azure resource group that contains the resources + - `storage_account_name` (required) - Azure storage account (unique global name) to contain + storage + - `storage_container_name` (default = `dgraph-backups`) - Azure container to host the blob storage ## Steps ### Define Variables -You can define these when prompted, or in `terrafrom.tfvars` file, or through command line variables, e.g. `TF_VAR_resource_group_name`, `TF_VAR_storage_account_name`. +You can define these when prompted, or in `terrafrom.tfvars` file, or through command line +variables, e.g. `TF_VAR_resource_group_name`, `TF_VAR_storage_account_name`. ```terraform # terraform.tfvars diff --git a/contrib/config/backups/client/README.md b/contrib/config/backups/client/README.md index dd63420811e..1582d628a26 100644 --- a/contrib/config/backups/client/README.md +++ b/contrib/config/backups/client/README.md @@ -1,41 +1,59 @@ # Backup Script -This backup script that supports many of the features in Dgraph, such as ACLs, Mutual TLS, REST or GraphQL API. See `./dgraph-backup.sh --help` for all of the options. +This backup script that supports many of the features in Dgraph, such as ACLs, Mutual TLS, REST or +GraphQL API. See `./dgraph-backup.sh --help` for all of the options. ## Requirements -* The scripts (`dgraph-backup.sh` and `compose-setup.sh`) require the following tools to run properly: - * GNU `bash` - * GNU `getopt` - * GNU `grep` -* These scripts were tested on the following environments: - * macOS with Homebrew [gnu-getopt](https://formulae.brew.sh/formula/gnu-getopt) bottle and [grep](https://formulae.brew.sh/formula/grep) bottle, - * [Ubuntu 20.04.1 (Focal Fossa)](https://releases.ubuntu.com/20.04/) (any modern Linux distro should work, such as the [dgraph/dgraph](https://hub.docker.com/r/dgraph/dgraph/) docker container), and - * Windows with [MSYS2](https://www.msys2.org/). -* For the test demo environment, both [docker](https://docs.docker.com/engine/) and [docker-compose](https://docs.docker.com/compose/) are required. +- The scripts (`dgraph-backup.sh` and `compose-setup.sh`) require the following tools to run + properly: + - GNU `bash` + - GNU `getopt` + - GNU `grep` +- These scripts were tested on the following environments: + - macOS with Homebrew [gnu-getopt](https://formulae.brew.sh/formula/gnu-getopt) bottle and + [grep](https://formulae.brew.sh/formula/grep) bottle, + - [Ubuntu 20.04.1 (Focal Fossa)](https://releases.ubuntu.com/20.04/) (any modern Linux distro + should work, such as the [dgraph/dgraph](https://hub.docker.com/r/dgraph/dgraph/) docker + container), and + - Windows with [MSYS2](https://www.msys2.org/). +- For the test demo environment, both [docker](https://docs.docker.com/engine/) and + [docker-compose](https://docs.docker.com/compose/) are required. -† Some versions of macOS 10.x do not include have a compatible version of `grep`. You need to have GNU grep in the path for this script to work. +† Some versions of macOS 10.x do not include have a compatible version of `grep`. You need to have +GNU grep in the path for this script to work. ## Important Notes -If you are using this script on a system other than alpha, we'll call this *backup workstation*, you should be aware of the following: +If you are using this script on a system other than alpha, we'll call this _backup workstation_, you +should be aware of the following: -* **General** - * the *backup workstation* will need to have access to the alpha server, e.g. `localhost:8080` -* **TLS** - * when accessing alpha server secured by TLS, the *backup workstation* will need access to `ca.crt` created with `dgraph cert` in the path. - * if Mutual TLS is used, the *backup workstation* will also need access to the client cert and key in the path. -* **`subpath` option** - * when specifying sub-path that uses a datestamp, the *backup workstation* needs to have the same timestamp as the alpha server. - * when backing up to a file path, such as NFS, the *backup workstation* will need access to the same file path at the same mount point, e.g. if `/dgraph/backups` is used on alpha, the same path `/dgraph/backups` has to be accessible on the *backup workstation* +- **General** + - the _backup workstation_ will need to have access to the alpha server, e.g. `localhost:8080` +- **TLS** + - when accessing alpha server secured by TLS, the _backup workstation_ will need access to + `ca.crt` created with `dgraph cert` in the path. + - if Mutual TLS is used, the _backup workstation_ will also need access to the client cert and key + in the path. +- **`subpath` option** + - when specifying sub-path that uses a datestamp, the _backup workstation_ needs to have the same + timestamp as the alpha server. + - when backing up to a file path, such as NFS, the _backup workstation_ will need access to the + same file path at the same mount point, e.g. if `/dgraph/backups` is used on alpha, the same + path `/dgraph/backups` has to be accessible on the _backup workstation_ ## Demo (Test) with local file path -You can try out these features using [Docker Compose](https://docs.docker.com/compose/). There's a `./compose-setup.sh` script that can configure the environment with the desired features. As you need to have a common shared directory for file paths, you can use `ratel` container as the *backup workstation* to run the backup script. +You can try out these features using [Docker Compose](https://docs.docker.com/compose/). There's a +`./compose-setup.sh` script that can configure the environment with the desired features. As you +need to have a common shared directory for file paths, you can use `ratel` container as the _backup +workstation_ to run the backup script. -As an example of performing backups with a local mounted file path using ACLs, Encryption, and TLS, you can follow these steps: +As an example of performing backups with a local mounted file path using ACLs, Encryption, and TLS, +you can follow these steps: + +1. Setup Environment and log into _backup workstation_ (ratel container): -1. Setup Environment and log into *backup workstation* (ratel container): ```bash ## configure docker-compose environment ./compose-setup.sh --acl --enc --tls --make_tls_cert @@ -44,7 +62,9 @@ As an example of performing backups with a local mounted file path using ACLs, E ## login into Ratel to use for backups docker exec --tty --interactive ratel bash ``` + 2. Trigger a full backup: + ```bash ## trigger a backup on alpha1:8080 ./dgraph-backup.sh \ @@ -55,25 +75,35 @@ As an example of performing backups with a local mounted file path using ACLs, E --user groot \ --password password ``` + 3. Verify Results + ```bash ## check for backup files ls /dgraph/backups ``` + 4. Logout of the Ratel container + ```bash exit ``` -4. Cleanup when finished + +5. Cleanup when finished + ```bash docker-compose stop && docker-compose rm ``` ### Demo (Test) with S3 Buckets -This will have requirements for [Terraform](https://www.terraform.io/) and [AWS CLI](https://aws.amazon.com/cli/). See [s3/README.md](../s3/README.md) for further information. Because we do not need to share the same file path, we can use the host as the *backup workstation*: +This will have requirements for [Terraform](https://www.terraform.io/) and +[AWS CLI](https://aws.amazon.com/cli/). See [s3/README.md](../s3/README.md) for further information. +Because we do not need to share the same file path, we can use the host as the _backup workstation_: + +1. Setup the S3 Bucket environment. Make sure to replace `` to an + appropriate name. -1. Setup the S3 Bucket environment. Make sure to replace `` to an appropriate name. ```bash ## create the S3 Bucket + Credentials pushd ../s3/terraform @@ -89,18 +119,24 @@ This will have requirements for [Terraform](https://www.terraform.io/) and [AWS source env.sh popd ``` + 2. Trigger a backup + ```bash ./dgraph-backup.sh \ --alpha localhost:8080 \ --force_full \ --location $BACKUP_PATH ``` + 3. Verify backups were finished + ```bash aws s3 ls s3://${BACKUP_PATH##*/} ``` + 4. Clean up when completed: + ```bash ## remove the local Dgraph cluster pushd ../s3 @@ -118,9 +154,14 @@ This will have requirements for [Terraform](https://www.terraform.io/) and [AWS ### Demo (Test) with GCP via Minio Gateway -This will have requirements for [Terraform](https://www.terraform.io/) and [Google Cloud SDK](https://cloud.google.com/sdk). See [gcp/README.md](../gcp/README.md) for further information. Because we do not need to share the same file path, we can use the host as the *backup workstation*: +This will have requirements for [Terraform](https://www.terraform.io/) and +[Google Cloud SDK](https://cloud.google.com/sdk). See [gcp/README.md](../gcp/README.md) for further +information. Because we do not need to share the same file path, we can use the host as the _backup +workstation_: + +1. Setup the GCS Bucket environment. Make sure to replace `` and + `` and ``, + ``, and `` to something + appropriate. -1. Setup Azure Storage Blob environment. Replace ``, ``, and `` to something appropriate. ```bash ## create Resource Group, Storage Account, authorize Storage Account, Create Storage Container pushd ../azure/terraform @@ -187,21 +240,27 @@ This will have requirements for [Terraform](https://www.terraform.io/) and [Azur popd ``` + 2. Trigger a backup + ```bash ./dgraph-backup.sh \ --alpha localhost:8080 \ --force_full \ --location minio://gateway:9000/${CONTAINER_NAME} ``` + 3. Verify backups were created + ```bash az storage blob list \ --account-name ${STORAGE_ACCOUNT_NAME} \ --container-name ${CONTAINER_NAME} \ --output table ``` + 4. Clean up when finished: + ```bash ## remove the local Dgraph cluster pushd ../azure diff --git a/contrib/config/backups/client/backup_helper.sh b/contrib/config/backups/client/backup_helper.sh index 5bac16ebc76..1cb1d422c38 100644 --- a/contrib/config/backups/client/backup_helper.sh +++ b/contrib/config/backups/client/backup_helper.sh @@ -7,23 +7,23 @@ # get_token_rest - get accessJWT token with REST command for Dgraph 1.x ########################## get_token_rest() { - JSON="{\"userid\": \"${USER}\", \"password\": \"${PASSWORD}\" }" - RESULT=$( - /usr/bin/curl --silent \ - "${HEADERS[@]}" \ - "${CERTOPTS[@]}" \ - --request POST \ - ${ALPHA_HOST}/login \ - --data "${JSON}" - ) - - if grep -q errors <<< "$RESULT"; then - ERROR=$(grep -oP '(?<=message":")[^"]*' <<< $RESULT) - echo "ERROR: $ERROR" - return 1 - fi - - grep -oP '(?<=accessJWT":")[^"]*' <<< "$RESULT" + JSON="{\"userid\": \"${USER}\", \"password\": \"${PASSWORD}\" }" + RESULT=$( + /usr/bin/curl --silent \ + "${HEADERS[@]}" \ + "${CERTOPTS[@]}" \ + --request POST \ + "${ALPHA_HOST}"/login \ + --data "${JSON}" + ) + + if grep -q errors <<<"${RESULT}"; then + ERROR=$(grep -oP '(?<=message":")[^"]*' <<<"${RESULT}") + echo "ERROR: ${ERROR}" + return 1 + fi + + grep -oP '(?<=accessJWT":")[^"]*' <<<"${RESULT}" } @@ -31,23 +31,23 @@ get_token_rest() { # get_token_graphql - get accessJWT token using GraphQL for Dgraph 20.03.1+ ########################## get_token_graphql() { - GQL="{\"query\": \"mutation { login(userId: \\\"${USER}\\\" password: \\\"${PASSWORD}\\\") { response { accessJWT } } }\"}" - RESULT=$( - /usr/bin/curl --silent \ - "${HEADERS[@]}" \ - "${CERTOPTS[@]}" \ - --request POST \ - ${ALPHA_HOST}/admin \ - --data "${GQL}" - ) - - if grep -q errors <<< "$RESULT"; then - ERROR=$(grep -oP '(?<=message":")[^"]*' <<< $RESULT) - echo "ERROR: $ERROR" - return 1 - fi - - grep -oP '(?<=accessJWT":")[^"]*' <<< "$RESULT" + GQL="{\"query\": \"mutation { login(userId: \\\"${USER}\\\" password: \\\"${PASSWORD}\\\") { response { accessJWT } } }\"}" + RESULT=$( + /usr/bin/curl --silent \ + "${HEADERS[@]}" \ + "${CERTOPTS[@]}" \ + --request POST \ + "${ALPHA_HOST}"/admin \ + --data "${GQL}" + ) + + if grep -q errors <<<"${RESULT}"; then + ERROR=$(grep -oP '(?<=message":")[^"]*' <<<"${RESULT}") + echo "ERROR: ${ERROR}" + return 1 + fi + + grep -oP '(?<=accessJWT":")[^"]*' <<<"${RESULT}" } @@ -63,42 +63,42 @@ get_token_graphql() { # CLIENT_KEY_PATH - path to client cert (e.g. client.dgraphuser.key) for client TLS ########################## get_token() { - USER=${1} - PASSWORD=${2} - AUTH_TOKEN=${3:-""} - CACERT_PATH=${CACERT_PATH:-""} - CLIENT_CERT_PATH=${CLIENT_CERT_PATH:-""} - CLIENT_KEY_PATH=${CLIENT_KEY_PATH:-""} - - ## user/password required for login - if [[ -z "$USER" || -z "$PASSWORD" ]]; then - return 1 - fi - - if [[ ! -z "$AUTH_TOKEN" ]]; then - HEADERS+=('--header' "X-Dgraph-AuthToken: $AUTH_TOKEN") - fi - - if [[ ! -z "$CACERT_PATH" ]]; then - CERTOPTS+=('--cacert' "$CACERT_PATH") - if [[ ! -z "$CLIENT_CERT_PATH" || ! -z "$CLIENT_KEY_PATH" ]]; then - CERTOPTS+=( - '--cert' "$CLIENT_CERT_PATH" - '--key' "$CLIENT_KEY_PATH" - ) - fi - ALPHA_HOST=https://${ALPHA_HOST:-"localhost:8080"} - else - ALPHA_HOST=${ALPHA_HOST:-"localhost:8080"} - fi - - API_TYPE=${API_TYPE:-"graphql"} - if [[ "$API_TYPE" == "graphql" ]]; then - HEADERS+=('--header' "Content-Type: application/json") - get_token_graphql - else - get_token_rest - fi + USER=${1} + PASSWORD=${2} + AUTH_TOKEN=${3:-""} + CACERT_PATH=${CACERT_PATH:-""} + CLIENT_CERT_PATH=${CLIENT_CERT_PATH:-""} + CLIENT_KEY_PATH=${CLIENT_KEY_PATH:-""} + + ## user/password required for login + if [[ -z ${USER} || -z ${PASSWORD} ]]; then + return 1 + fi + + if [[ -n ${AUTH_TOKEN} ]]; then + HEADERS+=('--header' "X-Dgraph-AuthToken: ${AUTH_TOKEN}") + fi + + if [[ -n ${CACERT_PATH} ]]; then + CERTOPTS+=('--cacert' "${CACERT_PATH}") + if [[ ! -z ${CLIENT_CERT_PATH} || -n ${CLIENT_KEY_PATH} ]]; then + CERTOPTS+=( + '--cert' "${CLIENT_CERT_PATH}" + '--key' "${CLIENT_KEY_PATH}" + ) + fi + ALPHA_HOST=https://${ALPHA_HOST:-"localhost:8080"} + else + ALPHA_HOST=${ALPHA_HOST:-"localhost:8080"} + fi + + API_TYPE=${API_TYPE:-"graphql"} + if [[ ${API_TYPE} == "graphql" ]]; then + HEADERS+=('--header' "Content-Type: application/json") + get_token_graphql + else + get_token_rest + fi } ###### @@ -115,65 +115,68 @@ get_token() { # CLIENT_KEY_PATH - path to client cert (e.g. client.dgraphuser.key) for client TLS ########################## backup() { - ACCESS_TOKEN=${1:-""} - AUTH_TOKEN=${2:-""} - CACERT_PATH=${CACERT_PATH:-""} - CLIENT_CERT_PATH=${CLIENT_CERT_PATH:-""} - CLIENT_KEY_PATH=${CLIENT_KEY_PATH:-""} - - API_TYPE=${API_TYPE:-"graphql"} - - MINIO_SECURE=${MINIO_SECURE:-"false"} - FORCE_FULL=${FORCE_FULL:-"false"} - - [[ -z "$BACKUP_DESTINATION" ]] && \ - { echo "'BACKUP_DESTINATION' is not set. Exiting" >&2; return 1; } - - if [[ ! -z "$ACCESS_TOKEN" ]]; then - HEADERS+=('--header' "X-Dgraph-AccessToken: $ACCESS_TOKEN") - fi - - if [[ ! -z "$AUTH_TOKEN" ]]; then - HEADERS+=('--header' "X-Dgraph-AuthToken: $AUTH_TOKEN") - fi - - if [[ ! -z "$CACERT_PATH" ]]; then - CERTOPTS+=('--cacert' "$CACERT_PATH") - if [[ ! -z "$CLIENT_CERT_PATH" || ! -z "$CLIENT_KEY_PATH" ]]; then - CERTOPTS+=( - '--cert' "$CLIENT_CERT_PATH" - '--key' "$CLIENT_KEY_PATH" - ) - fi - ALPHA_HOST=https://${ALPHA_HOST:-"localhost:8080"} - else - ALPHA_HOST=${ALPHA_HOST:-"localhost:8080"} - fi - - ## Configure destination with date stamp folder - BACKUP_DESTINATION="${BACKUP_DESTINATION}/${SUBPATH}" - ## Configure Minio Configuration - if [[ "$MINIO_SECURE" == "false" && "$BACKUP_DESTINATION" =~ ^minio ]]; then - BACKUP_DESTINATION="${BACKUP_DESTINATION}?secure=false" - fi - - ## Create date-stamped directory for file system - if [[ ! "$BACKUP_DESTINATION" =~ ^minio|^s3 ]]; then - ## Check destination directory exist - if [[ -d ${BACKUP_DESTINATION%/*} ]]; then - mkdir -p $BACKUP_DESTINATION - else - echo "Designated Backup Destination '${BACKUP_DESTINATION%/*}' does not exist. Aborting." - return 1 - fi - fi - - if [[ "$API_TYPE" == "graphql" ]]; then - HEADERS+=('--header' "Content-Type: application/json") - backup_graphql - else - backup_rest - fi + ACCESS_TOKEN=${1:-""} + AUTH_TOKEN=${2:-""} + CACERT_PATH=${CACERT_PATH:-""} + CLIENT_CERT_PATH=${CLIENT_CERT_PATH:-""} + CLIENT_KEY_PATH=${CLIENT_KEY_PATH:-""} + + API_TYPE=${API_TYPE:-"graphql"} + + MINIO_SECURE=${MINIO_SECURE:-"false"} + FORCE_FULL=${FORCE_FULL:-"false"} + + [[ -z ${BACKUP_DESTINATION} ]] && + { + echo "'BACKUP_DESTINATION' is not set. Exiting" >&2 + return 1 + } + + if [[ -n ${ACCESS_TOKEN} ]]; then + HEADERS+=('--header' "X-Dgraph-AccessToken: ${ACCESS_TOKEN}") + fi + + if [[ -n ${AUTH_TOKEN} ]]; then + HEADERS+=('--header' "X-Dgraph-AuthToken: ${AUTH_TOKEN}") + fi + + if [[ -n ${CACERT_PATH} ]]; then + CERTOPTS+=('--cacert' "${CACERT_PATH}") + if [[ ! -z ${CLIENT_CERT_PATH} || -n ${CLIENT_KEY_PATH} ]]; then + CERTOPTS+=( + '--cert' "${CLIENT_CERT_PATH}" + '--key' "${CLIENT_KEY_PATH}" + ) + fi + ALPHA_HOST=https://${ALPHA_HOST:-"localhost:8080"} + else + ALPHA_HOST=${ALPHA_HOST:-"localhost:8080"} + fi + + ## Configure destination with date stamp folder + BACKUP_DESTINATION="${BACKUP_DESTINATION}/${SUBPATH}" + ## Configure Minio Configuration + if [[ ${MINIO_SECURE} == "false" && ${BACKUP_DESTINATION} =~ ^minio ]]; then + BACKUP_DESTINATION="${BACKUP_DESTINATION}?secure=false" + fi + + ## Create date-stamped directory for file system + if [[ ! ${BACKUP_DESTINATION} =~ ^minio|^s3 ]]; then + ## Check destination directory exist + if [[ -d ${BACKUP_DESTINATION%/*} ]]; then + mkdir -p "${BACKUP_DESTINATION}" + else + echo "Designated Backup Destination '${BACKUP_DESTINATION%/*}' does not exist. Aborting." + return 1 + fi + fi + + if [[ ${API_TYPE} == "graphql" ]]; then + HEADERS+=('--header' "Content-Type: application/json") + backup_graphql + else + backup_rest + fi } @@ -181,27 +184,28 @@ backup() { # backup_rest - trigger backup using REST command for Dgraph 1.x ########################## backup_rest() { - URL_PATH="admin/backup?force_full=$FORCE_FULL" - - RESULT=$(/usr/bin/curl --silent \ - "${HEADERS[@]}" \ - "${CERTOPTS[@]}" \ - --request POST \ - ${ALPHA_HOST}/$URL_PATH \ - --data "destination=$BACKUP_DESTINATION" - ) - - if grep -q errors <<< "$RESULT"; then - ERROR=$(grep -oP '(?<=message":")[^"]*' <<< $RESULT) - MESSAGE="ERROR: $ERROR" - if grep -q code <<< "$RESULT"; then - CODE=$(grep -oP '(?<=code":")[^"]*' <<< $RESULT) - echo "$MESSAGE REASON='$CODE'" - fi - return 1 - fi - - echo $RESULT + URL_PATH="admin/backup?force_full=${FORCE_FULL}" + + RESULT=$( + /usr/bin/curl --silent \ + "${HEADERS[@]}" \ + "${CERTOPTS[@]}" \ + --request POST \ + "${ALPHA_HOST}"/"${URL_PATH}" \ + --data "destination=${BACKUP_DESTINATION}" + ) + + if grep -q errors <<<"${RESULT}"; then + ERROR=$(grep -oP '(?<=message":")[^"]*' <<<"${RESULT}") + MESSAGE="ERROR: ${ERROR}" + if grep -q code <<<"${RESULT}"; then + CODE=$(grep -oP '(?<=code":")[^"]*' <<<"${RESULT}") + echo "${MESSAGE} REASON='${CODE}'" + fi + return 1 + fi + + echo "${RESULT}" } @@ -209,21 +213,22 @@ backup_rest() { # backup_graphql - trigger backup using GraphQL for Dgraph 20.03.1+ ########################## backup_graphql() { - GQL="{\"query\": \"mutation { backup(input: {destination: \\\"${BACKUP_DESTINATION}\\\" forceFull: $FORCE_FULL }) { response { message code } } }\"}" - - RESULT=$(/usr/bin/curl --silent \ - "${HEADERS[@]}" \ - "${CERTOPTS[@]}" \ - --request POST \ - ${ALPHA_HOST}/admin \ - --data "$GQL" - ) - - if grep -q errors <<< "$RESULT"; then - ERROR=$(grep -oP '(?<=message":")[^"]*' <<< $RESULT) - echo "ERROR: $ERROR" - return 1 - fi - - echo $RESULT + GQL="{\"query\": \"mutation { backup(input: {destination: \\\"${BACKUP_DESTINATION}\\\" forceFull: ${FORCE_FULL} }) { response { message code } } }\"}" + + RESULT=$( + /usr/bin/curl --silent \ + "${HEADERS[@]}" \ + "${CERTOPTS[@]}" \ + --request POST \ + "${ALPHA_HOST}"/admin \ + --data "${GQL}" + ) + + if grep -q errors <<<"${RESULT}"; then + ERROR=$(grep -oP '(?<=message":")[^"]*' <<<"${RESULT}") + echo "ERROR: ${ERROR}" + return 1 + fi + + echo "${RESULT}" } diff --git a/contrib/config/backups/client/compose-setup.sh b/contrib/config/backups/client/compose-setup.sh index acc1ece431c..ce94bc84b62 100755 --- a/contrib/config/backups/client/compose-setup.sh +++ b/contrib/config/backups/client/compose-setup.sh @@ -14,221 +14,263 @@ # main - runs the script ########################## main() { - parse_command $@ - config_compose - create_certs + parse_command $@ + config_compose + create_certs } ###### # usage - print friendly usage statement ########################## usage() { - cat <<-USAGE 1>&2 -Setup Docker Compose Environment - -Usage: - $0 [FLAGS] --location [LOCATION] - -Flags: - -j, --acl Enable Access Control List - -t, --auth_token Enable auth token - -e, --enc Enable Encryption - -k, --tls Enable TLS - -c, --tls_client_auth string Set TLS Auth String (default VERIFYIFGIVEN) - -m, --make_tls_cert Create TLS Certificates and Key - -v, --dgraph_version Set Dgraph Version - -d, --debug Enable debug in output - -h, --help Help for $0 - -USAGE + cat <<-USAGE 1>&2 + Setup Docker Compose Environment + + Usage: + $0 [FLAGS] --location [LOCATION] + + Flags: + -j, --acl Enable Access Control List + -t, --auth_token Enable auth token + -e, --enc Enable Encryption + -k, --tls Enable TLS + -c, --tls_client_auth string Set TLS Auth String (default VERIFYIFGIVEN) + -m, --make_tls_cert Create TLS Certificates and Key + -v, --dgraph_version Set Dgraph Version + -d, --debug Enable debug in output + -h, --help Help for $0 + + USAGE } ###### # get_grep - find grep that supports look-ahead/behind regex ########################## get_grep() { - unset GREP_CMD - - ## Check for GNU grep compatibility - if ! grep --version | head -1 | fgrep -q GNU; then - local SYSTEM="$(uname -s)" - if [[ "${SYSTEM,,}" == "freebsd" ]]; then - ## Check FreeBSD install location - if [[ -f "/usr/local/bin/grep" ]]; then - GREP_CMD="/usr/local/bin/grep" - else - ## Save FreeBSD Instructions - local MESSAGE="On FreeBSD, compatible grep can be installed with 'sudo pkg install gnugrep'" - fi - elif [[ "${SYSTEM,,}" == "darwin" ]]; then - ## Check HomeBrew install location - if [[ -f "/usr/local/opt/grep/libexec/gnubin/grep" ]]; then - GREP_CMD="/usr/local/opt/grep/libexec/gnubin/grep" - ## Check MacPorts install location - elif [[ -f "/opt/local/bin/grep" ]]; then - GREP_CMD="/opt/local/bin/grep" - else - ## Save MacPorts or HomeBrew Instructions - if command -v brew > /dev/null; then - local MESSAGE="On macOS, gnu-grep can be installed with 'brew install grep'\n" - elif command -v port > /dev/null; then - local MESSAGE="On macOS, grep can be installed with 'sudo port install grep'\n" - fi - fi - fi - else - GREP_CMD="$(command -v grep)" - fi - - ## Error if no suitable grep command found - if [[ -z $GREP_CMD ]]; then - printf "ERROR: GNU grep not found. Please install GNU compatible 'grep'\n\n%s" "$MESSAGE" 1>&2 - exit 1 - fi + unset GREP_CMD + + ## Check for GNU grep compatibility + if ! grep --version | head -1 | fgrep -q GNU; then + local SYSTEM="$(uname -s)" + if [[ ${SYSTEM,,} == "freebsd" ]]; then + ## Check FreeBSD install location + if [[ -f "/usr/local/bin/grep" ]]; then + GREP_CMD="/usr/local/bin/grep" + else + ## Save FreeBSD Instructions + local MESSAGE="On FreeBSD, compatible grep can be installed with 'sudo pkg install gnugrep'" + fi + elif [[ ${SYSTEM,,} == "darwin" ]]; then + ## Check HomeBrew install location + if [[ -f "/usr/local/opt/grep/libexec/gnubin/grep" ]]; then + GREP_CMD="/usr/local/opt/grep/libexec/gnubin/grep" + ## Check MacPorts install location + elif [[ -f "/opt/local/bin/grep" ]]; then + GREP_CMD="/opt/local/bin/grep" + else + ## Save MacPorts or HomeBrew Instructions + if command -v brew >/dev/null; then + local MESSAGE="On macOS, gnu-grep can be installed with 'brew install grep'\n" + elif command -v port >/dev/null; then + local MESSAGE="On macOS, grep can be installed with 'sudo port install grep'\n" + fi + fi + fi + else + GREP_CMD="$(command -v grep)" + fi + + ## Error if no suitable grep command found + if [[ -z ${GREP_CMD} ]]; then + printf "ERROR: GNU grep not found. Please install GNU compatible 'grep'\n\n%s" "${MESSAGE}" 1>&2 + exit 1 + fi } ###### # get_getopt - find GNU getopt or print error message ########################## get_getopt() { - unset GETOPT_CMD - - ## Check for GNU getopt compatibility - if [[ "$(getopt --version)" =~ "--" ]]; then - local SYSTEM="$(uname -s)" - if [[ "${SYSTEM,,}" == "freebsd" ]]; then - ## Check FreeBSD install location - if [[ -f "/usr/local/bin/getopt" ]]; then - GETOPT_CMD="/usr/local/bin/getopt" - else - ## Save FreeBSD Instructions - local MESSAGE="On FreeBSD, compatible getopt can be installed with 'sudo pkg install getopt'" - fi - elif [[ "${SYSTEM,,}" == "darwin" ]]; then - ## Check HomeBrew install location - if [[ -f "/usr/local/opt/gnu-getopt/bin/getopt" ]]; then - GETOPT_CMD="/usr/local/opt/gnu-getopt/bin/getopt" - ## Check MacPorts install location - elif [[ -f "/opt/local/bin/getopt" ]]; then - GETOPT_CMD="/opt/local/bin/getopt" - else - ## Save MacPorts or HomeBrew Instructions - if command -v brew > /dev/null; then - local MESSAGE="On macOS, gnu-getopt can be installed with 'brew install gnu-getopt'\n" - elif command -v port > /dev/null; then - local MESSAGE="On macOS, getopt can be installed with 'sudo port install getopt'\n" - fi - fi - fi - else - GETOPT_CMD="$(command -v getopt)" - fi - - ## Error if no suitable getopt command found - if [[ -z $GETOPT_CMD ]]; then - printf "ERROR: GNU getopt not found. Please install GNU compatible 'getopt'\n\n%s" "$MESSAGE" 1>&2 - exit 1 - fi + unset GETOPT_CMD + + ## Check for GNU getopt compatibility + if [[ "$(getopt --version)" =~ "--" ]]; then + local SYSTEM="$(uname -s)" + if [[ ${SYSTEM,,} == "freebsd" ]]; then + ## Check FreeBSD install location + if [[ -f "/usr/local/bin/getopt" ]]; then + GETOPT_CMD="/usr/local/bin/getopt" + else + ## Save FreeBSD Instructions + local MESSAGE="On FreeBSD, compatible getopt can be installed with 'sudo pkg install getopt'" + fi + elif [[ ${SYSTEM,,} == "darwin" ]]; then + ## Check HomeBrew install location + if [[ -f "/usr/local/opt/gnu-getopt/bin/getopt" ]]; then + GETOPT_CMD="/usr/local/opt/gnu-getopt/bin/getopt" + ## Check MacPorts install location + elif [[ -f "/opt/local/bin/getopt" ]]; then + GETOPT_CMD="/opt/local/bin/getopt" + else + ## Save MacPorts or HomeBrew Instructions + if command -v brew >/dev/null; then + local MESSAGE="On macOS, gnu-getopt can be installed with 'brew install gnu-getopt'\n" + elif command -v port >/dev/null; then + local MESSAGE="On macOS, getopt can be installed with 'sudo port install getopt'\n" + fi + fi + fi + else + GETOPT_CMD="$(command -v getopt)" + fi + + ## Error if no suitable getopt command found + if [[ -z ${GETOPT_CMD} ]]; then + printf "ERROR: GNU getopt not found. Please install GNU compatible 'getopt'\n\n%s" "${MESSAGE}" 1>&2 + exit 1 + fi } ###### # parse_command - parse command line options using GNU getopt ########################## parse_command() { - get_getopt - - ## Parse Arguments with GNU getopt - PARSED_ARGUMENTS=$( - $GETOPT_CMD -o jtdhekmc:v: \ - --long acl,auth_token,enc,tls,make_tls_cert,tls_client_auth:,dgraph_version:,debug,help \ - -n 'compose-setup.sh' -- "$@" - ) - if [ $? != 0 ] ; then usage; exit 1 ; fi - eval set -- "$PARSED_ARGUMENTS" - - ## Defaults - DEBUG="false" - ACL_ENABLED="false" - TOKEN_ENABLED="false" - ENC_ENABLED="false" - TLS_ENABLED="false" - TLS_CLIENT_AUTH="VERIFYIFGIVEN" - TLS_MAKE_CERTS="false" - - ## Process Agurments - while true; do - case "$1" in - -j | --acl) ACL_ENABLED="true"; shift ;; - -t | --auth_token) TOKEN_ENABLED=true; shift ;; - -d | --debug) DEBUG="true"; shift ;; - -h | --help) usage; exit;; - -e | --enc) ENC_ENABLED="true"; shift ;; - -k | --tls) TLS_ENABLED="true"; shift ;; - -m | --make_tls_cert) TLS_MAKE_CERTS="true"; shift;; - -c | --tls_client_auth) TLS_CLIENT_AUTH="$2"; shift 2;; - -v | --dgraph_version) DGRAPH_VERSION="$2"; shift 2;; - --) shift; break ;; - *) break ;; - esac - done - - ## Set DGRAPH_VERSION to latest if it is not set yet - [[ -z $DGRAPH_VERSION ]] && get_grep && DGRAPH_VERSION=$(curl -s https://get.dgraph.io/latest | $GREP_CMD -oP '(?<=tag_name":")[^"]*') + get_getopt + + ## Parse Arguments with GNU getopt + PARSED_ARGUMENTS=$( + ${GETOPT_CMD} -o jtdhekmc:v: \ + --long acl,auth_token,enc,tls,make_tls_cert,tls_client_auth:,dgraph_version:,debug,help \ + -n 'compose-setup.sh' -- "$@" + ) + if [[ $? != 0 ]]; then + usage + exit 1 + fi + eval set -- "${PARSED_ARGUMENTS}" + + ## Defaults + DEBUG="false" + ACL_ENABLED="false" + TOKEN_ENABLED="false" + ENC_ENABLED="false" + TLS_ENABLED="false" + TLS_CLIENT_AUTH="VERIFYIFGIVEN" + TLS_MAKE_CERTS="false" + + ## Process Agurments + while true; do + case "$1" in + -j | --acl) + ACL_ENABLED="true" + shift + ;; + -t | --auth_token) + TOKEN_ENABLED=true + shift + ;; + -d | --debug) + DEBUG="true" + shift + ;; + -h | --help) + usage + exit + ;; + -e | --enc) + ENC_ENABLED="true" + shift + ;; + -k | --tls) + TLS_ENABLED="true" + shift + ;; + -m | --make_tls_cert) + TLS_MAKE_CERTS="true" + shift + ;; + -c | --tls_client_auth) + TLS_CLIENT_AUTH="$2" + shift 2 + ;; + -v | --dgraph_version) + DGRAPH_VERSION="$2" + shift 2 + ;; + --) + shift + break + ;; + *) break ;; + esac + done + + ## Set DGRAPH_VERSION to latest if it is not set yet + [[ -z ${DGRAPH_VERSION} ]] && get_grep && DGRAPH_VERSION=$(curl -s https://get.dgraph.io/latest | ${GREP_CMD} -oP '(?<=tag_name":")[^"]*') } ###### # create_certs - creates cert and keys ########################## create_certs() { - command -v docker > /dev/null || \ - { echo "[ERROR]: 'docker' command not not found" 1>&2; exit 1; } - docker version > /dev/null || \ - { echo "[ERROR]: docker not accessible for '$USER'" 1>&2; exit 1; } - - if [[ "$TLS_MAKE_CERTS" == "true" ]]; then - [[ -z $DGRAPH_VERSION ]] && { echo "[ERROR]: 'DGRAPH_VERSION' not set. Aborting." 1>&2; exit 1; } - rm --force $PWD/data/tls/*.{crt,key} - docker run \ - --tty \ - --volume $PWD/data/tls:/tls dgraph/dgraph:$DGRAPH_VERSION \ - dgraph cert --dir /tls --client backupuser --nodes "localhost,alpha1,zero1,ratel" --duration 365 - fi + command -v docker >/dev/null || + { + echo "[ERROR]: 'docker' command not not found" 1>&2 + exit 1 + } + docker version >/dev/null || + { + echo "[ERROR]: docker not accessible for '${USER}'" 1>&2 + exit 1 + } + + if [[ ${TLS_MAKE_CERTS} == "true" ]]; then + [[ -z ${DGRAPH_VERSION} ]] && { + echo "[ERROR]: 'DGRAPH_VERSION' not set. Aborting." 1>&2 + exit 1 + } + rm --force "${PWD}"/data/tls/*.{crt,key} + docker run \ + --tty \ + --volume "${PWD}"/data/tls:/tls dgraph/dgraph:"${DGRAPH_VERSION}" \ + dgraph cert --dir /tls --client backupuser --nodes "localhost,alpha1,zero1,ratel" --duration 365 + fi } ###### # config_compose - configures .env and data/config/config.tml ########################## config_compose() { - if [[ $DEBUG == "true" ]]; then - set -ex - else - set -e - fi - - CFGPATH="./data/config" - mkdir -p ./data/config - [[ -f $CFGPATH/config.toml ]] && rm $CFGPATH/config.toml - touch $CFGPATH/config.toml - - ## configure defaults - echo "whitelist = '10.0.0.0/8,172.16.0.0/12,192.168.0.0/16'" >> "$CFGPATH/config.toml" - echo "lru_mb = 1024" >> "$CFGPATH/config.toml" - - ## configure if user specifies - [[ $ACL_ENABLED == "true" ]] && \ - echo "--acl \"secret-file=/dgraph/acl/hmac_secret_file;\"" >> "$CFGPATH/config.toml" - [[ $TOKEN_ENABLED == "true" ]] && \ - echo "auth_token = '$(cat ./data/token/auth_token_file)'" >> "$CFGPATH/config.toml" - [[ $ENC_ENABLED == "true" ]] && \ - echo "--encryption \"key-file=/dgraph/enc/enc_key_file;\"" >> "$CFGPATH/config.toml" - [[ $TLS_ENABLED == "true" ]] && - cat <<-TLS_CONFIG >> $CFGPATH/config.toml -tls_client_auth = '$TLS_CLIENT_AUTH' -TLS_CONFIG - - ## configure dgraph version - echo "DGRAPH_VERSION=$DGRAPH_VERSION" > .env - cp *backup*.sh data + if [[ ${DEBUG} == "true" ]]; then + set -ex + else + set -e + fi + + CFGPATH="./data/config" + mkdir -p ./data/config + [[ -f ${CFGPATH}/config.toml ]] && rm "${CFGPATH}"/config.toml + touch "${CFGPATH}"/config.toml + + ## configure defaults + echo "whitelist = '10.0.0.0/8,172.16.0.0/12,192.168.0.0/16'" >>"${CFGPATH}/config.toml" + echo "lru_mb = 1024" >>"${CFGPATH}/config.toml" + + ## configure if user specifies + [[ ${ACL_ENABLED} == "true" ]] && + echo '--acl "secret-file=/dgraph/acl/hmac_secret_file;"' >>"${CFGPATH}/config.toml" + [[ ${TOKEN_ENABLED} == "true" ]] && + echo "auth_token = '$(cat ./data/token/auth_token_file)'" >>"${CFGPATH}/config.toml" + [[ ${ENC_ENABLED} == "true" ]] && + echo '--encryption "key-file=/dgraph/enc/enc_key_file;"' >>"${CFGPATH}/config.toml" + [[ ${TLS_ENABLED} == "true" ]] && + cat <<-TLS_CONFIG >>"${CFGPATH}"/config.toml + tls_client_auth = '${TLS_CLIENT_AUTH}' + TLS_CONFIG + + ## configure dgraph version + echo "DGRAPH_VERSION=${DGRAPH_VERSION}" >.env + cp *backup*.sh data } main $@ diff --git a/contrib/config/backups/client/dgraph-backup.sh b/contrib/config/backups/client/dgraph-backup.sh index 0cc182d0823..5d1a4e95e02 100755 --- a/contrib/config/backups/client/dgraph-backup.sh +++ b/contrib/config/backups/client/dgraph-backup.sh @@ -10,158 +10,209 @@ # main - runs the script ########################## main() { - parse_command $@ - run_backup + parse_command $@ + run_backup } ###### # usage - print friendly usage statement ########################## usage() { - cat <<-USAGE 1>&2 -Run Binary Backup - -Usage: - $0 [FLAGS] --location [LOCATION] - -Flags: - -a, --alpha string Dgraph alpha HTTP/S server (default "localhost:8080") - -i, --api_type API Type of REST or GraphQL (default "GraphQL") - -t, --auth_token string The auth token passed to the server - -d, --debug Enable debug in output - -f, --force_full Force a full backup instead of an incremental backup. - -h, --help Help for $0 - -l, --location Sets the source location URI (required). - --minio_secure Backups to MinIO will use https instead of http - -p, --password Password of the user if login is required. - --subpath Directory Path To Use to store backups, (default "dgraph_\$(date +%Y%m%d)") - --tls_cacert filepath The CA Cert file used to verify server certificates. Required for enabling TLS. - --tls_cert string (optional) The Cert file provided by the client to the server. - --tls_key string (optional) The private key file provided by the client to the server. - -u, --user Username if login is required. - -USAGE + cat <<-USAGE 1>&2 + Run Binary Backup + + Usage: + $0 [FLAGS] --location [LOCATION] + + Flags: + -a, --alpha string Dgraph alpha HTTP/S server (default "localhost:8080") + -i, --api_type API Type of REST or GraphQL (default "GraphQL") + -t, --auth_token string The auth token passed to the server + -d, --debug Enable debug in output + -f, --force_full Force a full backup instead of an incremental backup. + -h, --help Help for $0 + -l, --location Sets the source location URI (required). + --minio_secure Backups to MinIO will use https instead of http + -p, --password Password of the user if login is required. + --subpath Directory Path To Use to store backups, (default "dgraph_\$(date +%Y%m%d)") + --tls_cacert filepath The CA Cert file used to verify server certificates. Required for enabling TLS. + --tls_cert string (optional) The Cert file provided by the client to the server. + --tls_key string (optional) The private key file provided by the client to the server. + -u, --user Username if login is required. + + USAGE } ###### # get_getopt - find GNU getopt or print error message ########################## get_getopt() { - unset GETOPT_CMD - - ## Check for GNU getopt compatibility - if [[ "$(getopt --version)" =~ "--" ]]; then - local SYSTEM="$(uname -s)" - if [[ "${SYSTEM,,}" == "freebsd" ]]; then - ## Check FreeBSD install location - if [[ -f "/usr/local/bin/getopt" ]]; then - GETOPT_CMD="/usr/local/bin/getopt" - else - ## Save FreeBSD Instructions - local MESSAGE="On FreeBSD, compatible getopt can be installed with 'sudo pkg install getopt'" - fi - elif [[ "${SYSTEM,,}" == "darwin" ]]; then - ## Check HomeBrew install location - if [[ -f "/usr/local/opt/gnu-getopt/bin/getopt" ]]; then - GETOPT_CMD="/usr/local/opt/gnu-getopt/bin/getopt" - ## Check MacPorts install location - elif [[ -f "/opt/local/bin/getopt" ]]; then - GETOPT_CMD="/opt/local/bin/getopt" - else - ## Save MacPorts or HomeBrew Instructions - if command -v brew > /dev/null; then - local MESSAGE="On macOS, gnu-getopt can be installed with 'brew install gnu-getopt'\n" - elif command -v port > /dev/null; then - local MESSAGE="On macOS, getopt can be installed with 'sudo port install getopt'\n" - fi - fi - fi - else - GETOPT_CMD="$(command -v getopt)" - fi - - ## Error if no suitable getopt command found - if [[ -z $GETOPT_CMD ]]; then - printf "ERROR: GNU getopt not found. Please install GNU compatible 'getopt'\n\n%s" "$MESSAGE" 1>&2 - exit 1 - fi + unset GETOPT_CMD + + ## Check for GNU getopt compatibility + if [[ "$(getopt --version)" =~ "--" ]]; then + local SYSTEM="$(uname -s)" + if [[ ${SYSTEM,,} == "freebsd" ]]; then + ## Check FreeBSD install location + if [[ -f "/usr/local/bin/getopt" ]]; then + GETOPT_CMD="/usr/local/bin/getopt" + else + ## Save FreeBSD Instructions + local MESSAGE="On FreeBSD, compatible getopt can be installed with 'sudo pkg install getopt'" + fi + elif [[ ${SYSTEM,,} == "darwin" ]]; then + ## Check HomeBrew install location + if [[ -f "/usr/local/opt/gnu-getopt/bin/getopt" ]]; then + GETOPT_CMD="/usr/local/opt/gnu-getopt/bin/getopt" + ## Check MacPorts install location + elif [[ -f "/opt/local/bin/getopt" ]]; then + GETOPT_CMD="/opt/local/bin/getopt" + else + ## Save MacPorts or HomeBrew Instructions + if command -v brew >/dev/null; then + local MESSAGE="On macOS, gnu-getopt can be installed with 'brew install gnu-getopt'\n" + elif command -v port >/dev/null; then + local MESSAGE="On macOS, getopt can be installed with 'sudo port install getopt'\n" + fi + fi + fi + else + GETOPT_CMD="$(command -v getopt)" + fi + + ## Error if no suitable getopt command found + if [[ -z ${GETOPT_CMD} ]]; then + printf "ERROR: GNU getopt not found. Please install GNU compatible 'getopt'\n\n%s" "${MESSAGE}" 1>&2 + exit 1 + fi } ###### # parse_command - parse command line options using GNU getopt ########################## parse_command() { - get_getopt - - ## Parse Arguments with GNU getopt - PARSED_ARGUMENTS=$( - $GETOPT_CMD -o a:i:t:dfhl:p:u: \ - --long alpha:,api_type:,auth_token:,debug,force_full,help,location:,minio_secure,password:,subpath:,tls_cacert:,tls_cert:,tls_key:,user: \ - -n 'dgraph-backup.sh' -- "$@" - ) - if [ $? != 0 ] ; then usage; exit 1 ; fi - eval set -- "$PARSED_ARGUMENTS" - - ## Defaults - DEBUG="false" - ALPHA_HOST="localhost:8080" - BACKUP_DESTINATION="" - SUBPATH=dgraph_$(date +%Y%m%d) - API_TYPE="graphql" - MINIO_SECURE=false - AUTH_TOKEN="" - FORCE_FULL="false" - - ## Process Agurments - while true; do - case "$1" in - -a | --alpha) ALPHA_HOST="$2"; shift 2 ;; - -i | --api_type) API_TYPE=${2,,}; shift 2;; - -t | --auth_token) AUTH_TOKEN="$2"; shift 2 ;; - -d | --debug) DEBUG=true; shift ;; - -f | --force_full) FORCE_FULL=true; shift ;; - -h | --help) usage; exit;; - -m | --minio_secure) MINIO_SECURE=true; shift ;; - -l | --location) BACKUP_DESTINATION="$2"; shift 2 ;; - -p | --password) ACL_PASSWORD="$2"; shift 2;; - --subpath) SUBPATH="$2"; shift 2 ;; - --tls_cacert) CACERT_PATH="$2"; shift 2 ;; - --tls_cert) CLIENT_CERT_PATH="$2"; shift 2;; - --tls_key) CLIENT_KEY_PATH="$2"; shift 2;; - -u | --user) ACL_USER="$2"; shift 2;; - --) shift; break ;; - *) break ;; - esac - done - - ## Check required variable was set - if [[ -z "$BACKUP_DESTINATION" ]]; then - printf "ERROR: location was not specified!!\n\n" - usage - exit 1 - fi + get_getopt + + ## Parse Arguments with GNU getopt + PARSED_ARGUMENTS=$( + ${GETOPT_CMD} -o a:i:t:dfhl:p:u: \ + --long alpha:,api_type:,auth_token:,debug,force_full,help,location:,minio_secure,password:,subpath:,tls_cacert:,tls_cert:,tls_key:,user: \ + -n 'dgraph-backup.sh' -- "$@" + ) + if [[ $? != 0 ]]; then + usage + exit 1 + fi + eval set -- "${PARSED_ARGUMENTS}" + + ## Defaults + DEBUG="false" + ALPHA_HOST="localhost:8080" + BACKUP_DESTINATION="" + SUBPATH=dgraph_$(date +%Y%m%d) + API_TYPE="graphql" + MINIO_SECURE=false + AUTH_TOKEN="" + FORCE_FULL="false" + + ## Process Agurments + while true; do + case "$1" in + -a | --alpha) + ALPHA_HOST="$2" + shift 2 + ;; + -i | --api_type) + API_TYPE=${2,,} + shift 2 + ;; + -t | --auth_token) + AUTH_TOKEN="$2" + shift 2 + ;; + -d | --debug) + DEBUG=true + shift + ;; + -f | --force_full) + FORCE_FULL=true + shift + ;; + -h | --help) + usage + exit + ;; + -m | --minio_secure) + MINIO_SECURE=true + shift + ;; + -l | --location) + BACKUP_DESTINATION="$2" + shift 2 + ;; + -p | --password) + ACL_PASSWORD="$2" + shift 2 + ;; + --subpath) + SUBPATH="$2" + shift 2 + ;; + --tls_cacert) + CACERT_PATH="$2" + shift 2 + ;; + --tls_cert) + CLIENT_CERT_PATH="$2" + shift 2 + ;; + --tls_key) + CLIENT_KEY_PATH="$2" + shift 2 + ;; + -u | --user) + ACL_USER="$2" + shift 2 + ;; + --) + shift + break + ;; + *) break ;; + esac + done + + ## Check required variable was set + if [[ -z ${BACKUP_DESTINATION} ]]; then + printf "ERROR: location was not specified!!\n\n" + usage + exit 1 + fi } ###### # run_backup - using user specified options, execute backup ########################## run_backup() { - if [[ $DEBUG == "true" ]]; then - set -ex - else - set -e - fi - - [[ -f ./backup_helper.sh ]] || { echo "ERROR: Backup Script library (./backup_helper.sh) missing" 1>&2; exit 1; } - source ./backup_helper.sh - - ## login if user was specified - if ! [[ -z $ACL_USER ]]; then - ACCESS_TOKEN=$(get_token $ACL_USER $ACL_PASSWORD $AUTH_TOKEN) - fi - - ## perform backup with valid options set - backup "$ACCESS_TOKEN" "$AUTH_TOKEN" + if [[ ${DEBUG} == "true" ]]; then + set -ex + else + set -e + fi + + [[ -f ./backup_helper.sh ]] || { + echo "ERROR: Backup Script library (./backup_helper.sh) missing" 1>&2 + exit 1 + } + source ./backup_helper.sh + + ## login if user was specified + if ! [[ -z ${ACL_USER} ]]; then + ACCESS_TOKEN=$(get_token "${ACL_USER}" "${ACL_PASSWORD}" "${AUTH_TOKEN}") + fi + + ## perform backup with valid options set + backup "${ACCESS_TOKEN}" "${AUTH_TOKEN}" } main $@ diff --git a/contrib/config/backups/gcp/README.md b/contrib/config/backups/gcp/README.md index a91f4b47aef..c521f8ba261 100644 --- a/contrib/config/backups/gcp/README.md +++ b/contrib/config/backups/gcp/README.md @@ -1,12 +1,13 @@ # Binary Backups to Google Cloud Storage -Binary backups can use [Google Cloud Storage](https://cloud.google.com/storage) for object storage using [MinIO GCS Gateway](https://docs.min.io/docs/minio-gateway-for-gcs.html). +Binary backups can use [Google Cloud Storage](https://cloud.google.com/storage) for object storage +using [MinIO GCS Gateway](https://docs.min.io/docs/minio-gateway-for-gcs.html). ## Provisioning GCS Some example scripts have been provided to illustrate how to create a bucket in GCS. -* [terraform](terraform/README.md) - terraform scripts to provision GCS bucket +- [terraform](terraform/README.md) - terraform scripts to provision GCS bucket ## Setting up the Environment @@ -14,30 +15,37 @@ Some example scripts have been provided to illustrate how to create a bucket in You will need these tools: -* Docker Environment - * [Docker](https://docs.docker.com/get-docker/) - container engine platform - * [Docker Compose](https://docs.docker.com/compose/install/) - orchestrates running dokcer containers -* Kubernetes Environment - * [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) - required for interacting with Kubenetes platform - * [helm](https://helm.sh/docs/intro/install/) - deploys Kuberetes packages called helm charts - * [helm-diff](https://github.com/databus23/helm-diff) [optional] - displays differences that will be applied to Kubernetes cluster - * [helmfile](https://github.com/roboll/helmfile#installation) [optional] - orchestrates helm chart deployments +- Docker Environment + - [Docker](https://docs.docker.com/get-docker/) - container engine platform + - [Docker Compose](https://docs.docker.com/compose/install/) - orchestrates running dokcer + containers +- Kubernetes Environment + - [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) - required for interacting + with Kubenetes platform + - [helm](https://helm.sh/docs/intro/install/) - deploys Kuberetes packages called helm charts + - [helm-diff](https://github.com/databus23/helm-diff) [optional] - displays differences that + will be applied to Kubernetes cluster + - [helmfile](https://github.com/roboll/helmfile#installation) [optional] - orchestrates helm chart + deployments ### Using Docker Compose -A `docker-compose.yml` configuration is provided that will run the MinIO GCS gateway and Dgraph cluster. +A `docker-compose.yml` configuration is provided that will run the MinIO GCS gateway and Dgraph +cluster. #### Configuring Docker Compose The Docker Compose configuration `docker-compose.yml` will require the following files: - * `credentials.json` - credentials that grant access to the GCS bucket - * `minio.env` - that holds `MINIO_ACCESS_KEY` and `MINIO_SECRET_KEY` values. - * `env.sh` - tha stores `PROJECT_ID` and `BACKUP_BUCKET_NAME`. +- `credentials.json` - credentials that grant access to the GCS bucket +- `minio.env` - that holds `MINIO_ACCESS_KEY` and `MINIO_SECRET_KEY` values. +- `env.sh` - tha stores `PROJECT_ID` and `BACKUP_BUCKET_NAME`. For convenience, [terraform](terraform/README.md) scripts and generate a random password. -The `minio.env` will be used by both Dgraph alpha node(s) and the [MinIO GCS Gateway](https://docs.min.io/docs/minio-gateway-for-gcs.html) server. You will need to create a file like this: +The `minio.env` will be used by both Dgraph alpha node(s) and the +[MinIO GCS Gateway](https://docs.min.io/docs/minio-gateway-for-gcs.html) server. You will need to +create a file like this: ```bash # minio.env @@ -53,7 +61,7 @@ export PROJECT_ID= export BACKUP_BUCKET_NAME= ``` -#### Using Docker Compose +#### Running with Docker Compose ```bash ## source script for envvars: PROJECT_ID and BACKUP_BUCKET_NAME @@ -64,8 +72,8 @@ docker-compose up --detach #### Access Minio and Ratel UI -* MinIO UI: http://localhost:9000 -* Ratel UI: http://localhost:8000 +- MinIO UI: http://localhost:9000 +- Ratel UI: http://localhost:8000 #### Clean Up Docker Environment @@ -76,11 +84,15 @@ docker-compose rm ### Using Kubernetes with Helm Charts -For Kubernetes, you can deploy [MinIO GCS Gateway](https://docs.min.io/docs/minio-gateway-for-gcs.html), Dgraph cluster, and a Kubernetes Cronjob that triggers backups using [helm](https://helm.sh/docs/intro/install/). +For Kubernetes, you can deploy +[MinIO GCS Gateway](https://docs.min.io/docs/minio-gateway-for-gcs.html), Dgraph cluster, and a +Kubernetes Cronjob that triggers backups using [helm](https://helm.sh/docs/intro/install/). #### Configuring Secrets Values -These values are generated if you used either [terraform](terraform/README.md) scripts. If you already have an existing GCS bucket that you would like to use, you will need to create `charts/dgraph_secrets.yaml` and `charts/minio_secrets.yaml` files. +These values are generated if you used either [terraform](terraform/README.md) scripts. If you +already have an existing GCS bucket that you would like to use, you will need to create +`charts/dgraph_secrets.yaml` and `charts/minio_secrets.yaml` files. For the `charts/dgraph_secrets.yaml`, you would create a file like this: @@ -104,7 +116,9 @@ gcsgateway: #### Configuring Environments -Create an `env.sh` file to store `BACKUP_BUCKET_NAME` and `PROJECT_ID`. If [terraform](terraform/README.md) scripts were used to create the GCS bucket, then these scripts will have already generated this file. +Create an `env.sh` file to store `BACKUP_BUCKET_NAME` and `PROJECT_ID`. If +[terraform](terraform/README.md) scripts were used to create the GCS bucket, then these scripts will +have already generated this file. This is the same file used for the Docker Compose environment and will look like this: @@ -116,7 +130,10 @@ export BACKUP_BUCKET_NAME= #### Deploy Using Helmfile -If you have [helmfile](https://github.com/roboll/helmfile#installation) and [helm-diff](https://github.com/databus23/helm-diff) installed, you can deploy [MinIO GCS Gateway](https://docs.min.io/docs/minio-gateway-for-gcs.html) and Dgraph cluster with the following: +If you have [helmfile](https://github.com/roboll/helmfile#installation) and +[helm-diff](https://github.com/databus23/helm-diff) installed, you can deploy +[MinIO GCS Gateway](https://docs.min.io/docs/minio-gateway-for-gcs.html) and Dgraph cluster with the +following: ```bash ## source script for envvars: PROJECT_ID and BACKUP_BUCKET_NAME @@ -152,7 +169,7 @@ helm install "my-release" \ #### Access Resources -For MinIO UI, you can use this to access it at http://localhost:9000: +For MinIO UI, you can use this to access it at http://localhost:9000: ```bash export MINIO_POD_NAME=$( @@ -211,8 +228,11 @@ helm delete gcsgw --namespace minio ## Triggering a Backup -This is run from the host with the alpha node accessible on localhost at port `8080`. Can be done by running the docker-compose environment, or running `kubectl port-forward pod/dgraph-dgraph-alpha-0 8080:8080`. -In the docker-compose environment, the host for `MINIO_HOST` is `gateway`. In the Kubernetes environment, using the scripts above, the `MINIO_HOST` is `gcsgw-minio.minio.svc`. +This is run from the host with the alpha node accessible on localhost at port `8080`. Can be done by +running the docker-compose environment, or running +`kubectl port-forward pod/dgraph-dgraph-alpha-0 8080:8080`. In the docker-compose environment, the +host for `MINIO_HOST` is `gateway`. In the Kubernetes environment, using the scripts above, the +`MINIO_HOST` is `gcsgw-minio.minio.svc`. ### Using GraphQL diff --git a/contrib/config/backups/gcp/terraform/README.md b/contrib/config/backups/gcp/terraform/README.md index 8ffa49f7415..677eb35c67b 100644 --- a/contrib/config/backups/gcp/terraform/README.md +++ b/contrib/config/backups/gcp/terraform/README.md @@ -2,37 +2,48 @@ ## About -This script will create the required resources needed to create a bucket in Google Storage Bucket using the [`simple-bucket`](https://github.com/terraform-google-modules/terraform-google-cloud-storage/tree/master/modules/simple_bucket) Terraform module. These scripts will also create a `credentials.json` that will have access to the storage bucket, which is needed for the [MinIO GCS Gateway](https://docs.min.io/docs/minio-gateway-for-gcs.html) and optionally generate random MinIO access key and secret key. +This script will create the required resources needed to create a bucket in Google Storage Bucket +using the +[`simple-bucket`](https://github.com/terraform-google-modules/terraform-google-cloud-storage/tree/master/modules/simple_bucket) +Terraform module. These scripts will also create a `credentials.json` that will have access to the +storage bucket, which is needed for the +[MinIO GCS Gateway](https://docs.min.io/docs/minio-gateway-for-gcs.html) and optionally generate +random MinIO access key and secret key. ## Prerequisites You need the following installed to use this automation: -* [Google Cloud SDK](https://cloud.google.com/sdk/docs/install) - for the `gcloud` command and required to access Google Cloud. - * Google Project with billing enabled - * `gcloud` logged into IAM account with roles added: - * `serviceusage.apiKeys.create` - * `clientauthconfig.clients.create` - * `iam.serviceAccountKeys.create` -* [Terraform](https://www.terraform.io/downloads.html) - tool used to provision resources and create templates +- [Google Cloud SDK](https://cloud.google.com/sdk/docs/install) - for the `gcloud` command and + required to access Google Cloud. + - Google Project with billing enabled + - `gcloud` logged into IAM account with roles added: + - `serviceusage.apiKeys.create` + - `clientauthconfig.clients.create` + - `iam.serviceAccountKeys.create` +- [Terraform](https://www.terraform.io/downloads.html) - tool used to provision resources and create + templates ## Configuration You will need to define the following variables: -* Required Variables: - * `region` (required) - the region where the GCS bucket will be created - * `project_id` (required) - a globally unique name for the Google project that will contain the GCS bucket - * `name` (default = `my-dgraph-backups`) - globally unique name of the GCS bucket -* Optional Variables: - * `minio_access_key` - specify an access key or have terraform generate a random access key - * `minio_secret_key` - specify a secret key or have terraform generate a random secret key +- Required Variables: + - `region` (required) - the region where the GCS bucket will be created + - `project_id` (required) - a globally unique name for the Google project that will contain the + GCS bucket + - `name` (default = `my-dgraph-backups`) - globally unique name of the GCS bucket +- Optional Variables: + - `minio_access_key` - specify an access key or have terraform generate a random access key + - `minio_secret_key` - specify a secret key or have terraform generate a random secret key ## Steps ### Define Variables -You can define these when prompted, or in `terrafrom.tfvars` file, or through command line variables, e.g. `TF_VAR_project_id`, `TF_VAR_project_id`, and `TF_VAR_name`. Below is an example `terraform.tfvars` file: +You can define these when prompted, or in `terrafrom.tfvars` file, or through command line +variables, e.g. `TF_VAR_project_id`, `TF_VAR_project_id`, and `TF_VAR_name`. Below is an example +`terraform.tfvars` file: ```terraform # terraform.tfvars diff --git a/contrib/config/backups/nfs/README.md b/contrib/config/backups/nfs/README.md index 2b36112c808..cebeb0931a5 100644 --- a/contrib/config/backups/nfs/README.md +++ b/contrib/config/backups/nfs/README.md @@ -1,62 +1,78 @@ # Binary Backups to Network File System -When using a file system for binary backups, NFS is recommended. NFS will allow *"backups work seamlessly across multiple machines and/or containers"*. - -* [Overview of NFS Servers](#overview-of-nfs-servers) -* [Provision NFS Server Instructions](#provision-nfs-server-instructions) - * [Using Remote Cloud Solutions](#using-remote-cloud-solutions) - * [Using the Rook Solution](#using-the-rook-solution) - * [Using a Local Vagrant Solution](#using-a-local-vagrant-solution) - * [Vagrant Server](#vagrant-server) - * [Vagrant Client (Optional)](#vagrant-client-optional) - * [Vagrant Cleanup](#vagrant-cleanup) -* [Testing NFS with Docker Compose](#testing-nfs-with-docker-compose) - * [Setup Env Vars for Docker Compose](#setup-env-vars-for-docker-compose) - * [Start Docker Compose with NFS Volume](#start-docker-compose-with-nfs-volume) - * [Docker Cleanup](#docker-cleanup) -* [Testing NFS with Kubernetes](#testing-nfs-with-kubernetes) - * [Setup Env Vars for Kubernetes](#setup-env-vars-for-kubernetes) - * [Deploy Using Helmfile](#deploy-using-helmfile) - * [Cleanup Using Helmfile](#cleanup-using-helmfile) - * [Minikube Notes](#minikube-notes) - * [Minikube with Virtualbox](#minikube-with-virtualbox) - * [Minikube with KVM](#minikube-with-kvm) - * [Verify NFS between Minikube and Vagrant](#verify-nfs-between-minikube-and-vagrant) -* [Accessing Dgraph Services](#accessing-dgraph-services) -* [Trigger a Backup](#trigger-a-backup) +When using a file system for binary backups, NFS is recommended. NFS will allow _"backups work +seamlessly across multiple machines and/or containers"_. + +- [Overview of NFS Servers](#overview-of-nfs-servers) +- [Provision NFS Server Instructions](#provision-nfs-server-instructions) + - [Using Remote Cloud Solutions](#using-remote-cloud-solutions) + - [Using the Rook Solution](#using-the-rook-solution) + - [Using a Local Vagrant Solution](#using-a-local-vagrant-solution) + - [Vagrant Server](#vagrant-server) + - [Vagrant Client (Optional)](#vagrant-client-optional) + - [Vagrant Cleanup](#vagrant-cleanup) +- [Testing NFS with Docker Compose](#testing-nfs-with-docker-compose) + - [Setup Env Vars for Docker Compose](#setup-env-vars-for-docker-compose) + - [Start Docker Compose with NFS Volume](#start-docker-compose-with-nfs-volume) + - [Docker Cleanup](#docker-cleanup) +- [Testing NFS with Kubernetes](#testing-nfs-with-kubernetes) + - [Setup Env Vars for Kubernetes](#setup-env-vars-for-kubernetes) + - [Deploy Using Helmfile](#deploy-using-helmfile) + - [Cleanup Using Helmfile](#cleanup-using-helmfile) + - [Minikube Notes](#minikube-notes) + - [Minikube with Virtualbox](#minikube-with-virtualbox) + - [Minikube with KVM](#minikube-with-kvm) + - [Verify NFS between Minikube and Vagrant](#verify-nfs-between-minikube-and-vagrant) +- [Accessing Dgraph Services](#accessing-dgraph-services) +- [Trigger a Backup](#trigger-a-backup) ## Overview of NFS Servers -You can use external NFS outside of the [Docker](https://www.docker.com/) or [Kubernetes](https://kubernetes.io/) cluster, or deploy a container offering NFS services.   - -For production environments, using an NFS server external to the cluster can increase availability in an event where [Kubernetes](https://kubernetes.io/) services get interrupted. In more advanced scenarios, deploying a container offering NFS services where the storage is backed by high-speed storage such as [Ceph](https://ceph.io/) is beneficial for large datasets.  In this latter scenario, secondary storage such as an object store by the cloud provider could be used for greater availability in event of where Kubernetes services or the [Kubernetes](https://kubernetes.io/) cluster itself has a failure event. - -This guide provides tips on how to back up Dgraph using NFS. For this scope, automation here covers the following: - -* External NFS - * Cloud Providers - * AWS [EFS](https://aws.amazon.com/efs/) ([Elastic File System](https://aws.amazon.com/efs/)) - * [Google Cloud Filestore](https://cloud.google.com/filestore) - * Local NFS Server - * [Vagrant](https://www.vagrantup.com/) managed virtual server that implements Linux kernel-based NFS Server -* Internal NFS (deployed as a container) - * [Rook](https://rook.io/) NFS operator to deploy a container offering NFS Server with [Genesha NFS Server](https://github.com/nfs-ganesha/nfs-ganesha/wiki) +You can use external NFS outside of the [Docker](https://www.docker.com/) or +[Kubernetes](https://kubernetes.io/) cluster, or deploy a container offering NFS services.   + +For production environments, using an NFS server external to the cluster can increase availability +in an event where [Kubernetes](https://kubernetes.io/) services get interrupted. In more advanced +scenarios, deploying a container offering NFS services where the storage is backed by high-speed +storage such as [Ceph](https://ceph.io/) is beneficial for large datasets.  In this latter scenario, +secondary storage such as an object store by the cloud provider could be used for greater +availability in event of where Kubernetes services or the [Kubernetes](https://kubernetes.io/) +cluster itself has a failure event. + +This guide provides tips on how to back up Dgraph using NFS. For this scope, automation here covers +the following: + +- External NFS + - Cloud Providers + - AWS [EFS](https://aws.amazon.com/efs/) ([Elastic File System](https://aws.amazon.com/efs/)) + - [Google Cloud Filestore](https://cloud.google.com/filestore) + - Local NFS Server + - [Vagrant](https://www.vagrantup.com/) managed virtual server that implements Linux + kernel-based NFS Server +- Internal NFS (deployed as a container) + - [Rook](https://rook.io/) NFS operator to deploy a container offering NFS Server with + [Genesha NFS Server](https://github.com/nfs-ganesha/nfs-ganesha/wiki) ## Provision NFS Server Instructions ### Using Remote Cloud Solutions -You can provision external NFS to use with your Dgraph cluster running on Kubernetes using these scripts. Unlike object storage, such as S3 or GCS, this storage will not be accessible from the public Internet and so can only be accessed from within a private subnet. +You can provision external NFS to use with your Dgraph cluster running on Kubernetes using these +scripts. Unlike object storage, such as S3 or GCS, this storage will not be accessible from the +public Internet and so can only be accessed from within a private subnet. -* Shell Scripts - * [Google Cloud Filestore](gcfs-cli/README.md) - provision FileStore using `gcloud` -* Terraform - * [Google Cloud Filestore](gcfs-terraform/README.md) - use Filestore as NFS share on GKE. - * [Amazon Elastic File System](efs-terraform/README.md) - use EFS as NFS share on EKS. +- Shell Scripts + - [Google Cloud Filestore](gcfs-cli/README.md) - provision FileStore using `gcloud` +- Terraform + - [Google Cloud Filestore](gcfs-terraform/README.md) - use Filestore as NFS share on GKE. + - [Amazon Elastic File System](efs-terraform/README.md) - use EFS as NFS share on EKS. ### Using the Rook Solution -You can use an internal NFS server running on Kubernetes with [Rook](https://rook.io/) NFS Operator. To enable this, run the following before running the [Kubernetes Environment](#testing-nfs-with-kubernetes). Both of these steps are required for this feature: +You can use an internal NFS server running on Kubernetes with [Rook](https://rook.io/) NFS Operator. +To enable this, run the following before running the +[Kubernetes Environment](#testing-nfs-with-kubernetes). Both of these steps are required for this +feature: ```bash ## Download Rook NFS Operator Manifests @@ -67,9 +83,19 @@ cp charts/rook/env.sh env.sh ### Using a Local Vagrant Solution -The steps to configure NFS for your local operating system or distro can vary greatly, so a [Vagrant](https://www.vagrantup.com/) example is provided. This should work [Virtualbox](https://www.virtualbox.org/) provider on Windows, Mac, and Linux, as [Virtualbox](https://www.virtualbox.org/) creates routable IP addresses available to the host. Therefore, this NFS server can be accessed from either [Docker](https://docs.docker.com/engine/) or [Minikube](https://github.com/kubernetes/minikube) environments. +The steps to configure NFS for your local operating system or distro can vary greatly, +so a [Vagrant](https://www.vagrantup.com/) example is provided. This should work +[Virtualbox](https://www.virtualbox.org/) provider on Windows, Mac, and Linux, as +[Virtualbox](https://www.virtualbox.org/) creates routable IP addresses available to the host. +Therefore, this NFS server can be accessed from either [Docker](https://docs.docker.com/engine/) or +[Minikube](https://github.com/kubernetes/minikube) environments. -† Linux and macOS have native NFS implementations with macOS NFS configuration varying between macOS versions. Windows Server has different [NFS Server implementations](https://docs.microsoft.com/en-us/windows-server/storage/nfs/nfs-overview) between Windows Server versions. For Windows 10, there are open source options such as [Cygwin](https://www.cygwin.com/) or you can use Linux through [WSL](https://docs.microsoft.com/en-us/windows/wsl/install-win10) +† Linux and macOS have native NFS implementations with macOS NFS configuration varying +between macOS versions. Windows Server has different +[NFS Server implementations](https://docs.microsoft.com/en-us/windows-server/storage/nfs/nfs-overview) +between Windows Server versions. For Windows 10, there are open source options such as +[Cygwin](https://www.cygwin.com/) or you can use Linux through +[WSL](https://docs.microsoft.com/en-us/windows/wsl/install-win10) #### Vagrant Server @@ -106,9 +132,11 @@ vagrant destroy ### Setup Env Vars for Docker Compose -If you used automation from [Vagrant Solution](#using-local-vagrant-solution), you can skip this step. +If you used automation from [Vagrant Solution](#using-local-vagrant-solution), you can skip this +step. -Otherwise, you will need to create a file named `env.sh` and configure the IP address (or DNS name) and exported NFS shared file path: +Otherwise, you will need to create a file named `env.sh` and configure the IP address (or DNS name) +and exported NFS shared file path: ```bash export NFS_PATH="" @@ -137,9 +165,12 @@ docker volume ls | grep -q nfs_mount || docker volume rm nfs_nfsmount > /dev/nul ### Setup Env Vars for Kubernetes -If you used automation from local [Vagrant Solution](#using-local-vagrant-solution), [Rook Solution](#using-rook-solution) cloud solution with [EFS](./efs-terraform/README.md) or [Google Cloud Filestore](./gcfs-terraform/README.md), you can skip this step. +If you used automation from local [Vagrant Solution](#using-local-vagrant-solution), +[Rook Solution](#using-rook-solution) cloud solution with [EFS](./efs-terraform/README.md) or +[Google Cloud Filestore](./gcfs-terraform/README.md), you can skip this step. -Otherwise, you will need to create a file named `env.sh` and configure the IP address (or DNS name) and exported NFS shared file path: +Otherwise, you will need to create a file named `env.sh` and configure the IP address (or DNS name) +and exported NFS shared file path: ```bash export NFS_PATH="" @@ -148,7 +179,9 @@ export NFS_SERVER="" #### Deploy Using Helmfile -If you have [helmfile](https://github.com/roboll/helmfile#installation) and [helm-diff](https://github.com/databus23/helm-diff) installed, you can deploy Dgraph with NFS support for backups with this: +If you have [helmfile](https://github.com/roboll/helmfile#installation) and +[helm-diff](https://github.com/databus23/helm-diff) installed, you can deploy Dgraph with NFS +support for backups with this: ```bash ## Source required environments variables @@ -165,11 +198,14 @@ helmfile delete ### Minikube Notes -If you are using NFS with [Vagrant Solution](#using-local-vagrant-solution), you will need to park [minikube](https://github.com/kubernetes/minikube) on the same private network as Vagrant. +If you are using NFS with [Vagrant Solution](#using-local-vagrant-solution), you will need to park +[minikube](https://github.com/kubernetes/minikube) on the same private network as Vagrant. #### Minikube with Virtualbox -For [VirtualBox](https://www.virtualbox.org) environments, where both [Vagrant](https://www.vagrantup.com/) and [minikube](https://github.com/kubernetes/minikube) will use [Virtualbox](https://www.virtualbox.org), you can do the following: +For [VirtualBox](https://www.virtualbox.org) environments, where both +[Vagrant](https://www.vagrantup.com/) and [minikube](https://github.com/kubernetes/minikube) will +use [Virtualbox](https://www.virtualbox.org), you can do the following: ```bash ## Vagrant should have been started with Virtualbox by default @@ -184,7 +220,9 @@ minikube start --host-only-cidr='192.168.123.1/24' #### Minikube with KVM -When using vagrant with `libvirt` (see [vagrant-libvirt](https://github.com/vagrant-libvirt/vagrant-libvirt)), you can have [minikube](https://github.com/kubernetes/minikube) target the same network. +When using vagrant with `libvirt` (see +[vagrant-libvirt](https://github.com/vagrant-libvirt/vagrant-libvirt)), you can have +[minikube](https://github.com/kubernetes/minikube) target the same network. ```bash ## Vagrant should have been started with KVM @@ -201,7 +239,8 @@ minikube start --kvm-network nfs0 #### Verify NFS between Minikube and Vagrant -Next, verify that NFS share works between the Vagrant NFS server and client Dgraph Alpha pod running in [minikube](https://github.com/kubernetes/minikube). +Next, verify that NFS share works between the Vagrant NFS server and client Dgraph Alpha pod running +in [minikube](https://github.com/kubernetes/minikube). Create a file from the client: @@ -226,9 +265,11 @@ logout ## Accessing Dgraph Services -In the [Docker Compose Environment](#testing-nfs-with-docker-compose), Ratel UI will be accessible from http://localhost:8000 and Alpha from http://localhost:8080. +In the [Docker Compose Environment](#testing-nfs-with-docker-compose), Ratel UI will be accessible +from http://localhost:8000 and Alpha from http://localhost:8080. -In a [Kubernetes Environment](#testing-nfs-with-kubernetes), you will need to use port-forward to access these from `localhost`. +In a [Kubernetes Environment](#testing-nfs-with-kubernetes), you will need to use port-forward to +access these from `localhost`. For Dgraph Alpha, you can use this to access it at http://localhost:8080: @@ -260,7 +301,11 @@ kubectl --namespace default port-forward $RATEL_POD_NAME 8000:8000 ## Trigger a Backup -In the [Kubernetes Environment](#testing-nfs-with-kubernetes), backups are scheduled automatically using the [Kubernetes CronJob](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/). As long as the services are available locally (see [Accessing Dgraph Services](#accessing-dgraph-services)), we can trigger a backup using a `curl` command. +In the [Kubernetes Environment](#testing-nfs-with-kubernetes), backups are scheduled automatically +using the +[Kubernetes CronJob](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/). As long +as the services are available locally (see [Accessing Dgraph Services](#accessing-dgraph-services)), +we can trigger a backup using a `curl` command. For the [Docker Compose Environment](#testing-nfs-with-docker-compose) you can do the following: @@ -274,7 +319,8 @@ HEADER="Content-Type: application/json" curl --silent --header "$HEADER" --request POST $ALPHA_HOST:8080/admin --data "$GRAPHQL" ``` -For [Kubernetes Environment](#testing-nfs-with-kubernetes), after running port-forward, you can do the following: +For [Kubernetes Environment](#testing-nfs-with-kubernetes), after running port-forward, you can do +the following: ```bash ALPHA_HOST="localhost" diff --git a/contrib/config/backups/nfs/charts/rook/fetch-operator.sh b/contrib/config/backups/nfs/charts/rook/fetch-operator.sh index a9aaa28f956..5a80494f588 100755 --- a/contrib/config/backups/nfs/charts/rook/fetch-operator.sh +++ b/contrib/config/backups/nfs/charts/rook/fetch-operator.sh @@ -1,15 +1,18 @@ #!/usr/bin/env bash -command -v git > /dev/null || \ - { echo "[ERROR]: 'git' command not not found" 1>&2; exit 1; } +command -v git >/dev/null || + { + echo "[ERROR]: 'git' command not not found" 1>&2 + exit 1 + } ROOK_VERSION="v1.4.7" DEST_PATH="${PWD}/$(dirname "${BASH_SOURCE[0]}")/rook-nfs-operator-kustomize/base" TEMP_PATH=$(mktemp -d) -cd $TEMP_PATH -git clone --single-branch --branch $ROOK_VERSION https://github.com/rook/rook.git 2> /dev/null +cd "${TEMP_PATH}" || exit +git clone --single-branch --branch "${ROOK_VERSION}" https://github.com/rook/rook.git 2>/dev/null for MANIFEST in common.yaml provisioner.yaml operator.yaml; do - cp $TEMP_PATH/rook/cluster/examples/kubernetes/nfs/$MANIFEST $DEST_PATH + cp "${TEMP_PATH}"/rook/cluster/examples/kubernetes/nfs/"${MANIFEST}" "${DEST_PATH}" done diff --git a/contrib/config/backups/nfs/charts/rook/helmify.sh b/contrib/config/backups/nfs/charts/rook/helmify.sh index ea04840ae4b..72c3c76e271 100755 --- a/contrib/config/backups/nfs/charts/rook/helmify.sh +++ b/contrib/config/backups/nfs/charts/rook/helmify.sh @@ -8,42 +8,48 @@ dir=${chart}-kustomize chart=${chart/.\//} build() { - if [ ! -d "$dir" ]; then - echo "directory \"$dir\" does not exist. make a kustomize project there in order to generate a local helm chart at $chart/ from it!" 1>&2 - exit 1 - fi + if [[ ! -d ${dir} ]]; then + echo "directory \"${dir}\" does not exist. make a kustomize project there in order to generate a local helm chart at ${chart}/ from it!" 1>&2 + exit 1 + fi - mkdir -p $chart/templates - echo "generating $chart/Chart.yaml" 1>&2 - cat < $chart/Chart.yaml + mkdir -p "${chart}"/templates + echo "generating ${chart}/Chart.yaml" 1>&2 + cat <"${chart}"/Chart.yaml apiVersion: v1 appVersion: "1.0" description: A Helm chart for Kubernetes -name: $chart +name: ${chart} version: 0.1.0 EOF - echo "generating $chart/templates/NOTES.txt" 1>&2 - cat < $chart/templates/NOTES.txt -$chart has been installed as release {{ .Release.Name }}. + echo "generating ${chart}/templates/NOTES.txt" 1>&2 + cat <"${chart}"/templates/NOTES.txt +${chart} has been installed as release {{ .Release.Name }}. Run \`helm status {{ .Release.Name }}\` for more information. Run \`helm delete --purge {{.Release.Name}}\` to uninstall. EOF - echo "running kustomize" 1>&2 - (cd $dir; kubectl kustomize overlays/$env) > $chart/templates/all.yaml - echo "running helm lint" 1>&2 - helm lint $chart - echo "generated following files:" - tree $chart + echo "running kustomize" 1>&2 + ( + cd "${dir}" || exit + kubectl kustomize overlays/"${env}" + ) >"${chart}"/templates/all.yaml + echo "running helm lint" 1>&2 + helm lint "${chart}" + echo "generated following files:" + tree "${chart}" } clean() { - rm $chart/Chart.yaml - rm $chart/templates/*.{yaml,txt} + rm "${chart}"/Chart.yaml + rm "${chart}"/templates/*.{yaml,txt} } -case "$cmd" in - "build" ) build ;; - "clean" ) clean ;; - * ) echo "unsupported command: $cmd" 1>&2; exit 1 ;; +case "${cmd}" in +"build") build ;; +"clean") clean ;; +*) + echo "unsupported command: ${cmd}" 1>&2 + exit 1 + ;; esac diff --git a/contrib/config/backups/nfs/efs-terraform/README.md b/contrib/config/backups/nfs/efs-terraform/README.md index 1ce507c50f8..b256e277e4f 100644 --- a/contrib/config/backups/nfs/efs-terraform/README.md +++ b/contrib/config/backups/nfs/efs-terraform/README.md @@ -1,54 +1,75 @@ # Amazon Elastic File Services with Terraform -These [Terraform](https://www.terraform.io/) scripts and modules will create the resources required to support an NFS server instance using [Amazon Elastic File Services](https://aws.amazon.com/efs/). +These [Terraform](https://www.terraform.io/) scripts and modules will create the resources required +to support an NFS server instance using [Amazon Elastic File Services](https://aws.amazon.com/efs/). This automation script will create the following resources: -* [EFS](https://aws.amazon.com/efs/) Server -* SG to allow EKS worker nodes to access the [EFS](https://aws.amazon.com/efs/) Server (if discovery used) -* Configuration file (`../env.sh`) that specifies NFS Server and Path +- [EFS](https://aws.amazon.com/efs/) Server +- SG to allow EKS worker nodes to access the [EFS](https://aws.amazon.com/efs/) Server (if discovery + used) +- Configuration file (`../env.sh`) that specifies NFS Server and Path ## Prerequisites To use this automation, you must install the following: -* [AWS CLI](https://aws.amazon.com/cli/) - AWS CLI installed and configured with local profile -* [Terraform](https://www.terraform.io/downloads.html) - tool used to provision resources and create templates +- [AWS CLI](https://aws.amazon.com/cli/) - AWS CLI installed and configured with local profile +- [Terraform](https://www.terraform.io/downloads.html) - tool used to provision resources and create + templates ## Configuration You can use the following input variables to configure this automation: -* **Required** - * `vpc_name` or `vpc_id` - specify either explicit `vpc_id` or a name of Tag `Name` used - * `subnets` or use [discovery](#discovery) - specify Subnet IDs for subnets that will have access to EFS, or have this discovered automatically -* **Optional** - * `security_groups` or use [discovery](#discovery) - specify SG IDs of security groups to add that will allow access to EFS server, or have this discovered automatically. - * `dns_name` with `dns_domain` or `zone_id` - this is used to create a friendly alternative name such as `myfileserver.devest.mycompany.com` - * `encrypted` (default: false) - whether EFS storage is encrypted or not +- **Required** +- `vpc_name` or `vpc_id` - specify either explicit `vpc_id` or a name of Tag `Name` used +- `subnets` or use [discovery](#discovery) - specify Subnet IDs for subnets that will have access to + EFS, or have this discovered automatically +- **Optional** +- `security_groups` or use [discovery](#discovery) - specify SG IDs of security groups to add that + will allow access to EFS server, or have this discovered automatically. +- `dns_name` with `dns_domain` or `zone_id` - this is used to create a friendly alternative name + such as `myfileserver.devest.mycompany.com` +- `encrypted` (default: false) - whether EFS storage is encrypted or not ## Discovery -Configuring the following values allows this automation to discover the resources used to configure EFS. These can be overridden by specifying explicit values as input variables. +Configuring the following values allows this automation to discover the resources used to configure +EFS. These can be overridden by specifying explicit values as input variables. These are values affected by discovery: - * **VPC Name** - you can supply either explicit `vpc_id` or `vpc_name` if VPC has a tag key of `Name`. - * **EKS Cluster Name** - if `eks_cluster_name` is not specified, then the VPC tag `Name` will be used as the EKS Cluster Name. This is default configuration if both VPC and EKS cluster that was provisioned by `eksctl`. - * **Private Subnets** - if `subnets` is not specified, private subnets used by an EKS cluster can be discovered provided that the tags are set up appropriately (see [Requirements for Discovery](#requirements-for-discovery)) - * **Security Group** (optional for access)- if `security_groups` is not specified this security group can be discovered provided that the tags are set up appropriately (see [Requirements for Discovery](#requirements-for-discovery)) - * **DNS Domain** (optional for DNS name)- a domain name, e.g. `devtest.mycompany.com.`, managed by Route53 can be specified to fetch a Zone ID, otherwise a `zone_id` must be specified to use this feature. When using this, you need to supply the CNAME you want to use, e.g. `myfileserver` with `dns_name` +- **VPC Name** - you can supply either explicit `vpc_id` or `vpc_name` if VPC has a tag key of + `Name`. +- **EKS Cluster Name** - if `eks_cluster_name` is not specified, then the VPC tag `Name` will be + used as the EKS Cluster Name. This is default configuration if both VPC and EKS cluster that was + provisioned by `eksctl`. +- **Private Subnets** - if `subnets` is not specified, private subnets used by an EKS cluster can be + discovered provided that the tags are set up appropriately (see + [Requirements for Discovery](#requirements-for-discovery)) +- **Security Group** (optional for access)- if `security_groups` is not specified this security + group can be discovered provided that the tags are set up appropriately (see + [Requirements for Discovery](#requirements-for-discovery)) +- **DNS Domain** (optional for DNS name)- a domain name, e.g. `devtest.mycompany.com.`, managed by + Route53 can be specified to fetch a Zone ID, otherwise a `zone_id` must be specified to use this + feature. When using this, you need to supply the CNAME you want to use, e.g. `myfileserver` with + `dns_name` ### Requirements for Discovery -You will need to have the appropriate tags per subnets and security groups configured to support the discovery feature. This feature will allow these [Terraform](https://www.terraform.io/) scripts to find the resources required to allow EFS configuration alongside an Amazon EKS cluster and SG configuration to allow EKS worker nodes to access EFS. If you used `eksctl` to provision your cluster, these tags and keys will be set up automatically. +You will need to have the appropriate tags per subnets and security groups configured to support the +discovery feature. This feature will allow these [Terraform](https://www.terraform.io/) scripts to +find the resources required to allow EFS configuration alongside an Amazon EKS cluster and SG +configuration to allow EKS worker nodes to access EFS. If you used `eksctl` to provision your +cluster, these tags and keys will be set up automatically. #### Subnets Your private subnets where EKS is installed should have the following tags: | Tag Key | Tag Value | -|---------------------------------------------|-----------| +| ------------------------------------------- | --------- | | `kubernetes.io/cluster/${EKS_CLUSTER_NAME}` | `shared` | | `kubernetes.io/role/internal-elb` | `1` | @@ -57,7 +78,7 @@ Your private subnets where EKS is installed should have the following tags: A security group used to allow access to EKS Nodes needs to have the following tags: | Tag Key | Tag Value | -|---------------------------------------------|----------------------| +| ------------------------------------------- | -------------------- | | `kubernetes.io/cluster/${EKS_CLUSTER_NAME}` | `owned` | | `aws:eks:cluster-name` | `{EKS_CLUSTER_NAME}` | @@ -65,7 +86,8 @@ A security group used to allow access to EKS Nodes needs to have the following t ### Define Variables -If discovery was configured (see [Requirements for Discovery](#requirements-for-discovery)), you can specify this for `terraform.tfvars` files: +If discovery was configured (see [Requirements for Discovery](#requirements-for-discovery)), you can +specify this for `terraform.tfvars` files: ```hcl vpc_name = "dgraph-eks-test-cluster" @@ -116,7 +138,8 @@ terraform apply ## Cleanup -When finished, you can destroy resources created with [Terraform](https://www.terraform.io/) using this: +When finished, you can destroy resources created with [Terraform](https://www.terraform.io/) using +this: ```bash terraform destroy diff --git a/contrib/config/backups/nfs/gcfs-cli/README.md b/contrib/config/backups/nfs/gcfs-cli/README.md index 15ddcd177fb..68ff068cedd 100644 --- a/contrib/config/backups/nfs/gcfs-cli/README.md +++ b/contrib/config/backups/nfs/gcfs-cli/README.md @@ -1,34 +1,38 @@ # Google Cloud Filestore using Google Cloud SDK (Shell) -This shell script creates the resources needed to create an NFS server instance using Google Cloud Filestore. +This shell script creates the resources needed to create an NFS server instance using Google Cloud +Filestore. This automation will create the following resources: - * [Google Cloud Filestore Server](https://cloud.google.com/filestore) - * Configuration file (`../env.sh`) that specifies NFS Server and Path +- [Google Cloud Filestore Server](https://cloud.google.com/filestore) +- Configuration file (`../env.sh`) that specifies NFS Server and Path ## Prerequisites You need the following installed to use this automation: -* [Google Cloud SDK](https://cloud.google.com/sdk/docs/install) - for the `gcloud` command and required to access Google Cloud. -* [bash](https://www.gnu.org/software/bash/) - shell environment +- [Google Cloud SDK](https://cloud.google.com/sdk/docs/install) - for the `gcloud` command and + required to access Google Cloud. +- [bash](https://www.gnu.org/software/bash/) - shell environment ## Configuration You will need to define these environment variables: -* Required Variables: - * `MY_FS_NAME` (required) - Name of Filestore instance. -* Optional Variables: - * `MY_PROJECT` (default to current configured project) - Project with billing enabled to create Filestore instance. - * `MY_ZONE` (default `us-central1-b`) - zone where Filestore instance will be created - * `MY_FS_CAPACITY` (default `1TB`) - size of the storage used for Filestore - * `MY_FS_SHARE_NAME` (default `volumes`) - NFS path +- Required Variables: + - `MY_FS_NAME` (required) - Name of Filestore instance. +- Optional Variables: + - `MY_PROJECT` (default to current configured project) - Project with billing enabled to create + Filestore instance. + - `MY_ZONE` (default `us-central1-b`) - zone where Filestore instance will be created + - `MY_FS_CAPACITY` (default `1TB`) - size of the storage used for Filestore + - `MY_FS_SHARE_NAME` (default `volumes`) - NFS path ## Create Filestore -Run these steps to create [filestore](https://cloud.google.com/filestore) and populate the configuration (`../env.sh`) +Run these steps to create [filestore](https://cloud.google.com/filestore) and populate the +configuration (`../env.sh`) ### Define Variables diff --git a/contrib/config/backups/nfs/gcfs-cli/create_gcfs.sh b/contrib/config/backups/nfs/gcfs-cli/create_gcfs.sh index 3b64b06480e..60535db0dac 100755 --- a/contrib/config/backups/nfs/gcfs-cli/create_gcfs.sh +++ b/contrib/config/backups/nfs/gcfs-cli/create_gcfs.sh @@ -6,35 +6,38 @@ set -e # main ################## main() { - check_environment $@ - create_filestore - create_config_values + check_environment $@ + create_filestore + create_config_values } ##### # check_environment ################## check_environment() { - ## Check for Azure CLI command - command -v gcloud > /dev/null || \ - { echo "[ERROR]: 'az' command not not found" 1>&2; exit 1; } + ## Check for Azure CLI command + command -v gcloud >/dev/null || + { + echo "[ERROR]: 'az' command not not found" 1>&2 + exit 1 + } - if [[ -z "${MY_FS_NAME}" ]]; then - if (( $# < 1 )); then - printf "[ERROR]: Need at least one parameter or define 'MY_FS_NAME'\n\n" 1>&2 - printf "Usage:\n\t$0 \n\tMY_FS_NAME= $0\n" 1>&2 - exit 1 - fi - fi + if [[ -z ${MY_FS_NAME} ]]; then + if (($# < 1)); then + printf "[ERROR]: Need at least one parameter or define 'MY_FS_NAME'\n\n" 1>&2 + printf "Usage:\n\t$0 \n\tMY_FS_NAME= $0\n" 1>&2 + exit 1 + fi + fi - MY_PROJECT=${MY_PROJECT:-$(gcloud config get-value project)} - MY_ZONE=${MY_ZONE:-"us-central1-b"} - MY_FS_TIER=${MY_FS_TIER:-"STANDARD"} - MY_FS_CAPACITY=${MY_FS_CAPACITY:-"1TB"} - MY_FS_SHARE_NAME=${MY_FS_SHARE_NAME:-"volumes"} - MY_NETWORK_NAME=${MY_NETWORK_NAME:-"default"} - MY_FS_NAME=${MY_FS_NAME:-$1} - CREATE_ENV_VALUES=${CREATE_ENV_VALUES:-"true"} + MY_PROJECT=${MY_PROJECT:-$(gcloud config get-value project)} + MY_ZONE=${MY_ZONE:-"us-central1-b"} + MY_FS_TIER=${MY_FS_TIER:-"STANDARD"} + MY_FS_CAPACITY=${MY_FS_CAPACITY:-"1TB"} + MY_FS_SHARE_NAME=${MY_FS_SHARE_NAME:-"volumes"} + MY_NETWORK_NAME=${MY_NETWORK_NAME:-"default"} + MY_FS_NAME=${MY_FS_NAME:-$1} + CREATE_ENV_VALUES=${CREATE_ENV_VALUES:-"true"} } @@ -42,42 +45,44 @@ check_environment() { # create_filestore ################## create_filestore() { - if ! gcloud filestore instances list | grep -q ${MY_FS_NAME}; then - gcloud filestore instances create ${MY_FS_NAME} \ - --project=${MY_PROJECT} \ - --zone=${MY_ZONE} \ - --tier=${MY_FS_TIER} \ - --file-share=name="${MY_FS_SHARE_NAME}",capacity=${MY_FS_CAPACITY} \ - --network=name="${MY_NETWORK_NAME}" - fi + if ! gcloud filestore instances list | grep -q "${MY_FS_NAME}"; then + gcloud filestore instances create "${MY_FS_NAME}" \ + --project="${MY_PROJECT}" \ + --zone="${MY_ZONE}" \ + --tier="${MY_FS_TIER}" \ + --file-share=name="${MY_FS_SHARE_NAME}",capacity="${MY_FS_CAPACITY}" \ + --network=name="${MY_NETWORK_NAME}" + fi } ##### # create_config_values ################## create_config_values() { - ## TODO: Verify Server Exists + ## TODO: Verify Server Exists - ## Create Minio env file and Helm Chart secret files - if [[ "${CREATE_ENV_VALUES}" =~ true|(y)es ]]; then - echo "[INFO]: Creating 'env.sh' file" - SERVER_ADDRESS=$(gcloud filestore instances describe ${MY_FS_NAME} \ - --project=${MY_PROJECT} \ - --zone=${MY_ZONE} \ - --format="value(networks.ipAddresses[0])" - ) - SERVER_SHARE=$(gcloud filestore instances describe ${MY_FS_NAME} \ - --project=${MY_PROJECT} \ - --zone=${MY_ZONE} \ - --format="value(fileShares[0].name)" - ) + ## Create Minio env file and Helm Chart secret files + if [[ ${CREATE_ENV_VALUES} =~ true|(y)es ]]; then + echo "[INFO]: Creating 'env.sh' file" + SERVER_ADDRESS=$( + gcloud filestore instances describe "${MY_FS_NAME}" \ + --project="${MY_PROJECT}" \ + --zone="${MY_ZONE}" \ + --format="value(networks.ipAddresses[0])" + ) + SERVER_SHARE=$( + gcloud filestore instances describe "${MY_FS_NAME}" \ + --project="${MY_PROJECT}" \ + --zone="${MY_ZONE}" \ + --format="value(fileShares[0].name)" + ) - cat <<-EOF > ../env.sh -## Configuration generated by 'create_gcfs.sh' script -export NFS_PATH="${SERVER_SHARE}" -export NFS_SERVER="${SERVER_ADDRESS}" -EOF - fi + cat <<-EOF >../env.sh + ## Configuration generated by 'create_gcfs.sh' script + export NFS_PATH="${SERVER_SHARE}" + export NFS_SERVER="${SERVER_ADDRESS}" + EOF + fi } main $@ diff --git a/contrib/config/backups/nfs/gcfs-terraform/README.md b/contrib/config/backups/nfs/gcfs-terraform/README.md index 80833c78152..b29f4d06a2b 100644 --- a/contrib/config/backups/nfs/gcfs-terraform/README.md +++ b/contrib/config/backups/nfs/gcfs-terraform/README.md @@ -1,39 +1,46 @@ # Google Cloud Filestore with Terraform -These [Terraform](https://www.terraform.io/) scripts and modules will create the resources required to create an NFS server instance using Google Cloud Filestore. +These [Terraform](https://www.terraform.io/) scripts and modules will create the resources required +to create an NFS server instance using Google Cloud Filestore. This automation will create the following resources: - * [Google Cloud Filestore Server](https://cloud.google.com/filestore) - * Configuration file (`../env.sh`) that specifies NFS Server and Path +- [Google Cloud Filestore Server](https://cloud.google.com/filestore) +- Configuration file (`../env.sh`) that specifies NFS Server and Path ## Prerequisites You need the following installed to use this automation: -* [Google Cloud SDK](https://cloud.google.com/sdk/docs/install) - for the `gcloud` command and required to access Google Cloud. - * Google Project with billing enabled -* [Terraform](https://www.terraform.io/downloads.html) - tool used to provision resources and create templates +- [Google Cloud SDK](https://cloud.google.com/sdk/docs/install) - for the `gcloud` command and + required to access Google Cloud. + - Google Project with billing enabled +- [Terraform](https://www.terraform.io/downloads.html) - tool used to provision resources and create + templates ## Configuration You will need to define the following variables: -* Required Variables: - * `project_id` (required) - a globally unique name for the Google project that will contain the GCS bucket - * `name` (required) - name of GCFS server instance -* Optional Variables: - * `zone` (default = `us-central1-b`) - specify zone where instances will be located - * `tier` (default = `STANDARD`) - service tier of the instance, e.g. `TIER_UNSPECIFIED`, `STANDARD`, `PREMIUM`, `BASIC_HDD`, `BASIC_SSD`, and `HIGH_SCALE_SSD`. - * `network` (default = `default`) - specify a GCE VPC network to which the instance is connected. - * `capacity_gb` (default = `1024`) - specify file share capacity in GiB (minimum of `1024`) - * `share_name` (default = `volumes`)- specify a name of the file share +- Required Variables: + - `project_id` (required) - a globally unique name for the Google project that will contain the + GCS bucket + - `name` (required) - name of GCFS server instance +- Optional Variables: + - `zone` (default = `us-central1-b`) - specify zone where instances will be located + - `tier` (default = `STANDARD`) - service tier of the instance, e.g. `TIER_UNSPECIFIED`, + `STANDARD`, `PREMIUM`, `BASIC_HDD`, `BASIC_SSD`, and `HIGH_SCALE_SSD`. + - `network` (default = `default`) - specify a GCE VPC network to which the instance is connected. + - `capacity_gb` (default = `1024`) - specify file share capacity in GiB (minimum of `1024`) + - `share_name` (default = `volumes`)- specify a name of the file share ## Steps ### Define Variables -You can define these when prompted, in `terrafrom.tfvars` file, or through command line variables, e.g. `TF_VAR_project_id`, `TF_VAR_project_id`, and `TF_VAR_name`. Below is an example `terraform.tfvars` file: +You can define these when prompted, in `terrafrom.tfvars` file, or through command line variables, +e.g. `TF_VAR_project_id`, `TF_VAR_project_id`, and `TF_VAR_name`. Below is an example +`terraform.tfvars` file: ```terraform ## terraform.tfvars @@ -58,7 +65,8 @@ terraform apply ## Cleanup -When finished, you can destroy resources created with [Terraform](https://www.terraform.io/) using this: +When finished, you can destroy resources created with [Terraform](https://www.terraform.io/) using +this: ```bash terraform destroy diff --git a/contrib/config/backups/nfs/vagrant/provision.sh b/contrib/config/backups/nfs/vagrant/provision.sh index 6dbb64cdf65..53acdc474e9 100644 --- a/contrib/config/backups/nfs/vagrant/provision.sh +++ b/contrib/config/backups/nfs/vagrant/provision.sh @@ -4,26 +4,26 @@ ## main ################################# main() { - export DEV_USER=${1:-'vagrant'} - export PYTHON_VERSION=${PYTHON_VERSION:-'3.8.2'} - INSTALL_DOCKER=${INSTALL_DOCKER:-'true'} - INSTALL_COMPOSE=${INSTALL_COMPOSE:-'true'} - - setup_hosts - - case $(hostname) in - *nfs-server*) - install_nfs_server - ;; - *nfs-client*) - install_nfs_client - [[ $INSTALL_DOCKER =~ "true" ]] && install_docker - [[ $INSTALL_COMPOSE =~ "true" ]] && \ - export -f install_compose && \ - install_common && \ - su $DEV_USER -c "install_compose" - ;; - esac + export DEV_USER=${1:-'vagrant'} + export PYTHON_VERSION=${PYTHON_VERSION:-'3.8.2'} + INSTALL_DOCKER=${INSTALL_DOCKER:-'true'} + INSTALL_COMPOSE=${INSTALL_COMPOSE:-'true'} + + setup_hosts + + case $(hostname) in + *nfs-server*) + install_nfs_server + ;; + *nfs-client*) + install_nfs_client + [[ ${INSTALL_DOCKER} =~ "true" ]] && install_docker + [[ ${INSTALL_COMPOSE} =~ "true" ]] && + export -f install_compose && + install_common && + su "${DEV_USER}" -c "install_compose" + ;; + esac } @@ -31,128 +31,131 @@ main() { ## setup_hosts - configure /etc/hosts in absence of DNS ################################# setup_hosts() { - CONFIG_FILE=/vagrant/hosts - if [[ ! -f /vagrant/hosts ]]; then - echo "INFO: '$CONFIG_FILE' does not exist. Skipping configuring /etc/hosts" - return 1 - fi - - while read -a LINE; do - ## append to hosts entry if it doesn't exist - if ! grep -q "${LINE[1]}" /etc/hosts; then - printf "%s %s \n" ${LINE[*]} >> /etc/hosts - fi - done < $CONFIG_FILE + CONFIG_FILE=/vagrant/hosts + if [[ ! -f /vagrant/hosts ]]; then + echo "INFO: '${CONFIG_FILE}' does not exist. Skipping configuring /etc/hosts" + return 1 + fi + + while read -a LINE; do + ## append to hosts entry if it doesn't exist + if ! grep -q "${LINE[1]}" /etc/hosts; then + printf "%s %s \n" "${LINE[*]}" >>/etc/hosts + fi + done <"${CONFIG_FILE}" } ###### ## install_nfs_server ################################# install_nfs_server() { - SHAREPATH=${1:-"/srv/share"} - ACCESSLIST=${2:-'*'} - apt-get -qq update && apt-get install -y nfs-kernel-server - mkdir -p $SHAREPATH - chown -R nobody:nogroup $SHAREPATH - chmod -R 777 $SHAREPATH - sed -i "\:$SHAREPATH:d" /etc/exports - echo "$SHAREPATH $ACCESSLIST(rw,sync,no_root_squash,no_subtree_check)" >> /etc/exports - exportfs -rav + SHAREPATH=${1:-"/srv/share"} + ACCESSLIST=${2:-'*'} + apt-get -qq update && apt-get install -y nfs-kernel-server + mkdir -p "${SHAREPATH}" + chown -R nobody:nogroup "${SHAREPATH}" + chmod -R 777 "${SHAREPATH}" + sed -i "\:${SHAREPATH}:d" /etc/exports + echo "${SHAREPATH} ${ACCESSLIST}(rw,sync,no_root_squash,no_subtree_check)" >>/etc/exports + exportfs -rav } ###### ## install_nfs_client ################################# install_nfs_client() { - MOUNTPATH=${1:-"/mnt/share"} - NFS_PATH=${2:-"/srv/share"} - NFS_SERVER=$(grep nfs-server /vagrant/vagrant/hosts | cut -d' ' -f1) - apt-get -qq update && apt-get install -y nfs-common + MOUNTPATH=${1:-"/mnt/share"} + NFS_PATH=${2:-"/srv/share"} + NFS_SERVER=$(grep nfs-server /vagrant/vagrant/hosts | cut -d' ' -f1) + apt-get -qq update && apt-get install -y nfs-common - mkdir -p $MOUNTPATH - mount -t nfs $NFS_SERVER:$NFS_PATH $MOUNTPATH + mkdir -p "${MOUNTPATH}" + mount -t nfs "${NFS_SERVER}":"${NFS_PATH}" "${MOUNTPATH}" } ###### ## install_common ################################# install_common() { - apt-get update -qq -y - - ## tools and libs needed by pyenv - ## ref. https://github.com/pyenv/pyenv/wiki/Common-build-problems - apt-get install -y \ - build-essential \ - curl \ - git \ - libbz2-dev \ - libffi-dev \ - liblzma-dev \ - libncurses5-dev \ - libncursesw5-dev \ - libreadline-dev \ - libsqlite3-dev \ - libssl-dev \ - llvm \ - make \ - python-openssl \ - software-properties-common \ - sqlite \ - tk-dev \ - wget \ - xz-utils \ - zlib1g-dev + apt-get update -qq -y + + ## tools and libs needed by pyenv + ## ref. https://github.com/pyenv/pyenv/wiki/Common-build-problems + apt-get install -y \ + build-essential \ + curl \ + git \ + libbz2-dev \ + libffi-dev \ + liblzma-dev \ + libncurses5-dev \ + libncursesw5-dev \ + libreadline-dev \ + libsqlite3-dev \ + libssl-dev \ + llvm \ + make \ + python-openssl \ + software-properties-common \ + sqlite \ + tk-dev \ + wget \ + xz-utils \ + zlib1g-dev } ###### ## install_docker ################################# install_docker() { - [[ -z "$DEV_USER" ]] && { echo '$DEV_USER not specified. Aborting' 2>&1 ; return 1; } - - apt update -qq -y && apt-get install -y \ - apt-transport-https \ - ca-certificates \ - gnupg-agent - - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - - add-apt-repository \ - "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ + [[ -z ${DEV_USER} ]] && { + echo '$DEV_USER not specified. Aborting' 2>&1 + return 1 + } + + apt update -qq -y && apt-get install -y \ + apt-transport-https \ + ca-certificates \ + gnupg-agent + + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - + add-apt-repository \ + "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" - apt update -qq -y - apt-get -y install docker-ce docker-ce-cli containerd.io + apt update -qq -y + apt-get -y install docker-ce docker-ce-cli containerd.io - usermod -aG docker $DEV_USER + usermod -aG docker "${DEV_USER}" } ###### ## install_compose - installs pyenv, python, docker-compose ################################# install_compose() { - PROJ=pyenv-installer - SCRIPT_URL=https://github.com/pyenv/$PROJ/raw/master/bin/$PROJ - curl -sL $SCRIPT_URL | bash - - ## setup current environment - export PATH="$HOME/.pyenv/bin:$PATH" - eval "$(pyenv init -)" - eval "$(pyenv virtualenv-)" - - ## append to shell environment - cat <<-'BASHRC' >> ~/.bashrc - -export PATH="$HOME/.pyenv/bin:$PATH" -eval "$(pyenv init -)" -eval "$(pyenv virtualenv-init -)" -BASHRC - - ## install recent version of python 3 - pyenv install $PYTHON_VERSION - pyenv global $PYTHON_VERSION - pip install --upgrade pip - pip install docker-compose - pyenv rehash + PROJ=pyenv-installer + SCRIPT_URL=https://github.com/pyenv/${PROJ}/raw/master/bin/${PROJ} + curl -sL "${SCRIPT_URL}" | bash + + ## setup current environment + export PATH="${HOME}/.pyenv/bin:${PATH}" + eval "$(pyenv init -)" + eval "$(pyenv virtualenv-)" + + ## append to shell environment + cat <<-'BASHRC' >>~/.bashrc + + export PATH="$HOME/.pyenv/bin:$PATH" + eval "$(pyenv init -)" + eval "$(pyenv virtualenv-init -)" + BASHRC + + ## install recent version of python 3 + pyenv install "${PYTHON_VERSION}" + pyenv global "${PYTHON_VERSION}" + pip install --upgrade pip + pip install docker-compose + pyenv rehash } main $@ diff --git a/contrib/config/backups/s3/README.md b/contrib/config/backups/s3/README.md index 82d71a07c04..beb615912a0 100644 --- a/contrib/config/backups/s3/README.md +++ b/contrib/config/backups/s3/README.md @@ -6,7 +6,8 @@ Binary backups can use AWS S3 (Simple Storage Service) for an object storage. Some example scripts have been provided to illustrate how to create S3. -* [Terraform](terraform/README.md) - terraform scripts to provision S3 bucket and an IAM user with access to the S3 bucket. +- [Terraform](terraform/README.md) - terraform scripts to provision S3 bucket and an IAM user with + access to the S3 bucket. ## Setting up the environment @@ -14,14 +15,18 @@ Some example scripts have been provided to illustrate how to create S3. You will need these tools: -* Docker Environment - * [Docker](https://docs.docker.com/get-docker/) - container engine platform - * [Docker Compose](https://docs.docker.com/compose/install/) - orchestrates running dokcer containers -* Kubernetes Environment - * [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) - required for interacting with Kubenetes platform - * [helm](https://helm.sh/docs/intro/install/) - deploys Kuberetes packages called helm charts - * [helm-diff](https://github.com/databus23/helm-diff) [optional] - displays differences that will be applied to Kubernetes cluster - * [helmfile](https://github.com/roboll/helmfile#installation) [optional] - orchestrates helm chart deployments +- Docker Environment + - [Docker](https://docs.docker.com/get-docker/) - container engine platform + - [Docker Compose](https://docs.docker.com/compose/install/) - orchestrates running dokcer + containers +- Kubernetes Environment + - [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) - required for interacting + with Kubenetes platform + - [helm](https://helm.sh/docs/intro/install/) - deploys Kuberetes packages called helm charts + - [helm-diff](https://github.com/databus23/helm-diff) [optional] - displays differences that + will be applied to Kubernetes cluster + - [helmfile](https://github.com/roboll/helmfile#installation) [optional] - orchestrates helm chart + deployments ### Using Docker Compose @@ -29,7 +34,8 @@ A `docker-compose.yml` configuration is provided that will run the Dgraph cluste #### Configuring Docker Compose -You will need to create an `s3.env` file first like the example below. If you created the S3 bucket using the [Terraform](terraform/README.md) scripts, this will have been created automatically. +You will need to create an `s3.env` file first like the example below. If you created the S3 bucket +using the [Terraform](terraform/README.md) scripts, this will have been created automatically. ```bash ## s3.env @@ -37,7 +43,7 @@ AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= ``` -#### Using Docker Compose +#### Running with Docker Compose ```bash ## Run a Dgraph Cluster @@ -46,7 +52,7 @@ docker-compose up --detach #### Access Ratel UI -* Ratel UI: http://localhost:8000 +- Ratel UI: http://localhost:8000 #### Clean up the Docker Environment @@ -57,13 +63,16 @@ docker-compose rm ### Using Kubernetes with Helm Charts -For Kubernetes, you can deploy a Dgraph cluster and a Kubernetes Cronjob that triggers backups using [Helm](https://helm.sh/docs/intro/install/). +For Kubernetes, you can deploy a Dgraph cluster and a Kubernetes Cronjob that triggers backups using +[Helm](https://helm.sh/docs/intro/install/). #### Configuring secrets values -These values are automatically created if you used the [Terraform](terraform/README.md) scripts. +These values are automatically created if you used the [Terraform](terraform/README.md) scripts. -If you already an existing S3 bucket you would like to use, you will need to create `charts/dgraph_secrets.yaml` files as shown below. Otherwise, if you created the bucket using the [Terraform](terraform/README.md) scripts, then this would be created automatically. +If you already an existing S3 bucket you would like to use, you will need to create +`charts/dgraph_secrets.yaml` files as shown below. Otherwise, if you created the bucket using the +[Terraform](terraform/README.md) scripts, then this would be created automatically. For the `charts/dgraph_secrets.yaml`, you would create a file like this: @@ -79,7 +88,8 @@ backups: #### Configuring Environments -We need to define one environment variable `BACKUP_PATH`. If [Terraform](terraform/README.md) scripts were used to create the S3 bucket, we can source the `env.sh` or otherwise create it here: +We need to define one environment variable `BACKUP_PATH`. If [Terraform](terraform/README.md) +scripts were used to create the S3 bucket, we can source the `env.sh` or otherwise create it here: ```bash ## env.sh @@ -88,14 +98,17 @@ export BACKUP_PATH=s3://s3..amazonaws.com/ #### Deploy using Helmfile -If you have [helmfile](https://github.com/roboll/helmfile#installation) and the [helm-diff](https://github.com/databus23/helm-diff) plugin installed, you can deploy a Dgraph cluster with the following: +If you have [helmfile](https://github.com/roboll/helmfile#installation) and the +[helm-diff](https://github.com/databus23/helm-diff) plugin installed, you can deploy a Dgraph +cluster with the following: ```bash -## source script for BACKUP_PATH env var +## source script for BACKUP_PATH env var . env.sh ## deploy Dgraph cluster and configure K8S CronJob with BACKUP_PATH helmfile apply ``` + #### Deploy using Helm ```bash @@ -157,7 +170,9 @@ kubectl delete pvc --selector release=my-release # dgraph release name used earl ## Triggering a backup -This is run from the host with the alpha node accessible on localhost at port `8080`. This can can be done by running the `docker-compose` environment, or in the Kubernetes environment, after running `kubectl --namespace default port-forward pod/dgraph-dgraph-alpha-0 8080:8080`. +This is run from the host with the alpha node accessible on localhost at port `8080`. This can can +be done by running the `docker-compose` environment, or in the Kubernetes environment, after running +`kubectl --namespace default port-forward pod/dgraph-dgraph-alpha-0 8080:8080`. ### Using GraphQL diff --git a/contrib/config/backups/s3/terraform/README.md b/contrib/config/backups/s3/terraform/README.md index 73a974cd573..a5f850f1197 100644 --- a/contrib/config/backups/s3/terraform/README.md +++ b/contrib/config/backups/s3/terraform/README.md @@ -2,28 +2,31 @@ ## About -This script will create the required resources needed to create S3 (Simple Storage Service) bucket using [`s3-bucket`](github.com/darkn3rd/s3-bucket) module. +This script will create the required resources needed to create S3 (Simple Storage Service) bucket +using [`s3-bucket`](github.com/darkn3rd/s3-bucket) module. ## Prerequisites You need the following installed to use this automation: -* [AWS CLI](https://aws.amazon.com/cli/) - AWS CLI installed and configured with local profile -* [Terraform](https://www.terraform.io/downloads.html) - tool used to provision resources and create templates +- [AWS CLI](https://aws.amazon.com/cli/) - AWS CLI installed and configured with local profile +- [Terraform](https://www.terraform.io/downloads.html) - tool used to provision resources and create + templates ## Configuration You will need to define the following variables: -* Required Variables: - * `region` (required) - region where bucket will be created - * `name` (required) - unique name of s3 bucket +- Required Variables: + - `region` (required) - region where bucket will be created + - `name` (required) - unique name of s3 bucket ## Steps ### Define Variables -You can define these when prompted, or in `terrafrom.tfvars` file, or through command line variables, e.g. `TF_VAR_name`, `TF_VAR_region`. +You can define these when prompted, or in `terrafrom.tfvars` file, or through command line +variables, e.g. `TF_VAR_name`, `TF_VAR_region`. ```terraform # terraform.tfvars @@ -39,11 +42,14 @@ terraform init ### Prepare and Provision Resources -This will create an S3 bucket and an IAM user that has access to that bucket. For convenience, will also generate the following files: +This will create an S3 bucket and an IAM user that has access to that bucket. For convenience, will +also generate the following files: -* `../s3.env` - used to demonstrate or test dgraph backups with s3 bucket in local docker environment -* `../env.sh`- destination string to use trigger backups from the command line or to configure Kubernetes cron jobs to schedule backups -* `../charts/dgraph_secrets.yaml` - used to deploy Dgraph with support for backups +- `../s3.env` - used to demonstrate or test dgraph backups with s3 bucket in local docker + environment +- `../env.sh`- destination string to use trigger backups from the command line or to configure + Kubernetes cron jobs to schedule backups +- `../charts/dgraph_secrets.yaml` - used to deploy Dgraph with support for backups ```bash ## get a list of changes that will be made diff --git a/contrib/config/monitoring/jaeger/README.md b/contrib/config/monitoring/jaeger/README.md index 403ee2bd38e..8b1acb71cfd 100644 --- a/contrib/config/monitoring/jaeger/README.md +++ b/contrib/config/monitoring/jaeger/README.md @@ -1,6 +1,10 @@ # Jaeger -Jaeger is a distributed tracing system that can be integrated with Dgraph. Included in this section automation to help install Jaeger into your Kubernetes environment. +Jaeger is a distributed tracing system that can be integrated with Dgraph. Included in this section +automation to help install Jaeger into your Kubernetes environment. -* [operator](operator/README.md) - use jaeger operator to install `all-in-one` jaeger pod with [badger](https://github.com/dgraph-io/badger) for storage. -* [chart](chart/README.md) - use jaeger helm chart to install distributed jaeger cluster with [ElasticSearch](https://www.elastic.co/) or [Cassandra](https://cassandra.apache.org/) for storage. +- [operator](operator/README.md) - use jaeger operator to install `all-in-one` jaeger pod with + [badger](https://github.com/dgraph-io/badger) for storage. +- [chart](chart/README.md) - use jaeger helm chart to install distributed jaeger cluster with + [ElasticSearch](https://www.elastic.co/) or [Cassandra](https://cassandra.apache.org/) for + storage. diff --git a/contrib/config/monitoring/jaeger/chart/README.md b/contrib/config/monitoring/jaeger/chart/README.md index 615579d695a..06a385a670b 100644 --- a/contrib/config/monitoring/jaeger/chart/README.md +++ b/contrib/config/monitoring/jaeger/chart/README.md @@ -1,20 +1,25 @@ # Jaeger Helm Chart -The [Jaeger Helm Chart](https://github.com/jaegertracing/helm-charts/tree/master/charts/jaeger) adds all components required to run Jaeger in Kubernetes for a production-like deployment. +The [Jaeger Helm Chart](https://github.com/jaegertracing/helm-charts/tree/master/charts/jaeger) adds +all components required to run Jaeger in Kubernetes for a production-like deployment. ## Tool Requirements ### Required -* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) - required to interact with kubernetes -* [helm](https://helm.sh/docs/intro/install/) - required to install jaeger, cassandra, and elasticsearch using helm chart +- [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) - required to interact with + kubernetes +- [helm](https://helm.sh/docs/intro/install/) - required to install jaeger, cassandra, and + elasticsearch using helm chart ### Optional -These tools are optional if you would like to use a single command to install all the jaeger components and dgraph configured to use jaeger. +These tools are optional if you would like to use a single command to install all the jaeger +components and dgraph configured to use jaeger. -* [helmfile](https://github.com/roboll/helmfile#installation) (optional) -* [helm-diff](https://github.com/databus23/helm-diff) helm plugin: `helm plugin install https://github.com/databus23/helm-diff` +- [helmfile](https://github.com/roboll/helmfile#installation) (optional) +- [helm-diff](https://github.com/databus23/helm-diff) helm plugin: + `helm plugin install https://github.com/databus23/helm-diff` ## Deploy @@ -54,7 +59,6 @@ helm install "my-release" \ dgraph/dgraph ``` - ## Cleanup ### Cleanup Using Helmfile @@ -94,4 +98,4 @@ kubectl port-forward --namespace observability $POD_NAME 16686:16686 Afterward, you can visit: -* http://localhost:16686 +- http://localhost:16686 diff --git a/contrib/config/monitoring/jaeger/operator/README.md b/contrib/config/monitoring/jaeger/operator/README.md index efde2141bde..cedd62b296f 100644 --- a/contrib/config/monitoring/jaeger/operator/README.md +++ b/contrib/config/monitoring/jaeger/operator/README.md @@ -1,20 +1,25 @@ # Jaeger Operator -The [Jaeger operator](https://github.com/jaegertracing/jaeger-operator) is an implementation of a [Kubernetes operator](https://coreos.com/operators/) that aims to ease the operational complexity of deploying and managing Jaeger. +The [Jaeger operator](https://github.com/jaegertracing/jaeger-operator) is an implementation of a +[Kubernetes operator](https://coreos.com/operators/) that aims to ease the operational complexity of +deploying and managing Jaeger. ## Tool Requirements ### Required -* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) - required to interact with kubernetes -* [helm](https://helm.sh/docs/intro/install/) - required to install jaeger-operator using helm chart +- [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) - required to interact with + kubernetes +- [helm](https://helm.sh/docs/intro/install/) - required to install jaeger-operator using helm chart ### Optional -These tools are optional if you would like to use a single command to install all the jaeger components and dgraph configured to use jaeger. +These tools are optional if you would like to use a single command to install all the jaeger +components and dgraph configured to use jaeger. -* [helmfile](https://github.com/roboll/helmfile#installation) -* [helm-diff](https://github.com/databus23/helm-diff) helm plugin: `helm plugin install https://github.com/databus23/helm-diff` +- [helmfile](https://github.com/roboll/helmfile#installation) +- [helm-diff](https://github.com/databus23/helm-diff) helm plugin: + `helm plugin install https://github.com/databus23/helm-diff` ## Deploy @@ -92,4 +97,4 @@ kubectl port-forward --namespace observability $POD_NAME 16686:16686 Afterward, visit: -* http://localhost:16686 +- http://localhost:16686 diff --git a/contrib/config/monitoring/jaeger/operator/helmify.sh b/contrib/config/monitoring/jaeger/operator/helmify.sh index 84369c55bb1..c42206f1920 100755 --- a/contrib/config/monitoring/jaeger/operator/helmify.sh +++ b/contrib/config/monitoring/jaeger/operator/helmify.sh @@ -8,42 +8,48 @@ dir=${chart}-kustomize chart=${chart/.\//} build() { - if [ ! -d "$dir" ]; then - echo "directory \"$dir\" does not exist. make a kustomize project there in order to generate a local helm chart at $chart/ from it!" 1>&2 - exit 1 - fi + if [[ ! -d ${dir} ]]; then + echo "directory \"${dir}\" does not exist. make a kustomize project there in order to generate a local helm chart at ${chart}/ from it!" 1>&2 + exit 1 + fi - mkdir -p $chart/templates - echo "generating $chart/Chart.yaml" 1>&2 - cat < $chart/Chart.yaml + mkdir -p "${chart}"/templates + echo "generating ${chart}/Chart.yaml" 1>&2 + cat <"${chart}"/Chart.yaml apiVersion: v1 appVersion: "1.0" description: A Helm chart for Kubernetes -name: $chart +name: ${chart} version: 0.1.0 EOF - echo "generating $chart/templates/NOTES.txt" 1>&2 - cat < $chart/templates/NOTES.txt -$chart has been installed as release {{ .Release.Name }}. + echo "generating ${chart}/templates/NOTES.txt" 1>&2 + cat <"${chart}"/templates/NOTES.txt +${chart} has been installed as release {{ .Release.Name }}. Run \`helm status {{ .Release.Name }}\` for more information. Run \`helm delete --purge {{.Release.Name}}\` to uninstall. EOF - echo "running kustomize" 1>&2 - (cd $dir; kubectl kustomize overlays/$env) > $chart/templates/all.yaml - echo "running helm lint" 1>&2 - helm lint $chart - echo "generated following files:" - tree $chart + echo "running kustomize" 1>&2 + ( + cd "${dir}" || exit + kubectl kustomize overlays/"${env}" + ) >"${chart}"/templates/all.yaml + echo "running helm lint" 1>&2 + helm lint "${chart}" + echo "generated following files:" + tree "${chart}" } clean() { - rm $chart/Chart.yaml - rm $chart/templates/*.yaml + rm "${chart}"/Chart.yaml + rm "${chart}"/templates/*.yaml } -case "$cmd" in - "build" ) build ;; - "clean" ) clean ;; - * ) echo "unsupported command: $cmd" 1>&2; exit 1 ;; +case "${cmd}" in +"build") build ;; +"clean") clean ;; +*) + echo "unsupported command: ${cmd}" 1>&2 + exit 1 + ;; esac diff --git a/contrib/config/monitoring/prometheus/README.md b/contrib/config/monitoring/prometheus/README.md index 85e08865bf4..2e1c18f7b1e 100644 --- a/contrib/config/monitoring/prometheus/README.md +++ b/contrib/config/monitoring/prometheus/README.md @@ -1,21 +1,34 @@ ## Prometheus Metrics -[Prometheus](https://prometheus.io/) platform for gathering metrics and triggering alerts. This can be used to monitor Dgraph deployed on the Kubernetes platform. +[Prometheus](https://prometheus.io/) platform for gathering metrics and triggering alerts. This can +be used to monitor Dgraph deployed on the Kubernetes platform. You can install [Prometheus](https://prometheus.io/) using either of these options: -* Kubernetes manifests (this directory) - * Instructions: [Deploy: Monitoring in Kubernetes](https://dgraph.io/docs/deploy/#monitoring-in-kubernetes) -* Helm Chart Values - This will install [Prometheus](https://prometheus.io/), [AlertManager](https://prometheus.io/docs/alerting/latest/alertmanager/), and [Grafana](https://grafana.com/). - * Instructions: [README.md](chart-values/README.md) +- Kubernetes manifests (this directory) + - Instructions: + [Deploy: Monitoring in Kubernetes](https://dgraph.io/docs/deploy/#monitoring-in-kubernetes) +- Helm Chart Values - This will install [Prometheus](https://prometheus.io/), + [AlertManager](https://prometheus.io/docs/alerting/latest/alertmanager/), and + [Grafana](https://grafana.com/). + - Instructions: [README.md](chart-values/README.md) ## Kubernetes Manifests Details -These manifests require the [prometheus-operator](https://coreos.com/blog/the-prometheus-operator.html) to be installed before using these (see [instructions](https://dgraph.io/docs/deploy/#monitoring-in-kubernetes)). +These manifests require the +[prometheus-operator](https://coreos.com/blog/the-prometheus-operator.html) to be installed before +using these (see [instructions](https://dgraph.io/docs/deploy/#monitoring-in-kubernetes)). This will contain the following files: -* `prometheus.yaml` - Prometheus service and Dgraph service monitors to keep the configuration synchronized Dgraph configuration changes. The service monitor use service discovery, such as Kubernetes labels and namespaces, to discover Dgraph. Should you have multiple Dgraph installations installed, such as a dev-test and production, you can tailor these narrow the scope of which Dgraph version you would want to track. -* `alertmanager-config.yaml` - This is a secret you can create when installing `alertmanager.yaml`. Here you can specify where to direct alerts, such as Slack or PagerDuty. -* `alertmanager.yaml` - AlertManager service to trigger alerts if metrics fall over a threshold specified in alert rules. -* `alert-rules.yaml` - These are rules that can trigger alerts. Adjust these as they make sense for your Dgraph deployment. +- `prometheus.yaml` - Prometheus service and Dgraph service monitors to keep the configuration + synchronized Dgraph configuration changes. The service monitor use service discovery, such as + Kubernetes labels and namespaces, to discover Dgraph. Should you have multiple Dgraph + installations installed, such as a dev-test and production, you can tailor these narrow the scope + of which Dgraph version you would want to track. +- `alertmanager-config.yaml` - This is a secret you can create when installing `alertmanager.yaml`. + Here you can specify where to direct alerts, such as Slack or PagerDuty. +- `alertmanager.yaml` - AlertManager service to trigger alerts if metrics fall over a threshold + specified in alert rules. +- `alert-rules.yaml` - These are rules that can trigger alerts. Adjust these as they make sense for + your Dgraph deployment. diff --git a/contrib/config/monitoring/prometheus/chart-values/README.md b/contrib/config/monitoring/prometheus/chart-values/README.md index a3fb235474a..a045800a445 100644 --- a/contrib/config/monitoring/prometheus/chart-values/README.md +++ b/contrib/config/monitoring/prometheus/chart-values/README.md @@ -1,19 +1,31 @@ # Helm Chart Values -You can install [Prometheus](https://prometheus.io/) and [Grafana](https://grafana.com/) using this helm chart and supplied helm chart values. +You can install [Prometheus](https://prometheus.io/) and [Grafana](https://grafana.com/) using this +helm chart and supplied helm chart values. ## Usage ### Tool Requirements -* [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) - Kubernetes client tool to interact with a Kubernetes cluster -* [Helm](https://helm.sh/) - package manager for Kubernetes -* [Helmfile](https://github.com/roboll/helmfile#installation) (optional) - declarative spec that allows you to compose several helm charts - * [helm-diff](https://github.com/databus23/helm-diff) - helm plugin used by `helmfile` to show differences when applying helm files. +- [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) - Kubernetes client tool to + interact with a Kubernetes cluster +- [Helm](https://helm.sh/) - package manager for Kubernetes +- [Helmfile](https://github.com/roboll/helmfile#installation) (optional) - declarative spec that + allows you to compose several helm charts + - [helm-diff](https://github.com/databus23/helm-diff) - helm plugin used by `helmfile` to show + differences when applying helm files. ### Using Helm -You can use helm to install [kube-prometheus-stack](https://github.com/prometheus-operator/kube-prometheus) helm chart. This helm chart is a collection of Kubernetes manifests, [Grafana](http://grafana.com/) dashboards, , [Prometheus rules](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/) combined with scripts to provide monitoring with [Prometheus](https://prometheus.io/) using the [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator). This helm chart will also install [Grafana](http://grafana.com/), [node_exporter](https://github.com/prometheus/node_exporter), [kube-state-metrics](https://github.com/kubernetes/kube-state-metrics). +You can use helm to install +[kube-prometheus-stack](https://github.com/prometheus-operator/kube-prometheus) helm chart. This +helm chart is a collection of Kubernetes manifests, [Grafana](http://grafana.com/) dashboards, , +[Prometheus rules](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/) +combined with scripts to provide monitoring with [Prometheus](https://prometheus.io/) using the +[Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator). This helm chart +will also install [Grafana](http://grafana.com/), +[node_exporter](https://github.com/prometheus/node_exporter), +[kube-state-metrics](https://github.com/kubernetes/kube-state-metrics). To use this, run the following: @@ -36,7 +48,9 @@ helm install my-prometheus \ ### Using Helmfile -You can use helmfile to manage multiple helm charts and corresponding helmcharts values from a single configuration file: `helmfile.yaml`. The provided example `helmfile.yaml` will show how to use this to install the helm chart. +You can use helmfile to manage multiple helm charts and corresponding helmcharts values from a +single configuration file: `helmfile.yaml`. The provided example `helmfile.yaml` will show how to +use this to install the helm chart. To use this, run the following: @@ -51,28 +65,33 @@ helmfile apply ## Grafana Dashboards -You can import [Grafana](https://grafana.com/) Dashboards from within the web consoles. +You can import [Grafana](https://grafana.com/) Dashboards from within the web consoles. There's an example dash board for some metrics that you can use to monitor Dgraph on Kubernetes: -* [dgraph-kubernetes-grafana-dashboard.json](../../grafana/dgraph-kubernetes-grafana-dashboard.json) +- [dgraph-kubernetes-grafana-dashboard.json](../../grafana/dgraph-kubernetes-grafana-dashboard.json) -## Helm Chart Values +## Helm Chart Configuration Here are some Helm chart values you may want to configure depending on your environment. ### General -* `grafana.service.type` - set to `LoadBalancer` if you would like to expose this port. -* `grafana.service.annotations` - add annotations to configure a `LoadBalancer` such as if it is internal or external facing, DNS name with external-dns, etc. -* `prometheus.service.type` - set to `LoadBalancer` if you would like to expose this port. -* `prometheus.service.annotations` - add annotations to configure a `LoadBalancer` such as if it is internal or external facing, DNS name with external-dns, etc. +- `grafana.service.type` - set to `LoadBalancer` if you would like to expose this port. +- `grafana.service.annotations` - add annotations to configure a `LoadBalancer` such as if it is + internal or external facing, DNS name with external-dns, etc. +- `prometheus.service.type` - set to `LoadBalancer` if you would like to expose this port. +- `prometheus.service.annotations` - add annotations to configure a `LoadBalancer` such as if it is + internal or external facing, DNS name with external-dns, etc. ### Dgraph Service Monitors -* `prometheus.additionalServiceMonitors.namespaceSelector.matchNames` - if you want to match a dgraph installed into a specific namespace. -* `prometheus.additionalServiceMonitors.selector.matchLabels` - if you want to match through a specific labels in your dgraph deployment. Currently matches `monitor: zero.dgraph-io` and `monitor: alpha.dgraph-io`, which si the default for [Dgraph helm chart](https://github.com/dgraph-io/charts). - +- `prometheus.additionalServiceMonitors.namespaceSelector.matchNames` - if you want to match a + dgraph installed into a specific namespace. +- `prometheus.additionalServiceMonitors.selector.matchLabels` - if you want to match through a + specific labels in your dgraph deployment. Currently matches `monitor: zero.dgraph-io` and + `monitor: alpha.dgraph-io`, which si the default for + [Dgraph helm chart](https://github.com/dgraph-io/charts). ## Alerting for Dgraph @@ -93,11 +112,14 @@ export PAGERDUTY_INTEGRATION_KEY='' helmfile apply ``` -For PagerDuty integration, you will need to add a service with integration type of `Prometheus` and later copy the integration key that is created. +For PagerDuty integration, you will need to add a service with integration type of `Prometheus` and +later copy the integration key that is created. ### Alerting for Dgraph binary backups with Kubenretes CronJobs -In addition to adding alerts for Dgraph, if you you enabled binary backups through Kubernetes CronJob enabled with the Dgraph helm chart (see [backups/README.md](../backups/README.md)), you can use the examples here add alerting for backup cron jobs. +In addition to adding alerts for Dgraph, if you you enabled binary backups through Kubernetes +CronJob enabled with the Dgraph helm chart (see [backups/README.md](../backups/README.md)), you can +use the examples here add alerting for backup cron jobs. With `helmfile`, you can deploy this using the following: @@ -117,8 +139,10 @@ helmfile apply ## Upgrading from previous versions -Previously, this chart was called `stable/prometheus-operator`, which has been deprecated and now called `prometheus-community/kube-prometheus-stack`. If you are using the old chart, you will have to do a migration to use the new chart. +Previously, this chart was called `stable/prometheus-operator`, which has been deprecated and now +called `prometheus-community/kube-prometheus-stack`. If you are using the old chart, you will have +to do a migration to use the new chart. The prometheus community has created a migration guide for this process: -* [Migrating from stable/prometheus-operator chart](https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/README.md#migrating-from-stableprometheus-operator-chart) +- [Migrating from stable/prometheus-operator chart](https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/README.md#migrating-from-stableprometheus-operator-chart) diff --git a/contrib/config/terraform/aws/ha/README.md b/contrib/config/terraform/aws/ha/README.md index 151baa53466..613aba994f7 100644 --- a/contrib/config/terraform/aws/ha/README.md +++ b/contrib/config/terraform/aws/ha/README.md @@ -1,7 +1,7 @@ # Highly Available Dgraph on AWS using terraform -[Terraform](https://terraform.io/) automates the process of spinning up the EC2 instance, setting up, and running Dgraph in it. -This setup deploys terraform in HA mode in AWS. +[Terraform](https://terraform.io/) automates the process of spinning up the EC2 instance, setting +up, and running Dgraph in it. This setup deploys terraform in HA mode in AWS. Here are the steps to follow: @@ -9,24 +9,32 @@ Here are the steps to follow: 2. [Download](https://terraform.io/downloads.html) and install terraform. -3. Create a `terraform.tfvars` file similar to that of [terraform.tfvars.example](./terraform.tfvars.example) and edit the variables inside accordingly. -You can override any variable present in [variables.tf](./variables.tf) by providing an explicit value in `terraform.tfvars` file. +3. Create a `terraform.tfvars` file similar to that of + [terraform.tfvars.example](./terraform.tfvars.example) and edit the variables inside accordingly. + You can override any variable present in [variables.tf](./variables.tf) by providing an explicit + value in `terraform.tfvars` file. 4. Execute the following commands: ```sh -$ terraform init -$ terraform plan -$ terraform apply +terraform init +terraform plan +terraform apply ``` -The output of `terraform apply` will contain the Load Balancer DNS name configured with the setup. Dgraph-ratel will be available on `:8000`. -Change the server URL in the dashboard to `:8080` and start playing with dgraph. +The output of `terraform apply` will contain the Load Balancer DNS name configured with the setup. +Dgraph-ratel will be available on `:8000`. Change the server URL in the dashboard to +`:8080` and start playing with dgraph. 5. Use `terraform destroy` to delete the setup and restore the previous state. -### Note +**Note** -* The terraform setup has been tested to work well with AWS [m5](https://aws.amazon.com/ec2/instance-types/m5/) instances. +- The terraform setup has been tested to work well with AWS + [m5](https://aws.amazon.com/ec2/instance-types/m5/) instances. -* AWS ALBs (Application Load Balancers) configured with this template do not support gRPC load balancing. To get the best performance out of the Dgraph cluster, you can use an externally configured load balancer with gRPC capabilities like [HA Proxy](https://www.haproxy.com/blog/haproxy-1-9-2-adds-grpc-support/) or [Nginx](https://www.nginx.com/blog/nginx-1-13-10-grpc/). +- AWS ALBs (Application Load Balancers) configured with this template do not support gRPC load + balancing. To get the best performance out of the Dgraph cluster, you can use an externally + configured load balancer with gRPC capabilities like + [HA Proxy](https://www.haproxy.com/blog/haproxy-1-9-2-adds-grpc-support/) or + [Nginx](https://www.nginx.com/blog/nginx-1-13-10-grpc/). diff --git a/contrib/config/terraform/aws/ha/dgraph/ratel/variables.tf b/contrib/config/terraform/aws/ha/dgraph/ratel/variables.tf index 403cf603048..74d46516644 100644 --- a/contrib/config/terraform/aws/ha/dgraph/ratel/variables.tf +++ b/contrib/config/terraform/aws/ha/dgraph/ratel/variables.tf @@ -59,12 +59,7 @@ variable "key_pair_name" { description = "Key Pair name to associate with the instances." } -variable "alpha_completed" { - type = bool - description = "Temporary variable to define dependency between ratel and alpha." -} - variable "dgraph_version" { type = string description = "Dgraph version for installation." -} +} \ No newline at end of file diff --git a/contrib/config/terraform/aws/ha/dgraph/zero/variables.tf b/contrib/config/terraform/aws/ha/dgraph/zero/variables.tf index cd2b0abb8bd..5e9ee19fc9a 100644 --- a/contrib/config/terraform/aws/ha/dgraph/zero/variables.tf +++ b/contrib/config/terraform/aws/ha/dgraph/zero/variables.tf @@ -23,16 +23,6 @@ variable "disk_iops" { description = "IOPS limit for the disk associated with the instance." } -variable "vpc_id" { - type = string - description = "VPC ID of the dgraph cluster we created." -} - -variable "lb_arn" { - type = string - description = "Resource ARN of the dgraph load balancer." -} - variable "sg_id" { type = string description = "Security group ID for the created dgraph VPC." @@ -61,4 +51,4 @@ variable "key_pair_name" { variable "dgraph_version" { type = string description = "Dgraph version for installation." -} +} \ No newline at end of file diff --git a/contrib/config/terraform/aws/standalone/README.md b/contrib/config/terraform/aws/standalone/README.md index 60cf2bd07a1..96b3a1d5723 100644 --- a/contrib/config/terraform/aws/standalone/README.md +++ b/contrib/config/terraform/aws/standalone/README.md @@ -1,10 +1,12 @@ # Deploy Dgraph on AWS using Terraform -> **NOTE: This Terraform template creates a Dgraph database cluster with a public IP accessible to anyone. You can set the `assign_public_ip` variable -to false to skip creating a public IP address and you can configure access to Dgraph yourself.** +> **NOTE: This Terraform template creates a Dgraph database cluster with a public IP accessible to +> anyone. You can set the `assign_public_ip` variable to false to skip creating a public IP address +> and you can configure access to Dgraph yourself.** -[Terraform](https://terraform.io/) automates the process spinning up the EC2 instance, setting up and running Dgraph in it. -This setup deploys terraform in standalone mode inside a single EC2 instance. +[Terraform](https://terraform.io/) automates the process spinning up the EC2 instance, setting up +and running Dgraph in it. This setup deploys terraform in standalone mode inside a single EC2 +instance. Here are the steps to follow: @@ -12,18 +14,21 @@ Here are the steps to follow: 2. [Download](https://terraform.io/downloads.html) and install terraform. -3. Create a `terraform.tfvars` file similar to that of [terraform.tfvars.example](./terraform.tfvars.example) and edit the variables inside accordingly. -You can override any variable present in [variables.tf](./variables.tf) by providing an explicit value in `terraform.tfvars` file. - +3. Create a `terraform.tfvars` file similar to that of + [terraform.tfvars.example](./terraform.tfvars.example) and edit the variables inside accordingly. + You can override any variable present in [variables.tf](./variables.tf) by providing an explicit + value in `terraform.tfvars` file. + 4. Execute the following commands: ```sh -$ terraform init -$ terraform plan -$ terraform apply +terraform init +terraform plan +terraform apply ``` -The output of `terraform apply` will contain the IP address assigned to your EC2 instance. Dgraph-ratel will be available on `:8000`. -Change the server URL in the dashboard to `:8080` and start playing with dgraph. +The output of `terraform apply` will contain the IP address assigned to your EC2 instance. +Dgraph-ratel will be available on `:8000`. Change the server URL in the dashboard to +`:8080` and start playing with dgraph. 5. Use `terraform destroy` to delete the setup and restore the previous state. diff --git a/contrib/config/terraform/gcp/standalone/README.md b/contrib/config/terraform/gcp/standalone/README.md index 5aef02ae6e2..cc120c7e847 100644 --- a/contrib/config/terraform/gcp/standalone/README.md +++ b/contrib/config/terraform/gcp/standalone/README.md @@ -1,10 +1,12 @@ # Deploy Dgraph on GCP using Terraform -> **NOTE: This Terraform template creates a Dgraph database cluster with a public IP accessible to anyone. You can set the `assign_public_ip` variable -to false to skip creating a public IP address and you can configure access to Dgraph yourself.** +> **NOTE: This Terraform template creates a Dgraph database cluster with a public IP accessible to +> anyone. You can set the `assign_public_ip` variable to false to skip creating a public IP address +> and you can configure access to Dgraph yourself.** -[Terraform](https://terraform.io/) automates the process spinning up GCP compute instance, setting up and running Dgraph in it. -This setup deploys terraform in standalone mode inside a single GCP compute instance. +[Terraform](https://terraform.io/) automates the process spinning up GCP compute instance, setting +up and running Dgraph in it. This setup deploys terraform in standalone mode inside a single GCP +compute instance. Here are the steps to be followed: @@ -12,7 +14,8 @@ Here are the steps to be followed: 2. [Download](https://terraform.io/downloads.html) and install terraform. -3. Generate service account keys for your GCP account either using the dashboard or `gcloud` CLI as shown below: +3. Generate service account keys for your GCP account either using the dashboard or `gcloud` CLI as + shown below: ```sh gcloud iam service-accounts keys create ./account.json \ @@ -35,7 +38,8 @@ Outputs: dgraph_ip = ``` -The output of `terraform apply` will contain the IP address assigned to your instance. Dgraph-ratel will be available on `:8000`. -Change the server URL in the dashboard to `:8080` and start playing with dgraph. +The output of `terraform apply` will contain the IP address assigned to your instance. Dgraph-ratel +will be available on `:8000`. Change the server URL in the dashboard to +`:8080` and start playing with dgraph. 5. Use `terraform destroy` to delete the setup and restore the state. diff --git a/contrib/config/terraform/gcp/standalone/outputs.tf b/contrib/config/terraform/gcp/standalone/outputs.tf index 9b841f2cafc..2dc1a17c628 100644 --- a/contrib/config/terraform/gcp/standalone/outputs.tf +++ b/contrib/config/terraform/gcp/standalone/outputs.tf @@ -3,5 +3,5 @@ # UI is then accessible using :8000 # ---------------------------------------------------------------------------------- output dgraph_ip { - value = length(google_compute_instance.dgraph_standalone.network_interface.0.access_config) == 0 ? "" : google_compute_instance.dgraph_standalone.network_interface.0.access_config.0.nat_ip } + value = length(google_compute_instance.dgraph_standalone.network_interface[0].access_config) == 0 ? "" : google_compute_instance.dgraph_standalone.network_interface[0].access_config[0].nat_ip \ No newline at end of file diff --git a/contrib/config/terraform/gcp/standalone/variables.tf b/contrib/config/terraform/gcp/standalone/variables.tf index 6be6d19acf9..d075799fd10 100644 --- a/contrib/config/terraform/gcp/standalone/variables.tf +++ b/contrib/config/terraform/gcp/standalone/variables.tf @@ -51,14 +51,8 @@ variable "dgraph_version" { default = "1.1.0" } -variable "dgraph_ui_port" { - type = string - description = "Port number of ratel interface" - default = "8000" -} - variable "assign_public_ip" { type = string default = "true" description = "Should a public IP address be assigned to the compute instance running dgraph in standalone mode." -} +} \ No newline at end of file diff --git a/contrib/config/terraform/kubernetes/README.md b/contrib/config/terraform/kubernetes/README.md index 046ad3ae8b3..0835ac911c7 100644 --- a/contrib/config/terraform/kubernetes/README.md +++ b/contrib/config/terraform/kubernetes/README.md @@ -5,27 +5,35 @@ consistent replication and linearizable reads. It's built from ground up to perf of queries. Being a native graph database, it tightly controls how the data is arranged on disk to optimize for query performance and throughput, reducing disk seeks and network calls in a cluster. -### Introduction +## Introduction -The Terraform template creates the following resources towards setting up a Dgraph cluster on AWS EKS. +The Terraform template creates the following resources towards setting up a Dgraph cluster on AWS +EKS. -- AWS VPC with 2 private subnets for hosting the EKS cluster, 2 public subnets to host the load balancers to expose the services and one NAT subnet to provision the NAT gateway required for the nodes/pods in the private subnet to communicate with the internet. Also sets up the NACL rules for secure inter subnet communication. +- AWS VPC with 2 private subnets for hosting the EKS cluster, 2 public subnets to host the load + balancers to expose the services and one NAT subnet to provision the NAT gateway required for the + nodes/pods in the private subnet to communicate with the internet. Also sets up the NACL rules for + secure inter subnet communication. - AWS EKS in the private subnets to host the Dgraph cluster. -- The Dgraph cluster Kubernetes resources in either a standalone mode or a HA mode(refer to the variables available to tweak the provisioning of the Dgraph cluster below) on the EKS cluster. +- The Dgraph cluster Kubernetes resources in either a standalone mode or a HA mode(refer to the + variables available to tweak the provisioning of the Dgraph cluster below) on the EKS cluster. -### Prerequisites +## Prerequisites - Terraform > 0.12.0 - awscli >= 1.18.32 -## Steps to follow to get the Dgraph cluster on AWS EKS up and running: +## Steps to follow to get the Dgraph cluster on AWS EKS up and running -1. You must have an AWS account with privileges to create VPC, EKS and associated resources. Ensure awscli setup with the right credentials (One can also use AWS_PROFILE=\ terraform \ alternatively). +1. You must have an AWS account with privileges to create VPC, EKS and associated resources. Ensure + awscli setup with the right credentials (One can also use AWS_PROFILE=\ terraform + \ alternatively). 2. [Download](https://terraform.io/downloads.html) and install Terraform. -3. Create a `terraform.tfvars` file similar to that of `terraform.tfvars.example` and edit the variables inside accordingly. - You can override any variable present in [variables.tf](./variables.tf) by providing an explicit value in `terraform.tfvars` file. +3. Create a `terraform.tfvars` file similar to that of `terraform.tfvars.example` and edit the + variables inside accordingly. You can override any variable present in + [variables.tf](./variables.tf) by providing an explicit value in `terraform.tfvars` file. 4. Execute the following commands: @@ -33,60 +41,60 @@ The Terraform template creates the following resources towards setting up a Dgra $ terraform init $ terraform plan -target=module.aws $ terraform apply -target=module.aws -# One can choose to not run the following commands if they intend to use [Helm charts](https://github.com/dgraph-io/charts) to provision their resources on the Kubernetes cluster. +# One can choose to not run the following commands if they intend to use [Helm charts](https://github.com/dgraph-io/charts) +# to provision their resources on the Kubernetes cluster. # If you want to manage the state of the Kubernetes resources using Terraform, run the following commands as well: $ terraform plan -target=module.dgraph $ terraform apply -target=module.dgraph ``` -> Note: Both the modules cannot be applied in the same run owing to the way Terraform [evaluates](https://www.terraform.io/docs/providers/kubernetes/index.html#stacking-with-managed-kubernetes-cluster-resources) the provider blocks. +> Note: Both the modules cannot be applied in the same run owing to the way Terraform +> [evaluates](https://www.terraform.io/docs/providers/kubernetes/index.html#stacking-with-managed-kubernetes-cluster-resources) +> the provider blocks. -The command `terraform apply -target=module.dgraph` would output the hostnames of the Load Balancers exposing the Alpha, Zero and Ratel services. +The command `terraform apply -target=module.dgraph` would output the hostnames of the Load Balancers +exposing the Alpha, Zero and Ratel services. 5. Use `terraform destroy -target=module.aws` to delete the setup and restore the previous state. - - The following table lists the configurable parameters of the template and their default values: -| Parameter | Description | Default | -| ------------------------- | ------------------------------------------------------------ | ------------- | -| `prefix` | The namespace prefix for all resources | dgraph | -| `cidr` | The CIDR of the VPC | 10.20.0.0/16 | -| `region` | The region to deploy the resources in | ap-south-1 | -| `ha` | Enable or disable HA deployment of Dgraph | true | -| `ingress_whitelist_cidrs` | The CIDRs whitelisted at the service Load Balancer | ["0.0.0.0/0"] | -| `only_whitelist_local_ip` | "Only whitelist the IP of the executioner at the service Load Balancers | true | -| `worker_nodes_count` | The number of worker nodes to provision with the EKS cluster | 3 | -| `instance_types` | The list of instance types to run as worker nodes | ["m5.large"] | -| `namespace` | The namespace to deploy the Dgraph pods to | dgraph | -| `zero_replicas` | The number of Zero replicas to create. Overridden by the ha variable which when disabled leads to creation of only 1 Zero pod | 3 | -| `zero_persistence` | If enabled mounts a persistent disk to the Zero pods | true | -| `zero_storage_size_gb` | The size of the persistent disk to attach to the Zero pods in GiB | 10 | +| Parameter | Description | Default | +| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| `prefix` | The namespace prefix for all resources | dgraph | +| `cidr` | The CIDR of the VPC | 10.20.0.0/16 | +| `region` | The region to deploy the resources in | ap-south-1 | +| `ha` | Enable or disable HA deployment of Dgraph | true | +| `ingress_whitelist_cidrs` | The CIDRs whitelisted at the service Load Balancer | ["0.0.0.0/0"] | +| `only_whitelist_local_ip` | "Only whitelist the IP of the executioner at the service Load Balancers | true | +| `worker_nodes_count` | The number of worker nodes to provision with the EKS cluster | 3 | +| `instance_types` | The list of instance types to run as worker nodes | ["m5.large"] | +| `namespace` | The namespace to deploy the Dgraph pods to | dgraph | +| `zero_replicas` | The number of Zero replicas to create. Overridden by the ha variable which when disabled leads to creation of only 1 Zero pod | 3 | +| `zero_persistence` | If enabled mounts a persistent disk to the Zero pods | true | +| `zero_storage_size_gb` | The size of the persistent disk to attach to the Zero pods in GiB | 10 | | `alpha_replicas` | The number of Alpha replicas to create. Overridden by the ha variable which when disabled leads to creation of only 1 Alpha pod | 3 | -| `alpha_initialize_data` | If set, runs an init container to help with loading the data into Alpha | false | -| `alpha_persistence` | If enabled, mounts a persistent disk to the Alpha pods | true | -| `alpha_storage_size_gb` | The size of the persistent disk to attach to the Alpha pods in GiB | 10 | -| `alpha_lru_size_mb` | The LRU cache to enable on Alpha pods in MiB | 2048 | - +| `alpha_initialize_data` | If set, runs an init container to help with loading the data into Alpha | false | +| `alpha_persistence` | If enabled, mounts a persistent disk to the Alpha pods | true | +| `alpha_storage_size_gb` | The size of the persistent disk to attach to the Alpha pods in GiB | 10 | +| `alpha_lru_size_mb` | The LRU cache to enable on Alpha pods in MiB | 2048 | -> NOTE: +> NOTE: > > 1. If `ha` is set to `false` the `worker_node_count` is overridden to `1`. -> -> 2. If `only_whitelist_local_ip` is set to`true`, the `ingress_whitelist_cidrs is overridden` to local IP of the executioner. -> +> 2. If `only_whitelist_local_ip` is set to`true`, the `ingress_whitelist_cidrs is overridden` to +> local IP of the executioner. > 3. The `kubeconfig` file is created in the root directory of this repository. +> 4. One could use Helm to install the Kubernetes resources onto the cluster, in which case comment +> out the `dgraph` module in `main.tf`. +> 5. The number of `worker_nodes` needs to be more than the greater of replicas of Zero/Alpha when +> `ha` is enabled to ensure the topological scheduling based on hostnames works. +> 6. The hostnames of the service Load Balancers are part of the output of the run. Please use the +> respective service ports in conjunction with the hostnames. TLS is not enabled. +> 7. When `alpha_initialize_data`is set to `true`, an init container is provisioned to help with +> loading the data as follows: > -> 4. One could use Helm to install the Kubernetes resources onto the cluster, in which case comment out the `dgraph` module in `main.tf`. -> -> 5. The number of `worker_nodes` needs to be more than the greater of replicas of Zero/Alpha when `ha` is enabled to ensure the topological scheduling based on hostnames works. -> -> 6. The hostnames of the service Load Balancers are part of the output of the run. Please use the respective service ports in conjunction with the hostnames. TLS is not enabled. -> -> 7. When `alpha_initialize_data`is set to `true`, an init container is provisioned to help with loading the data as follows: -> -> ``` +> ```bash > # Initializing the Alphas: > # > # You may want to initialize the Alphas with data before starting, e.g. @@ -106,7 +114,8 @@ The following table lists the configurable parameters of the template and their > # > # kubectl exec dgraph-alpha-0 -c init-alpha touch /dgraph/doneinit > # -> # Note that pod restarts cause re-execution of Init Containers. If persistance is # enabled /dgraph is persisted across pod restarts, the Init Container will exit +> # Note that pod restarts cause re-execution of Init Containers. If persistance is +> # enabled /dgraph is persisted across pod restarts, the Init Container will exit > # automatically when /dgraph/doneinit is present and proceed with starting > # the Alpha process. > ``` diff --git a/contrib/config/terraform/kubernetes/modules/aws/modules/eks/outputs.tf b/contrib/config/terraform/kubernetes/modules/aws/modules/eks/outputs.tf index 93eced0d988..d5eb4642823 100644 --- a/contrib/config/terraform/kubernetes/modules/aws/modules/eks/outputs.tf +++ b/contrib/config/terraform/kubernetes/modules/aws/modules/eks/outputs.tf @@ -21,7 +21,7 @@ apiVersion: v1 clusters: - cluster: server: ${aws_eks_cluster.eks.endpoint} - certificate-authority-data: ${aws_eks_cluster.eks.certificate_authority.0.data} + certificate-authority-data: ${aws_eks_cluster.eks.certificate_authority[0].data} name: kubernetes contexts: - context: @@ -59,4 +59,4 @@ resource "local_file" "kubeconfig" { output "kubeconfig_path" { value = local.kubeconfig_path -} +} \ No newline at end of file diff --git a/contrib/config/terraform/kubernetes/modules/aws/modules/eks/variables.tf b/contrib/config/terraform/kubernetes/modules/aws/modules/eks/variables.tf index ad874f557f0..cbf344b2a83 100644 --- a/contrib/config/terraform/kubernetes/modules/aws/modules/eks/variables.tf +++ b/contrib/config/terraform/kubernetes/modules/aws/modules/eks/variables.tf @@ -41,10 +41,4 @@ variable "cluster_subnet_ids" { variable "db_subnet_ids" { type = list description = "The private subnet IDs" -} - -variable "ingress_whitelist_cidrs" { - type = list - default = ["0.0.0.0/0"] - description = "The IPs whitelisted on the load balancer" -} +} \ No newline at end of file diff --git a/contrib/config/terraform/kubernetes/modules/aws/modules/vpc/nacl-config.tf b/contrib/config/terraform/kubernetes/modules/aws/modules/vpc/nacl-config.tf index cde44275f97..5cbd0e0a26d 100644 --- a/contrib/config/terraform/kubernetes/modules/aws/modules/vpc/nacl-config.tf +++ b/contrib/config/terraform/kubernetes/modules/aws/modules/vpc/nacl-config.tf @@ -1,6 +1,6 @@ resource "aws_network_acl" "lb_nacl" { vpc_id = aws_vpc.vpc.id - subnet_ids = aws_subnet.lb_subnets.*.id + subnet_ids = aws_subnet.lb_subnets[*].id ingress { @@ -89,7 +89,7 @@ resource "aws_network_acl" "nat_nacl" { resource "aws_network_acl" "db_nacl" { vpc_id = aws_vpc.vpc.id - subnet_ids = aws_subnet.db_subnets.*.id + subnet_ids = aws_subnet.db_subnets[*].id ingress { from_port = 0 @@ -148,4 +148,4 @@ resource "aws_network_acl" "db_nacl" { tags = map( "Name", "${var.cluster_name}-db-nacl", ) -} +} \ No newline at end of file diff --git a/contrib/config/terraform/kubernetes/modules/aws/modules/vpc/outputs.tf b/contrib/config/terraform/kubernetes/modules/aws/modules/vpc/outputs.tf index 2541e7123f3..66d93c39179 100644 --- a/contrib/config/terraform/kubernetes/modules/aws/modules/vpc/outputs.tf +++ b/contrib/config/terraform/kubernetes/modules/aws/modules/vpc/outputs.tf @@ -3,9 +3,9 @@ output "vpc_id" { } output "db_subnet_ids" { - value = aws_subnet.db_subnets.*.id + value = aws_subnet.db_subnets[*].id } output "cluster_subnet_ids" { - value = concat(aws_subnet.db_subnets.*.id, aws_subnet.lb_subnets.*.id) -} + value = concat(aws_subnet.db_subnets[*].id, aws_subnet.lb_subnets[*].id) +} \ No newline at end of file diff --git a/contrib/config/terraform/kubernetes/modules/dgraph/modules/alpha/templates/alpha_init.sh b/contrib/config/terraform/kubernetes/modules/dgraph/modules/alpha/templates/alpha_init.sh index fba0ee4e78c..16a0412027d 100644 --- a/contrib/config/terraform/kubernetes/modules/dgraph/modules/alpha/templates/alpha_init.sh +++ b/contrib/config/terraform/kubernetes/modules/dgraph/modules/alpha/templates/alpha_init.sh @@ -2,4 +2,4 @@ trap "exit" SIGINT SIGTERM echo "Write to /dgraph/doneinit when ready." -until [ -f /dgraph/doneinit ]; do sleep 2; done +until [[ -f /dgraph/doneinit ]]; do sleep 2; done diff --git a/contrib/config/terraform/kubernetes/modules/dgraph/modules/zero/variables.tf b/contrib/config/terraform/kubernetes/modules/dgraph/modules/zero/variables.tf index 0d5da6e5a4d..ffff551069f 100644 --- a/contrib/config/terraform/kubernetes/modules/dgraph/modules/zero/variables.tf +++ b/contrib/config/terraform/kubernetes/modules/dgraph/modules/zero/variables.tf @@ -142,13 +142,7 @@ variable "readiness_probe_failure_threshold" { default = 6 } - -variable "termination_grace_period_seconds" { - type = number - default = 60 -} - variable "namespace_resource" { type = any default = null -} +} \ No newline at end of file diff --git a/contrib/config/vault/README.md b/contrib/config/vault/README.md index cff53a6289d..3447f4cc150 100644 --- a/contrib/config/vault/README.md +++ b/contrib/config/vault/README.md @@ -2,4 +2,4 @@ This is a small guide and sample scripts to get started on your Vault journey with Dgraph. -* [Dgraph Vault Integration using Docker Compose](./docker/README.md) +- [Dgraph Vault Integration using Docker Compose](./docker/README.md) diff --git a/contrib/config/vault/docker/README.md b/contrib/config/vault/docker/README.md index 3d399693bfe..31cdc22136e 100644 --- a/contrib/config/vault/docker/README.md +++ b/contrib/config/vault/docker/README.md @@ -1,52 +1,59 @@ # HashiCorp Vault Integration: Docker -This shows how to set up a local staging server for HashiCorp Vault and Dgraph. Through these steps below, you can create secrets for [Encryption at Rest](https://dgraph.io/docs/enterprise-features/encryption-at-rest/) and [Access Control Lists](https://dgraph.io/docs/enterprise-features/access-control-lists/). You can change the example secrets in [vault/payload_alpha_secrets.json](vault/payload_alpha_secrets.json) file. +This shows how to set up a local staging server for HashiCorp Vault and Dgraph. Through these steps +below, you can create secrets for +[Encryption at Rest](https://dgraph.io/docs/enterprise-features/encryption-at-rest/) and +[Access Control Lists](https://dgraph.io/docs/enterprise-features/access-control-lists/). You can +change the example secrets in [vault/payload_alpha_secrets.json](vault/payload_alpha_secrets.json) +file. This guide will demonstrate using best practices with two personas: -* `admin` persona with privileged permissions to configure an auth method -* `app` persona (`dgraph`) - a consumer of secrets stored in Vault +- `admin` persona with privileged permissions to configure an auth method +- `app` persona (`dgraph`) - a consumer of secrets stored in Vault Steps using `bind_secret_id`: -1. [Configure Dgraph and Vault Versions](#Step-1-configure-dgraph-and-vault-versions) -2. [Launch unsealed Vault server](#Step-2-launch-unsealed-Vault-server) -3. [Enable AppRole Auth and KV Secrets](#Step-3-enable-AppRole-Auth-and-KV-Secrets) -4. [Create an `admin` policy](#Step-4-create-an-admin-policy) -5. [Create an `admin` role with the attached policy](#Step-5-create-an-admin-role-with-the-attached-policy) -6. [Retrieve the admin token](#Step-6-retrieve-the-admin-token) -7. [Create a `dgraph` policy to access the secrets](#Step-7-create-a-dgraph-policy-to-access-the-secrets) -8. [Create a `dgraph` role with the attached policy](#Step-8-create-a-dgraph-role-with-the-attached-policy) -9. [Save secrets using admin persona](#Step-9-save-secrets-using-admin-persona) -10. [Retrieve the `dgraph` token and save credentials](#Step-10-retrieve-the-dgraph-token-and-save-credentials) -11. [Verify secrets access using app persona](#Step-11-verify-secrets-access-using-app-persona) -12. [Launch Dgraph](#Step-12-launch-Dgraph) - -Alternative Steps using `bound_cidr_list` (see [Using HashiCorp Vault CIDR List for Authentication](#Using-hashicorp-vault-cidr-list-for-authentication)): - -1. [Configure Dgraph and Vault Versions](#Step-1-configure-dgraph-and-vault-versions) -2. [Launch unsealed Vault server](#Step-2-launch-unsealed-Vault-server) -3. [Enable AppRole Auth and KV Secrets](#Step-3-enable-AppRole-Auth-and-KV-Secrets) -4. [Create an `admin` policy](#Step-4-create-an-admin-policy) -5. [Create an `admin` role with the attached policy](#Step-5-create-an-admin-role-with-the-attached-policy) -6. [Retrieve the admin token](#Step-6-retrieve-the-admin-token) -7. [Create a `dgraph` policy to access the secrets](#Step-7-create-a-dgraph-policy-to-access-the-secrets) -8. [Create a `dgraph` role using `bound_cidr_list`](#Step-8-create-a-dgraph-role-using-bound_cidr_list) -9. [Save secrets using admin persona](#Step-9-save-secrets-using-admin-persona) -10. [Retrieve the dgraph token using only the `role-id`](#Step-10-retrieve-the-dgraph-token-using-only-the-role-id) -11. [Verify secrets access using app persona](#Step-11-verify-secrets-access-using-app-persona) -12. [Launch Dgraph](#Step-12-launch-Dgraph) +1. [Configure Dgraph and Vault Versions](#step-1-configure-dgraph-and-vault-versions) +2. [Launch unsealed Vault server](#step-2-launch-unsealed-vault-server) +3. [Enable AppRole Auth and KV Secrets](#step-3-enable-approle-auth-and-kv-secrets) +4. [Create an `admin` policy](#step-4-create-an-admin-policy) +5. [Create an `admin` role with the attached policy](#step-5-create-an-admin-role-with-the-attached-policy) +6. [Retrieve the admin token](#step-6-retrieve-the-admin-token) +7. [Create a `dgraph` policy to access the secrets](#step-7-create-a-dgraph-policy-to-access-the-secrets) +8. [Create a `dgraph` role with the attached policy](#step-8-create-a-dgraph-role-with-the-attached-policy) +9. [Save secrets using admin persona](#step-9-save-secrets-using-admin-persona) +10. [Retrieve the `dgraph` token and save credentials](#step-10-retrieve-the-dgraph-token-and-save-credentials) +11. [Verify secrets access using app persona](#step-11-verify-secrets-access-using-app-persona) +12. [Launch Dgraph](#step-12-launch-dgraph) + +Alternative Steps using `bound_cidr_list` (see +[Using HashiCorp Vault CIDR List for Authentication](#using-hashicorp-vault-cidr-list-for-authentication)): + +1. [Configure Dgraph and Vault Versions](#step-1-configure-dgraph-and-vault-versions) +2. [Launch unsealed Vault server](#step-2-launch-unsealed-vault-server) +3. [Enable AppRole Auth and KV Secrets](#step-3-enable-approle-auth-and-kv-secrets) +4. [Create an `admin` policy](#step-4-create-an-admin-policy) +5. [Create an `admin` role with the attached policy](#step-5-create-an-admin-role-with-the-attached-policy) +6. [Retrieve the admin token](#step-6-retrieve-the-admin-token) +7. [Create a `dgraph` policy to access the secrets](#step-7-create-a-dgraph-policy-to-access-the-secrets) +8. [Create a `dgraph` role using `bound_cidr_list`](#step-8-create-a-dgraph-role-using-bound_cidr_list) +9. [Save secrets using admin persona](#step-9-save-secrets-using-admin-persona) +10. [Retrieve the dgraph token using only the `role-id`](#step-10-retrieve-the-dgraph-token-using-only-the-role-id) +11. [Verify secrets access using app persona](#step-11-verify-secrets-access-using-app-persona) +12. [Launch Dgraph](#step-12-launch-dgraph) ## Prerequisites -* [Docker](https://docs.docker.com/engine/install/) -* [Docker Compose](https://docs.docker.com/compose/install/) -* [jq](https://stedolan.github.io/jq/) -* [curl](https://curl.se/) +- [Docker](https://docs.docker.com/engine/install/) +- [Docker Compose](https://docs.docker.com/compose/install/) +- [jq](https://stedolan.github.io/jq/) +- [curl](https://curl.se/) ## Steps -This configures an app role that requires log in with `role-id` and `secret-id` to login. This is the default role setting where `bind_secret_id` is enabled. +This configures an app role that requires log in with `role-id` and `secret-id` to login. This is +the default role setting where `bind_secret_id` is enabled. ### Step 1: Configure Dgraph and Vault Versions @@ -188,7 +195,6 @@ curl --silent \ http://$VAULT_ADDRESS/v1/sys/policies/acl/dgraph | jq ``` - ### Step 8: Create a `dgraph` role with the attached policy ```bash @@ -211,7 +217,9 @@ curl --silent \ ### Step 9: Save secrets using admin persona -This will save secrets for both [Encryption at Rest](https://dgraph.io/docs/enterprise-features/encryption-at-rest/) and [Access Control Lists](https://dgraph.io/docs/enterprise-features/access-control-lists/). +This will save secrets for both +[Encryption at Rest](https://dgraph.io/docs/enterprise-features/encryption-at-rest/) and +[Access Control Lists](https://dgraph.io/docs/enterprise-features/access-control-lists/). ```bash curl --silent \ @@ -221,7 +229,10 @@ curl --silent \ http://$VAULT_ADDRESS/v1/secret/data/dgraph/alpha | jq ``` -**NOTE**: When updating K/V Version 2 secrets, be sure to increment the `options.cas` value to increase the version. For example, if updating the `enc_key` value to 32-bits, you would update `./vault/payload_alpha_secrets.json` to look like the following: +**NOTE**: When updating K/V Version 2 secrets, be sure to increment the `options.cas` value to +increase the version. For example, if updating the `enc_key` value to 32-bits, you would update +`./vault/payload_alpha_secrets.json` to look like the following: + ```json { "options": { @@ -289,7 +300,9 @@ curl localhost:8080/health | jq -r '.[].ee_features | .[]' | sed 's/^/* /' ## Using HashiCorp Vault CIDR List for Authentication -As an alternative, you can restrict access to a limited range of IP addresses and disable the requirement for a `secret-id`. In this scenario, we will set `bind_seccret_id` to `false`, and supply a list of IP address ranges for the `bound_cidr_list` key. +As an alternative, you can restrict access to a limited range of IP addresses and disable the +requirement for a `secret-id`. In this scenario, we will set `bind_seccret_id` to `false`, and +supply a list of IP address ranges for the `bound_cidr_list` key. Only two steps will need to be changed, but otherwise the other steps are the same: diff --git a/contrib/docker-build/README.md b/contrib/docker-build/README.md index 415e04bedb3..8374cae96e1 100644 --- a/contrib/docker-build/README.md +++ b/contrib/docker-build/README.md @@ -1,13 +1,12 @@ # Docker build script -This directory contains a Makefile that can be used to build Dgraph inside the -official Dgraph Docker container. This is useful for situations when the host -system cannot be used to build a binary that will work with the container (for -example, if the host system has a different version of glibc). +This directory contains a Makefile that can be used to build Dgraph inside the official Dgraph +Docker container. This is useful for situations when the host system cannot be used to build a +binary that will work with the container (for example, if the host system has a different version of +glibc). ## Usage -Run `make install` in this directory. The script will ask you for your password -in order to change ownership of the compiled binary. By default, files written -by Docker will be owned by root. This script also takes care of moving the -binary to $GOPATH/bin. +Run `make install` in this directory. The script will ask you for your password in order to change +ownership of the compiled binary. By default, files written by Docker will be owned by root. This +script also takes care of moving the binary to $GOPATH/bin. diff --git a/contrib/docker-build/build.sh b/contrib/docker-build/build.sh index d8b66d25d23..2baf0054eeb 100755 --- a/contrib/docker-build/build.sh +++ b/contrib/docker-build/build.sh @@ -3,5 +3,5 @@ export DEBIAN_FRONTEND=noninteractive apt-get update apt-get install -y build-essential git golang -cd /dgraph/dgraph +cd /dgraph/dgraph || exit make diff --git a/contrib/local-test/README.md b/contrib/local-test/README.md index 44c731ae0fa..5fa4c096c61 100644 --- a/contrib/local-test/README.md +++ b/contrib/local-test/README.md @@ -2,18 +2,19 @@ A collection of make commands that enable: -* hot reloading of built local images in a docker compose environment -* creating/updating dql/graphql schemas -* loading data in RDF and JSON encoding -* running DQL/GraphQL queries/mutations +- hot reloading of built local images in a docker compose environment +- creating/updating dql/graphql schemas +- loading data in RDF and JSON encoding +- running DQL/GraphQL queries/mutations Requirements -* Docker -* make -* curl -* [jq](https://stedolan.github.io/jq/download/) (optional, for formatting JSON results) -* [gql](https://github.com/matthewmcneely/gql/tree/feature/add-query-and-variables-from-file/builds) (for running graphql queries) +- Docker +- make +- curl +- [jq](https://stedolan.github.io/jq/download/) (optional, for formatting JSON results) +- [gql](https://github.com/matthewmcneely/gql/tree/feature/add-query-and-variables-from-file/builds) + (for running graphql queries) One final requirement is to build a local image of dgraph from the source currently on your machine. @@ -26,29 +27,44 @@ This will build a `dgraph/dgraph:local` image in your local Docker registry. ## Make targets ### `make help` + Lists all available make targets and a short description. ### `make up` -Brings up a simple alpha and zero node using docker compose in your local Docker environment. The target then tails the log out from both containers. This target also launches a *[watchtower](https://containrrr.dev/watchtower/)* container that will automatically restart alpha and zero when it detects a new dgraph image (built via `cd .. && make image-local`). -The process for hot-reloading development basically involves `make up`, modifying source on your machine, then `make image-local`. The changes in your source will show up in the locally deployed dgraph containers when watchtower restarts them. +Brings up a simple alpha and zero node using docker compose in your local Docker environment. The +target then tails the log out from both containers. This target also launches a +_[watchtower](https://containrrr.dev/watchtower/)_ container that will automatically restart alpha +and zero when it detects a new dgraph image (built via `cd .. && make image-local`). + +The process for hot-reloading development basically involves `make up`, modifying source on your +machine, then `make image-local`. The changes in your source will show up in the locally deployed +dgraph containers when watchtower restarts them. Note that this deployment is completely insecure—it's meant for local testing only. ### `make up-with-lambda` -Brings up the alpha and zero containers along with the dgraph lambda container. Note this lambda container is based on `dgraph/dgraph-lambda:latest`. If you're trying to debug the lambda container, you'll need reference your local image in the docker compose file. + +Brings up the alpha and zero containers along with the dgraph lambda container. Note this lambda +container is based on `dgraph/dgraph-lambda:latest`. If you're trying to debug the lambda container, +you'll need reference your local image in the docker compose file. ### `make down` and `make down-with-lambda` + Stops the containers. ### `make refresh` -Restarts the containers if a new `dgraph/dgraph:local` image is available. This shouldn't be needed if the *watchtower* container is running correctly. + +Restarts the containers if a new `dgraph/dgraph:local` image is available. This shouldn't be needed +if the _watchtower_ container is running correctly. ### `make schema-dql` + Updates dgraph with the schema defined in `schema.dql`. Example schema.dql: -``` + +```dql type Person { name boss_of @@ -70,165 +86,178 @@ works_for: [uid] @reverse . ``` ### `make schema-gql` + Updates dgraph with the schema defined in `schema.gql` Example schema.gql: + ```graphql type Post { - id: ID! - title: String! - text: String - datePublished: DateTime - author: Author! + id: ID! + title: String! + text: String + datePublished: DateTime + author: Author! } type Author { - id: ID! - name: String! - posts: [Post!] @hasInverse(field: author) + id: ID! + name: String! + posts: [Post!] @hasInverse(field: author) } ``` ### `make drop-data` + Drops all data from the cluster, but not the schema. ### `make drop-all` + Drops all data and the schema from the cluster. ### `make load-data-gql` -Loads JSON data defined in `gql-data.json`. This target is useful for loading data into schemas defined with GraphQL SDL. + +Loads JSON data defined in `gql-data.json`. This target is useful for loading data into schemas +defined with GraphQL SDL. Example gql-data.json: + ```json [ + { + "uid": "_:katie_howgate", + "dgraph.type": "Author", + "Author.name": "Katie Howgate", + "Author.posts": [ + { + "uid": "_:katie_howgate_1" + }, + { + "uid": "_:katie_howgate_2" + } + ] + }, + { + "uid": "_:timo_denk", + "dgraph.type": "Author", + "Author.name": "Timo Denk", + "Author.posts": [ + { + "uid": "_:timo_denk_1" + }, + { + "uid": "_:timo_denk_2" + } + ] + }, + { + "uid": "_:katie_howgate_1", + "dgraph.type": "Post", + "Post.title": "Graph Theory 101", + "Post.text": "https://www.lancaster.ac.uk/stor-i-student-sites/katie-howgate/2021/04/27/graph-theory-101/", + "Post.datePublished": "2021-04-27", + "Post.author": { + "uid": "_:katie_howgate" + } + }, + { + "uid": "_:katie_howgate_2", + "dgraph.type": "Post", + "Post.title": "Hypergraphs – not just a cool name!", + "Post.text": "https://www.lancaster.ac.uk/stor-i-student-sites/katie-howgate/2021/04/29/hypergraphs-not-just-a-cool-name/", + "Post.datePublished": "2021-04-29", + "Post.author": { + "uid": "_:katie_howgate" + } + }, + { + "uid": "_:timo_denk_1", + "dgraph.type": "Post", + "Post.title": "Polynomial-time Approximation Schemes", + "Post.text": "https://timodenk.com/blog/ptas/", + "Post.datePublished": "2019-04-12", + "Post.author": { + "uid": "_:timo_denk" + } + }, + { + "uid": "_:timo_denk_2", + "dgraph.type": "Post", + "Post.title": "Graph Theory Overview", + "Post.text": "https://timodenk.com/blog/graph-theory-overview/", + "Post.datePublished": "2017-08-03", + "Post.author": { + "uid": "_:timo_denk" + } + } +] +``` + +### `make load-data-dql-json` + +Loads JSON data defined in `dql-data.json`. This target is useful for loading data into schemas +defined with base dgraph types. + +Example dql-data.json: + +```json +{ + "set": [ { - "uid": "_:katie_howgate", - "dgraph.type": "Author", - "Author.name": "Katie Howgate", - "Author.posts": [ - { - "uid": "_:katie_howgate_1" - }, - { - "uid": "_:katie_howgate_2" - } - ] + "uid": "_:company1", + "industry": "Machinery", + "dgraph.type": "Company", + "name": "CompanyABC" }, { - "uid": "_:timo_denk", - "dgraph.type": "Author", - "Author.name": "Timo Denk", - "Author.posts": [ - { - "uid": "_:timo_denk_1" - }, - { - "uid": "_:timo_denk_2" - } - ] + "uid": "_:company2", + "industry": "High Tech", + "dgraph.type": "Company", + "name": "The other company" }, { - "uid": "_:katie_howgate_1", - "dgraph.type": "Post", - "Post.title": "Graph Theory 101", - "Post.text": "https://www.lancaster.ac.uk/stor-i-student-sites/katie-howgate/2021/04/27/graph-theory-101/", - "Post.datePublished": "2021-04-27", - "Post.author": { - "uid": "_:katie_howgate" - } + "uid": "_:jack", + "works_for": { "uid": "_:company1" }, + "dgraph.type": "Person", + "name": "Jack" }, { - "uid": "_:katie_howgate_2", - "dgraph.type": "Post", - "Post.title": "Hypergraphs – not just a cool name!", - "Post.text": "https://www.lancaster.ac.uk/stor-i-student-sites/katie-howgate/2021/04/29/hypergraphs-not-just-a-cool-name/", - "Post.datePublished": "2021-04-29", - "Post.author": { - "uid": "_:katie_howgate" - } + "uid": "_:ivy", + "works_for": { "uid": "_:company1" }, + "boss_of": { "uid": "_:jack" }, + "dgraph.type": "Person", + "name": "Ivy" }, { - "uid": "_:timo_denk_1", - "dgraph.type": "Post", - "Post.title": "Polynomial-time Approximation Schemes", - "Post.text": "https://timodenk.com/blog/ptas/", - "Post.datePublished": "2019-04-12", - "Post.author": { - "uid": "_:timo_denk" - } + "uid": "_:zoe", + "works_for": { "uid": "_:company1" }, + "dgraph.type": "Person", + "name": "Zoe" }, { - "uid": "_:timo_denk_2", - "dgraph.type": "Post", - "Post.title": "Graph Theory Overview", - "Post.text": "https://timodenk.com/blog/graph-theory-overview/", - "Post.datePublished": "2017-08-03", - "Post.author": { - "uid": "_:timo_denk" - } + "uid": "_:jose", + "works_for": { "uid": "_:company2" }, + "dgraph.type": "Person", + "name": "Jose" + }, + { + "uid": "_:alexei", + "works_for": { "uid": "_:company2" }, + "boss_of": { "uid": "_:jose" }, + "dgraph.type": "Person", + "name": "Alexei" } -] -``` - -### `make load-data-dql-json` -Loads JSON data defined in `dql-data.json`. This target is useful for loading data into schemas defined with base dgraph types. - -Example dql-data.json: -```json -{ - "set": [ - { - "uid": "_:company1", - "industry": "Machinery", - "dgraph.type": "Company", - "name": "CompanyABC" - }, - { - "uid": "_:company2", - "industry": "High Tech", - "dgraph.type": "Company", - "name": "The other company" - }, - { - "uid": "_:jack", - "works_for": { "uid": "_:company1"}, - "dgraph.type": "Person", - "name": "Jack" - }, - { - "uid": "_:ivy", - "works_for": { "uid": "_:company1"}, - "boss_of": { "uid": "_:jack"}, - "dgraph.type": "Person", - "name": "Ivy" - }, - { - "uid": "_:zoe", - "works_for": { "uid": "_:company1"}, - "dgraph.type": "Person", - "name": "Zoe" - }, - { - "uid": "_:jose", - "works_for": { "uid": "_:company2"}, - "dgraph.type": "Person", - "name": "Jose" - }, - { - "uid": "_:alexei", - "works_for": { "uid": "_:company2"}, - "boss_of": { "uid": "_:jose"}, - "dgraph.type": "Person", - "name": "Alexei" - } - ] + ] } ``` ### `make load-data-dql-rdf` -Loads RDF data defined in `dql-data.rdf`. This target is useful for loading data into schemas defined with base dgraph types. + +Loads RDF data defined in `dql-data.rdf`. This target is useful for loading data into schemas +defined with base dgraph types. Example dql-data.rdf: + ```rdf { set { @@ -269,10 +298,12 @@ Example dql-data.rdf: ``` ### `make query-dql` + Runs the query defined in query.dql. Example query.dql: -``` + +```dql { q(func: eq(name, "CompanyABC")) { name @@ -285,9 +316,11 @@ Example query.dql: ``` ### `make query-gql` + Runs the query defined in query.gql and optional variables defined in variables.json. Example query-gql: + ```graphql query QueryAuthor($order: PostOrder) { queryAuthor { @@ -304,10 +337,11 @@ query QueryAuthor($order: PostOrder) { ``` Example variables.json: + ```json { - "order": { - "desc": "datePublished" - } + "order": { + "desc": "datePublished" + } } -``` \ No newline at end of file +``` diff --git a/contrib/manual_tests/README.md b/contrib/manual_tests/README.md index facd74b0373..19c1c565275 100644 --- a/contrib/manual_tests/README.md +++ b/contrib/manual_tests/README.md @@ -3,8 +3,8 @@ To run manual tests: - Set `$DGRAPH_BIN` to the path of the Dgraph binary you want to test. -- Set `$EXIT_ON_FAILURE` to `1` to stop testing immediately after a test fails, - leaving Dgraph running and the test directory intact. +- Set `$EXIT_ON_FAILURE` to `1` to stop testing immediately after a test fails, leaving Dgraph + running and the test directory intact. - Execute `./test.sh`. For long-running tests: diff --git a/contrib/manual_tests/log.sh b/contrib/manual_tests/log.sh index 78a080f2eef..098a1c4623f 100755 --- a/contrib/manual_tests/log.sh +++ b/contrib/manual_tests/log.sh @@ -1,21 +1,21 @@ #!/usr/bin/env bash function _log_date() { - date '+%Y-%m-%d %H:%M:%S' + date '+%Y-%m-%d %H:%M:%S' } function log::debug() { - printf '%b\n' "\e[32m[DEBUG] $(_log_date) $*\e[0m" + printf '%b\n' "\e[32m[DEBUG] $(_log_date) $*\e[0m" } function log::info() { - printf '%b\n' "\e[34m[ INFO] $(_log_date) $*\e[0m" + printf '%b\n' "\e[34m[ INFO] $(_log_date) $*\e[0m" } function log::warn() { - printf '%b\n' "\e[33m[ WARN] $(_log_date) $*\e[0m" + printf '%b\n' "\e[33m[ WARN] $(_log_date) $*\e[0m" } function log::error() { - printf '%b\n' "\e[31m[ERROR] $(_log_date) $*\e[0m" + printf '%b\n' "\e[31m[ERROR] $(_log_date) $*\e[0m" } diff --git a/contrib/manual_tests/test.sh b/contrib/manual_tests/test.sh index 66a2e3f534c..e7ee87a8213 100755 --- a/contrib/manual_tests/test.sh +++ b/contrib/manual_tests/test.sh @@ -2,599 +2,599 @@ set -euo pipefail -"$DGRAPH_BIN" version +"${DGRAPH_BIN}" version -readonly TEST_PATH="$PWD/_tmp" +readonly TEST_PATH="${PWD}/_tmp" -readonly DATA_PATH="$TEST_PATH/data" -readonly LOGS_PATH="$TEST_PATH/logs" -readonly DGRAPH_PATH="$TEST_PATH/dgraph" +readonly DATA_PATH="${TEST_PATH}/data" +readonly LOGS_PATH="${TEST_PATH}/logs" +readonly DGRAPH_PATH="${TEST_PATH}/dgraph" -readonly ENCRYPTION_KEY_PATH="$DGRAPH_PATH/encryption_key_file" -readonly ACL_SECRET_PATH="$DGRAPH_PATH/acl_secret_file" -readonly TLS_PATH="$DGRAPH_PATH/tls" +readonly ENCRYPTION_KEY_PATH="${DGRAPH_PATH}/encryption_key_file" +readonly ACL_SECRET_PATH="${DGRAPH_PATH}/acl_secret_file" +readonly TLS_PATH="${DGRAPH_PATH}/tls" readonly DATASET_1MILLION_FILE_URL='https://github.com/dgraph-io/benchmarks/blob/master/data/1million.rdf.gz?raw=true' -readonly DATASET_1MILLION_FILE_PATH="$DATA_PATH/1million.rdf.gz" +readonly DATASET_1MILLION_FILE_PATH="${DATA_PATH}/1million.rdf.gz" readonly DATASET_1MILLION_SCHEMA_URL='https://github.com/dgraph-io/benchmarks/blob/master/data/1million.schema?raw=true' -readonly DATASET_1MILLION_SCHEMA_PATH="$DATA_PATH/1million.schema" +readonly DATASET_1MILLION_SCHEMA_PATH="${DATA_PATH}/1million.schema" source "log.sh" function dataset::1million::download() { - if ! [ -f "$DATASET_1MILLION_FILE_PATH" ]; then - log::debug "Downloading from $DATASET_1MILLION_FILE_URL." - curl -L "$DATASET_1MILLION_FILE_URL" --output "$DATASET_1MILLION_FILE_PATH" - fi - - if ! [ -f "$DATASET_1MILLION_SCHEMA_PATH" ]; then - log::debug "Downloading from $DATASET_1MILLION_SCHEMA_URL." - curl -L "$DATASET_1MILLION_SCHEMA_URL" --output "$DATASET_1MILLION_SCHEMA_PATH" - fi + if ! [[ -f ${DATASET_1MILLION_FILE_PATH} ]]; then + log::debug "Downloading from ${DATASET_1MILLION_FILE_URL}." + curl -L "${DATASET_1MILLION_FILE_URL}" --output "${DATASET_1MILLION_FILE_PATH}" + fi + + if ! [[ -f ${DATASET_1MILLION_SCHEMA_PATH} ]]; then + log::debug "Downloading from ${DATASET_1MILLION_SCHEMA_URL}." + curl -L "${DATASET_1MILLION_SCHEMA_URL}" --output "${DATASET_1MILLION_SCHEMA_PATH}" + fi } function dataset::1million::verify() { - local count_names_exp=197408 - count_names_got=$( - curl \ - -SsX POST \ - -H 'Content-Type: application/json' \ - -d '{ "query": "query { test(func: has(name@.)) { count(uid) } }" }' \ - 'localhost:8081/query' | jq '.data.test[0].count' - ) - - if [ "$count_names_got" -ne "$count_names_exp" ]; then - log::error "Could not verify 1million, expected: $count_names_exp, got: $count_names_got" - return 1 - fi + local count_names_exp=197408 + count_names_got=$( + curl \ + -SsX POST \ + -H 'Content-Type: application/json' \ + -d '{ "query": "query { test(func: has(name@.)) { count(uid) } }" }' \ + 'localhost:8081/query' | jq '.data.test[0].count' + ) + + if [[ ${count_names_got} -ne ${count_names_exp} ]]; then + log::error "Could not verify 1million, expected: ${count_names_exp}, got: ${count_names_got}" + return 1 + fi } function portkill() { - local pids - if pids="$(lsof -nti ":$1")"; then - echo "$pids" | xargs kill -9 - fi + local pids + if pids="$(lsof -nti ":$1")"; then + echo "${pids}" | xargs kill -9 + fi } function dgraph::killall() { - while pkill -x 'dgraph'; do - log::debug 'Killing running Dgraph instances.' - sleep 1 - done + while pkill -x 'dgraph'; do + log::debug 'Killing running Dgraph instances.' + sleep 1 + done } function dgraph::start_zero() { - local -r i="$i" - log::debug "Starting Zero $i." + local -r i="${i}" + log::debug "Starting Zero ${i}." - local grpc_port=$((5080 + i)) - local http_port=$((6080 + i)) + local grpc_port=$((5080 + i)) + local http_port=$((6080 + i)) - for port in "$grpc_port" "$http_port"; do - portkill "$port" - done + for port in "${grpc_port}" "${http_port}"; do + portkill "${port}" + done - local zero_args_default=(--cwd "$DGRAPH_PATH/zero$i" --raft="idx=$i" --port_offset "$i") + local zero_args_default=(--cwd "${DGRAPH_PATH}/zero${i}" --raft="idx=${i}" --port_offset "${i}") - if [ "$i" -ne 1 ]; then - zero_args_default+=(--peer 'localhost:5081') - fi + if [[ ${i} -ne 1 ]]; then + zero_args_default+=(--peer 'localhost:5081') + fi - "$DGRAPH_BIN" zero "${zero_args_default[@]}" "${@:2}" &>"$LOGS_PATH/zero$i" & - sleep 1 + "${DGRAPH_BIN}" zero "${zero_args_default[@]}" "${@:2}" &>"${LOGS_PATH}/zero${i}" & + sleep 1 } function dgraph::start_zeros() { - local -r n="$1" - for i in $(seq "$n"); do - dgraph::start_zero "$i" "${@:2}" - done + local -r n="$1" + for i in $(seq "${n}"); do + dgraph::start_zero "${i}" "${@:2}" + done } function dgraph::start_alpha() { - local -r i="$1" - log::debug "Starting Alpha $i." - - local internal_port=$((7080 + i)) - local http_port=$((8080 + i)) - local grpc_port=$((9080 + i)) - - for port in "$internal_port" "$http_port" "$grpc_port"; do - portkill "$port" - done - - "$DGRAPH_BIN" \ - alpha \ - --cwd "$DGRAPH_PATH/alpha$i" \ - --port_offset "$i" \ - --zero 'localhost:5081' \ - "${@:2}" &>"$LOGS_PATH/alpha$i" & - sleep 1 + local -r i="$1" + log::debug "Starting Alpha ${i}." + + local internal_port=$((7080 + i)) + local http_port=$((8080 + i)) + local grpc_port=$((9080 + i)) + + for port in "${internal_port}" "${http_port}" "${grpc_port}"; do + portkill "${port}" + done + + "${DGRAPH_BIN}" \ + alpha \ + --cwd "${DGRAPH_PATH}/alpha${i}" \ + --port_offset "${i}" \ + --zero 'localhost:5081' \ + "${@:2}" &>"${LOGS_PATH}/alpha${i}" & + sleep 1 } function dgraph::start_alphas() { - local -r n="$1" - for i in $(seq "$n"); do - dgraph::start_alpha "$i" "${@:2}" - done + local -r n="$1" + for i in $(seq "${n}"); do + dgraph::start_alpha "${i}" "${@:2}" + done } function dgraph::generate_encryption_key() { - dd if=/dev/random bs=1 count=32 of="$ENCRYPTION_KEY_PATH" + dd if=/dev/random bs=1 count=32 of="${ENCRYPTION_KEY_PATH}" } function dgraph::generate_acl_secret() { - dd if=/dev/random bs=1 count=256 of="$ACL_SECRET_PATH" + dd if=/dev/random bs=1 count=256 of="${ACL_SECRET_PATH}" } function dgraph::generate_tls() { - "$DGRAPH_BIN" cert --cwd "$DGRAPH_PATH" --nodes 'localhost' + "${DGRAPH_BIN}" cert --cwd "${DGRAPH_PATH}" --nodes 'localhost' } function dgraph::healthcheck_zero() { - local -r i="$1" - local -r http_port=$((6080 + i)) - local response - - while true; do - response="$(curl -Ss "localhost:$http_port/health")" - if [ "$response" == "Please retry again, server is not ready to accept requests" ]; then - log::warn "Zero $i is not ready, retrying in 1s." - sleep 1 - else - break - fi - done - - if [ "$response" != "OK" ]; then - log::error "Zero $i is not healthy." - echo "$response" - return 1 - fi - - log::debug "Zero $i is healthy." + local -r i="$1" + local -r http_port=$((6080 + i)) + local response + + while true; do + response="$(curl -Ss "localhost:${http_port}/health")" + if [[ ${response} == "Please retry again, server is not ready to accept requests" ]]; then + log::warn "Zero ${i} is not ready, retrying in 1s." + sleep 1 + else + break + fi + done + + if [[ ${response} != "OK" ]]; then + log::error "Zero ${i} is not healthy." + echo "${response}" + return 1 + fi + + log::debug "Zero ${i} is healthy." } function dgraph::healthcheck_alpha() { - local -r i="$1" - local -r http_port=$((8080 + i)) - local response - - while true; do - response="$(curl -Ss "localhost:$http_port/health")" - if [ "$response" == "Please retry again, server is not ready to accept requests" ]; then - log::warn "Alpha $i is not ready, retrying in 1s." - sleep 1 - else - break - fi - done - - if [ "$(echo "$response" | jq '.[0].status')" != '"healthy"' ]; then - log::error "Alpha $i is not healthy." - echo "$response" | jq || echo "$response" - return 1 - fi - - log::debug "Alpha $i is healthy." + local -r i="$1" + local -r http_port=$((8080 + i)) + local response + + while true; do + response="$(curl -Ss "localhost:${http_port}/health")" + if [[ ${response} == "Please retry again, server is not ready to accept requests" ]]; then + log::warn "Alpha ${i} is not ready, retrying in 1s." + sleep 1 + else + break + fi + done + + if [[ "$(echo "${response}" | jq '.[0].status')" != '"healthy"' ]]; then + log::error "Alpha ${i} is not healthy." + echo "${response}" | jq || echo "${response}" + return 1 + fi + + log::debug "Alpha ${i} is healthy." } function dgraph::healthcheck_alpha_tls() { - local -r i="$1" - local -r http_port=$((8080 + i)) - local response - - while true; do - response="$(curl --insecure -Ss "https://localhost:$http_port/health")" - if [ "$response" == "Please retry again, server is not ready to accept requests" ]; then - log::warn "Alpha $i is not ready, retrying in 1s." - sleep 1 - else - break - fi - done - - if [ "$(echo "$response" | jq '.[0].status')" != '"healthy"' ]; then - log::error "Alpha $i is not healthy." - echo "$response" | jq || echo "$response" - return 1 - fi - - log::debug "Alpha $i is healthy." + local -r i="$1" + local -r http_port=$((8080 + i)) + local response + + while true; do + response="$(curl --insecure -Ss "https://localhost:${http_port}/health")" + if [[ ${response} == "Please retry again, server is not ready to accept requests" ]]; then + log::warn "Alpha ${i} is not ready, retrying in 1s." + sleep 1 + else + break + fi + done + + if [[ "$(echo "${response}" | jq '.[0].status')" != '"healthy"' ]]; then + log::error "Alpha ${i} is not healthy." + echo "${response}" | jq || echo "${response}" + return 1 + fi + + log::debug "Alpha ${i} is healthy." } function dgraph::increment() { - local -r i="$1" - local -r grpc_port=$((9080 + i)) - "$DGRAPH_BIN" increment --alpha "localhost:$grpc_port" "${@:2}" | - grep -oP 'Counter VAL: \K\d+' | - tail -1 + local -r i="$1" + local -r grpc_port=$((9080 + i)) + "${DGRAPH_BIN}" increment --alpha "localhost:${grpc_port}" "${@:2}" | + grep -oP 'Counter VAL: \K\d+' | + tail -1 } function setup() { - dgraph::killall + dgraph::killall - log::debug 'Removing old test files.' + log::debug 'Removing old test files.' - rm -rf "$LOGS_PATH" - mkdir -p "$LOGS_PATH" + rm -rf "${LOGS_PATH}" + mkdir -p "${LOGS_PATH}" - rm -rf "$DGRAPH_PATH" - mkdir -p "$DGRAPH_PATH" + rm -rf "${DGRAPH_PATH}" + mkdir -p "${DGRAPH_PATH}" - mkdir -p "$DATA_PATH" + mkdir -p "${DATA_PATH}" } function cleanup() { - dgraph::killall + dgraph::killall - log::debug 'Removing old test files.' - rm -rf "$TEST_PATH" + log::debug 'Removing old test files.' + rm -rf "${TEST_PATH}" } function test::manual_start() { - local -r n_zeros=3 - local -r n_alphas=3 - - dgraph::start_zeros "$n_zeros" - dgraph::start_alphas "$n_alphas" - - for i in $(seq "$n_zeros"); do - dgraph::healthcheck_zero "$i" - done - - sleep 5 - - for i in $(seq "$n_alphas"); do - dgraph::healthcheck_alpha "$i" - done - - local count - for i in $(seq "$n_alphas"); do - count="$(dgraph::increment "$i")" - if [ "$i" -ne "$count" ]; then - log::error "Expected increment: $i but got: $count" - return 1 - fi - done + local -r n_zeros=3 + local -r n_alphas=3 + + dgraph::start_zeros "${n_zeros}" + dgraph::start_alphas "${n_alphas}" + + for i in $(seq "${n_zeros}"); do + dgraph::healthcheck_zero "${i}" + done + + sleep 5 + + for i in $(seq "${n_alphas}"); do + dgraph::healthcheck_alpha "${i}" + done + + local count + for i in $(seq "${n_alphas}"); do + count="$(dgraph::increment "${i}")" + if [[ ${i} -ne ${count} ]]; then + log::error "Expected increment: ${i} but got: ${count}" + return 1 + fi + done } function test::manual_start_encryption() { - dgraph::generate_encryption_key + dgraph::generate_encryption_key - local -r n_zeros=3 - local -r n_alphas=3 + local -r n_zeros=3 + local -r n_alphas=3 - dgraph::start_zeros "$n_zeros" - dgraph::start_alphas "$n_alphas" --encryption "key-file=$ENCRYPTION_KEY_PATH;" + dgraph::start_zeros "${n_zeros}" + dgraph::start_alphas "${n_alphas}" --encryption "key-file=${ENCRYPTION_KEY_PATH};" - for i in $(seq "$n_zeros"); do - dgraph::healthcheck_zero "$i" - done + for i in $(seq "${n_zeros}"); do + dgraph::healthcheck_zero "${i}" + done - sleep 5 + sleep 5 - for i in $(seq "$n_alphas"); do - dgraph::healthcheck_alpha "$i" - done + for i in $(seq "${n_alphas}"); do + dgraph::healthcheck_alpha "${i}" + done - local count - for i in $(seq "$n_alphas"); do - count="$(dgraph::increment "$i")" - if [ "$i" -ne "$count" ]; then - log::error "Expected increment: $i but got: $count" - return 1 - fi - done + local count + for i in $(seq "${n_alphas}"); do + count="$(dgraph::increment "${i}")" + if [[ ${i} -ne ${count} ]]; then + log::error "Expected increment: ${i} but got: ${count}" + return 1 + fi + done } function test::manual_start_acl() { - dgraph::generate_acl_secret + dgraph::generate_acl_secret - local -r n_zeros=3 - local -r n_alphas=3 + local -r n_zeros=3 + local -r n_alphas=3 - dgraph::start_zeros "$n_zeros" - dgraph::start_alphas "$n_alphas" --acl "secret-file=$ACL_SECRET_PATH;" + dgraph::start_zeros "${n_zeros}" + dgraph::start_alphas "${n_alphas}" --acl "secret-file=${ACL_SECRET_PATH};" - for i in $(seq "$n_zeros"); do - dgraph::healthcheck_zero "$i" - done + for i in $(seq "${n_zeros}"); do + dgraph::healthcheck_zero "${i}" + done - sleep 5 + sleep 5 - for i in $(seq "$n_alphas"); do - dgraph::healthcheck_alpha "$i" - done + for i in $(seq "${n_alphas}"); do + dgraph::healthcheck_alpha "${i}" + done - local count - for i in $(seq "$n_alphas"); do - count="$(dgraph::increment "$i" --user groot --password password)" - if [ "$i" -ne "$count" ]; then - log::error "Expected increment: $i but got: $count" - return 1 - fi - done + local count + for i in $(seq "${n_alphas}"); do + count="$(dgraph::increment "${i}" --user groot --password password)" + if [[ ${i} -ne ${count} ]]; then + log::error "Expected increment: ${i} but got: ${count}" + return 1 + fi + done } # Test manual start with external TLS enabled. function test::manual_start_tls() { - dgraph::generate_tls + dgraph::generate_tls - local -r n_zeros=3 - local -r n_alphas=3 + local -r n_zeros=3 + local -r n_alphas=3 - dgraph::start_zeros "$n_zeros" - dgraph::start_alphas "$n_alphas" --tls "ca-cert=$TLS_PATH/ca.crt; server-cert=$TLS_PATH/node.crt; server-key=$TLS_PATH/node.key;" + dgraph::start_zeros "${n_zeros}" + dgraph::start_alphas "${n_alphas}" --tls "ca-cert=${TLS_PATH}/ca.crt; server-cert=${TLS_PATH}/node.crt; server-key=${TLS_PATH}/node.key;" - for i in $(seq "$n_zeros"); do - dgraph::healthcheck_zero "$i" - done + for i in $(seq "${n_zeros}"); do + dgraph::healthcheck_zero "${i}" + done - sleep 5 + sleep 5 - for i in $(seq "$n_alphas"); do - dgraph::healthcheck_alpha_tls "$i" - done + for i in $(seq "${n_alphas}"); do + dgraph::healthcheck_alpha_tls "${i}" + done - local count - for i in $(seq "$n_alphas"); do - count="$(dgraph::increment "$i" --tls "ca-cert=$TLS_PATH/ca.crt;")" - if [ "$i" -ne "$count" ]; then - log::error "Expected increment: $i but got: $count" - return 1 - fi - done + local count + for i in $(seq "${n_alphas}"); do + count="$(dgraph::increment "${i}" --tls "ca-cert=${TLS_PATH}/ca.crt;")" + if [[ ${i} -ne ${count} ]]; then + log::error "Expected increment: ${i} but got: ${count}" + return 1 + fi + done } # Test manual start with both internal and external TLS enabled. function test::manual_start_tls2() { - dgraph::generate_tls - - local -r n_zeros=3 - local -r n_alphas=3 - - for i in $(seq "$n_zeros"); do - "$DGRAPH_BIN" cert --client "zero$i" --cwd "$DGRAPH_PATH" - dgraph::start_zero "$i" \ - --tls "ca-cert=$TLS_PATH/ca.crt; internal-port=true; client-cert=$TLS_PATH/client.zero$i.crt; client-key=$TLS_PATH/client.zero$i.key; server-cert=$TLS_PATH/node.crt; server-key=$TLS_PATH/node.key;" - done - - for i in $(seq "$n_alphas"); do - "$DGRAPH_BIN" cert --client "alpha$i" --cwd "$DGRAPH_PATH" - dgraph::start_alpha "$i" \ - --tls "ca-cert=$TLS_PATH/ca.crt; internal-port=true; client-cert=$TLS_PATH/client.alpha$i.crt; client-key=$TLS_PATH/client.alpha$i.key; server-cert=$TLS_PATH/node.crt; server-key=$TLS_PATH/node.key;" - done - - for i in $(seq "$n_zeros"); do - dgraph::healthcheck_zero "$i" - done - - sleep 5 - - for i in $(seq "$n_alphas"); do - dgraph::healthcheck_alpha_tls "$i" - done - - local count - for i in $(seq "$n_alphas"); do - count="$(dgraph::increment "$i" --tls "ca-cert=$TLS_PATH/ca.crt;")" - if [ "$i" -ne "$count" ]; then - log::error "Expected increment: $i but got: $count" - return 1 - fi - done + dgraph::generate_tls + + local -r n_zeros=3 + local -r n_alphas=3 + + for i in $(seq "${n_zeros}"); do + "${DGRAPH_BIN}" cert --client "zero${i}" --cwd "${DGRAPH_PATH}" + dgraph::start_zero "${i}" \ + --tls "ca-cert=${TLS_PATH}/ca.crt; internal-port=true; client-cert=${TLS_PATH}/client.zero${i}.crt; client-key=${TLS_PATH}/client.zero${i}.key; server-cert=${TLS_PATH}/node.crt; server-key=${TLS_PATH}/node.key;" + done + + for i in $(seq "${n_alphas}"); do + "${DGRAPH_BIN}" cert --client "alpha${i}" --cwd "${DGRAPH_PATH}" + dgraph::start_alpha "${i}" \ + --tls "ca-cert=${TLS_PATH}/ca.crt; internal-port=true; client-cert=${TLS_PATH}/client.alpha${i}.crt; client-key=${TLS_PATH}/client.alpha${i}.key; server-cert=${TLS_PATH}/node.crt; server-key=${TLS_PATH}/node.key;" + done + + for i in $(seq "${n_zeros}"); do + dgraph::healthcheck_zero "${i}" + done + + sleep 5 + + for i in $(seq "${n_alphas}"); do + dgraph::healthcheck_alpha_tls "${i}" + done + + local count + for i in $(seq "${n_alphas}"); do + count="$(dgraph::increment "${i}" --tls "ca-cert=${TLS_PATH}/ca.crt;")" + if [[ ${i} -ne ${count} ]]; then + log::error "Expected increment: ${i} but got: ${count}" + return 1 + fi + done } function test::manual_start_encryption_acl_tls() { - dgraph::generate_encryption_key - dgraph::generate_acl_secret - dgraph::generate_tls - - local -r n_zeros=3 - local -r n_alphas=3 - - dgraph::start_zeros "$n_zeros" - dgraph::start_alphas "$n_alphas" \ - --acl "secret-file=$ACL_SECRET_PATH;" \ - --encryption "key-file=$ENCRYPTION_KEY_PATH" \ - --tls "ca-cert=$TLS_PATH/ca.crt; server-cert=$TLS_PATH/node.crt; server-key=$TLS_PATH/node.key;" - - for i in $(seq "$n_zeros"); do - dgraph::healthcheck_zero "$i" - done - - sleep 5 - - for i in $(seq "$n_alphas"); do - dgraph::healthcheck_alpha_tls "$i" - done - - local count - for i in $(seq "$n_alphas"); do - count="$(dgraph::increment "$i" --tls "ca-cert=$TLS_PATH/ca.crt;" --user groot --password password)" - if [ "$i" -ne "$count" ]; then - log::error "Expected increment: $i but got: $count" - return 1 - fi - done + dgraph::generate_encryption_key + dgraph::generate_acl_secret + dgraph::generate_tls + + local -r n_zeros=3 + local -r n_alphas=3 + + dgraph::start_zeros "${n_zeros}" + dgraph::start_alphas "${n_alphas}" \ + --acl "secret-file=${ACL_SECRET_PATH};" \ + --encryption "key-file=${ENCRYPTION_KEY_PATH}" \ + --tls "ca-cert=${TLS_PATH}/ca.crt; server-cert=${TLS_PATH}/node.crt; server-key=${TLS_PATH}/node.key;" + + for i in $(seq "${n_zeros}"); do + dgraph::healthcheck_zero "${i}" + done + + sleep 5 + + for i in $(seq "${n_alphas}"); do + dgraph::healthcheck_alpha_tls "${i}" + done + + local count + for i in $(seq "${n_alphas}"); do + count="$(dgraph::increment "${i}" --tls "ca-cert=${TLS_PATH}/ca.crt;" --user groot --password password)" + if [[ ${i} -ne ${count} ]]; then + log::error "Expected increment: ${i} but got: ${count}" + return 1 + fi + done } function test::live_loader() { - dataset::1million::download + dataset::1million::download - dgraph::start_zeros 1 - dgraph::start_alphas 2 + dgraph::start_zeros 1 + dgraph::start_alphas 2 - sleep 5 + sleep 5 - log::debug 'Running live loader.' - "$DGRAPH_BIN" \ - live \ - --alpha 'localhost:9081' \ - --cwd "$DGRAPH_PATH/live" \ - --files "$DATASET_1MILLION_FILE_PATH" \ - --schema "$DATASET_1MILLION_SCHEMA_PATH" \ - --zero 'localhost:5081' &>"$LOGS_PATH/live" + log::debug 'Running live loader.' + "${DGRAPH_BIN}" \ + live \ + --alpha 'localhost:9081' \ + --cwd "${DGRAPH_PATH}/live" \ + --files "${DATASET_1MILLION_FILE_PATH}" \ + --schema "${DATASET_1MILLION_SCHEMA_PATH}" \ + --zero 'localhost:5081' &>"${LOGS_PATH}/live" - dataset::1million::verify + dataset::1million::verify } function test::bulk_loader() { - dataset::1million::download + dataset::1million::download - dgraph::start_zeros 1 + dgraph::start_zeros 1 - sleep 5 + sleep 5 - log::debug 'Running bulk loader.' - "$DGRAPH_BIN" \ - bulk \ - --cwd "$DGRAPH_PATH/bulk" \ - --files "$DATASET_1MILLION_FILE_PATH" \ - --schema "$DATASET_1MILLION_SCHEMA_PATH" \ - --map_shards 1 \ - --reduce_shards 1 \ - --zero 'localhost:5081' &>"$LOGS_PATH/bulk" + log::debug 'Running bulk loader.' + "${DGRAPH_BIN}" \ + bulk \ + --cwd "${DGRAPH_PATH}/bulk" \ + --files "${DATASET_1MILLION_FILE_PATH}" \ + --schema "${DATASET_1MILLION_SCHEMA_PATH}" \ + --map_shards 1 \ + --reduce_shards 1 \ + --zero 'localhost:5081' &>"${LOGS_PATH}/bulk" - mkdir -p "$DGRAPH_PATH/alpha1" - cp -r "$DGRAPH_PATH/bulk/out/0/p" "$DGRAPH_PATH/alpha1" + mkdir -p "${DGRAPH_PATH}/alpha1" + cp -r "${DGRAPH_PATH}/bulk/out/0/p" "${DGRAPH_PATH}/alpha1" - dgraph::start_alphas 1 - sleep 5 + dgraph::start_alphas 1 + sleep 5 - dataset::1million::verify - log::info "Bulk load succeeded." + dataset::1million::verify + log::info "Bulk load succeeded." - log::debug "Exporting data." + log::debug "Exporting data." - local export_result - export_result=$(curl -Ss 'localhost:8081/admin/export') + local export_result + export_result=$(curl -Ss 'localhost:8081/admin/export') - if [ "$(echo "$export_result" | jq '.code')" != '"Success"' ]; then - log::error 'Export failed.' - echo "$export_result" | jq || echo "$export_result" - return 1 - else - log::info "Export succeeded." - fi + if [[ "$(echo "${export_result}" | jq '.code')" != '"Success"' ]]; then + log::error 'Export failed.' + echo "${export_result}" | jq || echo "${export_result}" + return 1 + else + log::info "Export succeeded." + fi - log::debug "Backing up data." + log::debug "Backing up data." - local -r backup_path="$TEST_PATH/backup" - rm -rf "$backup_path" - mkdir -p "$backup_path" + local -r backup_path="${TEST_PATH}/backup" + rm -rf "${backup_path}" + mkdir -p "${backup_path}" - local backup_result - backup_result=$(curl -SsX POST -H 'Content-Type: application/json' -d " + local backup_result + backup_result=$(curl -SsX POST -H 'Content-Type: application/json' -d " { - \"query\": \"mutation { backup(input: {destination: \\\"$backup_path\\\"}) { response { message code } } }\" + \"query\": \"mutation { backup(input: {destination: \\\"${backup_path}\\\"}) { response { message code } } }\" }" 'http://localhost:8081/admin') - if [ "$(echo "$backup_result" | jq '.data.backup.response.code')" != '"Success"' ]; then - log::error 'Backup failed.' - echo "$backup_result" | jq || echo "$backup_result" - return 1 - else - log::info "Backup succeeded." - fi + if [[ "$(echo "${backup_result}" | jq '.data.backup.response.code')" != '"Success"' ]]; then + log::error 'Backup failed.' + echo "${backup_result}" | jq || echo "${backup_result}" + return 1 + else + log::info "Backup succeeded." + fi - setup + setup - dgraph::start_zeros 1 + dgraph::start_zeros 1 - sleep 5 + sleep 5 - log::info "Restoring data." - "$DGRAPH_BIN" \ - restore \ - --cwd "$DGRAPH_PATH/restore" \ - --location "$backup_path" \ - --postings "$DGRAPH_PATH" \ - --zero 'localhost:5081' &>"$LOGS_PATH/restore" + log::info "Restoring data." + "${DGRAPH_BIN}" \ + restore \ + --cwd "${DGRAPH_PATH}/restore" \ + --location "${backup_path}" \ + --postings "${DGRAPH_PATH}" \ + --zero 'localhost:5081' &>"${LOGS_PATH}/restore" - mkdir -p "$DGRAPH_PATH/alpha1" - mv "$DGRAPH_PATH/p1" "$DGRAPH_PATH/alpha1/p" + mkdir -p "${DGRAPH_PATH}/alpha1" + mv "${DGRAPH_PATH}/p1" "${DGRAPH_PATH}/alpha1/p" - dgraph::start_alphas 1 - sleep 5 + dgraph::start_alphas 1 + sleep 5 - dataset::1million::verify - log::info "Restore succeeded." + dataset::1million::verify + log::info "Restore succeeded." } # Run `dgraph increment` in a loop with 1, 2, and 3 groups respectively and verify the result. function testx::increment() { - local -r increment_factor=100 - - # Set replicas to 1 so that each Alpha forms its own group. - dgraph::start_zeros 1 --replicas 1 - local alphas=() - - dgraph::start_alpha 1 - alphas+=("localhost:9081") - - for i in {1..20000}; do - if [ "$i" -eq 5000 ]; then - dgraph::start_alpha 2 - alphas+=("localhost:9082") - elif [ "$i" -eq 10000 ]; then - dgraph::start_alpha 3 - alphas+=("localhost:9083") - fi - - # Pick an Alpha in a round-robin manner and run the increment tool on it. - count="$( - "$DGRAPH_BIN" increment --alpha "${alphas[$((i % ${#alphas[@]}))]}" --num "$increment_factor" | - grep -oP 'Counter VAL: \K\d+' | - tail -1 - )" - if [ "$count" -ne $((i * increment_factor)) ]; then - log::error "Increment error: expected: $count, got: $i" - return 1 - fi - log::debug "Increment: $count" - done + local -r increment_factor=100 + + # Set replicas to 1 so that each Alpha forms its own group. + dgraph::start_zeros 1 --replicas 1 + local alphas=() + + dgraph::start_alpha 1 + alphas+=("localhost:9081") + + for i in {1..20000}; do + if [[ ${i} -eq 5000 ]]; then + dgraph::start_alpha 2 + alphas+=("localhost:9082") + elif [[ ${i} -eq 10000 ]]; then + dgraph::start_alpha 3 + alphas+=("localhost:9083") + fi + + # Pick an Alpha in a round-robin manner and run the increment tool on it. + count="$( + "${DGRAPH_BIN}" increment --alpha "${alphas[$((i % ${#alphas[@]}))]}" --num "${increment_factor}" | + grep -oP 'Counter VAL: \K\d+' | + tail -1 + )" + if [[ ${count} -ne $((i * increment_factor)) ]]; then + log::error "Increment error: expected: ${count}, got: ${i}" + return 1 + fi + log::debug "Increment: ${count}" + done } function dgraph::run_tests() { - local passed=0 - local failed=0 - - for test in $(compgen -A function "${1:-test::}"); do - log::info "$test starting." - - setup - if "$test"; then - log::info "$test succeeded." - ((passed += 1)) - else - log::error "$test failed." - ((failed += 1)) - - if [ "${EXIT_ON_FAILURE:-0}" -eq 1 ]; then - return 1 - fi - fi - done - - local -r summary="$passed tests passed, $failed failed." - if [ "$failed" -ne 0 ]; then - log::error "$summary" - return 1 - else - log::info "$summary" - return 0 - fi + local passed=0 + local failed=0 + + for test in $(compgen -A function "${1:-test::}"); do + log::info "${test} starting." + + setup + if "${test}"; then + log::info "${test} succeeded." + ((passed += 1)) + else + log::error "${test} failed." + ((failed += 1)) + + if [[ ${EXIT_ON_FAILURE:-0} -eq 1 ]]; then + return 1 + fi + fi + done + + local -r summary="${passed} tests passed, ${failed} failed." + if [[ ${failed} -ne 0 ]]; then + log::error "${summary}" + return 1 + else + log::info "${summary}" + return 0 + fi } function main() { - cleanup - dgraph::run_tests "$@" - local status="$?" - cleanup - return $status + cleanup + dgraph::run_tests "$@" + local status="$?" + cleanup + return "${status}" } main "$@" diff --git a/contrib/scripts/cover.sh b/contrib/scripts/cover.sh index ce374e79bcf..bf7d58b8545 100755 --- a/contrib/scripts/cover.sh +++ b/contrib/scripts/cover.sh @@ -1,35 +1,34 @@ #!/bin/bash -SRC="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/.." +SRC="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)/.." TMP=$(mktemp /tmp/dgraph-coverage-XXXXX.txt) BUILD=$1 # If build variable is empty then we set it. -if [ -z "$1" ]; then - BUILD=$SRC/build +if [[ -z $1 ]]; then + BUILD=${SRC}/build fi OUT=$2 -if [ -z "$OUT" ]; then - OUT=$SRC/coverage.out +if [[ -z ${OUT} ]]; then + OUT=${SRC}/coverage.out fi -rm -f $OUT +rm -f "${OUT}" set -e - # create coverage output -echo 'mode: atomic' > $OUT -for PKG in $(go list ./...|grep -v -E 'vendor|contrib|wiki|customtok'); do - if [[ "$TRAVIS" == true ]]; then - go test -v -timeout 25m -covermode=atomic -coverprofile=$TMP $PKG - else - go test -v -race -timeout 25m -covermode=atomic -coverprofile=$TMP $PKG | go-test-teamcity - fi - tail -n +2 $TMP >> $OUT +echo 'mode: atomic' >"${OUT}" +for PKG in $(go list ./... | grep -v -E 'vendor|contrib|wiki|customtok'); do + if [[ ${TRAVIS} == true ]]; then + go test -v -timeout 25m -covermode=atomic -coverprofile="${TMP}" "${PKG}" + else + go test -v -race -timeout 25m -covermode=atomic -coverprofile="${TMP}" "${PKG}" | go-test-teamcity + fi + tail -n +2 "${TMP}" >>"${OUT}" done # open in browser if not in a build environment -if [ ! -z "$DISPLAY" ]; then - go tool cover -html=$OUT +if [[ -n ${DISPLAY} ]]; then + go tool cover -html="${OUT}" fi diff --git a/contrib/scripts/functions.sh b/contrib/scripts/functions.sh index 7ee0c432440..36cb68887c8 100755 --- a/contrib/scripts/functions.sh +++ b/contrib/scripts/functions.sh @@ -7,53 +7,53 @@ set -e # May be called with an argument which is a docker compose file # to use *instead of* the default docker-compose.yml. function restartCluster { - if [[ -z $1 ]]; then - compose_file="docker-compose.yml" - else - compose_file="$(readlink -f $1)" - fi - - basedir=$(dirname "${BASH_SOURCE[0]}")/../.. - pushd $basedir/dgraph >/dev/null - echo "Rebuilding dgraph ..." - - docker_compose_gopath="${GOPATH:-$(go env GOPATH)}" - make install - - if [[ "$OSTYPE" == "darwin"* ]]; then - if !(AVAILABLE_RAM=$(cat ~/Library/Group\ Containers/group.com.docker/settings.json | grep memoryMiB | grep -oe "[0-9]\+") && test $AVAILABLE_RAM -ge 6144); then - echo -e "\e[33mWarning: You may not have allocated enough memory for Docker on Mac. Please increase the allocated RAM to at least 6GB with a 4GB swap. See https://docs.docker.com/docker-for-mac/#resources \e[0m" - fi - docker_compose_gopath=`pwd`/../osx-docker-gopath - - # FIXME: read the go version from a constant - docker run --rm \ - -v dgraph_gopath:/go \ - -v dgraph_gocache:/root/.cache/go-build \ - -v `pwd`/..:/app \ - -w /app/dgraph \ - golang:1.19.5 \ - go build -o /app/osx-docker-gopath/bin/dgraph - fi - - docker ps -a --filter label="cluster=test" --format "{{.Names}}" | xargs -r docker rm -f - GOPATH=$docker_compose_gopath docker-compose -p dgraph -f $compose_file up --force-recreate --build --remove-orphans -d || exit 1 - popd >/dev/null - - $basedir/contrib/wait-for-it.sh -t 60 localhost:6180 || exit 1 - $basedir/contrib/wait-for-it.sh -t 60 localhost:9180 || exit 1 - sleep 10 || exit 1 + if [[ -z $1 ]]; then + compose_file="docker-compose.yml" + else + compose_file="$(readlink -f "$1")" + fi + + basedir=$(dirname "${BASH_SOURCE[0]}")/../.. + pushd "${basedir}"/dgraph >/dev/null + echo "Rebuilding dgraph ..." + + docker_compose_gopath="${GOPATH:-$(go env GOPATH)}" + make install + + if [[ ${OSTYPE} == "darwin"* ]]; then + if !(AVAILABLE_RAM=$(cat ~/Library/Group\ Containers/group.com.docker/settings.json | grep memoryMiB | grep -oe "[0-9]\+") && test "${AVAILABLE_RAM}" -ge 6144); then + echo -e "\e[33mWarning: You may not have allocated enough memory for Docker on Mac. Please increase the allocated RAM to at least 6GB with a 4GB swap. See https://docs.docker.com/docker-for-mac/#resources \e[0m" + fi + docker_compose_gopath=$(pwd)/../osx-docker-gopath + + # FIXME: read the go version from a constant + docker run --rm \ + -v dgraph_gopath:/go \ + -v dgraph_gocache:/root/.cache/go-build \ + -v $(pwd)/..:/app \ + -w /app/dgraph \ + golang:1.19.5 \ + go build -o /app/osx-docker-gopath/bin/dgraph + fi + + docker ps -a --filter label="cluster=test" --format "{{.Names}}" | xargs -r docker rm -f + GOPATH=${docker_compose_gopath} docker-compose -p dgraph -f "${compose_file}" up --force-recreate --build --remove-orphans -d || exit 1 + popd >/dev/null + + "${basedir}"/contrib/wait-for-it.sh -t 60 localhost:6180 || exit 1 + "${basedir}"/contrib/wait-for-it.sh -t 60 localhost:9180 || exit 1 + sleep 10 || exit 1 } function stopCluster { - docker ps --filter label="cluster=test" --format "{{.Names}}" \ - | xargs -r docker stop | sed 's/^/Stopped /' - docker ps -a --filter label="cluster=test" --format "{{.Names}}" \ - | xargs -r docker rm | sed 's/^/Removed /' + docker ps --filter label="cluster=test" --format "{{.Names}}" | + xargs -r docker stop | sed 's/^/Stopped /' + docker ps -a --filter label="cluster=test" --format "{{.Names}}" | + xargs -r docker rm | sed 's/^/Removed /' } function loginWithGroot() { - curl -s -XPOST localhost:8180/login -d '{"userid": "groot","password": "password"}' \ - | python3 -c \ - "import json; resp = input(); data = json.loads(resp); print(data['data']['accessJWT'])" + curl -s -XPOST localhost:8180/login -d '{"userid": "groot","password": "password"}' | + python3 -c \ + "import json; resp = input(); data = json.loads(resp); print(data['data']['accessJWT'])" } diff --git a/contrib/scripts/goldendata-queries.sh b/contrib/scripts/goldendata-queries.sh index d77766a8e0e..9fecca533ed 100755 --- a/contrib/scripts/goldendata-queries.sh +++ b/contrib/scripts/goldendata-queries.sh @@ -1,46 +1,44 @@ #!/bin/bash basedir=$(dirname "${BASH_SOURCE[0]}")/../.. -source $basedir/contrib/scripts/functions.sh -pushd $(dirname "${BASH_SOURCE[0]}")/queries &> /dev/null +source "${basedir}"/contrib/scripts/functions.sh +pushd $(dirname "${BASH_SOURCE[0]}")/queries &>/dev/null function run_index_test { - local max_attempts=${ATTEMPTS-5} - local timeout=${TIMEOUT-1} - local attempt=0 - local exitCode=0 - - X=$1 - GREPFOR=$2 - ANS=$3 - echo "Running test: ${X}" - while (( $attempt < $max_attempts )) - do - set +e - accessToken=`loginWithGroot` - N=`curl -s -H 'Content-Type: application/dql' localhost:8180/query -XPOST -d @${X}.in -H "X-Dgraph-AccessToken: $accessToken"` - exitCode=$? - - set -e - - if [[ $exitCode == 0 ]] - then - break - fi - - echo "Failure! Retrying in $timeout.." 1>&2 - sleep $timeout - attempt=$(( attempt + 1 )) - timeout=$(( timeout * 2 )) - done - - NUM=$(echo $N | python3 -m json.tool | grep $GREPFOR | wc -l) - if [[ ! "$NUM" -eq "$ANS" ]]; then - echo "Index test failed: ${X} Expected: $ANS Got: $NUM" - exit 1 - else - echo -e "Index test passed: ${X}\n" - fi + local max_attempts=${ATTEMPTS-5} + local timeout=${TIMEOUT-1} + local attempt=0 + local exitCode=0 + + X=$1 + GREPFOR=$2 + ANS=$3 + echo "Running test: ${X}" + while ((attempt < max_attempts)); do + set +e + accessToken=$(loginWithGroot) + N=$(curl -s -H 'Content-Type: application/dql' localhost:8180/query -XPOST -d @"${X}".in -H "X-Dgraph-AccessToken: ${accessToken}") + exitCode=$? + + set -e + + if [[ ${exitCode} == 0 ]]; then + break + fi + + echo "Failure! Retrying in ${timeout}.." 1>&2 + sleep "${timeout}" + attempt=$((attempt + 1)) + timeout=$((timeout * 2)) + done + + NUM=$(echo "${N}" | python3 -m json.tool | grep "${GREPFOR}" | wc -l) + if [[ ! ${NUM} -eq ${ANS} ]]; then + echo "Index test failed: ${X} Expected: ${ANS} Got: ${NUM}" + exit 1 + else + echo -e "Index test passed: ${X}\n" + fi } echo -e "Running some queries and checking count of results returned." @@ -54,5 +52,4 @@ run_index_test releasedate_sort_first_offset release_date 2316 run_index_test releasedate_geq release_date 60992 run_index_test gen_anyof_good_bad name 1104 -popd &> /dev/null - +popd &>/dev/null diff --git a/contrib/scripts/install-dependencies.sh b/contrib/scripts/install-dependencies.sh index e02a0603844..4bcd9be184c 100755 --- a/contrib/scripts/install-dependencies.sh +++ b/contrib/scripts/install-dependencies.sh @@ -11,4 +11,3 @@ govendor fetch github.com/prometheus/client_golang/prometheus/...@v0.9.2 govendor fetch google.golang.org/grpc/...@v1.13.0 # Vendor dgo (latest version before API changes). govendor fetch github.com/dgraph-io/dgo...@v1.0.0 - diff --git a/contrib/scripts/load-test.sh b/contrib/scripts/load-test.sh index 86a1b1f6d26..68fcf124eee 100755 --- a/contrib/scripts/load-test.sh +++ b/contrib/scripts/load-test.sh @@ -5,12 +5,12 @@ REQUIRED_MEM=$((20 * ONE_GB)) set -e -total_mem_kb=`cat /proc/meminfo | awk '/MemTotal:/ {print $2}'` -if [[ $total_mem_kb -lt $((REQUIRED_MEM / 1024)) ]]; then - printf >&2 "Load test requires system with at least %dGB of memory\n" \ - $((REQUIRED_MEM / ONE_GB)) - exit 1 +total_mem_kb=$(cat /proc/meminfo | awk '/MemTotal:/ {print $2}') +if [[ ${total_mem_kb} -lt $((REQUIRED_MEM / 1024)) ]]; then + printf >&2 "Load test requires system with at least %dGB of memory\n" \ + $((REQUIRED_MEM / ONE_GB)) + exit 1 fi -bash contrib/scripts/loader.sh $1 -bash contrib/scripts/transactions.sh $1 +bash contrib/scripts/loader.sh "$1" +bash contrib/scripts/transactions.sh "$1" diff --git a/contrib/scripts/loader.sh b/contrib/scripts/loader.sh index 52e7d37ae86..0987b580028 100755 --- a/contrib/scripts/loader.sh +++ b/contrib/scripts/loader.sh @@ -1,42 +1,42 @@ #!/bin/bash basedir=$(dirname "${BASH_SOURCE[0]}")/../.. -goldendata=$(pwd)/$basedir/systest/data/goldendata.rdf.gz +goldendata=$(pwd)/${basedir}/systest/data/goldendata.rdf.gz set -e -source $basedir/contrib/scripts/functions.sh +source "${basedir}"/contrib/scripts/functions.sh restartCluster # Create a temporary directory to use for running live loader. -tmpdir=`mktemp --tmpdir -d loader.tmp-XXXXXX` -trap "rm -rf $tmpdir" EXIT -pushd $tmpdir -echo "Inside `pwd`" +tmpdir=$(mktemp --tmpdir -d loader.tmp-XXXXXX) +trap "rm -rf ${tmpdir}" EXIT +pushd "${tmpdir}" +echo "Inside $(pwd)" # log file size. -ls -laH $goldendata +ls -laH "${goldendata}" echo "Setting schema." while true; do - accessJWT=`loginWithGroot` - curl -s -XPOST --output alter.txt -d ' + accessJWT=$(loginWithGroot) + curl -s -XPOST --output alter.txt -d ' name: string @index(term) @lang . initial_release_date: datetime @index(year) . - ' "http://localhost:8180/alter" -H "X-Dgraph-AccessToken: $accessJWT" - cat alter.txt - echo - cat alter.txt | grep -iq "success" && break - echo "Retrying..." - sleep 3 + ' "http://localhost:8180/alter" -H "X-Dgraph-AccessToken: ${accessJWT}" + cat alter.txt + echo + cat alter.txt | grep -iq "success" && break + echo "Retrying..." + sleep 3 done rm -f alter.txt echo -e "\nRunning dgraph live." -dgraph live -f $goldendata -a "127.0.0.1:9180" -z "127.0.0.1:5180" -c 10 -u groot -p password +dgraph live -f "${goldendata}" -a "127.0.0.1:9180" -z "127.0.0.1:5180" -c 10 -u groot -p password popd -rm -rf $tmpdir +rm -rf "${tmpdir}" echo "Running queries" -$basedir/contrib/scripts/goldendata-queries.sh +"${basedir}"/contrib/scripts/goldendata-queries.sh stopCluster diff --git a/contrib/scripts/transactions.sh b/contrib/scripts/transactions.sh index a766e6a2edb..19c40ad0f11 100755 --- a/contrib/scripts/transactions.sh +++ b/contrib/scripts/transactions.sh @@ -1,29 +1,29 @@ #!/bin/bash basedir=$(dirname "${BASH_SOURCE[0]}")/../.. -contrib=$basedir/contrib +contrib=${basedir}/contrib set -e # go test -v $contrib/integration/testtxn/main_test.go -source $contrib/scripts/functions.sh +source "${contrib}"/scripts/functions.sh restartCluster echo "* Running transaction tests." echo "* Running bank tests" -go run $contrib/integration/bank/main.go --alpha=localhost:9180,localhost:9182,localhost:9183 --verbose=false +go run "${contrib}"/integration/bank/main.go --alpha=localhost:9180,localhost:9182,localhost:9183 --verbose=false echo "* Running account upsert tests" -go run $contrib/integration/acctupsert/main.go --alpha=localhost:9180 +go run "${contrib}"/integration/acctupsert/main.go --alpha=localhost:9180 echo "* Running sentence swap tests" -pushd $contrib/integration/swap +pushd "${contrib}"/integration/swap go build . && ./swap --alpha=localhost:9180 popd echo "* Running mutate from #1750." -pushd $contrib/integration/mutates +pushd "${contrib}"/integration/mutates go build . && ./mutates --add --alpha=localhost:9180 ./mutates --alpha=localhost:9180 popd diff --git a/contrib/standalone/hooks/build b/contrib/standalone/hooks/build index c9af4522026..e5d3368f085 100755 --- a/contrib/standalone/hooks/build +++ b/contrib/standalone/hooks/build @@ -1,3 +1,3 @@ #!/bin/bash # Used for Makefile or Docker Hub builds -docker build -t dgraph/standalone:${DGRAPH_VERSION} --build-arg DGRAPH_VERSION=${DGRAPH_VERSION} . +docker build -t dgraph/standalone:"${DGRAPH_VERSION}" --build-arg DGRAPH_VERSION="${DGRAPH_VERSION}" . diff --git a/contrib/standalone/run.sh b/contrib/standalone/run.sh index 454c3e7b154..e486cca0009 100644 --- a/contrib/standalone/run.sh +++ b/contrib/standalone/run.sh @@ -13,4 +13,5 @@ export DGRAPH_ALPHA_WHITELIST=0.0.0.0/0 export DGRAPH_ALPHA_SECURITY='whitelist=0.0.0.0/0' # TODO properly handle SIGTERM for all three processes. -dgraph zero & dgraph alpha +dgraph zero & +dgraph alpha diff --git a/contrib/systemd/centos/README.md b/contrib/systemd/centos/README.md index 16173052166..0d2263db543 100644 --- a/contrib/systemd/centos/README.md +++ b/contrib/systemd/centos/README.md @@ -20,8 +20,8 @@ mkdir -p /var/lib/dgraph/{p,w,zw} chown -R dgraph:dgraph /var/{lib,log}/dgraph ``` -Next, copy the `systemd` unit files, i.e. `dgraph-alpha.service`, `dgraph-zero.service`, -and `dgraph-ui.service`, in this directory to `/etc/systemd/system/`. +Next, copy the `systemd` unit files, i.e. `dgraph-alpha.service`, `dgraph-zero.service`, and +`dgraph-ui.service`, in this directory to `/etc/systemd/system/`. > **NOTE** These unit files expect that Dgraph is installed as `/usr/local/bin/dgraph`. @@ -39,8 +39,7 @@ systemctl enable dgraph-alpha systemctl start dgraph-alpha ``` -The `dgraph-ui` service is optional and, unlike `dgraph-zero`, will not be started -automatically. +The `dgraph-ui` service is optional and, unlike `dgraph-zero`, will not be started automatically. ```Bash systemctl enable dgraph-ui diff --git a/contrib/systemd/centos/add_dgraph_account.sh b/contrib/systemd/centos/add_dgraph_account.sh index 0e6a867e42e..80d02f21999 100755 --- a/contrib/systemd/centos/add_dgraph_account.sh +++ b/contrib/systemd/centos/add_dgraph_account.sh @@ -1,16 +1,16 @@ #!/usr/bin/env bash - sudo_cmd="" - if hash sudo 2>/dev/null; then - sudo_cmd="sudo" - echo "Requires sudo permission to install Dgraph in Systemd." - if ! $sudo_cmd -v; then - print_error "Need sudo privileges to complete installation." - exit 1; - fi +sudo_cmd="" +if hash sudo 2>/dev/null; then + sudo_cmd="sudo" + echo "Requires sudo permission to install Dgraph in Systemd." + if ! ${sudo_cmd} -v; then + print_error "Need sudo privileges to complete installation." + exit 1 fi +fi -$sudo_cmd groupadd --system dgraph -$sudo_cmd useradd --system -d /var/lib/dgraph -s /bin/false -g dgraph dgraph -$sudo_cmd mkdir -p /var/log/dgraph -$sudo_cmd mkdir -p /var/lib/dgraph/{p,w,zw} -$sudo_cmd chown -R dgraph:dgraph /var/{lib,log}/dgraph +${sudo_cmd} groupadd --system dgraph +${sudo_cmd} useradd --system -d /var/lib/dgraph -s /bin/false -g dgraph dgraph +${sudo_cmd} mkdir -p /var/log/dgraph +${sudo_cmd} mkdir -p /var/lib/dgraph/{p,w,zw} +${sudo_cmd} chown -R dgraph:dgraph /var/{lib,log}/dgraph diff --git a/contrib/systemd/ha_cluster/README.md b/contrib/systemd/ha_cluster/README.md index 50193cdc1b5..e40a5dd8a91 100644 --- a/contrib/systemd/ha_cluster/README.md +++ b/contrib/systemd/ha_cluster/README.md @@ -1,15 +1,17 @@ # Systemd Configuration for a HA Dgraph Cluster -This following document describes how to configure several nodes that are managed through [systemd](https://systemd.io/). +This following document describes how to configure several nodes that are managed through +[systemd](https://systemd.io/). ## Overview You will configure the following types of Dgraph nodes: -* zero nodes - * zero leader node - an initial leader node configured at start of cluster, e.g. `zero-0` - * zero peer nodes - peer nodes, e.g. `zero-1`, `zero-2`, that point to the zero leader -* alpha nodes - configured similarly, e.g. `alpha-0`, `alpha-1`, `alpha-2`, that point to list of all zero nodes +- zero nodes + - zero leader node - an initial leader node configured at start of cluster, e.g. `zero-0` + - zero peer nodes - peer nodes, e.g. `zero-1`, `zero-2`, that point to the zero leader +- alpha nodes - configured similarly, e.g. `alpha-0`, `alpha-1`, `alpha-2`, that point to list of + all zero nodes > **NOTE** These commands are run as root using bash shell. @@ -33,10 +35,12 @@ chown --recursive dgraph:dgraph /var/{lib,log}/dgraph ### Configure First Zero Node -Edit the file [dgraph-zero-0.service](dgraph-zero-0.service) as necessary. There are three parameters and include the hostname: +Edit the file [dgraph-zero-0.service](dgraph-zero-0.service) as necessary. There are three +parameters and include the hostname: -* `--replicas` - total number of zeros -* `--idx` - initial zero node will be `1`, and each zero node added afterward will have the `idx` increased by `1` +- `--replicas` - total number of zeros +- `--idx` - initial zero node will be `1`, and each zero node added afterward will have the `idx` + increased by `1` Copy the file to `/etc/systemd/system/dgraph-zero.service` and run the following: @@ -47,7 +51,9 @@ systemctl start dgraph-zero ### Configure Second Zero Node -This process is similar to previous step. Edit the file [dgraph-zero-1.service](dgraph-zero-1.service) as required. Replace the string `{{ zero-0 }}` to match the hostname of the zero leader, such as `zero-0`. The `idx` will be set to `2` +This process is similar to previous step. Edit the file +[dgraph-zero-1.service](dgraph-zero-1.service) as required. Replace the string `{{ zero-0 }}` to +match the hostname of the zero leader, such as `zero-0`. The `idx` will be set to `2` Copy the file to `/etc/systemd/system/dgraph-zero.service` and run the following: @@ -58,7 +64,8 @@ systemctl start dgraph-zero ### Configure Third Zero Node -For the third zero node, [dgraph-zero-2.service](dgraph-zero-2.service), this is configured in the same manner as the second zero node with the `idx` set to `3` +For the third zero node, [dgraph-zero-2.service](dgraph-zero-2.service), this is configured in the +same manner as the second zero node with the `idx` set to `3` Copy the file to `/etc/systemd/system/dgraph-zero.service` and run the following: @@ -69,7 +76,10 @@ systemctl start dgraph-zero ### Configure Firewall for Zero Ports -For zero you will want to open up port `5080` (GRPC). The port `6080` (HTTP) is optional admin port that is not required by clients. For further information, see https://dgraph.io/docs/deploy/ports-usage/. This process will vary depending on firewall you are using. Some examples below: +For zero you will want to open up port `5080` (GRPC). The port `6080` (HTTP) is optional admin port +that is not required by clients. For further information, see +https://dgraph.io/docs/deploy/ports-usage/. This process will vary depending on firewall you are +using. Some examples below: On **Ubuntu 18.04**: @@ -100,9 +110,12 @@ mkdir --parents /var/{log/dgraph,lib/dgraph/{w,p}} chown --recursive dgraph:dgraph /var/{lib,log}/dgraph ``` -Edit the file [dgraph-alpha.service](dgraph-alpha.service) as required. For the `--zero` parameter, you want to create a list that matches all the zeros in your cluster, so that when `{{ zero-0 }}`, `{{ zero-1 }}`, and `{{ zero-2 }}` are replaced, you will have a string something like this (adjusted to your organization's domain): +Edit the file [dgraph-alpha.service](dgraph-alpha.service) as required. For the `--zero` parameter, +you want to create a list that matches all the zeros in your cluster, so that when `{{ zero-0 }}`, +`{{ zero-1 }}`, and `{{ zero-2 }}` are replaced, you will have a string something like this +(adjusted to your organization's domain): -``` +```bash --zero zero-0:5080,zero-1:5080,zero-2:5080 ``` @@ -115,7 +128,9 @@ systemctl start dgraph-alpha ### Configure Firewall for Alpha Ports -For alpha you will want to open up ports `7080` (GRPC), `8080` (HTTP/S), and `9080` (GRPC). For further information, see: https://dgraph.io/docs/deploy/ports-usage/. This process will vary depending on firewall you are using. Some examples below: +For alpha you will want to open up ports `7080` (GRPC), `8080` (HTTP/S), and `9080` (GRPC). For +further information, see: https://dgraph.io/docs/deploy/ports-usage/. This process will vary +depending on firewall you are using. Some examples below: On **Ubuntu 18.04**: @@ -129,7 +144,6 @@ ufw allow from any to any port 9080 proto tcp On **CentOS 8**: - ```bash # NOTE: public zone is the default and includes NIC used to access service # enable internal port diff --git a/contrib/systemd/ha_cluster/tests/README.md b/contrib/systemd/ha_cluster/tests/README.md index 618844e5b5e..885ed51ba70 100644 --- a/contrib/systemd/ha_cluster/tests/README.md +++ b/contrib/systemd/ha_cluster/tests/README.md @@ -4,7 +4,8 @@ These are tests to both demonstrate and test functionality of systemd units to m ## Requirements -* HashiCorp [Vagrant](https://www.vagrantup.com/) - automation to manage virtual machine systems and provision them. +- HashiCorp [Vagrant](https://www.vagrantup.com/) - automation to manage virtual machine systems and + provision them. ## Instructions @@ -27,14 +28,15 @@ vagrant up #### Using libvirt Provider -If you running on Linux and would like to use KVM for a speedier Vagrant experience, you can install the `vagrant-libvirt` plugin (see [Installation](https://github.com/vagrant-libvirt/vagrant-libvirt#installation)) and run this: +If you running on Linux and would like to use KVM for a speedier Vagrant experience, you can install +the `vagrant-libvirt` plugin (see +[Installation](https://github.com/vagrant-libvirt/vagrant-libvirt#installation)) and run this: ```bash export VAGRANT_DEFAULT_PROVIDER=libvirt vagrant up ``` - ### Logging Into the System You can log into the guest virtual machines with SSH. @@ -73,6 +75,7 @@ vagrant ssh zero-0 --command "sudo journalctl -u dgraph-zero" # get logs from alpha0 vagrant ssh alpha-0 --command "sudo journalctl -u dgraph-alpha" ``` + ### Cleanup and Destroy VMs ```bash @@ -83,7 +86,9 @@ vagrant destroy --force ### Configuration -The configuration is a `hosts` file format, space-delimited. This defines both the hostnames and virtual IP address used to create the virtual guests. Vagrant in combination with the underlying virtual machine provider will create a virtual network accessible by the host. +The configuration is a `hosts` file format, space-delimited. This defines both the hostnames and +virtual IP address used to create the virtual guests. Vagrant in combination with the underlying +virtual machine provider will create a virtual network accessible by the host. ```host @@ -95,11 +100,14 @@ You can use `default` for one system to be designated as the default for `vagran #### Dgraph Version -By default, the latest Dgraph version will be used to for the version. If you want to use another version, you can set the environment variable `DGRAPH_VERSION` for the desired version. +By default, the latest Dgraph version will be used to for the version. If you want to use another +version, you can set the environment variable `DGRAPH_VERSION` for the desired version. ### Windows Environment -On Windows, for either Hyper/V or Virtualbox providers, for convenience you can specify username `SMB_USER` and password `SMB_PASSWD` before running `vagrant up`, so that you won't get prompted 6 times for username and password. +On Windows, for either Hyper/V or Virtualbox providers, for convenience you can specify username +`SMB_USER` and password `SMB_PASSWD` before running `vagrant up`, so that you won't get prompted 6 +times for username and password. > **NOTE**: Setting a password in an environment variable is not considered security best practices. @@ -116,22 +124,24 @@ vagrant up ## Environments Tested -* Guest OS - * [Cent OS 8](https://app.vagrantup.com/generic/boxes/centos8) from [Roboxes](https://roboxes.org/) - * [Ubuntu 18.04](https://app.vagrantup.com/generic/boxes/ubuntu1804) from [Roboxes](https://roboxes.org/) -* Providers - * [libvirt](https://github.com/vagrant-libvirt/vagrant-libvirt) (KVM) on Ubuntu 19.10 - * [VirtualBox](https://www.vagrantup.com/docs/providers/virtualbox) on Win10 Home, Mac OS X 10.14 - * [Hyper/V](https://www.vagrantup.com/docs/providers/hyperv) on Win10 Pro +- Guest OS + - [Cent OS 8](https://app.vagrantup.com/generic/boxes/centos8) from + [Roboxes](https://roboxes.org/) + - [Ubuntu 18.04](https://app.vagrantup.com/generic/boxes/ubuntu1804) from + [Roboxes](https://roboxes.org/) +- Providers + - [libvirt](https://github.com/vagrant-libvirt/vagrant-libvirt) (KVM) on Ubuntu 19.10 + - [VirtualBox](https://www.vagrantup.com/docs/providers/virtualbox) on Win10 Home, Mac OS X 10.14 + - [Hyper/V](https://www.vagrantup.com/docs/providers/hyperv) on Win10 Pro ## Resources -* Vagrant - * Util API: https://www.rubydoc.info/github/hashicorp/vagrant/Vagrant/Util/Platform - * Multi-Machine: https://www.vagrantup.com/docs/multi-machine - * Synced Folders: https://www.vagrantup.com/docs/synced-folders - * lib-virt: https://github.com/vagrant-libvirt/vagrant-libvirt#synced-folders - * Provisioning: https://www.vagrantup.com/docs/provisioning -* Dgraph - * Documentation: https://dgraph.io/docs/ - * Community: https://discuss.dgraph.io/ +- Vagrant + - Util API: https://www.rubydoc.info/github/hashicorp/vagrant/Vagrant/Util/Platform + - Multi-Machine: https://www.vagrantup.com/docs/multi-machine + - Synced Folders: https://www.vagrantup.com/docs/synced-folders + - lib-virt: https://github.com/vagrant-libvirt/vagrant-libvirt#synced-folders + - Provisioning: https://www.vagrantup.com/docs/provisioning +- Dgraph + - Documentation: https://dgraph.io/docs/ + - Community: https://discuss.dgraph.io/ diff --git a/contrib/systemd/ha_cluster/tests/centos8/provision.sh b/contrib/systemd/ha_cluster/tests/centos8/provision.sh index 76ad8677d5e..9510ddf7ae1 100755 --- a/contrib/systemd/ha_cluster/tests/centos8/provision.sh +++ b/contrib/systemd/ha_cluster/tests/centos8/provision.sh @@ -4,52 +4,55 @@ # main ################################ main() { - if [[ $1 =~ h(elp)?|\? ]]; then usage; fi - if (( $# != 1 )); then usage; fi - REPLICAS=$1 + if [[ $1 =~ h(elp)?|\? ]]; then usage; fi + if (($# != 1)); then usage; fi + REPLICAS=$1 - echo "RUNNING script" + echo "RUNNING script" - setup_hosts - install_dgraph - setup_user_group - setup_systemd - setup_firewall + setup_hosts + install_dgraph + setup_user_group + setup_systemd + setup_firewall } ##### # usage ################################ usage() { - printf " Usage: \n\t$0 [REPLICAS]\n\n" >&2 - exit 1 + printf " Usage: \n\t$0 [REPLICAS]\n\n" >&2 + exit 1 } ##### # install_dgraph - installer script from https://get.dgraph.io ################################ install_dgraph() { - [[ -z "$DGRAPH_VERSION" ]] && { echo 'DGRAPH_VERSION not specified. Aborting' 2>&1 ; return 1; } - echo "INFO: Installing Dgraph with 'curl -sSf https://get.dgraph.io | ACCEPT_LICENSE="y" VERSION="$DGRAPH_VERSION" bash'" - curl -sSf https://get.dgraph.io | ACCEPT_LICENSE="y" VERSION="$DGRAPH_VERSION" bash + [[ -z ${DGRAPH_VERSION} ]] && { + echo 'DGRAPH_VERSION not specified. Aborting' 2>&1 + return 1 + } + echo "INFO: Installing Dgraph with 'curl -sSf https://get.dgraph.io | ACCEPT_LICENSE="y" VERSION=""${DGRAPH_VERSION}"" bash'" + curl -sSf https://get.dgraph.io | ACCEPT_LICENSE="y" VERSION="${DGRAPH_VERSION}" bash } ##### # setup_hosts - configure /etc/hosts in absence of DNS ################################ setup_hosts() { - CONFIG_FILE=/vagrant/hosts - if [[ ! -f /vagrant/hosts ]]; then - echo "INFO: '$CONFIG_FILE' does not exist. Skipping configuring /etc/hosts" - return 1 - fi - - while read -a LINE; do - ## append to hosts entry if it doesn't exist - if ! grep -q "${LINE[1]}" /etc/hosts; then - printf "%s %s \n" ${LINE[*]} >> /etc/hosts - fi - done < $CONFIG_FILE + CONFIG_FILE=/vagrant/hosts + if [[ ! -f /vagrant/hosts ]]; then + echo "INFO: '${CONFIG_FILE}' does not exist. Skipping configuring /etc/hosts" + return 1 + fi + + while read -a LINE; do + ## append to hosts entry if it doesn't exist + if ! grep -q "${LINE[1]}" /etc/hosts; then + printf "%s %s \n" "${LINE[*]}" >>/etc/hosts + fi + done <"${CONFIG_FILE}" } ##### @@ -64,120 +67,120 @@ setup_user_group() { # setup_firewall on Ubuntu 18.04 and CentOS 8 ################################ setup_firewall() { - case $(hostname) in - *zero*) - PORTS=(5080 6080) - ;; - *alpha*) - PORTS=(7080 8080 9080) - ;; - esac - - if grep -q centos /etc/os-release; then - if /usr/bin/firewall-cmd --state 2>&1 | grep -q "^running$"; then - for PORT in ${PORTS[*]}; do - firewall-cmd --zone=public --permanent --add-port=$PORT/tcp - firewall-cmd --reload - done - fi - elif grep -iq ubuntu /etc/os-release; then - if /usr/sbin/ufw status | grep -wq active; then - for PORT in ${PORTS[*]}; do - ufw allow from any to any port $PORT proto tcp - done - fi - fi + case $(hostname) in + *zero*) + PORTS=(5080 6080) + ;; + *alpha*) + PORTS=(7080 8080 9080) + ;; + esac + + if grep -q centos /etc/os-release; then + if /usr/bin/firewall-cmd --state 2>&1 | grep -q "^running$"; then + for PORT in ${PORTS[*]}; do + firewall-cmd --zone=public --permanent --add-port="${PORT}"/tcp + firewall-cmd --reload + done + fi + elif grep -iq ubuntu /etc/os-release; then + if /usr/sbin/ufw status | grep -wq active; then + for PORT in ${PORTS[*]}; do + ufw allow from any to any port "${PORT}" proto tcp + done + fi + fi } ##### # setup_systemd_zero - setup dir and systemd unit for zero leader or peer ################################ setup_systemd_zero() { - TYPE=${1:-"peer"} - LDR="zero-0:5080" - WAL=/var/lib/dgraph/zw - IDX=$(( $(grep -o '[0-9]' <<< $HOSTNAME) + 1 )) - if [[ $TYPE == "leader" ]]; then - EXEC="/bin/bash -c '/usr/local/bin/dgraph zero --my=\$(hostname):5080 --wal $WAL - --raft="idx=$IDX" --replicas $REPLICAS'" - else - EXEC="/bin/bash -c '/usr/local/bin/dgraph zero --my=\$(hostname):5080 --peer $LDR --wal $WAL - --raft="idx=$IDX" --replicas $REPLICAS'" - fi - - mkdir -p /var/{log/dgraph,lib/dgraph/zw} - chown -R dgraph:dgraph /var/{lib,log}/dgraph - - install_systemd_unit "zero" "$EXEC" + TYPE=${1:-"peer"} + LDR="zero-0:5080" + WAL=/var/lib/dgraph/zw + IDX=$(($(grep -o '[0-9]' <<<"${HOSTNAME}") + 1)) + if [[ ${TYPE} == "leader" ]]; then + EXEC="/bin/bash -c '/usr/local/bin/dgraph zero --my=\$(hostname):5080 --wal ${WAL} + --raft="idx=${IDX}" --replicas ${REPLICAS}'" + else + EXEC="/bin/bash -c '/usr/local/bin/dgraph zero --my=\$(hostname):5080 --peer ${LDR} --wal ${WAL} + --raft="idx=${IDX}" --replicas ${REPLICAS}'" + fi + + mkdir -p /var/{log/dgraph,lib/dgraph/zw} + chown -R dgraph:dgraph /var/{lib,log}/dgraph + + install_systemd_unit "zero" "${EXEC}" } ##### # setup_systemd_alpha - setup dir and systemd unit for alpha ################################ setup_systemd_alpha() { - WAL=/var/lib/dgraph/w - POSTINGS=/var/lib/dgraph/p - # build array based on number of replicas - for (( I=0; I <= $REPLICAS-1; I++)); do ZEROS+=("zero-$I:5080");done - IFS=, eval 'ZERO_LIST="${ZEROS[*]}"' # join by ',' + WAL=/var/lib/dgraph/w + POSTINGS=/var/lib/dgraph/p + # build array based on number of replicas + for ((I = 0; I <= REPLICAS - 1; I++)); do ZEROS+=("zero-${I}:5080"); done + IFS=, eval 'ZERO_LIST="${ZEROS[*]}"' # join by ',' - EXEC="/bin/bash -c '/usr/local/bin/dgraph alpha --my=\$(hostname):7080 --zero $ZERO_LIST --postings $POSTINGS --wal $WAL'" + EXEC="/bin/bash -c '/usr/local/bin/dgraph alpha --my=\$(hostname):7080 --zero ${ZERO_LIST} --postings ${POSTINGS} --wal ${WAL}'" - mkdir -p /var/{log/dgraph,lib/dgraph/{w,p}} - chown -R dgraph:dgraph /var/{lib,log}/dgraph + mkdir -p /var/{log/dgraph,lib/dgraph/{w,p}} + chown -R dgraph:dgraph /var/{lib,log}/dgraph - install_systemd_unit "alpha" "$EXEC" + install_systemd_unit "alpha" "${EXEC}" } ##### # install_systemd_unit - config systemd unit give exec str and service type ################################ install_systemd_unit() { - TYPE=$1 - EXEC=$2 - - if [[ ! -f /etc/systemd/system/dgraph-$TYPE.service ]]; then - cat <<-EOF > /etc/systemd/system/dgraph-$TYPE.service -[Unit] -Description=dgraph $TYPE server -Wants=network.target -After=network.target - -[Service] -Type=simple -WorkingDirectory=/var/lib/dgraph -Restart=on-failure -ExecStart=$EXEC -StandardOutput=journal -StandardError=journal -User=dgraph -Group=dgraph - -[Install] -WantedBy=multi-user.target -EOF - systemctl enable dgraph-$TYPE - systemctl start dgraph-$TYPE - else - echo "Skipping as 'dgraph-$TYPE.service' already exists" - fi + TYPE=$1 + EXEC=$2 + + if [[ ! -f /etc/systemd/system/dgraph-${TYPE}.service ]]; then + cat <<-EOF >/etc/systemd/system/dgraph-"${TYPE}".service + [Unit] + Description=dgraph ${TYPE} server + Wants=network.target + After=network.target + + [Service] + Type=simple + WorkingDirectory=/var/lib/dgraph + Restart=on-failure + ExecStart=${EXEC} + StandardOutput=journal + StandardError=journal + User=dgraph + Group=dgraph + + [Install] + WantedBy=multi-user.target + EOF + systemctl enable dgraph-"${TYPE}" + systemctl start dgraph-"${TYPE}" + else + echo "Skipping as 'dgraph-${TYPE}.service' already exists" + fi } ##### # setup_systemd - configure systemd unit based on hostname ################################ setup_systemd() { - case $(hostname) in - *zero-0*) - setup_systemd_zero "leader" - ;; - *zero-[1-9]*) - setup_systemd_zero "peer" - ;; - *alpha*) - setup_systemd_alpha - ;; - esac + case $(hostname) in + *zero-0*) + setup_systemd_zero "leader" + ;; + *zero-[1-9]*) + setup_systemd_zero "peer" + ;; + *alpha*) + setup_systemd_alpha + ;; + esac } main $@ diff --git a/contrib/systemd/ha_cluster/tests/ubuntu1804/provision.sh b/contrib/systemd/ha_cluster/tests/ubuntu1804/provision.sh index 76ad8677d5e..9510ddf7ae1 100755 --- a/contrib/systemd/ha_cluster/tests/ubuntu1804/provision.sh +++ b/contrib/systemd/ha_cluster/tests/ubuntu1804/provision.sh @@ -4,52 +4,55 @@ # main ################################ main() { - if [[ $1 =~ h(elp)?|\? ]]; then usage; fi - if (( $# != 1 )); then usage; fi - REPLICAS=$1 + if [[ $1 =~ h(elp)?|\? ]]; then usage; fi + if (($# != 1)); then usage; fi + REPLICAS=$1 - echo "RUNNING script" + echo "RUNNING script" - setup_hosts - install_dgraph - setup_user_group - setup_systemd - setup_firewall + setup_hosts + install_dgraph + setup_user_group + setup_systemd + setup_firewall } ##### # usage ################################ usage() { - printf " Usage: \n\t$0 [REPLICAS]\n\n" >&2 - exit 1 + printf " Usage: \n\t$0 [REPLICAS]\n\n" >&2 + exit 1 } ##### # install_dgraph - installer script from https://get.dgraph.io ################################ install_dgraph() { - [[ -z "$DGRAPH_VERSION" ]] && { echo 'DGRAPH_VERSION not specified. Aborting' 2>&1 ; return 1; } - echo "INFO: Installing Dgraph with 'curl -sSf https://get.dgraph.io | ACCEPT_LICENSE="y" VERSION="$DGRAPH_VERSION" bash'" - curl -sSf https://get.dgraph.io | ACCEPT_LICENSE="y" VERSION="$DGRAPH_VERSION" bash + [[ -z ${DGRAPH_VERSION} ]] && { + echo 'DGRAPH_VERSION not specified. Aborting' 2>&1 + return 1 + } + echo "INFO: Installing Dgraph with 'curl -sSf https://get.dgraph.io | ACCEPT_LICENSE="y" VERSION=""${DGRAPH_VERSION}"" bash'" + curl -sSf https://get.dgraph.io | ACCEPT_LICENSE="y" VERSION="${DGRAPH_VERSION}" bash } ##### # setup_hosts - configure /etc/hosts in absence of DNS ################################ setup_hosts() { - CONFIG_FILE=/vagrant/hosts - if [[ ! -f /vagrant/hosts ]]; then - echo "INFO: '$CONFIG_FILE' does not exist. Skipping configuring /etc/hosts" - return 1 - fi - - while read -a LINE; do - ## append to hosts entry if it doesn't exist - if ! grep -q "${LINE[1]}" /etc/hosts; then - printf "%s %s \n" ${LINE[*]} >> /etc/hosts - fi - done < $CONFIG_FILE + CONFIG_FILE=/vagrant/hosts + if [[ ! -f /vagrant/hosts ]]; then + echo "INFO: '${CONFIG_FILE}' does not exist. Skipping configuring /etc/hosts" + return 1 + fi + + while read -a LINE; do + ## append to hosts entry if it doesn't exist + if ! grep -q "${LINE[1]}" /etc/hosts; then + printf "%s %s \n" "${LINE[*]}" >>/etc/hosts + fi + done <"${CONFIG_FILE}" } ##### @@ -64,120 +67,120 @@ setup_user_group() { # setup_firewall on Ubuntu 18.04 and CentOS 8 ################################ setup_firewall() { - case $(hostname) in - *zero*) - PORTS=(5080 6080) - ;; - *alpha*) - PORTS=(7080 8080 9080) - ;; - esac - - if grep -q centos /etc/os-release; then - if /usr/bin/firewall-cmd --state 2>&1 | grep -q "^running$"; then - for PORT in ${PORTS[*]}; do - firewall-cmd --zone=public --permanent --add-port=$PORT/tcp - firewall-cmd --reload - done - fi - elif grep -iq ubuntu /etc/os-release; then - if /usr/sbin/ufw status | grep -wq active; then - for PORT in ${PORTS[*]}; do - ufw allow from any to any port $PORT proto tcp - done - fi - fi + case $(hostname) in + *zero*) + PORTS=(5080 6080) + ;; + *alpha*) + PORTS=(7080 8080 9080) + ;; + esac + + if grep -q centos /etc/os-release; then + if /usr/bin/firewall-cmd --state 2>&1 | grep -q "^running$"; then + for PORT in ${PORTS[*]}; do + firewall-cmd --zone=public --permanent --add-port="${PORT}"/tcp + firewall-cmd --reload + done + fi + elif grep -iq ubuntu /etc/os-release; then + if /usr/sbin/ufw status | grep -wq active; then + for PORT in ${PORTS[*]}; do + ufw allow from any to any port "${PORT}" proto tcp + done + fi + fi } ##### # setup_systemd_zero - setup dir and systemd unit for zero leader or peer ################################ setup_systemd_zero() { - TYPE=${1:-"peer"} - LDR="zero-0:5080" - WAL=/var/lib/dgraph/zw - IDX=$(( $(grep -o '[0-9]' <<< $HOSTNAME) + 1 )) - if [[ $TYPE == "leader" ]]; then - EXEC="/bin/bash -c '/usr/local/bin/dgraph zero --my=\$(hostname):5080 --wal $WAL - --raft="idx=$IDX" --replicas $REPLICAS'" - else - EXEC="/bin/bash -c '/usr/local/bin/dgraph zero --my=\$(hostname):5080 --peer $LDR --wal $WAL - --raft="idx=$IDX" --replicas $REPLICAS'" - fi - - mkdir -p /var/{log/dgraph,lib/dgraph/zw} - chown -R dgraph:dgraph /var/{lib,log}/dgraph - - install_systemd_unit "zero" "$EXEC" + TYPE=${1:-"peer"} + LDR="zero-0:5080" + WAL=/var/lib/dgraph/zw + IDX=$(($(grep -o '[0-9]' <<<"${HOSTNAME}") + 1)) + if [[ ${TYPE} == "leader" ]]; then + EXEC="/bin/bash -c '/usr/local/bin/dgraph zero --my=\$(hostname):5080 --wal ${WAL} + --raft="idx=${IDX}" --replicas ${REPLICAS}'" + else + EXEC="/bin/bash -c '/usr/local/bin/dgraph zero --my=\$(hostname):5080 --peer ${LDR} --wal ${WAL} + --raft="idx=${IDX}" --replicas ${REPLICAS}'" + fi + + mkdir -p /var/{log/dgraph,lib/dgraph/zw} + chown -R dgraph:dgraph /var/{lib,log}/dgraph + + install_systemd_unit "zero" "${EXEC}" } ##### # setup_systemd_alpha - setup dir and systemd unit for alpha ################################ setup_systemd_alpha() { - WAL=/var/lib/dgraph/w - POSTINGS=/var/lib/dgraph/p - # build array based on number of replicas - for (( I=0; I <= $REPLICAS-1; I++)); do ZEROS+=("zero-$I:5080");done - IFS=, eval 'ZERO_LIST="${ZEROS[*]}"' # join by ',' + WAL=/var/lib/dgraph/w + POSTINGS=/var/lib/dgraph/p + # build array based on number of replicas + for ((I = 0; I <= REPLICAS - 1; I++)); do ZEROS+=("zero-${I}:5080"); done + IFS=, eval 'ZERO_LIST="${ZEROS[*]}"' # join by ',' - EXEC="/bin/bash -c '/usr/local/bin/dgraph alpha --my=\$(hostname):7080 --zero $ZERO_LIST --postings $POSTINGS --wal $WAL'" + EXEC="/bin/bash -c '/usr/local/bin/dgraph alpha --my=\$(hostname):7080 --zero ${ZERO_LIST} --postings ${POSTINGS} --wal ${WAL}'" - mkdir -p /var/{log/dgraph,lib/dgraph/{w,p}} - chown -R dgraph:dgraph /var/{lib,log}/dgraph + mkdir -p /var/{log/dgraph,lib/dgraph/{w,p}} + chown -R dgraph:dgraph /var/{lib,log}/dgraph - install_systemd_unit "alpha" "$EXEC" + install_systemd_unit "alpha" "${EXEC}" } ##### # install_systemd_unit - config systemd unit give exec str and service type ################################ install_systemd_unit() { - TYPE=$1 - EXEC=$2 - - if [[ ! -f /etc/systemd/system/dgraph-$TYPE.service ]]; then - cat <<-EOF > /etc/systemd/system/dgraph-$TYPE.service -[Unit] -Description=dgraph $TYPE server -Wants=network.target -After=network.target - -[Service] -Type=simple -WorkingDirectory=/var/lib/dgraph -Restart=on-failure -ExecStart=$EXEC -StandardOutput=journal -StandardError=journal -User=dgraph -Group=dgraph - -[Install] -WantedBy=multi-user.target -EOF - systemctl enable dgraph-$TYPE - systemctl start dgraph-$TYPE - else - echo "Skipping as 'dgraph-$TYPE.service' already exists" - fi + TYPE=$1 + EXEC=$2 + + if [[ ! -f /etc/systemd/system/dgraph-${TYPE}.service ]]; then + cat <<-EOF >/etc/systemd/system/dgraph-"${TYPE}".service + [Unit] + Description=dgraph ${TYPE} server + Wants=network.target + After=network.target + + [Service] + Type=simple + WorkingDirectory=/var/lib/dgraph + Restart=on-failure + ExecStart=${EXEC} + StandardOutput=journal + StandardError=journal + User=dgraph + Group=dgraph + + [Install] + WantedBy=multi-user.target + EOF + systemctl enable dgraph-"${TYPE}" + systemctl start dgraph-"${TYPE}" + else + echo "Skipping as 'dgraph-${TYPE}.service' already exists" + fi } ##### # setup_systemd - configure systemd unit based on hostname ################################ setup_systemd() { - case $(hostname) in - *zero-0*) - setup_systemd_zero "leader" - ;; - *zero-[1-9]*) - setup_systemd_zero "peer" - ;; - *alpha*) - setup_systemd_alpha - ;; - esac + case $(hostname) in + *zero-0*) + setup_systemd_zero "leader" + ;; + *zero-[1-9]*) + setup_systemd_zero "peer" + ;; + *alpha*) + setup_systemd_alpha + ;; + esac } main $@ diff --git a/contrib/tlstest/README.md b/contrib/tlstest/README.md index d55e4c10a96..70622d9d94e 100644 --- a/contrib/tlstest/README.md +++ b/contrib/tlstest/README.md @@ -2,19 +2,28 @@ This directory contains several scripts, that helps with testing of tls functionality in dgraph. -- `Makefile` - cleans up the directory, creates CA, client and server keys and signed certs, executes the tests +- `Makefile` - cleans up the directory, creates CA, client and server keys and signed certs, + executes the tests - `server_nopass.sh` - starts server that use unencryped private key -- `server_nopass_client_auth.sh` - starts server that use unencryped private key, and require client authentication +- `server_nopass_client_auth.sh` - starts server that use unencryped private key, and require client + authentication - `server_pass.sh` - starts server that use encrypted/password protected private key - `server_11.sh` - starts server with maximum TLS version set to 1.1 - `client_nopass.sh` - executes dgraph-live-loader configured to use unencrypted privae key -- `client_pass.sh` - executes dgraph-live-loader configured to use encrypted/password protected private key +- `client_pass.sh` - executes dgraph-live-loader configured to use encrypted/password protected + private key - `client_nocert.sh` - executes dgraph-live-loader without configured client certificate - `client_12.sh` - executes dgraph-live-loader with minimum TLS version set to 1.2 ## Notes -Go x509 package supports only encrypted private keys conaining "DEK-Info". By default, openssl doesn't include it in generated keys. Fortunately, if encryption method is explicitly set in the command line, openssl adds "DEK-Info" header. -`server_pass.sh` should be used with `client_pass.sh`. This enable testing of `tls_server_name` configuration option. Mixing `_pass` and `_nopass` client/server shows that server name is verified by the client. +Go x509 package supports only encrypted private keys conaining "DEK-Info". By default, openssl +doesn't include it in generated keys. Fortunately, if encryption method is explicitly set in the +command line, openssl adds "DEK-Info" header. -For testing purposes, DNS names for server1.dgraph.io and server2.dgraph.io has to be resolvable. Editing /etc/hosts is the simplest way to achieve this. +`server_pass.sh` should be used with `client_pass.sh`. This enable testing of `tls_server_name` +configuration option. Mixing `_pass` and `_nopass` client/server shows that server name is verified +by the client. + +For testing purposes, DNS names for server1.dgraph.io and server2.dgraph.io has to be resolvable. +Editing /etc/hosts is the simplest way to achieve this. diff --git a/contrib/tlstest/alpha_notls.sh b/contrib/tlstest/alpha_notls.sh index f9d5b73527c..84993aa5047 100755 --- a/contrib/tlstest/alpha_notls.sh +++ b/contrib/tlstest/alpha_notls.sh @@ -1,3 +1,3 @@ #!/bin/bash set -e -$DGRAPH_BIN alpha --zero 127.0.0.1:5081 &> alpha.log +${DGRAPH_BIN} alpha --zero 127.0.0.1:5081 &>alpha.log diff --git a/contrib/tlstest/alpha_tls.sh b/contrib/tlstest/alpha_tls.sh index 97d3bd2fec7..29fb3078638 100755 --- a/contrib/tlstest/alpha_tls.sh +++ b/contrib/tlstest/alpha_tls.sh @@ -1,4 +1,4 @@ #!/bin/bash set -e -$DGRAPH_BIN alpha --tls "ca-cert=$PWD/tls/ca.crt; server-cert=$PWD/tls/node.crt; server-key=$PWD/tls/node.key;" --zero 127.0.0.1:5081 &> alpha.log +${DGRAPH_BIN} alpha --tls "ca-cert=${PWD}/tls/ca.crt; server-cert=${PWD}/tls/node.crt; server-key=${PWD}/tls/node.key;" --zero 127.0.0.1:5081 &>alpha.log diff --git a/contrib/tlstest/alpha_tls_auth.sh b/contrib/tlstest/alpha_tls_auth.sh index c20b79f872c..fe5f64ecf06 100755 --- a/contrib/tlstest/alpha_tls_auth.sh +++ b/contrib/tlstest/alpha_tls_auth.sh @@ -1,3 +1,3 @@ #!/bin/bash set -e -$DGRAPH_BIN alpha --tls "ca-cert=$PWD/tls/ca.crt; server-cert=$PWD/tls/node.crt; server-key=$PWD/tls/node.key; client-auth-type=REQUIREANDVERIFY;" --zero 127.0.0.1:5081 &> alpha.log +${DGRAPH_BIN} alpha --tls "ca-cert=${PWD}/tls/ca.crt; server-cert=${PWD}/tls/node.crt; server-key=${PWD}/tls/node.key; client-auth-type=REQUIREANDVERIFY;" --zero 127.0.0.1:5081 &>alpha.log diff --git a/contrib/tlstest/live_notls.sh b/contrib/tlstest/live_notls.sh index b21b3d52ac6..bab4e2c7dc6 100755 --- a/contrib/tlstest/live_notls.sh +++ b/contrib/tlstest/live_notls.sh @@ -1,3 +1,3 @@ #!/bin/bash set -e -$DGRAPH_BIN live -d localhost:9080 -r data.rdf.gz -z 127.0.0.1:5081 +${DGRAPH_BIN} live -d localhost:9080 -r data.rdf.gz -z 127.0.0.1:5081 diff --git a/contrib/tlstest/live_tls.sh b/contrib/tlstest/live_tls.sh index b21b3d52ac6..bab4e2c7dc6 100755 --- a/contrib/tlstest/live_tls.sh +++ b/contrib/tlstest/live_tls.sh @@ -1,3 +1,3 @@ #!/bin/bash set -e -$DGRAPH_BIN live -d localhost:9080 -r data.rdf.gz -z 127.0.0.1:5081 +${DGRAPH_BIN} live -d localhost:9080 -r data.rdf.gz -z 127.0.0.1:5081 diff --git a/contrib/tlstest/live_tls_auth.sh b/contrib/tlstest/live_tls_auth.sh index 35ff84e91b7..87333a92f93 100755 --- a/contrib/tlstest/live_tls_auth.sh +++ b/contrib/tlstest/live_tls_auth.sh @@ -1,3 +1,3 @@ #!/bin/bash set -e -$DGRAPH_BIN live -d localhost:9080 --tls "server-name=localhost;" -r data.rdf.gz -z 127.0.0.1:5081 +${DGRAPH_BIN} live -d localhost:9080 --tls "server-name=localhost;" -r data.rdf.gz -z 127.0.0.1:5081 diff --git a/contrib/tlstest/run.sh b/contrib/tlstest/run.sh index a5d5a42e96d..a0d13be0066 100755 --- a/contrib/tlstest/run.sh +++ b/contrib/tlstest/run.sh @@ -1,7 +1,7 @@ #!/bin/bash dir=$(dirname "${BASH_SOURCE[0]}") -pushd $dir +pushd "${dir}" set -e make test popd diff --git a/contrib/tlstest/server_nopass.sh b/contrib/tlstest/server_nopass.sh index 1da70b0eeca..aff2e66db86 100755 --- a/contrib/tlstest/server_nopass.sh +++ b/contrib/tlstest/server_nopass.sh @@ -1,4 +1,4 @@ #!/bin/bash ../../dgraph/dgraph alpha --tls "ca-cert=ca.crt; client-cert=server.crt; client-key=server.key" \ ---zero 127.0.0.1:5081 &> dgraph.log + --zero 127.0.0.1:5081 &>dgraph.log diff --git a/contrib/tlstest/server_pass.sh b/contrib/tlstest/server_pass.sh index f75389a1c39..551b914f993 100755 --- a/contrib/tlstest/server_pass.sh +++ b/contrib/tlstest/server_pass.sh @@ -1,3 +1,3 @@ #!/bin/bash -../../dgraph/dgraph alpha --tls "ca-cert=ca.crt; client-cert=server_pass.crt; client-key=server_pass.key;" --zero 127.0.0.1:5081 &> dgraph.log +../../dgraph/dgraph alpha --tls "ca-cert=ca.crt; client-cert=server_pass.crt; client-key=server_pass.key;" --zero 127.0.0.1:5081 &>dgraph.log diff --git a/contrib/tlstest/test.sh b/contrib/tlstest/test.sh index 0c8870b1b3c..e97df9c3813 100755 --- a/contrib/tlstest/test.sh +++ b/contrib/tlstest/test.sh @@ -2,32 +2,32 @@ trap "cleanup" EXIT cleanup() { - killall -KILL dgraph >/dev/null 2>/dev/null + killall -KILL dgraph >/dev/null 2>/dev/null } ALPHA=$1 LIVE=$2 EXPECTED=$3 -$DGRAPH_BIN zero -w zw -o 1 > zero.log 2>&1 & +${DGRAPH_BIN} zero -w zw -o 1 >zero.log 2>&1 & sleep 5 -$ALPHA >/dev/null 2>&1 & +${ALPHA} >/dev/null 2>&1 & -if [ "x$RELOAD_TEST" != "x" ]; then - trap '' HUP - rm -f ./tls/ca.key - $DGRAPH_BIN cert -d $PWD/tls -n localhost -c live --force - killall -HUP dgraph >/dev/null 2>/dev/null - sleep 3 +if [[ "x${RELOAD_TEST}" != "x" ]]; then + trap '' HUP + rm -f ./tls/ca.key + ${DGRAPH_BIN} cert -d "${PWD}"/tls -n localhost -c live --force + killall -HUP dgraph >/dev/null 2>/dev/null + sleep 3 fi -timeout 30s $LIVE > live.log 2>&1 +timeout 30s "${LIVE}" >live.log 2>&1 RESULT=$? -if [ $RESULT != $EXPECTED ]; then - echo "$ALPHA <-> $LIVE, Result: $RESULT != Expected: $EXPECTED" - exit 1 +if [[ ${RESULT} != "${EXPECTED}" ]]; then + echo "${ALPHA} <-> ${LIVE}, Result: ${RESULT} != Expected: ${EXPECTED}" + exit 1 fi exit 0 diff --git a/contrib/tlstest/test_reload.sh b/contrib/tlstest/test_reload.sh index 97e2a6bee81..1f7558fcc0d 100755 --- a/contrib/tlstest/test_reload.sh +++ b/contrib/tlstest/test_reload.sh @@ -3,31 +3,31 @@ trap "cleanup" EXIT cleanup() { - killall -9 dgraph >/dev/null 2>/dev/null + killall -9 dgraph >/dev/null 2>/dev/null } ALPHA=./alpha_tls.sh LIVE=./live_tls.sh EXPECTED=1 -$DGRAPH_BIN zero -w zw -o 1 > zero.log 2>&1 & +${DGRAPH_BIN} zero -w zw -o 1 >zero.log 2>&1 & sleep 5 # start the server -$ALPHA > /dev/null 2>&1 & -timeout 30s $LIVE > /dev/null 2>&1 +${ALPHA} >/dev/null 2>&1 & +timeout 30s "${LIVE}" >/dev/null 2>&1 RESULT=$? # regenerate TLS certificate rm -f ./tls/ca.key -$DGRAPH_BIN cert -d $PWD/tls -n localhost -c live --force -pkill -HUP dgraph > /dev/null 2>&1 +${DGRAPH_BIN} cert -d "${PWD}"/tls -n localhost -c live --force +pkill -HUP dgraph >/dev/null 2>&1 # try to connect again -timeout 30s $LIVE > /dev/null 2>&1 +timeout 30s "${LIVE}" >/dev/null 2>&1 RESULT=$? -if [ $RESULT == $EXPECTED ]; then +if [[ ${RESULT} == "${EXPECTED}" ]]; then exit 0 else echo "Error while reloading TLS certificate" diff --git a/contrib/wait-for-it.sh b/contrib/wait-for-it.sh index 1b491608e73..822ce15816e 100755 --- a/contrib/wait-for-it.sh +++ b/contrib/wait-for-it.sh @@ -22,15 +22,14 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -cmdname=$(basename $0) +cmdname=$(basename "$0") -echoerr() { if [[ $QUIET -ne 1 ]]; then echo "$@" 1>&2; fi } +echoerr() { if [[ ${QUIET} -ne 1 ]]; then echo "$@" 1>&2; fi; } -usage() -{ - cat << USAGE >&2 +usage() { + cat <&2 Usage: - $cmdname host:port [-s] [-t timeout] [-- command args] + ${cmdname} host:port [-s] [-t timeout] [-- command args] -h HOST | --host=HOST Host or IP under test -p PORT | --port=PORT TCP port under test Alternatively, you specify the host and port as host:port @@ -40,121 +39,117 @@ Usage: Timeout in seconds, zero for no timeout -- COMMAND ARGS Execute command with args after the test finishes USAGE - exit 1 + exit 1 } -wait_for() -{ - if [[ $TIMEOUT -gt 0 ]]; then - echoerr "$cmdname: waiting $TIMEOUT seconds for $HOST:$PORT" - else - echoerr "$cmdname: waiting for $HOST:$PORT without a timeout" - fi - start_ts=$(date +%s) - while : - do - if [[ $ISBUSY -eq 1 ]]; then - nc -z $HOST $PORT - result=$? - else - (echo > /dev/tcp/$HOST/$PORT) >/dev/null 2>&1 - result=$? - fi - if [[ $result -eq 0 ]]; then - end_ts=$(date +%s) - echoerr "$cmdname: $HOST:$PORT is available after $((end_ts - start_ts)) seconds" - break - fi - sleep 1 - done - return $result +wait_for() { + if [[ ${TIMEOUT} -gt 0 ]]; then + echoerr "${cmdname}: waiting ${TIMEOUT} seconds for ${HOST}:${PORT}" + else + echoerr "${cmdname}: waiting for ${HOST}:${PORT} without a timeout" + fi + start_ts=$(date +%s) + while :; do + if [[ ${ISBUSY} -eq 1 ]]; then + nc -z "${HOST}" "${PORT}" + result=$? + else + (echo >/dev/tcp/"${HOST}"/"${PORT}") >/dev/null 2>&1 + result=$? + fi + if [[ ${result} -eq 0 ]]; then + end_ts=$(date +%s) + echoerr "${cmdname}: ${HOST}:${PORT} is available after $((end_ts - start_ts)) seconds" + break + fi + sleep 1 + done + return "${result}" } -wait_for_wrapper() -{ - # In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692 - if [[ $QUIET -eq 1 ]]; then - timeout $BUSYTIMEFLAG $TIMEOUT $0 --quiet --child --host=$HOST --port=$PORT --timeout=$TIMEOUT & - else - timeout $BUSYTIMEFLAG $TIMEOUT $0 --child --host=$HOST --port=$PORT --timeout=$TIMEOUT & - fi - PID=$! - trap "kill -INT -$PID" INT - wait $PID - RESULT=$? - if [[ $RESULT -ne 0 ]]; then - echoerr "$cmdname: timeout occurred after waiting $TIMEOUT seconds for $HOST:$PORT" - fi - return $RESULT +wait_for_wrapper() { + # In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692 + if [[ ${QUIET} -eq 1 ]]; then + timeout "${BUSYTIMEFLAG}" "${TIMEOUT}" "$0" --quiet --child --host="${HOST}" --port="${PORT}" --timeout="${TIMEOUT}" & + else + timeout "${BUSYTIMEFLAG}" "${TIMEOUT}" "$0" --child --host="${HOST}" --port="${PORT}" --timeout="${TIMEOUT}" & + fi + PID=$! + trap "kill -INT -${PID}" INT + wait "${PID}" + RESULT=$? + if [[ ${RESULT} -ne 0 ]]; then + echoerr "${cmdname}: timeout occurred after waiting ${TIMEOUT} seconds for ${HOST}:${PORT}" + fi + return "${RESULT}" } # process arguments -while [[ $# -gt 0 ]] -do - case "$1" in - *:* ) - hostport=(${1//:/ }) - HOST=${hostport[0]} - PORT=${hostport[1]} - shift 1 - ;; - --child) - CHILD=1 - shift 1 - ;; - -q | --quiet) - QUIET=1 - shift 1 - ;; - -s | --strict) - STRICT=1 - shift 1 - ;; - -h) - HOST="$2" - if [[ $HOST == "" ]]; then break; fi - shift 2 - ;; - --host=*) - HOST="${1#*=}" - shift 1 - ;; - -p) - PORT="$2" - if [[ $PORT == "" ]]; then break; fi - shift 2 - ;; - --port=*) - PORT="${1#*=}" - shift 1 - ;; - -t) - TIMEOUT="$2" - if [[ $TIMEOUT == "" ]]; then break; fi - shift 2 - ;; - --timeout=*) - TIMEOUT="${1#*=}" - shift 1 - ;; - --) - shift - CLI=("$@") - break - ;; - --help) - usage - ;; - *) - echoerr "Unknown argument: $1" - usage - ;; - esac +while [[ $# -gt 0 ]]; do + case "$1" in + *:*) + hostport=(${1//:/ }) + HOST=${hostport[0]} + PORT=${hostport[1]} + shift 1 + ;; + --child) + CHILD=1 + shift 1 + ;; + -q | --quiet) + QUIET=1 + shift 1 + ;; + -s | --strict) + STRICT=1 + shift 1 + ;; + -h) + HOST="$2" + if [[ ${HOST} == "" ]]; then break; fi + shift 2 + ;; + --host=*) + HOST="${1#*=}" + shift 1 + ;; + -p) + PORT="$2" + if [[ ${PORT} == "" ]]; then break; fi + shift 2 + ;; + --port=*) + PORT="${1#*=}" + shift 1 + ;; + -t) + TIMEOUT="$2" + if [[ ${TIMEOUT} == "" ]]; then break; fi + shift 2 + ;; + --timeout=*) + TIMEOUT="${1#*=}" + shift 1 + ;; + --) + shift + CLI=("$@") + break + ;; + --help) + usage + ;; + *) + echoerr "Unknown argument: $1" + usage + ;; + esac done -if [[ "$HOST" == "" || "$PORT" == "" ]]; then - echoerr "Error: you need to provide a host and port to test." - usage +if [[ ${HOST} == "" || ${PORT} == "" ]]; then + echoerr "Error: you need to provide a host and port to test." + usage fi TIMEOUT=${TIMEOUT:-15} @@ -165,34 +160,34 @@ QUIET=${QUIET:-0} # check to see if timeout is from busybox? # check to see if timeout is from busybox? TIMEOUT_PATH=$(realpath $(which timeout)) -if [[ $TIMEOUT_PATH =~ "busybox" ]]; then - ISBUSY=1 - BUSYTIMEFLAG="-t" +if [[ ${TIMEOUT_PATH} =~ "busybox" ]]; then + ISBUSY=1 + BUSYTIMEFLAG="-t" else - ISBUSY=0 - BUSYTIMEFLAG="" + ISBUSY=0 + BUSYTIMEFLAG="" fi -if [[ $CHILD -gt 0 ]]; then - wait_for - RESULT=$? - exit $RESULT +if [[ ${CHILD} -gt 0 ]]; then + wait_for + RESULT=$? + exit "${RESULT}" else - if [[ $TIMEOUT -gt 0 ]]; then - wait_for_wrapper - RESULT=$? - else - wait_for - RESULT=$? - fi + if [[ ${TIMEOUT} -gt 0 ]]; then + wait_for_wrapper + RESULT=$? + else + wait_for + RESULT=$? + fi fi -if [[ $CLI != "" ]]; then - if [[ $RESULT -ne 0 && $STRICT -eq 1 ]]; then - echoerr "$cmdname: strict mode, refusing to execute subprocess" - exit $RESULT - fi - exec "${CLI[@]}" +if [[ ${CLI} != "" ]]; then + if [[ ${RESULT} -ne 0 && ${STRICT} -eq 1 ]]; then + echoerr "${cmdname}: strict mode, refusing to execute subprocess" + exit "${RESULT}" + fi + exec "${CLI[@]}" else - exit $RESULT -fi \ No newline at end of file + exit "${RESULT}" +fi diff --git a/dgraph/cmd/alpha/mutations_mode/docker-compose.yml b/dgraph/cmd/alpha/mutations_mode/docker-compose.yml index 6f4f4f91006..5a92867f022 100644 --- a/dgraph/cmd/alpha/mutations_mode/docker-compose.yml +++ b/dgraph/cmd/alpha/mutations_mode/docker-compose.yml @@ -9,98 +9,101 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080,zero2:5080,zero3:5080 - --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --limit "mutations=disallow;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080,zero2:5080,zero3:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --limit "mutations=disallow;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero1:5080,zero2:5080,zero3:5080 - --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --limit "mutations=strict;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero1:5080,zero2:5080,zero3:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --limit "mutations=strict;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero1:5080,zero2:5080,zero3:5080 - --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --limit "mutations=strict;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero1:5080,zero2:5080,zero3:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --limit "mutations=strict;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --replicas=1 --logtostderr - -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall zero2: image: dgraph/dgraph:local working_dir: /data/zero2 depends_on: - - zero1 + - zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=2;" --my=zero2:5080 --replicas=1 --logtostderr - -v=2 --peer=zero1:5080 + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=2;" --my=zero2:5080 --replicas=1 --logtostderr -v=2 --peer=zero1:5080 zero3: image: dgraph/dgraph:local working_dir: /data/zero3 depends_on: - - zero2 + - zero2 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=3;" --my=zero3:5080 --replicas=1 --logtostderr - -v=2 --peer=zero1:5080 + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=3;" --my=zero3:5080 --replicas=1 --logtostderr -v=2 --peer=zero1:5080 volumes: {} diff --git a/dgraph/cmd/alpha/testrun.sh b/dgraph/cmd/alpha/testrun.sh index 95f20cef4a1..b522c31dcfe 100755 --- a/dgraph/cmd/alpha/testrun.sh +++ b/dgraph/cmd/alpha/testrun.sh @@ -2,60 +2,63 @@ set -e -dir="$HOME/dgraph" +dir="${HOME}/dgraph" # We display error to the user if Dgraph isn't installed. if ! hash dgraph 2>/dev/null; then echo "Please install Dgraph and try again." - exit 1 + exit 1 fi # Double quotes are used to store the command in a variable which can be used later. `${i}` is how you access value of a variable in a double quoted string. Also other double quotes have to be escaped like for workers with a double quoted string. Also tee is used in append mode to redirect out to log file apart from displaying it on stdout. -i=1; +i=1 server1="dgraph --config testrun/conf1.yaml 2>&1 | tee -a dgraph1.log &" -i=2; +i=2 server2="dgraph --config testrun/conf2.yaml 2>&1 | tee -a dgraph2.log &" -i=3; +i=3 server3="dgraph --config testrun/conf3.yaml 2>&1 | tee -a dgraph3.log &" function checkServer { port=$1 # Status evaluates if there is a process running on $port. - status=$(nc -z 127.0.0.1 $port; echo $?) + status=$( + nc -z 127.0.0.1 "${port}" + echo $? + ) # If status is 1, we restart the relevant server - if [ $status -ne 0 ]; then - if [ $port -eq "8080" ]; then - echo "Restarting server 1" - eval $server1 - fi - if [ $port -eq "8082" ]; then - echo "Restarting server 2" - eval $server2 - fi - if [ $port -eq "8084" ]; then - echo "Restarting server 3" - eval $server3 - fi + if [[ ${status} -ne 0 ]]; then + if [[ ${port} -eq "8080" ]]; then + echo "Restarting server 1" + eval "${server1}" + fi + if [[ ${port} -eq "8082" ]]; then + echo "Restarting server 2" + eval "${server2}" + fi + if [[ ${port} -eq "8084" ]]; then + echo "Restarting server 3" + eval "${server3}" + fi fi } # Kill already running Dgraph processes. -if pgrep "dgraph" > /dev/null; then +if pgrep "dgraph" >/dev/null; then killall dgraph fi # Start the servers. echo "Starting server 1" -eval $server1 +eval "${server1}" # Lets wait for the first server to bootup because it will form the cluster. sleep 5 echo "Starting server 2" -eval $server2 +eval "${server2}" sleep 5 echo "Starting server 3" -eval $server3 +eval "${server3}" # Check that the servers should be running every 30 seconds. while true; do diff --git a/dgraph/cmd/alpha/testrun/conf1.yaml b/dgraph/cmd/alpha/testrun/conf1.yaml index 49202e73fe0..d30d6330c5d 100644 --- a/dgraph/cmd/alpha/testrun/conf1.yaml +++ b/dgraph/cmd/alpha/testrun/conf1.yaml @@ -21,4 +21,3 @@ groups: 0,1 nomutations: true group_conf: groups.conf - diff --git a/dgraph/cmd/alpha/testrun/conf2.yaml b/dgraph/cmd/alpha/testrun/conf2.yaml index e6a28cd0481..4dcef8f4a1b 100644 --- a/dgraph/cmd/alpha/testrun/conf2.yaml +++ b/dgraph/cmd/alpha/testrun/conf2.yaml @@ -22,4 +22,3 @@ nomutations: true group_conf: groups.conf peer: localhost:12345 - diff --git a/dgraph/cmd/alpha/testrun/conf3.yaml b/dgraph/cmd/alpha/testrun/conf3.yaml index d1cf212382c..83c49fcd93c 100644 --- a/dgraph/cmd/alpha/testrun/conf3.yaml +++ b/dgraph/cmd/alpha/testrun/conf3.yaml @@ -22,4 +22,3 @@ nomutations: true group_conf: groups.conf peer: localhost:12345 - diff --git a/dgraph/cmd/alpha/thoughts.md b/dgraph/cmd/alpha/thoughts.md index 548bc3ee9e7..653fa923e10 100644 --- a/dgraph/cmd/alpha/thoughts.md +++ b/dgraph/cmd/alpha/thoughts.md @@ -2,20 +2,10 @@ 2. sync.WaitGroup. -func handle(..) { - wg.Add(1) - ... - wg.Done() -} +func handle(..) { wg.Add(1) ... wg.Done() } -func main() { - wg := new(sync.WaitGroup) - for i := 0; i < N; i++ { - go handle(..) - } - wg.Wait() -} +func main() { wg := new(sync.WaitGroup) for i := 0; i < N; i++ { go handle(..) } wg.Wait() } -The above wouldn't work, because goroutines don't necessarily get scheduled immediately. -So, wg.Add(1) wouldn't get called, which means wg.Wait() wouldn't block, and the program -would finish execution before goroutines had a chance to be run. +The above wouldn't work, because goroutines don't necessarily get scheduled immediately. So, +wg.Add(1) wouldn't get called, which means wg.Wait() wouldn't block, and the program would finish +execution before goroutines had a chance to be run. diff --git a/dgraph/cmd/bulk/speed_tests/run.sh b/dgraph/cmd/bulk/speed_tests/run.sh index 9ff222d41f5..b1d6dcd28f2 100755 --- a/dgraph/cmd/bulk/speed_tests/run.sh +++ b/dgraph/cmd/bulk/speed_tests/run.sh @@ -6,15 +6,15 @@ scriptDir=$(dirname "$(readlink -f "$0")") while [[ $# -gt 1 ]]; do key="$1" - case $key in - --tmp) - tmp="$2" - shift - ;; - *) - echo "unknown option $1" - exit 1 - ;; + case ${key} in + --tmp) + tmp="$2" + shift + ;; + *) + echo "unknown option $1" + exit 1 + ;; esac shift done @@ -24,17 +24,20 @@ tmp=${tmp:-tmp} go install -race github.com/hypermodeinc/dgraph/cmd/dgraph-bulk-loader function run_test { - [[ $# == 2 ]] || { echo "bad args"; exit 1; } + [[ $# == 2 ]] || { + echo "bad args" + exit 1 + } schema=$1 rdfs=$2 - rm -rf $tmp - mkdir $tmp + rm -rf "${tmp}" + mkdir "${tmp}" - echo "$schema" > $tmp/sch.schema + echo "${schema}" >"${tmp}"/sch.schema # Run bulk loader. - $(go env GOPATH)/bin/dgraph-bulk-loader -map_shards=5 -reduce_shards=2 -shufflers=2 -mapoutput_mb=15 -tmp "$tmp/tmp" -out "$tmp/out" -l "$tmp/LEASE" -s "$tmp/sch.schema" -r "$rdfs" + $(go env GOPATH)/bin/dgraph-bulk-loader -map_shards=5 -reduce_shards=2 -shufflers=2 -mapoutput_mb=15 -tmp "${tmp}/tmp" -out "${tmp}/out" -l "${tmp}/LEASE" -s "${tmp}/sch.schema" -r "${rdfs}" } echo "=========================" diff --git a/dgraph/cmd/bulk/split_gz.sh b/dgraph/cmd/bulk/split_gz.sh index 59627e0ca20..bc61b138918 100755 --- a/dgraph/cmd/bulk/split_gz.sh +++ b/dgraph/cmd/bulk/split_gz.sh @@ -3,22 +3,22 @@ set -e if [[ $# != 2 ]]; then - echo "Usage: $0 " - exit 1 + echo "Usage: $0 " + exit 1 fi inDir=$1 outDir=$2 -rm -rf $outDir -mkdir $outDir -for inputFile in $inDir/*.rdf.gz; do - echo Processing: $inputFile - base=$(basename $inputFile | cut -f 1 -d '.') - gunzip < $inputFile | split --lines=10000000 - $outDir/$base$(echo _) +rm -rf "${outDir}" +mkdir "${outDir}" +for inputFile in ${inDir}/*.rdf.gz; do + echo Processing: "${inputFile}" + base=$(basename "${inputFile}" | cut -f 1 -d '.') + gunzip <"${inputFile}" | split --lines=10000000 - "${outDir}"/"${base}"$(echo _) done -for chunkedFile in $outDir/*; do - echo "Zipping: $chunkedFile" - gzip -S .rdf.gz $chunkedFile & +for chunkedFile in ${outDir}/*; do + echo "Zipping: ${chunkedFile}" + gzip -S .rdf.gz "${chunkedFile}" & done wait diff --git a/dgraph/cmd/bulk/systest/run.sh b/dgraph/cmd/bulk/systest/run.sh index 42c22071c25..d01205626e9 100755 --- a/dgraph/cmd/bulk/systest/run.sh +++ b/dgraph/cmd/bulk/systest/run.sh @@ -11,15 +11,15 @@ go install github.com/hypermodeinc/dgraph/cmd/dgraphzero echo "Done." fail=false -for suite in $script_dir/suite*; do - echo Running test suite: $(basename $suite) +for suite in ${script_dir}/suite*; do + echo Running test suite: $(basename "${suite}") rm -rf tmp mkdir tmp pushd tmp >/dev/null mkdir dg pushd dg >/dev/null - $(go env GOPATH)/bin/dgraph-bulk-loader -r $suite/rdfs.rdf -s $suite/schema.txt >/dev/null 2>&1 + $(go env GOPATH)/bin/dgraph-bulk-loader -r "${suite}"/rdfs.rdf -s "${suite}"/schema.txt >/dev/null 2>&1 mv out/0 p popd >/dev/null @@ -37,20 +37,19 @@ for suite in $script_dir/suite*; do sleep 2 popd >/dev/null # out of tmp - result=$(curl --silent -H "Content-Type: application/dql" localhost:8080/query -XPOST -d @$suite/query.json) - if ! $(jq --argfile a <(echo $result) --argfile b $suite/result.json -n 'def post_recurse(f): def r: (f | select(. != null) | r), .; r; def post_recurse: post_recurse(.[]?); ($a | (post_recurse | arrays) |= sort) as $a | ($b | (post_recurse | arrays) |= sort) as $b | $a == $b') - then + result=$(curl --silent -H "Content-Type: application/dql" localhost:8080/query -XPOST -d @"${suite}"/query.json) + if ! $(jq --argfile a <(echo "${result}") --argfile b "${suite}"/result.json -n 'def post_recurse(f): def r: (f | select(. != null) | r), .; r; def post_recurse: post_recurse(.[]?); ($a | (post_recurse | arrays) |= sort) as $a | ($b | (post_recurse | arrays) |= sort) as $b | $a == $b'); then echo "Actual result doesn't match expected result:" - echo "Actual: $result" - echo "Expected: $(cat $suite/result.json)" + echo "Actual: ${result}" + echo "Expected: $(cat "${suite}"/result.json)" fail=true fi - kill $dgPid - kill $dgzPid + kill "${dgPid}" + kill "${dgzPid}" sleep 2 done -if $fail; then +if ${fail}; then exit 1 fi diff --git a/dgraph/cmd/bulk/systest/test-bulk-schema.sh b/dgraph/cmd/bulk/systest/test-bulk-schema.sh index 7dcb8d47fcf..46909d85ed9 100755 --- a/dgraph/cmd/bulk/systest/test-bulk-schema.sh +++ b/dgraph/cmd/bulk/systest/test-bulk-schema.sh @@ -3,110 +3,108 @@ readonly ME=${0##*/} readonly SRCROOT=$(git rev-parse --show-toplevel) -readonly DOCKER_CONF=$SRCROOT/dgraph/cmd/bulk/systest/docker-compose.yml +readonly DOCKER_CONF=${SRCROOT}/dgraph/cmd/bulk/systest/docker-compose.yml declare -ri ZERO_PORT=5180 HTTP_PORT=8180 -INFO() { echo "$ME: $@"; } -ERROR() { echo >&2 "$ME: $@"; } -FATAL() { ERROR "$@"; exit 1; } +INFO() { echo "${ME}: $@"; } +ERROR() { echo >&2 "${ME}: $@"; } +FATAL() { + ERROR "$@" + exit 1 +} function DockerCompose { - docker-compose -p dgraph "$@" + docker-compose -p dgraph "$@" } set -e INFO "rebuilding dgraph" -cd $SRCROOT +cd "${SRCROOT}" make install >/dev/null INFO "running bulk load schema test" -WORKDIR=$(mktemp --tmpdir -d $ME.tmp-XXXXXX) -INFO "using workdir $WORKDIR" -cd $WORKDIR +WORKDIR=$(mktemp --tmpdir -d "${ME}".tmp-XXXXXX) +INFO "using workdir ${WORKDIR}" +cd "${WORKDIR}" -LOGFILE=$WORKDIR/output.log +LOGFILE=${WORKDIR}/output.log trap ErrorExit EXIT -function ErrorExit -{ - local ev=$? - if [[ $ev -ne 0 ]]; then - ERROR "*** unexpected error ***" - if [[ -e $LOGFILE ]]; then - tail -40 $LOGFILE - fi - fi - if [[ ! $DEBUG ]]; then - rm -rf $WORKDIR - fi - exit $ev +function ErrorExit { + local ev=$? + if [[ ${ev} -ne 0 ]]; then + ERROR "*** unexpected error ***" + if [[ -e ${LOGFILE} ]]; then + tail -40 "${LOGFILE}" + fi + fi + if [[ -z ${DEBUG} ]]; then + rm -rf "${WORKDIR}" + fi + exit "${ev}" } -function StartZero -{ - INFO "starting zero container" - DockerCompose -f $DOCKER_CONF up --force-recreate --remove-orphans -d zero1 - TIMEOUT=10 - while [[ $TIMEOUT > 0 ]]; do - if docker logs zero1 2>&1 | grep -q 'CID set'; then - return - else - TIMEOUT=$((TIMEOUT - 1)) - sleep 1 - fi - done - FATAL "failed to start zero" +function StartZero { + INFO "starting zero container" + DockerCompose -f "${DOCKER_CONF}" up --force-recreate --remove-orphans -d zero1 + TIMEOUT=10 + while [[ ${TIMEOUT} > 0 ]]; do + if docker logs zero1 2>&1 | grep -q 'CID set'; then + return + else + TIMEOUT=$((TIMEOUT - 1)) + sleep 1 + fi + done + FATAL "failed to start zero" } -function StartAlpha -{ - local p_dir=$1 - - INFO "starting alpha container" - DockerCompose -f $DOCKER_CONF up --force-recreate --remove-orphans --no-start alpha1 - if [[ $p_dir ]]; then - docker cp $p_dir alpha1:/data/alpha1/ - fi - DockerCompose -f $DOCKER_CONF up -d --remove-orphans alpha1 - - TIMEOUT=10 - while [[ $TIMEOUT > 0 ]]; do - if docker logs alpha1 2>&1 | grep -q 'Got Zero leader'; then - return - else - TIMEOUT=$((TIMEOUT - 1)) - sleep 1 - fi - done - FATAL "failed to start alpha" +function StartAlpha { + local p_dir=$1 + + INFO "starting alpha container" + DockerCompose -f "${DOCKER_CONF}" up --force-recreate --remove-orphans --no-start alpha1 + if [[ -n ${p_dir} ]]; then + docker cp "${p_dir}" alpha1:/data/alpha1/ + fi + DockerCompose -f "${DOCKER_CONF}" up -d --remove-orphans alpha1 + + TIMEOUT=10 + while [[ ${TIMEOUT} > 0 ]]; do + if docker logs alpha1 2>&1 | grep -q 'Got Zero leader'; then + return + else + TIMEOUT=$((TIMEOUT - 1)) + sleep 1 + fi + done + FATAL "failed to start alpha" } -function ResetCluster -{ - INFO "restarting cluster with only one zero and alpha" - DockerCompose -f $DOCKER_CONF down --remove-orphans - StartZero - StartAlpha +function ResetCluster { + INFO "restarting cluster with only one zero and alpha" + DockerCompose -f "${DOCKER_CONF}" down --remove-orphans + StartZero + StartAlpha } -function UpdateDatabase -{ - INFO "adding predicate with default type to schema" - curl localhost:$HTTP_PORT/alter -X POST -d$' +function UpdateDatabase { + INFO "adding predicate with default type to schema" + curl localhost:"${HTTP_PORT}"/alter -X POST -d$' predicate_with_no_uid_count:string . predicate_with_default_type:default . predicate_with_index_no_uid_count:string @index(exact) . ' &>/dev/null - # Wait for background indexing to finish. - # TODO: Use better way of waiting once it's available. - sleep 5 + # Wait for background indexing to finish. + # TODO: Use better way of waiting once it's available. + sleep 5 - curl -H "Content-Type: application/rdf" localhost:$HTTP_PORT/mutate?commitNow=true -X POST -d $' + curl -H "Content-Type: application/rdf" localhost:"${HTTP_PORT}"/mutate?commitNow=true -X POST -d $' { set { _:company1 "CompanyABC" . @@ -115,90 +113,85 @@ predicate_with_index_no_uid_count:string @index(exact) . ' &>/dev/null } -function QuerySchema -{ - INFO "running schema query" - local out_file="schema.out" - curl -sS -H "Content-Type: application/dql" localhost:$HTTP_PORT/query -XPOST -d'schema(pred:[genre,language,name,revenue,predicate_with_default_type,predicate_with_index_no_uid_count,predicate_with_no_uid_count]) {}' | python3 -c "import json,sys; d=json.load(sys.stdin); json.dump(d['data'],sys.stdout,sort_keys=True,indent=2)" > $out_file - echo >> $out_file +function QuerySchema { + INFO "running schema query" + local out_file="schema.out" + curl -sS -H "Content-Type: application/dql" localhost:"${HTTP_PORT}"/query -XPOST -d'schema(pred:[genre,language,name,revenue,predicate_with_default_type,predicate_with_index_no_uid_count,predicate_with_no_uid_count]) {}' | python3 -c "import json,sys; d=json.load(sys.stdin); json.dump(d['data'],sys.stdout,sort_keys=True,indent=2)" >"${out_file}" + echo >>"${out_file}" } -function DoExport -{ - INFO "running export" - docker exec alpha1 curl -Ss -H "Content-Type: application/json" localhost:$HTTP_PORT/admin -XPOST -d '{ "query": "mutation { export(input: {format: \"rdf\"}) { response { code message } }}" }' &>/dev/null - sleep 2 - docker cp alpha1:/data/alpha1/export . - sleep 1 +function DoExport { + INFO "running export" + docker exec alpha1 curl -Ss -H "Content-Type: application/json" localhost:"${HTTP_PORT}"/admin -XPOST -d '{ "query": "mutation { export(input: {format: \"rdf\"}) { response { code message } }}" }' &>/dev/null + sleep 2 + docker cp alpha1:/data/alpha1/export . + sleep 1 } -function BulkLoadExportedData -{ - INFO "bulk loading exported data" - # using a random HTTP port for pprof to avoid collisions with other processes - HTTPPORT=$(( ( RANDOM % 1000 ) + 8080 )) - dgraph bulk -z localhost:$ZERO_PORT --http "localhost:$HTTPPORT"\ - -s ../dir1/export/*/g01.schema.gz \ - -f ../dir1/export/*/g01.rdf.gz \ - >$LOGFILE 2>&1 "${LOGFILE}" 2>&1 fixture.schema <fixture.schema <fixture.rdf <fixture.rdf < "E.T. the Extra-Terrestrial" . _:et "Science Fiction" . _:et "792.9" . EOF - dgraph bulk -z localhost:$ZERO_PORT -s fixture.schema -f fixture.rdf \ - >$LOGFILE 2>&1 "${LOGFILE}" 2>&1 fixture.schema <fixture.schema <fixture.rdf <fixture.rdf < "E.T. the Extra-Terrestrial" . _:et "Science Fiction" . _:et "792.9" . EOF - dgraph bulk -z localhost:$ZERO_PORT -s fixture.schema -f fixture.rdf \ - --map_shards 2 --reduce_shards 2 \ - >$LOGFILE 2>&1 "${LOGFILE}" 2>&1 |/dev/null | grep '{s}' | cut -d' ' -f3 > all_dbs.out - dgraph debug -p out/1/p 2>|/dev/null | grep '{s}' | cut -d' ' -f3 >> all_dbs.out - diff <(LC_ALL=C sort all_dbs.out | uniq -c) - <|/dev/null | grep '{s}' | cut -d' ' -f3 >all_dbs.out + dgraph debug -p out/1/p 2>|/dev/null | grep '{s}' | cut -d' ' -f3 >>all_dbs.out + diff <(LC_ALL=C sort all_dbs.out | uniq -c) - < password = db = ``` - Export the SQL database into a schema and RDF file, e.g. the schema.txt and sql.rdf file below -``` + +```bash dgraph migrate --config config.properties --output_schema schema.txt --output_data sql.rdf ``` -If you are connecting to a remote DB (something hosted on AWS, GCP, etc...), you need to pass the following flags -``` +If you are connecting to a remote DB (something hosted on AWS, GCP, etc...), you need to pass the +following flags + +````bash -- host -- port Import the data into Dgraph with the live loader (the example below is connecting to the Dgraph zero and alpha servers running on the default ports) -``` + +```bash dgraph live -z localhost:5080 -a localhost:9080 --files sql.rdf --format=rdf --schema schema.txt -``` +```` diff --git a/dgraph/docker-compose.yml b/dgraph/docker-compose.yml index 2d468fc0c60..620e21b7ed7 100644 --- a/dgraph/docker-compose.yml +++ b/dgraph/docker-compose.yml @@ -14,7 +14,10 @@ services: source: $GOPATH/bin target: /gobin read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --my=zero1:5080 --replicas 3 --raft="idx=1" --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --my=zero1:5080 --replicas 3 --raft="idx=1" --logtostderr -v=2 --bindall --expose_trace + --profile_mode block --block_rate 10 zero2: image: dgraph/dgraph:local @@ -32,7 +35,9 @@ services: source: $GOPATH/bin target: /gobin read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --my=zero2:5080 --replicas 3 --raft="idx=2" --logtostderr -v=2 --peer=zero1:5080 + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --my=zero2:5080 --replicas 3 --raft="idx=2" --logtostderr -v=2 --peer=zero1:5080 zero3: image: dgraph/dgraph:local @@ -50,7 +55,9 @@ services: source: $GOPATH/bin target: /gobin read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --my=zero3:5080 --replicas 3 --raft="idx=3" --logtostderr -v=2 --peer=zero1:5080 + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --my=zero3:5080 --replicas 3 --raft="idx=3" --logtostderr -v=2 --peer=zero1:5080 alpha1: image: dgraph/dgraph:local @@ -74,9 +81,12 @@ services: labels: cluster: test service: alpha - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --encryption "key-file=/dgraph-enc/enc-key;" --my=alpha1:7080 --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --encryption "key-file=/dgraph-enc/enc-key;" --my=alpha1:7080 + --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 + --logtostderr -v=2 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl + "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" alpha2: image: dgraph/dgraph:local @@ -102,9 +112,12 @@ services: labels: cluster: test service: alpha - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --encryption "key-file=/dgraph-enc/enc-key;" --my=alpha2:7080 --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --encryption "key-file=/dgraph-enc/enc-key;" --my=alpha2:7080 + --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 + --logtostderr -v=2 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl + "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" alpha3: image: dgraph/dgraph:local @@ -130,9 +143,12 @@ services: labels: cluster: test service: alpha - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --encryption "key-file=/dgraph-enc/enc-key;" --my=alpha3:7080 --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --encryption "key-file=/dgraph-enc/enc-key;" --my=alpha3:7080 + --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 + --logtostderr -v=2 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl + "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" alpha4: image: dgraph/dgraph:local @@ -158,9 +174,12 @@ services: labels: cluster: test service: alpha - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --encryption "key-file=/dgraph-enc/enc-key;" --my=alpha4:7080 --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --encryption "key-file=/dgraph-enc/enc-key;" --my=alpha4:7080 + --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 + --logtostderr -v=2 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl + "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" alpha5: image: dgraph/dgraph:local @@ -186,9 +205,12 @@ services: labels: cluster: test service: alpha - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --encryption "key-file=/dgraph-enc/enc-key;" --my=alpha5:7080 --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --encryption "key-file=/dgraph-enc/enc-key;" --my=alpha5:7080 + --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 + --logtostderr -v=2 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl + "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" alpha6: image: dgraph/dgraph:local @@ -214,9 +236,12 @@ services: labels: cluster: test service: alpha - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --encryption "key-file=/dgraph-enc/enc-key;" --my=alpha6:7080 --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --encryption "key-file=/dgraph-enc/enc-key;" --my=alpha6:7080 + --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 + --logtostderr -v=2 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl + "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" minio: image: minio/minio:latest diff --git a/dgraphtest/README.md b/dgraphtest/README.md index bc41996c7c8..b7c8c10a1cd 100644 --- a/dgraphtest/README.md +++ b/dgraphtest/README.md @@ -3,15 +3,18 @@ ### Setup Env Variables 1. set `TEST_DGRAPH_CLOUD_CLUSTER_URL` to the URL that the dgo client should use -2. set `TEST_DGRAPH_CLOUD_CLUSTER_TOKEN` to one of API keys that you can generate on the `Settings` page on the cloud UI -3. `TEST_DGRAPH_CLOUD_ACL` to `false` if ACLs are disabled. By default, ACLs are assumed to be enabled. +2. set `TEST_DGRAPH_CLOUD_CLUSTER_TOKEN` to one of API keys that you can generate on the `Settings` + page on the cloud UI +3. `TEST_DGRAPH_CLOUD_ACL` to `false` if ACLs are disabled. By default, ACLs are assumed to be + enabled. ### Schema Mode -The tests require the `Schema Mode` to be set to `Flexible` from the `Settings` page on the cloud UI. +The tests require the `Schema Mode` to be set to `Flexible` from the `Settings` page on the cloud +UI. ### Running Tests -``` +```bash go test -tags=cloud ./... ``` diff --git a/dql/README.md b/dql/README.md index ea0c9b13a7b..c201a69068c 100644 --- a/dql/README.md +++ b/dql/README.md @@ -1,8 +1,8 @@ -Comparing the old and new methods, we find that using slice makes the parsing 20% faster on -average than using channels. Also, using slices allows the parser to backtrack and peek the -tokens which couldn't be done using channels as each token can only be consumed once. +Comparing the old and new methods, we find that using slice makes the parsing 20% faster on average +than using channels. Also, using slices allows the parser to backtrack and peek the tokens which +couldn't be done using channels as each token can only be consumed once. -``` +```bash Name unit Old New Improvement ---------------------------------------------------------------------- Benchmark_Filters-4 ns/op 14007 9634 31 % diff --git a/ee/README.md b/ee/README.md index 8282dffb902..4130acb636e 100644 --- a/ee/README.md +++ b/ee/README.md @@ -1,4 +1,5 @@ # Dgraph Enterprise Edition (EE) -The files stored here correspond to the Dgraph Enterprise Edition features, which are under the [Dgraph Community License](https://github.com/hypermodeinc/dgraph/blob/main/licenses/DCL.txt) (_not_ the Apache 2 License). - +The files stored here correspond to the Dgraph Enterprise Edition features, which are under the +[Dgraph Community License](https://github.com/hypermodeinc/dgraph/blob/main/licenses/DCL.txt) (_not_ +the Apache 2 License). diff --git a/go.mod b/go.mod index 906f0bff6f1..7447bc92743 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,7 @@ module github.com/hypermodeinc/dgraph/v24 go 1.22.7 +toolchain go1.23.4 require ( contrib.go.opencensus.io/exporter/jaeger v0.2.1 @@ -164,4 +165,4 @@ require ( gotest.tools/v3 v3.5.1 // indirect ) -retract v24.0.3 // should have been a minor release instead of a patch +retract v24.0.3 // should have been a minor release instead of a patch \ No newline at end of file diff --git a/graphql/bench/README.md b/graphql/bench/README.md index adf66451425..51efce81c29 100644 --- a/graphql/bench/README.md +++ b/graphql/bench/README.md @@ -1,14 +1,15 @@ -Compare performance of Auth vs Non-Auth Queries and Mutation. -Queries were benchmarked against pre generated dataset. We had two cases: Single Level Query and Deep Query -For Mutation we benchmarked add, delete and Multi level Mutation. -We also compared the overhead of adding auth rules. -Results and other details are mentioned here +Compare performance of Auth vs Non-Auth Queries and Mutation. Queries were benchmarked against pre +generated dataset. We had two cases: Single Level Query and Deep Query For Mutation we benchmarked +add, delete and Multi level Mutation. We also compared the overhead of adding auth rules. Results +and other details are mentioned + here -To regenerate the benchmark results run it once with Non-Auth schema `schema.graphql` -and compare the result by generating the benchmark with Auth schema `schema_auth.graphql`. +To regenerate the benchmark results run it once with Non-Auth schema `schema.graphql` and compare +the result by generating the benchmark with Auth schema `schema_auth.graphql`. **GraphQL pre and post processing time:**
-```` + +```bash Auth: Benchmark Name | Pre Time | Post Time | Ratio of Processing Time by Actual Time BenchmarkNestedQuery 144549ns 1410978ns 0.14% @@ -20,22 +21,24 @@ Benchmark Name | Pre Time | Post Time | Ratio of Process BenchmarkNestedQuery 117319ns 716261089ns 26.65% BenchmarkOneLevelMutation 29643908ns 83077638ns 2.6% BenchmarkMultiLevelMutation 20579295ns 53566488ns 6.2% -```` +``` + **Summary**: -```` + +```bash Query: Running the Benchmark: Command: go test -bench=. -benchtime=60s - go test -bench=. -benchtime=60s - goos: linux - goarch: amd64 - pkg: github.com/dgraph-io/dgraph/graphql/e2e/auth/bench + go test -bench=. -benchtime=60s + goos: linux + goarch: amd64 + pkg: github.com/dgraph-io/dgraph/graphql/e2e/auth/bench Auth - BenchmarkNestedQuery-8 88 815315761 ns/op - BenchmarkOneLevelQuery-8 4357 15626384 ns/op + BenchmarkNestedQuery-8 88 815315761 ns/op + BenchmarkOneLevelQuery-8 4357 15626384 ns/op Non-Auth - BenchmarkNestedQuery-8 33 2218877846 ns/op - BenchmarkOneLevelQuery-8 4446 16100509 ns/op + BenchmarkNestedQuery-8 33 2218877846 ns/op + BenchmarkOneLevelQuery-8 4446 16100509 ns/op Mutation: @@ -55,4 +58,5 @@ BenchmarkMutation: 0.464559706s BenchmarkMultiLevelMutation: 1.440681796s BenchmarkOneLevelMutation: Add Time: 9.549761333s -Delete Time: 1.200276696s \ No newline at end of file +Delete Time: 1.200276696s +``` diff --git a/graphql/e2e/admin_auth/poorman_auth/docker-compose.yml b/graphql/e2e/admin_auth/poorman_auth/docker-compose.yml index 2841da69d41..eacaf02af6b 100644 --- a/graphql/e2e/admin_auth/poorman_auth/docker-compose.yml +++ b/graphql/e2e/admin_auth/poorman_auth/docker-compose.yml @@ -14,7 +14,10 @@ services: source: $GOPATH/bin target: /gobin read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --my=zero1:5080 --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --my=zero1:5080 --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate + 10 alpha1: image: dgraph/dgraph:local @@ -30,6 +33,8 @@ services: labels: cluster: test service: alpha1 - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16; token=itIsSecret;" - --trace "ratio=1.0;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --expose_trace --profile_mode block --block_rate 10 + --logtostderr -v=2 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16; + token=itIsSecret;" --trace "ratio=1.0;" diff --git a/graphql/e2e/admin_auth/poorman_auth_with_acl/docker-compose.yml b/graphql/e2e/admin_auth/poorman_auth_with_acl/docker-compose.yml index e4197940f43..a79d5449066 100644 --- a/graphql/e2e/admin_auth/poorman_auth_with_acl/docker-compose.yml +++ b/graphql/e2e/admin_auth/poorman_auth_with_acl/docker-compose.yml @@ -14,7 +14,10 @@ services: source: $GOPATH/bin target: /gobin read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --my=zero1:5080 --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --my=zero1:5080 --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate + 10 alpha1: image: dgraph/dgraph:local @@ -34,7 +37,9 @@ services: labels: cluster: test service: alpha1 - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16; token=itIsSecret;" - --acl "secret-file=/dgraph-acl/hmac-secret; access-ttl=3s;" - --trace "ratio=1.0;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --expose_trace --profile_mode block --block_rate 10 + --logtostderr -v=2 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16; + token=itIsSecret;" --acl "secret-file=/dgraph-acl/hmac-secret; access-ttl=3s;" --trace + "ratio=1.0;" diff --git a/graphql/e2e/auth/debug_off/docker-compose.yml b/graphql/e2e/auth/debug_off/docker-compose.yml index 8e81c087440..3ef0d1699bb 100644 --- a/graphql/e2e/auth/debug_off/docker-compose.yml +++ b/graphql/e2e/auth/debug_off/docker-compose.yml @@ -14,7 +14,10 @@ services: source: $GOPATH/bin target: /gobin read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 --my=zero1:5080 + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 + --my=zero1:5080 alpha1: image: dgraph/dgraph:local @@ -30,6 +33,8 @@ services: labels: cluster: test service: alpha1 - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --zero=zero1:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=3 --my=alpha1:7080 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --trace "ratio=1.0;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --zero=zero1:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=3 + --my=alpha1:7080 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --trace + "ratio=1.0;" diff --git a/graphql/e2e/auth/docker-compose.yml b/graphql/e2e/auth/docker-compose.yml index 42c182bdd2f..1a170d44a84 100644 --- a/graphql/e2e/auth/docker-compose.yml +++ b/graphql/e2e/auth/docker-compose.yml @@ -14,7 +14,10 @@ services: source: $GOPATH/bin target: /gobin read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 --my=zero1:5080 + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 + --my=zero1:5080 alpha1: image: dgraph/dgraph:local @@ -30,7 +33,8 @@ services: labels: cluster: test service: alpha1 - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --zero=zero1:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=3 --my=alpha1:7080 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --graphql "debug=true;" - --trace "ratio=1.0;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --zero=zero1:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=3 + --my=alpha1:7080 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --graphql + "debug=true;" --trace "ratio=1.0;" diff --git a/graphql/e2e/auth_closed_by_default/docker-compose.yml b/graphql/e2e/auth_closed_by_default/docker-compose.yml index 6643a992a50..1a170d44a84 100644 --- a/graphql/e2e/auth_closed_by_default/docker-compose.yml +++ b/graphql/e2e/auth_closed_by_default/docker-compose.yml @@ -14,7 +14,10 @@ services: source: $GOPATH/bin target: /gobin read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 --my=zero1:5080 + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 + --my=zero1:5080 alpha1: image: dgraph/dgraph:local @@ -30,7 +33,8 @@ services: labels: cluster: test service: alpha1 - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --zero=zero1:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=3 --my=alpha1:7080 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --graphql "debug=true;" - --trace "ratio=1.0;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --zero=zero1:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=3 + --my=alpha1:7080 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --graphql + "debug=true;" --trace "ratio=1.0;" diff --git a/graphql/e2e/common/README.md b/graphql/e2e/common/README.md index 74c2fc1570e..71f3cf1cc42 100644 --- a/graphql/e2e/common/README.md +++ b/graphql/e2e/common/README.md @@ -1 +1,3 @@ -This package contains test functions which are called by other packages. The intention of this package is to contain all the end to end tests which can be run with different configuration options like schema, encoding, http method etc. \ No newline at end of file +This package contains test functions which are called by other packages. The intention of this +package is to contain all the end to end tests which can be run with different configuration options +like schema, encoding, http method etc. diff --git a/graphql/e2e/common/error_test.yaml b/graphql/e2e/common/error_test.yaml index b17cb0d4f91..6d10599d988 100644 --- a/graphql/e2e/common/error_test.yaml +++ b/graphql/e2e/common/error_test.yaml @@ -1,5 +1,4 @@ -- - name: "Unknown root field" +- name: Unknown root field gqlrequest: | query { getAuthorszzz(id: "0x1") { name } @@ -7,12 +6,16 @@ gqlvariables: | { } errors: - [ { "message": "Cannot query field \"getAuthorszzz\" on type \"Query\". Did you mean - \"getAuthor\" or \"getauthor1\"?", - "locations": [ { "line": 2, "column": 3 } ] } ] + [ + { + "message": + Cannot query field "getAuthorszzz" on type "Query". Did you mean "getAuthor" or + "getauthor1"/?, + "locations": [{ "line": 2, "column": 3 }], + }, + ] -- - name: "Unknown field" +- name: Unknown field gqlrequest: | query { getAuthor(id: "0x1") { namezzz } @@ -20,11 +23,14 @@ gqlvariables: | { } errors: - [ { "message": "Cannot query field \"namezzz\" on type \"Author\". Did you mean \"name\"?", - "locations": [ { "line": 2, "column": 26 } ] } ] + [ + { + "message": 'Cannot query field "namezzz" on type "Author". Did you mean "name"?', + "locations": [{ "line": 2, "column": 26 }], + }, + ] -- - name: "Undefined variable" +- name: Undefined variable gqlrequest: | query { getAuthor(id: $theID) { name } @@ -32,11 +38,9 @@ gqlvariables: | { } errors: - [ { "message": "Variable \"$theID\" is not defined.", - "locations": [ { "line": 2, "column": 17 } ] } ] + [{ "message": Variable "$theID" is not defined., "locations": [{ "line": 2, "column": 17 }] }] -- - name: "input of wrong type" +- name: input of wrong type gqlrequest: | query { queryAuthor(filter: { reputation: { le: "hi there" } }) { name } @@ -44,11 +48,14 @@ gqlvariables: | { } errors: - [ { "message": "Expected type Float, found \"hi there\".", - "locations": [ { "line": 2, "column": 44 } ] } ] + [ + { + "message": 'Expected type Float, found "hi there".', + "locations": [{ "line": 2, "column": 44 }], + }, + ] -- - name: "unknown variable type" +- name: unknown variable type gqlrequest: | query queryAuthor($filter: AuthorFiltarzzz!) { queryAuthor(filter: $filter) { name } @@ -56,40 +63,40 @@ gqlvariables: | { "filter": "type was wrong" } errors: - [ { "message": "Variable type provided AuthorFiltarzzz! is incompatible with expected - type AuthorFilter", - "locations": [{ "line": 2, "column": 23}]}, - { "message": "Variable \"$filter\" of type \"AuthorFiltarzzz!\" used in position - expecting type \"AuthorFilter\".", - "locations": [ { "line": 2, "column": 23 } ] }, - { "message": "Unknown type \"AuthorFiltarzzz\".", - "locations": [ { "line": 1, "column": 1 } ] } ] + [ + { + message": + Variable type provided AuthorFiltarzzz! is incompatible with expected type AuthorFilter, + "locations": [{ "line": 2, "column": 23 }], + }, + { + "message": + Variable "$filter" of type "AuthorFiltarzzz!" used in position expecting type + "AuthorFilter"., + "locations": [{ "line": 2, "column": 23 }], + }, + { "message": Unknown type "AuthorFiltarzzz"., "locations": [{ "line": 1, "column": 1 }] }, + ] -- - name: "variable of wrong type" +- name: variable of wrong type gqlrequest: | query queryAuthor($filter: AuthorFilter!) { queryAuthor(filter: $filter) { name } } gqlvariables: | { "filter": 57 } - errors: - [ { "message": "must be a AuthorFilter", - "path": [ "variable", "filter"] } ] + errors: [{ "message": must be a AuthorFilter, "path": [variable, filter] }] -- - name: "variable field of wrong type" +- name: variable field of wrong type gqlrequest: | query queryAuthor($filter: AuthorFilter!) { queryAuthor(filter: $filter) { name } } gqlvariables: | { } - errors: - [ { "message": "must be defined", - "path": [ "variable", "filter"] } ] -- - name: "subscription on type without @withSubscription directive should return error" + errors: [{ "message": must be defined, "path": [variable, filter] }] + +- name: subscription on type without @withSubscription directive should return error gqlrequest: | subscription { getAuthor(id: "0x1") { name } @@ -97,11 +104,14 @@ gqlvariables: | { } errors: - [ { "message": "Cannot query field \"getAuthor\" on type \"Subscription\".", - "locations": [ { "line": 2, "column": 3 } ] } ] + [ + { + "message": Cannot query field "getAuthor" on type "Subscription"., + "locations": [{ "line": 2, "column": 3 }], + }, + ] -- - name: "@cascade only accepts those fields as a argument, which are present in given type" +- name: "@cascade only accepts those fields as a argument, which are present in given type" gqlrequest: | query { queryAuthor @cascade(fields:["title"]){ @@ -112,12 +122,16 @@ gqlvariables: | { } errors: - [ { "message": "Field `title` is not present in type `Author`. You can only use fields in cascade which are in type `Author`", - "locations": [{ "line": 2, "column": 16}] - } ] + [ + { + "message": + Field `title` is not present in type `Author`. You can only use fields in cascade which + are in type `Author`, + "locations": [{ "line": 2, "column": 16 }], + }, + ] -- - name: "Out of range error for int32 type" +- name: Out of range error for int32 type gqlrequest: | mutation { addPost(input:[{title:"Dgraph",author:{name:"Bob"},numLikes:2147483648}]){ @@ -133,11 +147,14 @@ gqlvariables: | { } errors: - [ { "message": "Out of range value '2147483648', for type `Int`", - "locations": [ { "line": 2, "column": 63 } ] } ] + [ + { + "message": "Out of range value '2147483648', for type `Int`", + "locations": [{ "line": 2, "column": 63 }], + }, + ] -- - name: "Out of range error for int64 type" +- name: Out of range error for int64 type gqlrequest: | mutation { addPost(input:[{title:"Dgraph",author:{name:"Bob"},numViews:9223372036854775808}]){ @@ -153,11 +170,14 @@ gqlvariables: | { } errors: - [ { "message": "Out of range value '9223372036854775808', for type `Int64`", - "locations": [ { "line": 2, "column": 63 } ] } ] + [ + { + "message": "Out of range value '9223372036854775808', for type `Int64`", + "locations": [{ "line": 2, "column": 63 }], + }, + ] -- - name: "@cascade only accepts numUids or given type name as arguments for add or update payload " +- name: "@cascade only accepts numUids or given type name as arguments for add or update payload" gqlrequest: | mutation { addAuthor(input:[{name:"jatin"}]) @cascade(fields:["name"]) { @@ -169,12 +189,16 @@ gqlvariables: | { } errors: - [ { "message": "Field `name` is not present in type `AddAuthorPayload`. You can only use fields in cascade which are in type `AddAuthorPayload`", - "locations": [{ "line": 2, "column": 38}] - } ] + [ + { + "message": + Field `name` is not present in type `AddAuthorPayload`. You can only use fields in cascade + which are in type `AddAuthorPayload`, + "locations": [{ "line": 2, "column": 38 }], + }, + ] -- - name: "String value is Incompatible with Int32 type given in variable" +- name: String value is Incompatible with Int32 type given in variable gqlrequest: | mutation($numLikes:Int) { addPost(input:[{title:"Dgraph",author:{name:"Bob"},numLikes:$numLikes}]){ @@ -189,12 +213,9 @@ } gqlvariables: | { "numLikes": "21474836" } - errors: - [ { "message": "cannot use string as Int", - "path": [ "variable","numLikes" ] } ] + errors: [{ "message": cannot use string as Int, "path": [variable, numLikes] }] -- - name: "Float value is Incompatible with Int64 type" +- name: Float value is Incompatible with Int64 type gqlrequest: | mutation { addPost(input:[{title:"Dgraph",author:{name:"Bob"},numViews:180143985094.0}]){ @@ -210,11 +231,14 @@ gqlvariables: | { } errors: - [ { "message": "Type mismatched for Value `180143985094.0`, expected: Int64, got: 'Float'", - "locations": [ { "line": 2, "column": 63 } ] } ] + [ + { + "message": "Type mismatched for Value `180143985094.0`, expected: Int64, got: 'Float'", + "locations": [{ "line": 2, "column": 63 }], + }, + ] -- - name: "Out of range error for int32 type given in variable" +- name: Out of range error for int32 type given in variable gqlrequest: | mutation($numLikes:Int) { addPost(input:[{title:"Dgraph",author:{name:"Bob"},numLikes:$numLikes}]){ @@ -230,11 +254,9 @@ gqlvariables: | { "numLikes": 2147483648 } errors: - [ { "message": "Out of range value '2147483648', for type `Int`", - "path": [ "variable","numLikes" ] } ] + [{ "message": "Out of range value '2147483648', for type `Int`", "path": [variable, numLikes] }] -- - name: "Out of range error for int64 type in variable" +- name: Out of range error for int64 type in variable gqlrequest: | mutation($numViews:Int64) { addPost(input:[{title:"Dgraph",author:{name:"Bob"},numViews:$numViews}]){ @@ -250,11 +272,14 @@ gqlvariables: | { "numViews":9223372036854775808} errors: - [ { "message": "Out of range value '9223372036854775808', for type `Int64`", - "path": [ "variable", "numViews" ] } ] + [ + { + "message": "Out of range value '9223372036854775808', for type `Int64`", + "path": [variable, numViews], + }, + ] -- - name: "Float value is Incompatible with Int64 type given in variable" +- name: Float value is Incompatible with Int64 type given in variable gqlrequest: | mutation addPost($Post: [AddPostInput!]!){ addPost(input:$Post){ @@ -275,11 +300,14 @@ } ] } errors: - [ { "message": "Type mismatched for Value `180143985094.0`, expected:`Int64`", - "path": [ "variable", "Post",0.0,"numViews" ] } ] + [ + { + "message": "Type mismatched for Value `180143985094.0`, expected:`Int64`", + "path": [variable, Post, 0.0, numViews], + }, + ] -- - name: "Error for int64 value given in list as variable" +- name: Error for int64 value given in list as variable gqlrequest: | mutation addpost1($Post: [Addpost1Input!]!){ addpost1(input:$Post){ @@ -296,10 +324,14 @@ } ] } errors: - [ { "message": "Type mismatched for Value `180143985094.0`, expected:`Int64`", - "path": [ "variable", "Post",0.0,"likesByMonth",0.0 ] } ] + [ + { + "message": "Type mismatched for Value `180143985094.0`, expected:`Int64`", + "path": [variable, Post, 0.0, likesByMonth, 0.0], + }, + ] -- name: "Error for int64 value given in list" +- name: Error for int64 value given in list gqlrequest: | mutation { addpost1(input:[{title:"Dgraph",likesByMonth: [180143985094.0,33,1,66]}]){ @@ -312,11 +344,14 @@ gqlvariables: | { } errors: - [ { "message": "Type mismatched for Value `180143985094.0`, expected: Int64, got: 'Float'", - "locations": [ { "line": 2, "column": 50 } ] } ] + [ + { + "message": "Type mismatched for Value `180143985094.0`, expected: Int64, got: 'Float'", + "locations": [{ "line": 2, "column": 50 }], + }, + ] -- - name: "Error for int value given in list as variable" +- name: Error for int value given in list as variable gqlrequest: | mutation addpost1($Post: [Addpost1Input!]!){ addpost1(input:$Post){ @@ -333,10 +368,14 @@ } ] } errors: - [ { "message": "Out of range value '2147483648', for type `Int`", - "path": [ "variable", "Post",0.0,"commentsByMonth",0.0 ] } ] + [ + { + "message": "Out of range value '2147483648', for type `Int`", + "path": [variable, Post, 0.0, commentsByMonth, 0.0], + }, + ] -- name: "Error for int value given in list" +- name: Error for int value given in list gqlrequest: | mutation { addpost1(input:[{title:"Dgraph",commentsByMonth: [2147483648,33,1,66]}]){ @@ -349,10 +388,14 @@ gqlvariables: | { } errors: - [ { "message": "Out of range value '2147483648', for type `Int`", - "locations": [ { "line": 2, "column": 53 } ] } ] + [ + { + "message": "Out of range value '2147483648', for type `Int`", + "locations": [{ "line": 2, "column": 53 }], + }, + ] -- name: "Error when multiple filter functions are used" +- name: Error when multiple filter functions are used gqlrequest: | query { queryBook(filter:{bookId: {eq:2 le:2}}) @@ -363,11 +406,16 @@ gqlvariables: | { } errors: - [ { "message": "Int64Filter filter expects only one filter function, got: 2", - "locations": [ { "line": 2, "column": 29 } ] } ] + [ + { + "message": "Int64Filter filter expects only one filter function, got: 2", + "locations": [{ "line": 2, "column": 29 }], + }, + ] -- - name: "@cascade only accepts those fields as a argument, which are present in given type at both root and deep levels" +- name: + "@cascade only accepts those fields as a argument, which are present in given type at both root + and deep levels" gqlrequest: | query { queryAuthor @cascade(fields: ["dob","reputation"]) { @@ -380,12 +428,18 @@ } } errors: - [ { "message": "Field `text1` is not present in type `Post`. You can only use fields in cascade which are in type `Post`", - "locations": [{ "line": 5, "column": 10}] - } ] + [ + { + "message": + Field `text1` is not present in type `Post`. You can only use fields in cascade which are + in type `Post`, + "locations": [{ "line": 5, "column": 10 }], + }, + ] -- - name: "@cascade only accepts those fields as a argument, which are present in given type at deep level using variables" +- name: + "@cascade only accepts those fields as a argument, which are present in given type at deep level + using variables" gqlrequest: | query($fieldsRoot: [String], $fieldsDeep: [String]) { queryAuthor @cascade(fields: $fieldsRoot) { @@ -408,12 +462,18 @@ ] } errors: - [ { "message": "input: variables.fieldsDeep.text1 Field `text1` is not present in type `Post`. You can only use fields in cascade which are in type `Post`", - "locations": [{ "line": 5, "column": 10}] - } ] + [ + { + "message": + "input: variables.fieldsDeep.text1 Field `text1` is not present in type `Post`. You can + only use fields in cascade which are in type `Post`", + "locations": [{ "line": 5, "column": 10 }], + }, + ] -- - name: "@cascade only accepts those fields as a argument, which are present in given type at root level using variables" +- name: + "@cascade only accepts those fields as a argument, which are present in given type at root level + using variables" gqlrequest: | query($fieldsRoot: [String], $fieldsDeep: [String]) { queryAuthor @cascade(fields: $fieldsRoot) { @@ -436,6 +496,11 @@ ] } errors: - [ { "message": "input: variables.fieldsRoot.reputation1 Field `reputation1` is not present in type `Author`. You can only use fields in cascade which are in type `Author`", - "locations": [{ "line": 2, "column": 15}] - } ] + [ + { + "message": + "input: variables.fieldsRoot.reputation1 Field `reputation1` is not present in type + `Author`. You can only use fields in cascade which are in type `Author`", + "locations": [{ "line": 2, "column": 15 }], + }, + ] diff --git a/graphql/e2e/custom_logic/README.md b/graphql/e2e/custom_logic/README.md index 7bff03f161d..80f035d5a2b 100644 --- a/graphql/e2e/custom_logic/README.md +++ b/graphql/e2e/custom_logic/README.md @@ -1,8 +1,7 @@ -The test file should be run after bringing up the docker containers via docker-compose. -Since the tests rely on a mock server, which is implemented via cmd/main.go, run the following -command. +The test file should be run after bringing up the docker containers via docker-compose. Since the +tests rely on a mock server, which is implemented via cmd/main.go, run the following command. -``` +```bash docker-compose up --build ``` diff --git a/graphql/e2e/custom_logic/cmd/go.mod b/graphql/e2e/custom_logic/cmd/go.mod index 41e29f4740c..dead160ff45 100644 --- a/graphql/e2e/custom_logic/cmd/go.mod +++ b/graphql/e2e/custom_logic/cmd/go.mod @@ -1,8 +1,8 @@ module github.com/hypermodeinc/dgraph/graphql/e2e/custom_logic/cmd -go 1.19 +go 1.22.7 require ( github.com/graph-gophers/graphql-go v1.5.0 gopkg.in/yaml.v2 v2.4.0 -) +) \ No newline at end of file diff --git a/graphql/e2e/custom_logic/cmd/graphqlresponse.yaml b/graphql/e2e/custom_logic/cmd/graphqlresponse.yaml index 91ac57accd7..5a63b4e0520 100644 --- a/graphql/e2e/custom_logic/cmd/graphqlresponse.yaml +++ b/graphql/e2e/custom_logic/cmd/graphqlresponse.yaml @@ -1,5 +1,5 @@ -- name: "validinputfield" - description: "Test case for validating remote input type with valid local input type." +- name: validinputfield + description: Test case for validating remote input type with valid local input type schema: | type Country { code: String @@ -15,70 +15,71 @@ countries(filter: CountryInput!): [Country!]! } -- name: "invalidfield" - description: "Test case for validating remote input type with invalid local input type." +- name: invalidfield + description: Test case for validating remote input type with invalid local input type schema: | - type Country { - code: String - name: String - states: [State] - std: Int - } + type Country { + code: String + name: String + states: [State] + std: Int + } - type State @remote { - code: String - name: String - country: Country - } + type State @remote { + code: String + name: String + country: Country + } - input CountryInput { - code: Int! - name: String! - states: [StateInput] - } + input CountryInput { + code: Int! + name: String! + states: [StateInput] + } - input StateInput { - code: String! - name: String! - } + input StateInput { + code: String! + name: String! + } - type Query{ - countries(filter: CountryInput!): [Country!]! - } + type Query{ + countries(filter: CountryInput!): [Country!]! + } -- name: "nestedinvalid" - description: "Test case to type check nested types." +- name: nestedinvalid + description: Test case to type check nested types schema: | - type Country @remote { - code: String - name: String - states: [State] - std: Int - } + type Country @remote { + code: String + name: String + states: [State] + std: Int + } - type State @remote { - code: String - name: String - country: Country - } + type State @remote { + code: String + name: String + country: Country + } - input CountryInput { - code: String! - name: String! - states: [StateInput] - } + input CountryInput { + code: String! + name: String! + states: [StateInput] + } - input StateInput { - code: String! - name: Int! - } + input StateInput { + code: String! + name: Int! + } - type Query{ - countries(filter: CountryInput!): [Country!]! - } + type Query{ + countries(filter: CountryInput!): [Country!]! + } -- name: "validcountry" - description: "Test case to check return type is valid and results are properly rewritten by the dgraph" +- name: validcountry + description: + Test case to check return type is valid and results are properly rewritten by the dgraph schema: | type Country { code: String @@ -89,8 +90,8 @@ country(code: ID!): Country! } -- name: "argsonfields" - description: "Test case to check args on fields can be passed by Dgraph" +- name: argsonfields + description: Test case to check args on fields can be passed by Dgraph schema: | type Country { code(size: Int!): String @@ -117,36 +118,36 @@ } } -- name: "validcountrywitherror" - description: "Test case to validate dgraph can handle both valid data and error" +- name: validcountrywitherror + description: Test case to validate dgraph can handle both valid data and error schema: | - type Country @remote { - code: String - name: String - states: [State] - std: Int - } + type Country @remote { + code: String + name: String + states: [State] + std: Int + } - type State @remote { - code: String - name: String - country: Country - } + type State @remote { + code: String + name: String + country: Country + } - input CountryInput { - code: String! - name: String! - states: [StateInput] - } + input CountryInput { + code: String! + name: String! + states: [StateInput] + } - input StateInput { - code: String! - name: String! - } + input StateInput { + code: String! + name: String! + } - type Query{ - country(code: ID!): Country! - } + type Query{ + country(code: ID!): Country! + } request: | query($id: ID!) { country(code: $id) { code @@ -169,8 +170,8 @@ variables: | {"id":"BI"} -- name: "validcountries" - description: "Test case to validate return multiple entities as part of graphql response" +- name: validcountries + description: Test case to validate return multiple entities as part of graphql response schema: | type Country { code: String @@ -181,36 +182,36 @@ validCountries(code: ID!): [Country] } -- name: "graphqlerr" - description: "Test case to validate whether dgraph can handle graphql error" +- name: graphqlerr + description: Test case to validate whether dgraph can handle graphql error schema: | - type Country @remote { - code: String - name: String - states: [State] - std: Int - } + type Country @remote { + code: String + name: String + states: [State] + std: Int + } - type State @remote { - code: String - name: String - country: Country - } + type State @remote { + code: String + name: String + country: Country + } - input CountryInput { - code: String! - name: String! - states: [StateInput] - } + input CountryInput { + code: String! + name: String! + states: [StateInput] + } - input StateInput { - code: String! - name: String! - } + input StateInput { + code: String! + name: String! + } - type Query{ - country(code: ID!): [Country] - } + type Query{ + country(code: ID!): [Country] + } request: | query($id: ID!) { country(code: $id) { code @@ -227,8 +228,8 @@ variables: | {"id":"BI"} -- name: "setcountry" - description: "Test case to validate graphql mutation" +- name: setcountry + description: Test case to validate graphql mutation schema: | type Country { code: String @@ -292,40 +293,40 @@ variables: | {"input":{"code":"IN","name":"India","states":[{"code":"RJ","name":"Rajasthan"},{"code":"KA","name":"Karnataka"}]}} -- name: "updatecountries" - description: "Test case to validate custom logic mutation update" +- name: updatecountries + description: Test case to validate custom logic mutation update schema: | - type Country @remote { - code: String - name: String - states: [State] - std: Int - } + type Country @remote { + code: String + name: String + states: [State] + std: Int + } - type State @remote { - code: String - name: String - country: Country - } + type State @remote { + code: String + name: String + country: Country + } - input CountryInput { - code: String! - name: String! - states: [StateInput] - } + input CountryInput { + code: String! + name: String! + states: [StateInput] + } - input StateInput { - code: String! - name: String! - } + input StateInput { + code: String! + name: String! + } - type Mutation{ - updateCountries(name: String, std: Int): [Country!]! - } + type Mutation{ + updateCountries(name: String, std: Int): [Country!]! + } - type Query{ - country(code: ID!): [Country] - } + type Query{ + country(code: ID!): [Country] + } request: | mutation($name: String, $std: Int) { updateCountries(name: $name, std: $std) { name @@ -355,7 +356,7 @@ %s(%s:ID!): String } -- name: "introspectionresults" +- name: introspectionresults schema: | input UserInput{ id: ID! @@ -437,7 +438,7 @@ getPosts(input: [PostFilterInput]): [Post!] } -- name: "carsschema" +- name: carsschema schema: | type Car { id: ID! @@ -470,41 +471,41 @@ - name: invalidargument schema: | - type Country @remote { - code: String - name: String - states: [State] - std: Int - } + type Country @remote { + code: String + name: String + states: [State] + std: Int + } - type State @remote { - code: String - name: String - country: Country - } + type State @remote { + code: String + name: String + country: Country + } - type Query{ - country(no_code: ID!): Country! - } + type Query{ + country(no_code: ID!): Country! + } - name: invalidtype schema: | - type Country @remote { - code: String - name: String - states: [State] - std: Int - } + type Country @remote { + code: String + name: String + states: [State] + std: Int + } - type State @remote { - code: String - name: String - country: Country - } + type State @remote { + code: String + name: String + country: Country + } - type Query{ - country(code: Int!): Country! - } + type Query{ + country(code: Int!): Country! + } - name: invalidinputbatchedfield schema: | @@ -526,4 +527,4 @@ } type Query{ getPosts(input: PostFilterInput): [Post!] - } \ No newline at end of file + } diff --git a/graphql/e2e/custom_logic/cmd/index.js b/graphql/e2e/custom_logic/cmd/index.js index 448d471bde7..b0070bffae3 100644 --- a/graphql/e2e/custom_logic/cmd/index.js +++ b/graphql/e2e/custom_logic/cmd/index.js @@ -1,9 +1,9 @@ -const graphql = require("graphql"); +const graphql = require("graphql") // build internal graphql schema. -const graphqlSchemaObj = graphql.buildSchema(process.argv[2]); +const graphqlSchemaObj = graphql.buildSchema(process.argv[2]) // introspect and print the introspection result to stdout. graphql.graphql(graphqlSchemaObj, graphql.introspectionQuery).then((res) => { - console.log(JSON.stringify(res)) -}) \ No newline at end of file + console.log(JSON.stringify(res)) +}) diff --git a/graphql/e2e/custom_logic/docker-compose.yml b/graphql/e2e/custom_logic/docker-compose.yml index 57aad77b2b6..7ad420456fd 100644 --- a/graphql/e2e/custom_logic/docker-compose.yml +++ b/graphql/e2e/custom_logic/docker-compose.yml @@ -8,37 +8,39 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft="idx=1;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --raft="idx=1;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 --replicas=1 --logtostderr - -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --raft="idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall mock: build: context: ./cmd labels: cluster: test ports: - - 8888 + - 8888 volumes: {} diff --git a/graphql/e2e/directives/docker-compose.yml b/graphql/e2e/directives/docker-compose.yml index 308c493a2bf..fb56b7f9550 100644 --- a/graphql/e2e/directives/docker-compose.yml +++ b/graphql/e2e/directives/docker-compose.yml @@ -14,7 +14,10 @@ services: source: $GOPATH/bin target: /gobin read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 --my=zero1:5080 + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 + --my=zero1:5080 alpha1: image: dgraph/dgraph:local @@ -30,11 +33,11 @@ services: labels: cluster: test service: alpha1 - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --zero=zero1:5080 --expose_trace - --profile_mode block --block_rate 10 --logtostderr -v=2 --my=alpha1:7080 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --graphql "lambda-url=http://lambda:8686/graphql-worker;" - --trace "ratio=1.0;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --zero=zero1:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=2 + --my=alpha1:7080 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --graphql + "lambda-url=http://lambda:8686/graphql-worker;" --trace "ratio=1.0;" lambda: image: dgraph/dgraph-lambda:latest diff --git a/graphql/e2e/directives/script.js b/graphql/e2e/directives/script.js index fd9116645d8..3dc27ef0d9e 100644 --- a/graphql/e2e/directives/script.js +++ b/graphql/e2e/directives/script.js @@ -1,71 +1,80 @@ -const authorBio = ({parent: {name, dob}}) => `My name is ${name} and I was born on ${dob}.` -const characterBio = ({parent: {name}}) => `My name is ${name}.` -const humanBio = ({parent: {name, totalCredits}}) => `My name is ${name}. I have ${totalCredits} credits.` -const droidBio = ({parent: {name, primaryFunction}}) => `My name is ${name}. My primary function is ${primaryFunction}.` +const authorBio = ({ parent: { name, dob } }) => `My name is ${name} and I was born on ${dob}.` +const characterBio = ({ parent: { name } }) => `My name is ${name}.` +const humanBio = ({ parent: { name, totalCredits } }) => + `My name is ${name}. I have ${totalCredits} credits.` +const droidBio = ({ parent: { name, primaryFunction } }) => + `My name is ${name}. My primary function is ${primaryFunction}.` const summary = () => `hi` -const astronautBio = ({parent: {name, age, isActive}}) => `Name - ${name}, Age - ${age}, isActive - ${isActive}` +const astronautBio = ({ parent: { name, age, isActive } }) => + `Name - ${name}, Age - ${age}, isActive - ${isActive}` -async function authorsByName({args, dql}) { - const results = await dql.query(`query queryAuthor($name: string) { +async function authorsByName({ args, dql }) { + const results = await dql.query( + `query queryAuthor($name: string) { queryAuthor(func: type(test.dgraph.author)) @filter(eq(test.dgraph.author.name, $name)) { name: test.dgraph.author.name dob: test.dgraph.author.dob reputation: test.dgraph.author.reputation } - }`, {"$name": args.name}) - return results.data.queryAuthor + }`, + { $name: args.name }, + ) + return results.data.queryAuthor } -async function newAuthor({args, graphql}) { - // lets give every new author a reputation of 3 by default - const results = await graphql(`mutation ($name: String!) { - addAuthor(input: [{name: $name, reputation: 3.0 }]) { - author { - id - reputation - } +async function newAuthor({ args, graphql }) { + // lets give every new author a reputation of 3 by default + const results = await graphql( + ` + mutation ($name: String!) { + addAuthor(input: [{ name: $name, reputation: 3.0 }]) { + author { + id + reputation + } } - }`, {"name": args.name}) - return results.data.addAuthor.author[0].id + } + `, + { name: args.name }, + ) + return results.data.addAuthor.author[0].id } self.addGraphQLResolvers({ - "Author.bio": authorBio, - "Character.bio": characterBio, - "Human.bio": humanBio, - "Droid.bio": droidBio, - "Book.summary": summary, - "Astronaut.bio": astronautBio, - "Query.authorsByName": authorsByName, - "Mutation.newAuthor": newAuthor + "Author.bio": authorBio, + "Character.bio": characterBio, + "Human.bio": humanBio, + "Droid.bio": droidBio, + "Book.summary": summary, + "Astronaut.bio": astronautBio, + "Query.authorsByName": authorsByName, + "Mutation.newAuthor": newAuthor, }) -async function rank({parents}) { - const idRepList = parents.map(function (parent) { - return {id: parent.id, rep: parent.reputation} - }); - const idRepMap = {}; - idRepList.sort((a, b) => a.rep > b.rep ? -1 : 1) - .forEach((a, i) => idRepMap[a.id] = i + 1) - return parents.map(p => idRepMap[p.id]) +async function rank({ parents }) { + const idRepList = parents.map(function (parent) { + return { id: parent.id, rep: parent.reputation } + }) + const idRepMap = {} + idRepList.sort((a, b) => (a.rep > b.rep ? -1 : 1)).forEach((a, i) => (idRepMap[a.id] = i + 1)) + return parents.map((p) => idRepMap[p.id]) } self.addMultiParentGraphQLResolvers({ - "Author.rank": rank + "Author.rank": rank, }) async function districtWebhook({ dql, graphql, authHeader, event }) { - // forward the event to the changelog server running on the host machine - await fetch(`http://172.17.0.1:8888/changelog`, { - method: "POST", - body: JSON.stringify(event) - }) - // just return, nothing else to do with response + // forward the event to the changelog server running on the host machine + await fetch(`http://172.17.0.1:8888/changelog`, { + method: "POST", + body: JSON.stringify(event), + }) + // just return, nothing else to do with response } self.addWebHookResolvers({ - "District.add": districtWebhook, - "District.update": districtWebhook, - "District.delete": districtWebhook, + "District.add": districtWebhook, + "District.update": districtWebhook, + "District.delete": districtWebhook, }) - diff --git a/graphql/e2e/multi_tenancy/docker-compose.yml b/graphql/e2e/multi_tenancy/docker-compose.yml index 9d0bcfe6d10..9233752f196 100644 --- a/graphql/e2e/multi_tenancy/docker-compose.yml +++ b/graphql/e2e/multi_tenancy/docker-compose.yml @@ -8,80 +8,84 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../ee/acl/hmac-secret - target: /dgraph-acl/hmac-secret - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=1;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/dgraph-acl/hmac-secret; access-ttl=3000s;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../ee/acl/hmac-secret + target: /dgraph-acl/hmac-secret + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=1;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl + "secret-file=/dgraph-acl/hmac-secret; access-ttl=3000s;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 depends_on: - - alpha1 + - alpha1 labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../ee/acl/hmac-secret - target: /dgraph-acl/hmac-secret - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=2;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/dgraph-acl/hmac-secret; access-ttl=3000s;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../ee/acl/hmac-secret + target: /dgraph-acl/hmac-secret + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=2;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl + "secret-file=/dgraph-acl/hmac-secret; access-ttl=3000s;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 depends_on: - - alpha2 + - alpha2 labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../ee/acl/hmac-secret - target: /dgraph-acl/hmac-secret - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=3;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/dgraph-acl/hmac-secret; access-ttl=3000s;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../ee/acl/hmac-secret + target: /dgraph-acl/hmac-secret + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=3;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl + "secret-file=/dgraph-acl/hmac-secret; access-ttl=3000s;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --replicas=1 --logtostderr - -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall volumes: {} diff --git a/graphql/e2e/normal/docker-compose.yml b/graphql/e2e/normal/docker-compose.yml index 308c493a2bf..fb56b7f9550 100644 --- a/graphql/e2e/normal/docker-compose.yml +++ b/graphql/e2e/normal/docker-compose.yml @@ -14,7 +14,10 @@ services: source: $GOPATH/bin target: /gobin read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 --my=zero1:5080 + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 + --my=zero1:5080 alpha1: image: dgraph/dgraph:local @@ -30,11 +33,11 @@ services: labels: cluster: test service: alpha1 - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --zero=zero1:5080 --expose_trace - --profile_mode block --block_rate 10 --logtostderr -v=2 --my=alpha1:7080 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --graphql "lambda-url=http://lambda:8686/graphql-worker;" - --trace "ratio=1.0;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --zero=zero1:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=2 + --my=alpha1:7080 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --graphql + "lambda-url=http://lambda:8686/graphql-worker;" --trace "ratio=1.0;" lambda: image: dgraph/dgraph-lambda:latest diff --git a/graphql/e2e/normal/script.js b/graphql/e2e/normal/script.js index 1077c1b2a36..761b69b3116 100644 --- a/graphql/e2e/normal/script.js +++ b/graphql/e2e/normal/script.js @@ -1,57 +1,67 @@ -const authorBio = ({parent: {name, dob}}) => `My name is ${name} and I was born on ${dob}.` -const characterBio = ({parent: {name}}) => `My name is ${name}.` -const humanBio = ({parent: {name, totalCredits}}) => `My name is ${name}. I have ${totalCredits} credits.` -const droidBio = ({parent: {name, primaryFunction}}) => `My name is ${name}. My primary function is ${primaryFunction}.` +const authorBio = ({ parent: { name, dob } }) => `My name is ${name} and I was born on ${dob}.` +const characterBio = ({ parent: { name } }) => `My name is ${name}.` +const humanBio = ({ parent: { name, totalCredits } }) => + `My name is ${name}. I have ${totalCredits} credits.` +const droidBio = ({ parent: { name, primaryFunction } }) => + `My name is ${name}. My primary function is ${primaryFunction}.` const summary = () => `hi` -const astronautBio = ({parent: {name, age, isActive}}) => `Name - ${name}, Age - ${age}, isActive - ${isActive}` +const astronautBio = ({ parent: { name, age, isActive } }) => + `Name - ${name}, Age - ${age}, isActive - ${isActive}` -async function authorsByName({args, dql}) { - const results = await dql.query(`query queryAuthor($name: string) { +async function authorsByName({ args, dql }) { + const results = await dql.query( + `query queryAuthor($name: string) { queryAuthor(func: type(Author)) @filter(eq(Author.name, $name)) { name: Author.name dob: Author.dob reputation: Author.reputation } - }`, {"$name": args.name}) - return results.data.queryAuthor + }`, + { $name: args.name }, + ) + return results.data.queryAuthor } -async function newAuthor({args, graphql}) { - // lets give every new author a reputation of 3 by default - const results = await graphql(`mutation ($name: String!) { - addAuthor(input: [{name: $name, reputation: 3.0 }]) { - author { - id - reputation - } +async function newAuthor({ args, graphql }) { + // lets give every new author a reputation of 3 by default + const results = await graphql( + ` + mutation ($name: String!) { + addAuthor(input: [{ name: $name, reputation: 3.0 }]) { + author { + id + reputation + } } - }`, {"name": args.name}) - return results.data.addAuthor.author[0].id + } + `, + { name: args.name }, + ) + return results.data.addAuthor.author[0].id } self.addGraphQLResolvers({ - "Author.bio": authorBio, - "Character.bio": characterBio, - "Human.bio": humanBio, - "Droid.bio": droidBio, - "Book.summary": summary, - "Astronaut.bio": astronautBio, - "Query.authorsByName": authorsByName, - "Mutation.newAuthor": newAuthor + "Author.bio": authorBio, + "Character.bio": characterBio, + "Human.bio": humanBio, + "Droid.bio": droidBio, + "Book.summary": summary, + "Astronaut.bio": astronautBio, + "Query.authorsByName": authorsByName, + "Mutation.newAuthor": newAuthor, }) -async function rank({parents}) { - const idRepList = parents.map(function (parent) { - return {id: parent.id, rep: parent.reputation} - }); - const idRepMap = {}; - idRepList.sort((a, b) => a.rep > b.rep ? -1 : 1) - .forEach((a, i) => idRepMap[a.id] = i + 1) - return parents.map(p => idRepMap[p.id]) +async function rank({ parents }) { + const idRepList = parents.map(function (parent) { + return { id: parent.id, rep: parent.reputation } + }) + const idRepMap = {} + idRepList.sort((a, b) => (a.rep > b.rep ? -1 : 1)).forEach((a, i) => (idRepMap[a.id] = i + 1)) + return parents.map((p) => idRepMap[p.id]) } self.addMultiParentGraphQLResolvers({ - "Author.rank": rank + "Author.rank": rank, }) // TODO(GRAPHQL-1123): need to find a way to make it work on TeamCity machines. @@ -59,17 +69,16 @@ self.addMultiParentGraphQLResolvers({ // work in teamcity machines, neither does `host.docker.internal` works there. So, we are // skipping the related test for now. async function districtWebhook({ dql, graphql, authHeader, event }) { - // forward the event to the changelog server running on the host machine - await fetch(`http://172.17.0.1:8888/changelog`, { - method: "POST", - body: JSON.stringify(event) - }) - // just return, nothing else to do with response + // forward the event to the changelog server running on the host machine + await fetch(`http://172.17.0.1:8888/changelog`, { + method: "POST", + body: JSON.stringify(event), + }) + // just return, nothing else to do with response } self.addWebHookResolvers({ - "District.add": districtWebhook, - "District.update": districtWebhook, - "District.delete": districtWebhook, + "District.add": districtWebhook, + "District.update": districtWebhook, + "District.delete": districtWebhook, }) - diff --git a/graphql/e2e/schema/docker-compose.yml b/graphql/e2e/schema/docker-compose.yml index 0349ecaa102..7eb4f0a2716 100644 --- a/graphql/e2e/schema/docker-compose.yml +++ b/graphql/e2e/schema/docker-compose.yml @@ -12,16 +12,17 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=1;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=1;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 @@ -30,20 +31,21 @@ services: soft: 1024 hard: 1024 depends_on: - - alpha1 + - alpha1 labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=2;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=2;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 @@ -52,33 +54,35 @@ services: soft: 1024 hard: 1024 depends_on: - - alpha2 + - alpha2 labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=3;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=3;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --replicas=1 --logtostderr - -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall volumes: {} diff --git a/graphql/e2e/subscription/docker-compose.yml b/graphql/e2e/subscription/docker-compose.yml index 6fed036ff0d..d374d6cd958 100644 --- a/graphql/e2e/subscription/docker-compose.yml +++ b/graphql/e2e/subscription/docker-compose.yml @@ -8,65 +8,69 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft="idx=1;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --raft="idx=1;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 depends_on: - - alpha1 + - alpha1 labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft="idx=2;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 --raft="idx=2;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 depends_on: - - alpha2 + - alpha2 labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft="idx=3;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 --raft="idx=3;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - 580 - - 6080 + - 580 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 --replicas=1 --logtostderr - -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --raft="idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall volumes: {} diff --git a/graphql/resolve/add_mutation_test.yaml b/graphql/resolve/add_mutation_test.yaml index 7c5202db9a6..1f91c6b4844 100644 --- a/graphql/resolve/add_mutation_test.yaml +++ b/graphql/resolve/add_mutation_test.yaml @@ -1,5 +1,4 @@ -- - name: "Add mutation geo field - Point type" +- name: Add mutation geo field - Point type gqlmutation: | mutation addHotel($hotel: AddHotelInput!) { addHotel(input: [$hotel]) { @@ -19,7 +18,8 @@ } } qnametouid: | - explanation: "Add mutation should convert the Point type mutation to corresponding Dgraph JSON mutation" + explanation: + Add mutation should convert the Point type mutation to corresponding Dgraph JSON mutation dgmutations: - setjson: | { "uid":"_:Hotel_1", @@ -31,8 +31,7 @@ } } -- - name: "Add mutation geo field - Polygon type" +- name: Add mutation geo field - Polygon type gqlmutation: | mutation addHotel($hotel: AddHotelInput!) { addHotel(input: [$hotel]) { @@ -79,7 +78,8 @@ } } } - explanation: "Add mutation should convert the Polygon type mutation to corresponding Dgraph JSON mutation" + explanation: + Add mutation should convert the Polygon type mutation to corresponding Dgraph JSON mutation dgmutations: - setjson: | { @@ -92,8 +92,7 @@ } } -- - name: "Add mutation geo field - MultiPolygon type" +- name: Add mutation geo field - MultiPolygon type gqlmutation: | mutation addHotel($hotel: AddHotelInput!) { addHotel(input: [$hotel]) { @@ -168,7 +167,8 @@ } } } - explanation: "Add mutation should convert the MultiPolygon type mutation to corresponding Dgraph JSON mutation" + explanation: + Add mutation should convert the MultiPolygon type mutation to corresponding Dgraph JSON mutation dgmutations: - setjson: | { @@ -181,8 +181,7 @@ } } -- - name: "Add mutation with variables" +- name: Add mutation with variables gqlmutation: | mutation addAuthor($auth: AddAuthorInput!) { addAuthor(input: [$auth]) { @@ -198,8 +197,8 @@ "posts": [] } } - explanation: "A uid and type should get injected and all data transformed to - underlying Dgraph edge names" + explanation: + A uid and type should get injected and all data transformed to underlying Dgraph edge names dgmutations: - setjson: | { "uid":"_:Author_1", @@ -209,8 +208,7 @@ "Author.posts":[] } -- - name: "Add deep mutation with variables" +- name: Add deep mutation with variables gqlmutation: | mutation addAuthor($auth: AddAuthorInput!) { addAuthor(input: [$auth]) { @@ -249,8 +247,9 @@ }] } } - explanation: "A uid and type should get injected and all data transformed to - underlying Dgraph edge names. Some PostSecrets are present and are not created." + explanation: + A uid and type should get injected and all data transformed to underlying Dgraph edge names. + Some PostSecrets are present and are not created dgquery: |- query { PostSecret_1(func: eq(PostSecret.title, "ps1")) { @@ -416,8 +415,7 @@ "uid":"_:Author_9" } -- - name: "Add mutation for predicates with special characters having @dgraph directive." +- name: Add mutation for predicates with special characters having @dgraph directive gqlmutation: | mutation { addMessage(input : [{content : "content1", author: "author1"}]) { @@ -436,8 +434,7 @@ "post":"content1" } -- - name: "Add multiple mutation with variables" +- name: Add multiple mutation with variables gqlmutation: | mutation addAuthor($auth: [AddAuthorInput!]!) { addAuthor(input: $auth) { @@ -456,8 +453,8 @@ } ] } - explanation: "A uid and type should get injected and all data transformed to - underlying Dgraph edge names" + explanation: + A uid and type should get injected and all data transformed to underlying Dgraph edge names dgmutations: - setjson: | { "uid":"_:Author_1", @@ -470,8 +467,7 @@ "Author.name":"Different Author" } -- - name: "Add Mutation with object at root instead of an array" +- name: Add Mutation with object at root instead of an array" gqlmutation: | mutation addAuthor { addAuthor(input: { name: "A.N. Author"}) { @@ -480,8 +476,8 @@ } } } - explanation: "The input being an object should also work because of the input coercion rules - for input objects." + explanation: + The input being an object should also work because of the input coercion rules for input objects dgmutations: - setjson: | { "uid":"_:Author_1", @@ -489,9 +485,7 @@ "Author.name":"A.N. Author" } - -- - name: "Add Mutation with embedded value" +- name: Add Mutation with embedded value gqlmutation: | mutation addAuthor { addAuthor(input: [{ name: "A.N. Author", posts: []}]) { @@ -500,8 +494,9 @@ } } } - explanation: "The input should be used for the mutation, with a uid and type getting - injected and all data transformed to underlying Dgraph edge names" + explanation: + The input should be used for the mutation, with a uid and type getting injected and all data + transformed to underlying Dgraph edge names dgmutations: - setjson: | { "uid":"_:Author_1", @@ -510,8 +505,7 @@ "Author.posts":[] } -- - name: "Add Mutation with Password field" +- name: Add Mutation with Password field gqlmutation: | mutation addUser($name: String!, $pwd: String!) { addUser(input: [{ name: $name, pwd: $pwd}]) { @@ -522,8 +516,9 @@ } gqlvariables: | { "name": "A.N. Author", "pwd": "Password" } - explanation: "The input and variables should be used for the mutation, with a uid and type - getting injected and all data transformed to underlying Dgraph edge names" + explanation: + The input and variables should be used for the mutation, with a uid and type getting injected + and all data transformed to underlying Dgraph edge names dgquery: |- query { User_1(func: eq(User.name, "A.N. Author")) { @@ -540,8 +535,7 @@ "User.pwd":"Password" } -- - name: "Add Multiple Mutations with embedded value" +- name: Add Multiple Mutations with embedded value gqlmutation: | mutation addAuthor { addAuthor(input: [{ name: "A.N. Author", posts: []}, @@ -551,8 +545,9 @@ } } } - explanation: "The input should be used for the mutation, with a uid and type getting - injected and all data transformed to underlying Dgraph edge names" + explanation: + The input should be used for the mutation, with a uid and type getting injected and all data + transformed to underlying Dgraph edge names dgmutations: - setjson: | { @@ -569,8 +564,7 @@ "Author.posts":[] } -- - name: "Add mutation with reference" +- name: Add mutation with reference gqlmutation: | mutation addAuthor($auth: AddAuthorInput!) { addAuthor(input: [$auth]) { @@ -586,8 +580,7 @@ "posts": [] } } - explanation: "The reference to country should get transformed to 'uid' for the - Dgraph JSON mutation" + explanation: The reference to country should get transformed to 'uid' for the Dgraph JSON mutation dgquery: |- query { Country_1(func: uid(0x123)) { @@ -612,8 +605,7 @@ "Author.posts":[] } -- - name: "Add mutation with missing reference" +- name: Add mutation with missing reference gqlmutation: | mutation addAuthor($auth: AddAuthorInput!) { addAuthor(input: [$auth]) { @@ -629,7 +621,7 @@ "posts": [] } } - explanation: "This should throw an error as 0x123 is not a valid Country node" + explanation: This should throw an error as 0x123 is not a valid Country node dgquery: |- query { Country_1(func: uid(0x123)) { @@ -637,13 +629,9 @@ dgraph.type } } - error2: - { - "message": "failed to rewrite mutation payload because ID \"0x123\" isn't a Country" - } + error2: { "message": failed to rewrite mutation payload because ID \"0x123\" isn't a Country } -- - name: "Add mutation with invalid reference" +- name: Add mutation with invalid reference gqlmutation: | mutation addAuthor($auth: AddAuthorInput!) { addAuthor(input: [$auth]) { @@ -659,13 +647,14 @@ "posts": [] } } - explanation: "A reference must be a valid UID" + explanation: A reference must be a valid UID error: - { "message": - "failed to rewrite mutation payload because ID argument (HI!) was not able to be parsed" } + { + "message": + failed to rewrite mutation payload because ID argument (HI!) was not able to be parsed, + } -- - name: "Add mutation with inverse reference" +- name: Add mutation with inverse reference gqlmutation: | mutation addPost($post: AddPostInput!) { addPost(input: [$post]) { @@ -681,8 +670,7 @@ "author": { "id": "0x2" } } } - explanation: "The reference to the author node should be transformed to include - a new 'posts' edge." + explanation: The reference to the author node should be transformed to include a new 'posts' edge dgquery: |- query { Author_1(func: uid(0x2)) { @@ -706,8 +694,7 @@ } } -- - name: "Add mutation for a type that implements an interface" +- name: Add mutation for a type that implements an interface gqlmutation: | mutation addHuman($human: AddHumanInput!) { addHuman(input: [$human]) { @@ -726,7 +713,7 @@ "ename": "employee no. 1" } } - explanation: "The mutation should get rewritten with correct edges from the interface." + explanation: The mutation should get rewritten with correct edges from the interface dgmutations: - setjson: | { "uid" : "_:Human_1", @@ -737,8 +724,7 @@ "dgraph.type": ["Human", "Character", "Employee"] } -- - name: "Add mutation using xid code 1" +- name: Add mutation using xid code 1 gqlmutation: | mutation addState($input: AddStateInput!) { addState(input: [$input]) { @@ -755,7 +741,7 @@ "country": { "id": "0x12" } } } - explanation: "The add mutation should get rewritten into a Dgraph upsert mutation" + explanation: The add mutation should get rewritten into a Dgraph upsert mutation dgquery: |- query { State_1(func: eq(State.code, "nsw")) { @@ -783,9 +769,8 @@ } } -- - name: "Add mutation using xid code 2" - explanation: "Error thrown as node with code nsw exists." +- name: Add mutation using xid code 2 + explanation: Error thrown as node with code nsw exists gqlmutation: | mutation addState($input: AddStateInput!) { addState(input: [$input], upsert: false) { @@ -820,12 +805,13 @@ } error2: { - "message": "failed to rewrite mutation payload because id nsw already exists for field code inside type State" + "message": + failed to rewrite mutation payload because id nsw already exists for field code inside type + State, } -- - name: "Multiple Upsert Mutation 1" - explanation: "As both states exist, the countries of the states are updated" +- name: Multiple Upsert Mutation 1 + explanation: As both states exist, the countries of the states are updated gqlmutation: | mutation addState($input: [AddStateInput!]!) { addState(input: $input, upsert: true) { @@ -936,8 +922,7 @@ ] cond: "@if(gt(len(State_3), 0))" -- - name: "Upsert Mutation with multiple xids where both existence queries result exist" +- name: Upsert Mutation with multiple xids where both existence queries result exist gqlmutation: | mutation addBook($input: [AddBookInput!]!) { addBook(input: $input, upsert: true) { @@ -988,10 +973,10 @@ } cond: "@if(gt(len(Book_2), 0))" -- - name: "Upsert Mutation with multiple xids where only one of existence queries result exist" - explanation: "Book1 does not exist but Book2 exists. As Book2 exists, this is an upsert. - Even though, Book1 does not exist, the mutation should not update ISBN as it is also an XID." +- name: Upsert Mutation with multiple xids where only one of existence queries result exist + explanation: + Book1 does not exist but Book2 exists. As Book2 exists, this is an upsert. Even though, Book1 + does not exist, the mutation should not update ISBN as it is also an XID. gqlmutation: | mutation addBook($input: [AddBookInput!]!) { addBook(input: $input, upsert: true) { @@ -1042,10 +1027,9 @@ } cond: "@if(gt(len(Book_2), 0))" -- - name: "Multiple Upsert Mutation 2" - explanation: "The first state exists and is updated. Second is created. Country - is also created in second" +- name: Multiple Upsert Mutation 2 + explanation: + The first state exists and is updated. Second is created. Country is also created in second gqlmutation: | mutation addState($input: [AddStateInput!]!) { addState(input: $input, upsert: true) { @@ -1134,10 +1118,11 @@ } } -- - name: "Add mutation on implementation type which have inherited @id field with interface argument -1" - explanation: "This mutation will generate three existence queries two for xid - refID (one for interface and one - for implementing type) and one for xid - name" +- name: + Add mutation on implementation type which have inherited @id field with interface argument -1 + explanation: + This mutation will generate three existence queries two for xid - refID (one for interface and + one for implementing type) and one for xid - name gqlmutation: | mutation addLibraryMember($input: AddLibraryMemberInput!) { addLibraryMember(input: [$input], upsert: false) { @@ -1190,10 +1175,11 @@ "uid": "_:LibraryMember_2" } -- - name: "Add mutation on implementation type which have inherited @id field with interface argument -2" - explanation: "Node with refID:101 already exist in other implementing type of interface, mutation not allowed - in this case and we will return error" +- name: + Add mutation on implementation type which have inherited @id field with interface argument -2 + explanation: + Node with refID:101 already exist in other implementing type of interface, mutation not allowed + in this case and we will return error gqlmutation: | mutation addLibraryMember($input: AddLibraryMemberInput!) { addLibraryMember(input: [$input], upsert: false) { @@ -1235,12 +1221,13 @@ } error2: { - "message": "failed to rewrite mutation payload because id 101 already exists for field refID - in some other implementing type of interface Member" + "message": + failed to rewrite mutation payload because id 101 already exists for field refID in some + other implementing type of interface Member, } -- - name: "Add mutation on implementation type which have inherited @id field with interface argument -3" +- name: + Add mutation on implementation type which have inherited @id field with interface argument -3 explanation: "Node with refID:101 already exist in same mutated type, returns error " gqlmutation: | mutation addLibraryMember($input: AddLibraryMemberInput!) { @@ -1283,13 +1270,16 @@ } error2: { - "message": "failed to rewrite mutation payload because id 101 already exists for field - refID inside type LibraryMember" + "message": + failed to rewrite mutation payload because id 101 already exists for field refID inside type + LibraryMember, } -- - name: "Add upsert mutation on implementation type which have inherited @id field with interface argument -1" - explanation: "node with @id field doesn't exist in any of the implementing type, we will add the node" +- name: + Add upsert mutation on implementation type which have inherited @id field with interface + argument -1 + explanation: + node with @id field doesn't exist in any of the implementing type, we will add the node gqlmutation: | mutation addLibraryMember($input: AddLibraryMemberInput!) { addLibraryMember(input: [$input], upsert: true) { @@ -1348,9 +1338,10 @@ "uid": "uid(LibraryMember_1)" } cond: "@if(gt(len(LibraryMember_1), 0))" -- - name: "Add upsert mutation on implementation type which have inherited @id field with interface argument -2" - explanation: "node with @id field already exist in one of the implementing type, returns error" +- name: + Add upsert mutation on implementation type which have inherited @id field with interface + argument -2 + explanation: node with @id field already exist in one of the implementing type, returns error gqlmutation: | mutation addLibraryMember($input: AddLibraryMemberInput!) { addLibraryMember(input: [$input], upsert: true) { @@ -1392,14 +1383,15 @@ } error2: { - "message": "failed to rewrite mutation payload because id 101 already exists for - field refID in some other implementing type of interface Member" + "message": + failed to rewrite mutation payload because id 101 already exists for field refID in some + other implementing type of interface Member, } -- - name: "Add mutation with nested object which have inherited @id field with interface argument -1" - explanation: "There is no node with refID 101 of interface type or it's implementation type,hence will wii add - nested object and link that to parent object" +- name: Add mutation with nested object which have inherited @id field with interface argument -1 + explanation: + There is no node with refID 101 of interface type or it's implementation type,hence will wii add + nested object and link that to parent object gqlmutation: | mutation addLibraryManager($input: AddLibraryManagerInput!) { addLibraryManager(input: [$input], upsert: false) { @@ -1470,9 +1462,10 @@ "uid": "_:LibraryManager_1" } -- - name: "Add mutation with nested object which have inherited @id field with interface argument -2" - explanation: "node with refID 101 already exist in one of the implementing type other than mutated type,returns error" +- name: Add mutation with nested object which have inherited @id field with interface argument -2 + explanation: + node with refID 101 already exist in one of the implementing type other than mutated + type,returns error gqlmutation: | mutation addLibraryManager($input: AddLibraryManagerInput!) { addLibraryManager(input: [$input], upsert: false) { @@ -1523,13 +1516,13 @@ } error2: { - "message": "failed to rewrite mutation payload because id 101 already exists for field - refID in some other implementing type of interface Member" + "message": + failed to rewrite mutation payload because id 101 already exists for field refID in some + other implementing type of interface Member, } -- - name: "Add mutation with nested object which have inherited @id field with interface argument -3" - explanation: "node with refID 101 already exist for mutated type,link child node to parent" +- name: Add mutation with nested object which have inherited @id field with interface argument -3 + explanation: node with refID 101 already exist for mutated type,link child node to parent gqlmutation: | mutation addLibraryManager($input: AddLibraryManagerInput!) { addLibraryManager(input: [$input], upsert: false) { @@ -1594,10 +1587,13 @@ "uid": "_:LibraryManager_1" } -- - name: "Add mutation on implementation type which have inherited @id fields with interface argument from multiple interfaces" - explanation: "This mutation will generate six existence queries, 2 existence queries for each of the inherited @id fields - with interface arg and one for each @id field,none of the existence query return uid,so we successfully add the object in this case" +- name: + Add mutation on implementation type which have inherited @id fields with interface argument from + multiple interfaces + explanation: + This mutation will generate six existence queries, 2 existence queries for each of the inherited + @id fields with interface arg and one for each @id field,none of the existence query return + uid,so we successfully add the object in this case gqlmutation: | mutation addSportsMember($input: AddSportsMemberInput!) { addSportsMember(input: [$input], upsert: false) { @@ -1667,8 +1663,7 @@ "uid": "_:SportsMember_6" } -- - name: "Add mutation using code on type which also has an ID field" +- name: Add mutation using code on type which also has an ID field gqlmutation: | mutation addEditor($input: AddEditorInput!) { addEditor(input: [$input]) { @@ -1684,7 +1679,7 @@ "name": "A.N. Editor" } } - explanation: "The add mutation should get rewritten into a Dgraph upsert mutation" + explanation: The add mutation should get rewritten into a Dgraph upsert mutation dgquery: |- query { Editor_1(func: eq(Editor.code, "editor")) { @@ -1701,8 +1696,7 @@ "Editor.code": "editor" } -- - name: "Deep add mutation" +- name: Deep add mutation gqlmutation: | mutation addAuthor($author: AddAuthorInput!) { addAuthor(input: [$author]) { @@ -1742,8 +1736,7 @@ ] } -- - name: "Deep add multiple mutation" +- name: Deep add multiple mutation gqlmutation: | mutation addAuthor($author: [AddAuthorInput!]!) { addAuthor(input: $author) { @@ -1809,8 +1802,7 @@ ] } -- - name: "Deep add with existing" +- name: Deep add with existing gqlmutation: | mutation addAuthor($author: AddAuthorInput!) { addAuthor(input: [$author]) { @@ -1886,8 +1878,7 @@ } ] -- - name: "Deep add multiple with existing" +- name: Deep add multiple with existing gqlmutation: | mutation addAuthor($author: [AddAuthorInput!]!) { addAuthor(input: $author) { @@ -2023,8 +2014,7 @@ } ] -- - name: "Deep add with two existing" +- name: Deep add with two existing gqlmutation: | mutation addAuthor($author: AddAuthorInput!) { addAuthor(input: [$author]) { @@ -2107,8 +2097,7 @@ } ] -- - name: "Deep add with null" +- name: Deep add with null gqlmutation: | mutation addAuthor($author: AddAuthorInput!) { addAuthor(input: [$author]) { @@ -2149,8 +2138,7 @@ ] } -- - name: "Add three deep" +- name: Add three deep gqlmutation: | mutation addAuthor($author: AddAuthorInput!) { addAuthor(input: [$author]) { @@ -2201,8 +2189,7 @@ ] } -- - name: "Add mutation with deep xid choices 1" +- name: Add mutation with deep xid choices 1 gqlmutation: | mutation addCountry($input: AddCountryInput!) { addCountry(input: [$input]) { @@ -2221,7 +2208,7 @@ } ] } } - explanation: "No nodes exist. Both nodes are created." + explanation: No nodes exist. Both nodes are created. dgquery: |- query { State_1(func: eq(State.code, "dg")) { @@ -2250,8 +2237,7 @@ "uid":"_:Country_2" } -- - name: "Add mutation with deep xid choices 2" +- name: Add mutation with deep xid choices 2 gqlmutation: | mutation addCountry($input: AddCountryInput!) { addCountry(input: [$input]) { @@ -2270,7 +2256,8 @@ } ] } } - explanation: "The state exists. It is linked to the new Country. Its link to old country is deleted." + explanation: + The state exists. It is linked to the new Country. Its link to old country is deleted. dgquery: |- query { State_1(func: eq(State.code, "dg")) { @@ -2318,8 +2305,7 @@ } ] -- - name: "Add mutation with deep xid that must be reference 1" +- name: Add mutation with deep xid that must be reference 1 gqlmutation: | mutation addCountry($input: AddCountryInput!) { addCountry(input: [$input]) { @@ -2337,8 +2323,9 @@ } ] } } - explanation: "The add mutation has only one option because the state isn't a valid create - because it's missing required field name" + explanation: + The add mutation has only one option because the state isn't a valid create because it's missing + required field name dgquery: |- query { State_1(func: eq(State.code, "dg")) { @@ -2381,8 +2368,7 @@ } ] -- - name: "Add mutation with deep xid that must be reference 2" +- name: Add mutation with deep xid that must be reference 2 gqlmutation: | mutation addCountry($input: AddCountryInput!) { addCountry(input: [$input]) { @@ -2400,7 +2386,7 @@ } ] } } - explanation: "Error is thrown as State with code dg does not exist" + explanation: Error is thrown as State with code dg does not exist dgquery: |- query { State_1(func: eq(State.code, "dg")) { @@ -2410,12 +2396,12 @@ } error2: { - "message": "failed to rewrite mutation payload because type State requires a value for field name, but no value present" + "message": + "failed to rewrite mutation payload because type State requires a value for field name, but + no value present", } - -- - name: "deprecated fields can be mutated" +- name: deprecated fields can be mutated gqlmutation: | mutation addCategory($cat: AddCategoryInput!) { addCategory(input: [$cat]) { @@ -2439,8 +2425,7 @@ "Category.iAmDeprecated": "but I can be written to" } -- - name: "Add mutation with reverse predicate" +- name: Add mutation with reverse predicate gqlmutation: | mutation addMovieDirector($dir: AddMovieDirectorInput!) { addMovieDirector(input: [$dir]) { @@ -2455,7 +2440,7 @@ "directed": [{ "id": "0x2" }] } } - explanation: "Movie node exists and is not created" + explanation: Movie node exists and is not created dgquery: |- query { Movie_1(func: uid(0x2)) { @@ -2477,7 +2462,7 @@ }] } -- name: "Top Level Duplicate XIDs with same object Test" +- name: Top Level Duplicate XIDs with same object Test gqlmutation: | mutation addState($input: [AddStateInput!]!) { addState(input: $input) { @@ -2494,12 +2479,13 @@ {"name": "State1", "code": "S1"} ] } - explanation: "When duplicate XIDs are given as input at top level, but the object structure is - same, it should return error." + explanation: + When duplicate XIDs are given as input at top level, but the object structure is same, it should + return error. error: message: "failed to rewrite mutation payload because duplicate XID found: S1" -- name: "Top Level Duplicate XIDs with different object Test" +- name: Top Level Duplicate XIDs with different object Test gqlmutation: | mutation addState($input: [AddStateInput!]!) { addState(input: $input) { @@ -2516,12 +2502,13 @@ {"name": "State2", "code": "S1"} ] } - explanation: "When duplicate XIDs are given as input at top level, but the object structure is - different, it should still return error." + explanation: + When duplicate XIDs are given as input at top level, but the object structure is different, it + should still return error. error: message: "failed to rewrite mutation payload because duplicate XID found: S1" -- name: "Deep Mutation Duplicate XIDs with same object Test" +- name: Deep Mutation Duplicate XIDs with same object Test gqlmutation: | mutation addCity($input: [AddCityInput!]!) { addCity(input: $input) { @@ -2551,8 +2538,9 @@ } ] } - explanation: "When duplicate XIDs are given as input to deep mutation but the object structure - is same or contains just xid, it should not return error." + explanation: + When duplicate XIDs are given as input to deep mutation but the object structure is same or + contains just xid, it should not return error. dgquery: |- query { District_1(func: eq(District.code, "D1")) { @@ -2613,7 +2601,7 @@ "uid":"_:City_4" } -- name: "Deep Mutation Duplicate XIDs with same object with @hasInverse Test" +- name: Deep Mutation Duplicate XIDs with same object with @hasInverse Test gqlmutation: | mutation addCountry($input: [AddCountryInput!]!) { addCountry(input: $input) { @@ -2652,15 +2640,16 @@ } ] } - explanation: "When duplicate XIDs are given as input to deep mutation and the object structure - is same and the containing object has @hasInverse on its xid object field, but the xid object - does not have the @hasInverse field of List type, it should return error." + explanation: + When duplicate XIDs are given as input to deep mutation and the object structure is same and the + containing object has @hasInverse on its xid object field, but the xid object does not have the + @hasInverse field of List type, it should return error. error: message: |- failed to rewrite mutation payload because duplicate XID found: S1 failed to rewrite mutation payload because duplicate XID found: S2 -- name: "Deep Mutation Duplicate XIDs with different object Test" +- name: Deep Mutation Duplicate XIDs with different object Test gqlmutation: | mutation addStudent($input: [AddStudentInput!]!) { addStudent(input: $input) { @@ -2701,14 +2690,15 @@ } ] } - explanation: "When duplicate XIDs are given as input to deep mutation but the object structure - is different, it should return error." + explanation: + When duplicate XIDs are given as input to deep mutation but the object structure is different, + it should return error. error: message: |- failed to rewrite mutation payload because duplicate XID found: T1 failed to rewrite mutation payload because duplicate XID found: T1 -- name: "Circular Duplicate XIDs in single mutation" +- name: Circular Duplicate XIDs in single mutation gqlmutation: | mutation addStudent($input: [AddStudentInput!]!) { addStudent(input: $input) { @@ -2735,13 +2725,13 @@ } ] } - explanation: "When duplicate XIDs are given as input circularly in a single mutation, it - should return error." + explanation: + When duplicate XIDs are given as input circularly in a single mutation, it should return error. error: message: |- failed to rewrite mutation payload because duplicate XID found: S1 -- name: "Duplicate XIDs in single mutation for Interface" +- name: Duplicate XIDs in single mutation for Interface gqlmutation: | mutation addStudent($input: [AddStudentInput!]!) { addStudent(input: $input) { @@ -2772,8 +2762,9 @@ } ] } - explanation: "When duplicate XIDs are given as input for an Interface in a single mutation, it - should return error." + explanation: + When duplicate XIDs are given as input for an Interface in a single mutation, it should return + error. error: message: |- failed to rewrite mutation payload because duplicate XID found: S1 @@ -2804,7 +2795,7 @@ # # There's three cases to consider: add by ID, add by XID, deep add -- name: "Additional Deletes - Add connects to existing node by ID" +- name: Additional Deletes - Add connects to existing node by ID gqlmutation: | mutation addAuthor($auth: AddAuthorInput!) { addAuthor(input: [$auth]) { @@ -2864,8 +2855,8 @@ } ] -- name: "Additional Deletes - Add connects to existing node by XID" - explanation: "One of the states exists. Country attached to that state is deleted." +- name: Additional Deletes - Add connects to existing node by XID + explanation: One of the states exists. Country attached to that state is deleted gqlmutation: | mutation addCountry($inp: AddCountryInput!) { addCountry(input: [$inp]) { @@ -2943,8 +2934,8 @@ } ] -- name: "Deep XID 4 level deep 1" - explanation: "No nodes exist. All nodes are created." +- name: Deep XID 4 level deep 1 + explanation: No nodes exist. All nodes are created. gqlmutation: | mutation addStudent($student: AddStudentInput!) { addStudent(input: [$student]) { @@ -3039,8 +3030,8 @@ "uid":"_:Student_1" } -- name: "Deep XID 4 level deep 2" - explanation: "Teacher T1 also teaches the newly added student at top level, S0." +- name: Deep XID 4 level deep 2 + explanation: Teacher T1 also teaches the newly added student at top level, S0. gqlmutation: | mutation addStudent($student: AddStudentInput!) { addStudent(input: [$student]) { @@ -3147,8 +3138,8 @@ "uid":"_:Student_1" } -- name: "Deep XID Add top level hasInverse 1" - explanation: "No nodes exists. All are created." +- name: Deep XID Add top level hasInverse 1 + explanation: No nodes exists. All are created. gqlmutation: | mutation addStudent($student: AddStudentInput!) { addStudent(input: [$student]) { @@ -3224,8 +3215,8 @@ "uid":"_:Student_1" } -- name: "Deep XID Add top level hasInverse 2" - explanation: "Teacher T0 exists and is linked to Student S0" +- name: Deep XID Add top level hasInverse 2 + explanation: Teacher T0 exists and is linked to Student S0 gqlmutation: | mutation addStudent($student: AddStudentInput!) { addStudent(input: [$student]) { @@ -3289,8 +3280,8 @@ "uid":"_:Student_1" } -- name: "Deep XID Add top level hasInverse 3" - explanation: "Student S1 exists and is linked to Teacher T0." +- name: Deep XID Add top level hasInverse 3 + explanation: Student S1 exists and is linked to Teacher T0. gqlmutation: | mutation addStudent($student: AddStudentInput!) { addStudent(input: [$student]) { @@ -3366,9 +3357,8 @@ "uid":"_:Student_1" } - -- name: "Deep XID Add lower level hasInvsere 1" - explanation: "None of the nodes exists. All of them are created." +- name: Deep XID Add lower level hasInvsere 1 + explanation: None of the nodes exists. All of them are created. gqlmutation: | mutation addLab($lab: AddLabInput!) { addLab(input: [$lab]) { @@ -3432,8 +3422,8 @@ "uid":"_:Lab_1" } -- name: "Deep XID Add lower level hasInvsere 2" - explanation: "computer exists. Computer node is linked to Lab." +- name: Deep XID Add lower level hasInvsere 2 + explanation: computer exists. Computer node is linked to Lab. gqlmutation: | mutation addLab($lab: AddLabInput!) { addLab(input: [$lab]) { @@ -3487,8 +3477,8 @@ "uid":"_:Lab_1" } -- name: "Deep XID Add lower level hasInvsere 3" - explanation: "Computer Owner exists and is linked to computer." +- name: Deep XID Add lower level hasInvsere 3 + explanation: Computer Owner exists and is linked to computer. gqlmutation: | mutation addLab($lab: AddLabInput!) { addLab(input: [$lab]) { @@ -3569,7 +3559,7 @@ "uid": "uid(Computer_4)" }] -- name: "Deep mutation alternate id xid" +- name: Deep mutation alternate id xid gqlmutation: | mutation addAuthor($city: AddCityInput!) { addCity(input: [$city]) { @@ -3637,7 +3627,7 @@ "uid":"_:City_2" } -- name: "Deep mutation alternate id xid with existing XID" +- name: Deep mutation alternate id xid with existing XID gqlmutation: | mutation addAuthor($city: AddCityInput!) { addCity(input: [$city]) { @@ -3697,8 +3687,7 @@ "uid":"_:City_2" } - -- name: "Additional Deletes - deep mutation" +- name: Additional Deletes - deep mutation gqlmutation: | mutation addAuthor($auth: AddAuthorInput!) { addAuthor(input: [$auth]) { @@ -3852,8 +3841,8 @@ "uid":"_:Post1_4" } -- name: "Deep mutation three level xid with existing XIDs 1" - explanation: "reply1 and comment1 exists and is not created" +- name: Deep mutation three level xid with existing XIDs 1 + explanation: reply1 and comment1 exists and is not created gqlmutation: | mutation($auth: [AddPost1Input!]!) { addPost1(input: $auth) { @@ -3952,8 +3941,9 @@ "uid":"_:Post1_4" } -- name: "Deep mutation three level xid with existing XIDs 2" - explanation: "comment2 and comment1 exists. reply1 does not exist. reply1 is not created as its parent exists." +- name: Deep mutation three level xid with existing XIDs 2 + explanation: + comment2 and comment1 exists. reply1 does not exist. reply1 is not created as its parent exists. gqlmutation: | mutation($auth: [AddPost1Input!]!) { addPost1(input: $auth) { @@ -4044,8 +4034,7 @@ "uid":"_:Post1_4" } -- - name: "Add mutation error on @id field for empty value" +- name: Add mutation error on @id field for empty value gqlmutation: | mutation addState($input: AddStateInput!) { addState(input: [$input]) { @@ -4062,12 +4051,15 @@ "country": { "id": "0x12" } } } - explanation: "The add mutation should not be allowed since value of @id field is empty." + explanation: The add mutation should not be allowed since value of @id field is empty. error: - { "message": "failed to rewrite mutation payload because encountered an empty value for @id field `State.code`" } + { + "message": + failed to rewrite mutation payload because encountered an empty value for @id field + `State.code`, + } -- - name: "Add mutation error on @id field for empty value (Nested)" +- name: Add mutation error on @id field for empty value (Nested) gqlmutation: | mutation addCountry($input: AddCountryInput!) { addCountry(input: [$input]) { @@ -4086,12 +4078,15 @@ } ] } } - explanation: "The add mutation should not be allowed since value of @id field is empty." + explanation: The add mutation should not be allowed since value of @id field is empty. error: - { "message": "failed to rewrite mutation payload because encountered an empty value for @id field `State.code`" } + { + "message": + failed to rewrite mutation payload because encountered an empty value for @id field + `State.code`, + } -- - name: "Add mutation for person with @hasInverse" +- name: Add mutation for person with @hasInverse gqlmutation: | mutation($input: [AddPersonInput!]!) { addPerson(input: $input) { @@ -4147,8 +4142,7 @@ "uid": "_:Person_1" } -- - name: "Add mutation with union" +- name: Add mutation with union gqlmutation: | mutation($input: [AddHomeInput!]!) { addHome(input: $input) { @@ -4214,8 +4208,7 @@ "uid": "_:Home_2" } -- - name: "Add mutation with union - invalid input" +- name: Add mutation with union - invalid input gqlmutation: | mutation($input: [AddHomeInput!]!) { addHome(input: $input) { @@ -4243,14 +4236,13 @@ } ] } - explanation: "The add mutation should not be allowed since the union input is invalid" + explanation: The add mutation should not be allowed since the union input is invalid error: message: |- failed to rewrite mutation payload because value for field `favouriteMember` in type `Home` must have exactly one child, found 0 children failed to rewrite mutation payload because value for field `members` in type `Home` index `0` must have exactly one child, found 2 children -- - name: "Add type with multiple Xid fields" +- name: Add type with multiple Xid fields gqlmutation: | mutation($input: [AddBookInput!]!) { addBook(input: $input) { @@ -4310,8 +4302,9 @@ "uid": "_:Book_2" } -- - name: "Add mutation with multiple Xid fields shouldn't give error if xidName+xidVal is equal for two different xid fields in a type" +- name: + Add mutation with multiple Xid fields shouldn't give error if xidName+xidVal is equal for two + different xid fields in a type gqlmutation: | mutation($input: [AddABCInput!]!) { addABC(input: $input) { @@ -4342,8 +4335,9 @@ dgraph.type } } - explanation: "We should generate different variables as ABC_1 and ABC_2 if xidName+xidValue is same as in above case - i.e. ab+cd and abc+d both equals to abcd" + explanation: + We should generate different variables as ABC_1 and ABC_2 if xidName+xidValue is same as in + above case i.e. ab+cd and abc+d both equals to abcd dgmutations: - setjson: | { @@ -4355,8 +4349,9 @@ "uid":"_:ABC_2" } -- - name: "Add mutation with multiple Xid fields shouldn't give error if xidName+xidVal is equal for two different xid fields in different objects" +- name: + Add mutation with multiple Xid fields shouldn't give error if xidName+xidVal is equal for two + different xid fields in different objects gqlmutation: | mutation($input: [AddABCInput!]!) { addABC(input: $input) { @@ -4399,8 +4394,9 @@ dgraph.type } } - explanation: "We should generate different variables as ABC_1 and ABC_4 if xidName+xidValue is same in two different objects as in above case - i.e. ab+cd and abc+d both equals to abcd" + explanation: + We should generate different variables as ABC_1 and ABC_4 if xidName+xidValue is same in two + different objects as in above case i.e. ab+cd and abc+d both equals to abcd dgmutations: - setjson: | { @@ -4421,8 +4417,9 @@ "uid":"_:ABC_4" } -- - name: "Add mutation with multiple Xid fields shouldn't give error if typeName+xidName+xidVal is equal for two different xid fields in different types" +- name: + Add mutation with multiple Xid fields shouldn't give error if typeName+xidName+xidVal is equal + for two different xid fields in different types gqlmutation: | mutation($input: [AddABCInput!]!) { addABC(input: $input) { @@ -4469,8 +4466,10 @@ dgraph.type } } - explanation: "We should generate different variables as ABC_1 and AB_3, or ABC_2 and AB_4 if typename+xidName+xidValue is same in two different types as in above case - i.e. ABC+ab+cd and AB+Cabc+d both equals to ABCabcd" + explanation: + We should generate different variables as ABC_1 and AB_3, or ABC_2 and AB_4 if + typename+xidName+xidValue is same in two different types as in above case i.e. ABC+ab+cd and + AB+Cabc+d both equals to ABCabcd dgmutations: - setjson: | { @@ -4486,9 +4485,7 @@ "uid": "_:ABC_2" } - -- - name: "Add type with multiple Xid fields at deep level" +- name: Add type with multiple Xid fields at deep level gqlmutation: | mutation($input: [AddauthorInput!]!) { addauthor(input: $input) { @@ -4548,10 +4545,12 @@ ] } -- - name: "Add mutation for type Person1 with multiple xids referencing same node as closeFriends and friends, closeFriends refer friends with xid id" - explanation: "The mutation adds same node as friends and closeFriends. It should - work irrespective of the order in which the node is referenced." +- name: + Add mutation for type Person1 with multiple xids referencing same node as closeFriends and + friends, closeFriends refer friends with xid id + explanation: + The mutation adds same node as friends and closeFriends. It should work irrespective of the + order in which the node is referenced. gqlmutation: | mutation($input: [AddPerson1Input!]!) { addPerson1(input: $input) { @@ -4640,8 +4639,9 @@ "uid": "_:Person1_2" } -- - name: "Add type with multiple Xids fields at deep level when deep node already exist for all existence queries" +- name: + Add type with multiple Xids fields at deep level when deep node already exist for all existence + queries gqlmutation: | mutation($input: [AddauthorInput!]!) { addauthor(input: $input) { @@ -4685,11 +4685,13 @@ } error2: { - "message": "failed to rewrite mutation payload because multiple nodes found for given xid values, - updation not possible" + "message": + "failed to rewrite mutation payload because multiple nodes found for given xid values, + updation not possible", } -- - name: "Add type with multiple Xids fields at deep level when deep node already exist for one existence query" +- name: + Add type with multiple Xids fields at deep level when deep node already exist for one existence + query gqlmutation: | mutation($input: [AddauthorInput!]!) { addauthor(input: $input) { @@ -4765,10 +4767,12 @@ } ] -- - name: "Add mutation for type Person1 with multiple xids referencing same node as closeFriends and friends, friends refer closeFriends with xid name " - explanation: "The mutation adds same node as friends and closeFriends. It should - work irrespective of the order in which the node is referenced." +- name: + "Add mutation for type Person1 with multiple xids referencing same node as closeFriends and + friends, friends refer closeFriends with xid name " + explanation: + The mutation adds same node as friends and closeFriends. It should work irrespective of the + order in which the node is referenced. gqlmutation: | mutation($input: [AddPerson1Input!]!) { addPerson1(input: $input) { @@ -4857,7 +4861,7 @@ "uid": "_:Person1_2" } -- name: "Reference to inverse field should be ignored and not throw an error" +- name: Reference to inverse field should be ignored and not throw an error gqlmutation: | mutation addDistrict($input: [AddDistrictInput!]!) { addDistrict(input: $input) { @@ -4885,9 +4889,10 @@ } ] } - explanation: "As district is inverse of city. There is no need to supply district to - the city. In case it is supplied, it is simply ignored. The city is linked to D1 and - district with code non-existing is ignored. Not even its existence query is generated." + explanation: + As district is inverse of city. There is no need to supply district to the city. In case it is + supplied, it is simply ignored. The city is linked to D1 and district with code non-existing is + ignored. Not even its existence query is generated. dgquery: |- query { District_1(func: eq(District.code, "D1")) { @@ -4937,7 +4942,7 @@ "uid":"_:District_2" } -- name: "Reference to inverse field should be ignored and not throw an error 2" +- name: Reference to inverse field should be ignored and not throw an error 2 gqlmutation: | mutation addFoo($input: [AddFooInput!]!) { addFoo(input: $input) { @@ -4962,8 +4967,9 @@ } ] } - explanation: "As foo is inverse of bar. There is no need to supply bar to - foo. In case it is supplied, it is simply ignored." + explanation: + As foo is inverse of bar. There is no need to supply bar to foo. In case it is supplied, it is + simply ignored. dgquery: |- query { Foo_1(func: eq(Foo.id, "123")) { @@ -5015,8 +5021,8 @@ "uid":"_:Foo_3" } -- - name: "Add mutation for Friend, Friend1 should not generated same variable name for existence queries" +- name: + Add mutation for Friend, Friend1 should not generated same variable name for existence queries gqlmutation: | mutation($input: [AddFriend1Input!]!) { addFriend1(input: $input) { @@ -5099,72 +5105,71 @@ } dgmutations: - setjson: | - { - "Friend1.friends": - [ - { - "Friend.id":"Friend1", - "dgraph.type":["Friend"], - "uid":"_:Friend_2" - }, - { - "Friend.id":"Friend2", - "dgraph.type":["Friend"], - "uid":"_:Friend_3" - }, - { - "Friend.id":"Friend3", - "dgraph.type":["Friend"], - "uid":"_:Friend_4" - }, - { - "Friend.id":"Friend4", - "dgraph.type":["Friend"], - "uid":"_:Friend_5" - }, - { - "Friend.id":"Friend5", - "dgraph.type":["Friend"], - "uid":"_:Friend_6" - }, - { - "Friend.id":"Friend6", - "dgraph.type":["Friend"], - "uid":"_:Friend_7" - }, - { - "Friend.id":"Friend7", - "dgraph.type":["Friend"], - "uid":"_:Friend_8" - }, - { - "Friend.id":"Friend8", - "dgraph.type":["Friend"], - "uid":"_:Friend_9" - }, - { - "Friend.id":"Friend9", - "dgraph.type":["Friend"], - "uid":"_:Friend_10" - }, - { - "Friend.id":"Friend10", - "dgraph.type":["Friend"], - "uid":"_:Friend_11" - }, - { - "Friend.id":"Friend11", - "dgraph.type":["Friend"], - "uid":"_:Friend_12" - } - ], - "Friend1.id":"Main Friend", - "dgraph.type":["Friend1"], - "uid":"_:Friend1_1" - } + { + "Friend1.friends": + [ + { + "Friend.id":"Friend1", + "dgraph.type":["Friend"], + "uid":"_:Friend_2" + }, + { + "Friend.id":"Friend2", + "dgraph.type":["Friend"], + "uid":"_:Friend_3" + }, + { + "Friend.id":"Friend3", + "dgraph.type":["Friend"], + "uid":"_:Friend_4" + }, + { + "Friend.id":"Friend4", + "dgraph.type":["Friend"], + "uid":"_:Friend_5" + }, + { + "Friend.id":"Friend5", + "dgraph.type":["Friend"], + "uid":"_:Friend_6" + }, + { + "Friend.id":"Friend6", + "dgraph.type":["Friend"], + "uid":"_:Friend_7" + }, + { + "Friend.id":"Friend7", + "dgraph.type":["Friend"], + "uid":"_:Friend_8" + }, + { + "Friend.id":"Friend8", + "dgraph.type":["Friend"], + "uid":"_:Friend_9" + }, + { + "Friend.id":"Friend9", + "dgraph.type":["Friend"], + "uid":"_:Friend_10" + }, + { + "Friend.id":"Friend10", + "dgraph.type":["Friend"], + "uid":"_:Friend_11" + }, + { + "Friend.id":"Friend11", + "dgraph.type":["Friend"], + "uid":"_:Friend_12" + } + ], + "Friend1.id":"Main Friend", + "dgraph.type":["Friend1"], + "uid":"_:Friend1_1" + } -- - name: "Add mutation with language tag fields" +- name: Add mutation with language tag fields gqlmutation: | mutation { addPerson(input: { name: "Alice", nameHi: "ऐलिस",nameZh: "爱丽丝"}) { @@ -5184,11 +5189,10 @@ "uid": "_:Person_1" } -- - name: "2-level add mutation with nullable @id fields " - explaination: "bookId in Book and PenName in author are @id and nullable field, - we can skip them while doing add mutation. Nested object author doesn't exist, so we - add it and link it to book" +- name: "2-level add mutation with nullable @id fields " + explaination: + bookId in Book and PenName in author are @id and nullable field, we can skip them while doing + add mutation. Nested object author doesn't exist, so we add it and link it to book gqlmutation: | mutation addBook($input: [AddBookInput!]!) { addBook(input: $input, upsert: false) { @@ -5251,12 +5255,12 @@ "uid": "_:Book_2" } -- - name: "2- level add mutation with upsert and nullable @id fields " - explaination: "bookId in @id,penName in author are nullable @id fields and we can skip them. - title,ISBN in Book are @id fields,so also added in set Json, because @id fields will also be updated by upserts. - Both book and author already exist so we just link new author to book and delete old reference from book to author, - if there is any" +- name: "2- level add mutation with upsert and nullable @id fields " + explaination: + bookId in @id,penName in author are nullable @id fields and we can skip them. title,ISBN in Book + are @id fields,so also added in set Json, because @id fields will also be updated by upserts. + Both book and author already exist so we just link new author to book and delete old reference + from book to author, if there is any gqlmutation: | mutation addBook($input: [AddBookInput!]!) { addBook(input: $input, upsert: true) { @@ -5335,9 +5339,9 @@ }] cond: "@if(gt(len(Book_2), 0))" -- - name: "add mutation with upsert gives error when multiple nodes are found for existence queries" - explaination: "Two different books exist for title and Sapiens @id fields, We can't do upsert mutation " +- name: add mutation with upsert gives error when multiple nodes are found for existence queries + explaination: + "Two different books exist for title and Sapiens @id fields, We can't do upsert mutation " gqlmutation: | mutation addBook($input: [AddBookInput!]!) { addBook(input: $input, upsert: true) { @@ -5374,15 +5378,17 @@ } error2: { - "message": "failed to rewrite mutation payload because multiple nodes found - for given xid values, updation not possible" + "message": + "failed to rewrite mutation payload because multiple nodes found for given xid values, + updation not possible", } -- - name: "add mutation with upsert at nested level gives error when multiple nodes are found - for existence queries" - explaination: "Two different author exist for penName and authorId @id fields inside author, - We can't link author to both books " +- name: + add mutation with upsert at nested level gives error when multiple nodes are found for existence + queries + explaination: + "Two different author exist for penName and authorId @id fields inside author, We can't link + author to both books " gqlmutation: | mutation addBook($input: [AddBookInput!]!) { addBook(input: $input, upsert: true) { @@ -5431,14 +5437,15 @@ } error2: { - "message": "failed to rewrite mutation payload because multiple nodes - found for given xid values, updation not possible" + "message": + "failed to rewrite mutation payload because multiple nodes found for given xid values, + updation not possible", } -- - name: "No xid present for add mutation with upsert" - explaination: "If none of the xid field is given in upsert mutation then there will be no existence queries, - and it will behave as simple add mutation,i.e. create new node with all the given fields" +- name: No xid present for add mutation with upsert + explaination: + If none of the xid field is given in upsert mutation then there will be no existence queries, + and it will behave as simple add mutation,i.e. create new node with all the given fields gqlmutation: | mutation addBook($input: [AddBookInput!]!) { addBook(input: $input, upsert: true) { @@ -5465,10 +5472,10 @@ "uid":"_:Book_1" } -- - name: "Non-nullable xid should be present in add Mutation for nested field" - explaination: "non-nullable @id field id in comment1 type not provided. As no reference is - provided for comment, we treat it as new node, and return error for missing xid." +- name: Non-nullable xid should be present in add Mutation for nested field + explaination: + non-nullable @id field id in comment1 type not provided. As no reference is provided for + comment, we treat it as new node, and return error for missing xid. gqlmutation: | mutation addPost1($input: [AddPost1Input!]!) { addPost1(input: $input, upsert: false) { @@ -5496,13 +5503,9 @@ dgraph.type } } - error2: - { - "message": "failed to rewrite mutation payload because field id cannot be empty" - } - -- - name: "Add mutation with @default directive" + error2: { "message": failed to rewrite mutation payload because field id cannot be empty } + +- name: Add mutation with @default directive gqlmutation: | mutation($input: [AddBookingInput!]!) { addBooking(input: $input) { @@ -5521,7 +5524,8 @@ } ] } - explanation: "As booking has @default fields and is being added, these should be set to the default add value" + explanation: + As booking has @default fields and is being added, these should be set to the default add value dgmutations: - setjson: | { @@ -5539,8 +5543,7 @@ "uid":"_:Booking_1" } -- - name: "Add mutation with @default directive uses provided values" +- name: Add mutation with @default directive uses provided values gqlmutation: | mutation($input: [AddBookingInput!]!) { addBooking(input: $input) { @@ -5565,7 +5568,9 @@ } ] } - explanation: "Fields with @default(add) should use input values if provided (note that count is still using default)" + explanation: + Fields with @default(add) should use input values if provided (note that count is still using + default) dgmutations: - setjson: | { @@ -5583,9 +5588,10 @@ "uid":"_:Booking_1" } -- - name: "Upsert mutation with @default directives where only one of the nodes exists" - explanation: "Booking1 should only have updated timestamp as it exists, Booking2 should have created and updated timestamps" +- name: Upsert mutation with @default directives where only one of the nodes exists + explanation: + Booking1 should only have updated timestamp as it exists, Booking2 should have created and + updated timestamps gqlmutation: | mutation addBookingXID($input: [AddBookingXIDInput!]!) { addBookingXID(input: $input, upsert: true) { @@ -5658,4 +5664,3 @@ "BookingXID" ] } - diff --git a/graphql/resolve/auth_add_test.yaml b/graphql/resolve/auth_add_test.yaml index 0c116e93e9f..d9dc0de5a4a 100644 --- a/graphql/resolve/auth_add_test.yaml +++ b/graphql/resolve/auth_add_test.yaml @@ -1,4 +1,4 @@ -- name: "Add one node" +- name: Add one node gqlquery: | mutation addUserSecret($secret: AddUserSecretInput!) { addUserSecret(input: [$secret]) { @@ -8,7 +8,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "secret": { "aSecret": "it is", @@ -30,7 +30,7 @@ "UserSecret": [ { "uid": "0x123" }] } -- name: "Add multiple nodes" +- name: Add multiple nodes gqlquery: | mutation addUserSecret($secrets: [AddUserSecretInput!]!) { addUserSecret(input: $secrets) { @@ -40,7 +40,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "secrets": [ @@ -66,7 +66,7 @@ "UserSecret": [ { "uid": "0x123" }, { "uid": "0x456" } ] } -- name: "Add one node that fails auth" +- name: Add one node that fails auth gqlquery: | mutation addUserSecret($secret: AddUserSecretInput!) { addUserSecret(input: [$secret]) { @@ -76,7 +76,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "secret": @@ -101,10 +101,9 @@ { "UserSecret": [ ] } - error: - { "message": "mutation failed because authorization failed" } + error: { "message": mutation failed because authorization failed } -- name: "Add multiple nodes that fails auth" +- name: Add multiple nodes that fails auth gqlquery: | mutation addUserSecret($secrets: [AddUserSecretInput!]!) { addUserSecret(input: $secrets) { @@ -114,7 +113,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "secrets": [ @@ -139,10 +138,9 @@ { "UserSecret": [ { "uid": "0x123" }] } - error: - { "message": "mutation failed because authorization failed" } + error: { "message": mutation failed because authorization failed } -- name: "Add multiple nodes of different types" +- name: Add multiple nodes of different types gqlquery: | mutation addColumn($col: AddColumnInput!) { addColumn(input: [$col]) { @@ -152,7 +150,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "col": { "inProject": { "projID": "0x123" }, @@ -209,7 +207,7 @@ "Ticket": [ { "uid": "0x789" } ] } -- name: "Add multiple nodes of different types that fails auth" +- name: Add multiple nodes of different types that fails auth gqlquery: | mutation addColumn($col: AddColumnInput!) { addColumn(input: [$col]) { @@ -219,7 +217,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "col": { @@ -275,10 +273,9 @@ { "Ticket": [ { "uid": "0x789" } ] } - error: - { "message": "mutation failed because authorization failed" } + error: { "message": mutation failed because authorization failed } -- name: "Add multiples of multiple nodes of different types" +- name: Add multiples of multiple nodes of different types gqlquery: | mutation addColumn($col1: AddColumnInput!, $col2: AddColumnInput!) { addColumn(input: [$col1, $col2]) { @@ -288,7 +285,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "col1": { "inProject": { "projID": "0x123" }, @@ -352,7 +349,7 @@ "Ticket": [ { "uid": "0x789" }, { "uid": "0x799" } ] } -- name: "Add multiples of multiple nodes of different types that fails auth" +- name: Add multiples of multiple nodes of different types that fails auth gqlquery: | mutation addColumn($col1: AddColumnInput!, $col2: AddColumnInput!) { addColumn(input: [$col1, $col2]) { @@ -362,7 +359,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "col1": { "inProject": { "projID": "0x123" }, @@ -425,15 +422,14 @@ "Column": [ { "uid": "0x456" } ], "Ticket": [ { "uid": "0x789" }, { "uid": "0x799" } ] } - error: - { "message": "mutation failed because authorization failed" } + error: { "message": mutation failed because authorization failed } # See comments about additional deletes in add_mutation_test.yaml. # Because of those additional deletes, for example, when we add a column and # link it to an existing ticket, we remove that ticket from the column it was # attached to ... so we need authorization to update that column as well # as to add the new column. -- name: "Add with auth on additional delete" +- name: Add with auth on additional delete gqlquery: | mutation addColumn($col: AddColumnInput!) { addColumn(input: [$col]) { @@ -443,7 +439,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "col": { "inProject": { "projID": "0x123" }, @@ -514,7 +510,7 @@ "Column": [ { "uid": "0x456" } ] } -- name: "Add with auth on additional delete that fails" +- name: Add with auth on additional delete that fails gqlquery: | mutation addColumn($col: AddColumnInput!) { addColumn(input: [$col]) { @@ -524,7 +520,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "col": { "inProject": { "projID": "0x123" }, @@ -593,10 +589,9 @@ { "Column": [ { "uid": "0x456" } ] } - error: - { "message": "couldn't rewrite query for mutation addColumn because authorization failed" } + error: { "message": couldn't rewrite query for mutation addColumn because authorization failed } -- name: "Add with deep auth on additional delete" +- name: Add with deep auth on additional delete gqlquery: | mutation addProject($proj: AddProjectInput!) { addProject(input: [$proj]) { @@ -606,7 +601,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "proj": { @@ -687,7 +682,7 @@ "Project": [ { "uid": "0x123" } ] } -- name: "Add with deep auth on additional delete that fails" +- name: Add with deep auth on additional delete that fails gqlquery: | mutation addProject($proj: AddProjectInput!) { addProject(input: [$proj]) { @@ -697,7 +692,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "proj": { @@ -776,10 +771,9 @@ "Column": [ { "uid": "0x456" } ], "Project": [ { "uid": "0x123" } ] } - error: - { "message": "couldn't rewrite query for mutation addProject because authorization failed" } + error: { "message": couldn't rewrite query for mutation addProject because authorization failed } -- name: "Add with top level RBAC false." +- name: Add with top level RBAC false gqlquery: | mutation addLog($log: AddLogInput!) { addLog(input: [$log]) { @@ -789,7 +783,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "log": { @@ -800,11 +794,9 @@ } uids: | { "Log_1": "0x123" } - error: - { "message": "mutation failed because authorization failed"} + error: { "message": mutation failed because authorization failed } - -- name: "Add with top level RBAC true." +- name: Add with top level RBAC true gqlquery: | mutation addLog($log: AddLogInput!) { addLog(input: [$log]) { @@ -814,8 +806,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 variables: | { "log": { @@ -830,7 +822,7 @@ } skipauth: true -- name: "Add with top level OR RBAC true." +- name: Add with top level OR RBAC true gqlquery: | mutation addProject($proj: AddProjectInput!) { addProject(input: [$proj]) { @@ -840,8 +832,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 variables: | { "proj": { @@ -855,7 +847,7 @@ } skipauth: true -- name: "Add with top level OR RBAC false." +- name: Add with top level OR RBAC false gqlquery: | mutation addProject($proj: AddProjectInput!) { addProject(input: [$proj]) { @@ -865,8 +857,8 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 variables: | { "proj": { @@ -895,7 +887,7 @@ "Project": [ { "uid": "0x123" } ] } -- name: "Add with top level And RBAC true." +- name: Add with top level And RBAC true gqlquery: | mutation addIssue($issue: AddIssueInput!) { addIssue(input: [$issue]) { @@ -905,8 +897,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 variables: | { "issue": { "msg": "log123", @@ -946,7 +938,7 @@ "Issue": [ { "uid": "0x789" }] } -- name: "Add with top level And RBAC false." +- name: Add with top level And RBAC false gqlquery: | mutation addIssue($issue: AddIssueInput!) { addIssue(input: [$issue]) { @@ -956,8 +948,8 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 variables: | { "issue": { "msg": "log123", @@ -992,10 +984,9 @@ Issue.owner : Issue.owner @filter(eq(User.username, "user1")) } } - error: - { "message": "mutation failed because authorization failed" } + error: { "message": mutation failed because authorization failed } -- name: "Add with top level not RBAC false." +- name: Add with top level not RBAC false gqlquery: | mutation addComplexLog($log: AddComplexLogInput!) { addComplexLog(input: [$log]) { @@ -1005,8 +996,8 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 variables: | { "log": { "logs": "log123", @@ -1017,10 +1008,9 @@ { "ComplexLog_1": "0x123" } - error: - { "message": "mutation failed because authorization failed"} + error: { "message": mutation failed because authorization failed } -- name: "Add with top level not RBAC true." +- name: Add with top level not RBAC true gqlquery: | mutation addComplexLog($log: AddComplexLogInput!) { addComplexLog(input: [$log]) { @@ -1030,8 +1020,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 variables: | { "log": { "logs": "log123", @@ -1044,7 +1034,7 @@ } skipauth: true -- name: "Adding nodes for a Type that inherits Auth rules from an interfaces successfully." +- name: Adding nodes for a Type that inherits Auth rules from an interfaces successfully gqlquery: | mutation addQuestion($question: [AddQuestionInput!]!) { addQuestion(input: $question) { @@ -1058,7 +1048,7 @@ } } jwtvar: - USER: "user1" + USER: user1 ANS: "true" variables: | { "question": @@ -1097,7 +1087,7 @@ "Question": [ {"uid": "0x123"}] } -- name: "Adding node for a Type that inherits auth rules from an interface fails." +- name: Adding node for a Type that inherits auth rules from an interface fails gqlquery: | mutation addQuestion($question: [AddQuestionInput!]!) { addQuestion(input: $question) { @@ -1111,7 +1101,7 @@ } } jwtvar: - USER: "user1" + USER: user1 ANS: "true" variables: | { "question": @@ -1149,10 +1139,9 @@ { "Question": [ ], "Author": [ { "uid" : "0x456"} ] } - error: - { "message": "mutation failed because authorization failed"} + error: { "message": mutation failed because authorization failed } -- name: "Add type with having RBAC rule on interface successfully" +- name: Add type with having RBAC rule on interface successfully gqlquery: | mutation addFbPost($post: [AddFbPostInput!]!){ addFbPost(input: $post){ @@ -1165,8 +1154,8 @@ } } jwtvar: - USER: "user1" - ROLE: "ADMIN" + USER: user1 + ROLE: ADMIN variables: | { "post": [{ @@ -1200,7 +1189,7 @@ "FbPost": [ {"uid": "0x123"}] } -- name: "Add type with Having RBAC rule on interface failed" +- name: Add type with Having RBAC rule on interface failed gqlquery: | mutation addFbPost($post: [AddFbPostInput!]!){ addFbPost(input: $post){ @@ -1213,8 +1202,8 @@ } } jwtvar: - USER: "user1" - ROLE: "USER" + USER: user1 + ROLE: USER variables: | { "post": [{ @@ -1230,10 +1219,9 @@ "FbPost_1": "0x123", "Author_1": "0x456" } - error: - {"message" : "mutation failed because authorization failed"} + error: { "message": mutation failed because authorization failed } -- name: "Upsert Add Mutation with RBAC true" +- name: Upsert Add Mutation with RBAC true gqlquery: | mutation addTweets($tweet: AddTweetsInput!) { addTweets(input: [$tweet], upsert: true) { @@ -1243,7 +1231,7 @@ } } jwtvar: - USER: "foo" + USER: foo variables: | { "tweet": { "id": "existing ID", @@ -1271,7 +1259,7 @@ Tweets_2 as var(func: uid(0x123)) @filter(type(Tweets)) } -- name: "Upsert Add Mutation with RBAC false" +- name: Upsert Add Mutation with RBAC false gqlquery: | mutation addTweets($tweet: AddTweetsInput!) { addTweets(input: [$tweet], upsert: true) { @@ -1281,7 +1269,7 @@ } } jwtvar: - USER: "not foo" + USER: not foo variables: | { "tweet": { "id": "existing ID", @@ -1305,9 +1293,10 @@ Tweets_1 as addTweets() } -- name: "Upsert with Deep Auth" - explanation: "As state already exists, update auth rules of State are applied. - As Country does not exist, add auth rules of Country are applied." +- name: Upsert with Deep Auth + explanation: + As state already exists, update auth rules of State are applied. As Country does not exist, add + auth rules of Country are applied gqlquery: | mutation addState($state: AddStateInput!) { addState(input: [$state], upsert: true) { @@ -1317,7 +1306,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "state": { diff --git a/graphql/resolve/auth_closed_by_default_add_test.yaml b/graphql/resolve/auth_closed_by_default_add_test.yaml index 0e063f6199d..3a3e08d4ae6 100644 --- a/graphql/resolve/auth_closed_by_default_add_test.yaml +++ b/graphql/resolve/auth_closed_by_default_add_test.yaml @@ -1,4 +1,4 @@ -- name: "Query with missing jwt token - Type with Auth" +- name: Query with missing jwt token - Type with Auth gqlquery: | mutation addComplexLog($log: AddComplexLogInput!) { addComplexLog(input: [$log]) { @@ -8,8 +8,8 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 variables: | { "log": { "logs": "log123", @@ -20,9 +20,13 @@ uids: | { "ComplexLog1": "0x123" } error: - { "message": "mutation failed because authorization failed because a valid JWT is required but was not provided"} + { + "message": + mutation failed because authorization failed because a valid JWT is required but was not + provided, + } -- name: "Query with missing jwt token - Type without Auth" +- name: Query with missing jwt token - Type without Auth gqlquery: | mutation addTodo($todo: AddTodoInput!) { addTodo(input: [$todo]) { @@ -40,4 +44,8 @@ } } error: - { "message": "mutation failed because authorization failed because a valid JWT is required but was not provided"} \ No newline at end of file + { + "message": + mutation failed because authorization failed because a valid JWT is required but was not + provided, + } diff --git a/graphql/resolve/auth_closed_by_default_delete_test.yaml b/graphql/resolve/auth_closed_by_default_delete_test.yaml index 0bce8951bcb..ed36a57643f 100644 --- a/graphql/resolve/auth_closed_by_default_delete_test.yaml +++ b/graphql/resolve/auth_closed_by_default_delete_test.yaml @@ -1,4 +1,4 @@ -- name: "Delete with top level not RBAC true - type with auth" +- name: Delete with top level not RBAC true - type with auth gqlquery: | mutation ($ids: [ID!]) { deleteRole(filter: {id: $ids}) { @@ -17,15 +17,14 @@ "uid": "uid(x)" }] dgquery: |- - query { - x as deleteRole(func: type(Role)) { - uid - } - } - error: - { "message": "a valid JWT is required but was not provided" } + query { + x as deleteRole(func: type(Role)) { + uid + } + } + error: { "message": a valid JWT is required but was not provided } -- name: "Delete with top level not RBAC true. - type with auth" +- name: Delete with top level not RBAC true. - type with auth gqlquery: | mutation ($ids: [ID!]) { deleteTodo(filter: {id: $ids}) { @@ -44,10 +43,9 @@ "uid": "uid(x)" }] dgquery: |- - query { - x as deletetodo(func: type(Todo)) { - uid - } - } - error: - { "message": "a valid JWT is required but was not provided" } \ No newline at end of file + query { + x as deletetodo(func: type(Todo)) { + uid + } + } + error: { "message": a valid JWT is required but was not provided } diff --git a/graphql/resolve/auth_closed_by_default_query_test.yaml b/graphql/resolve/auth_closed_by_default_query_test.yaml index c0a6fc02b97..e94883506ed 100644 --- a/graphql/resolve/auth_closed_by_default_query_test.yaml +++ b/graphql/resolve/auth_closed_by_default_query_test.yaml @@ -1,4 +1,4 @@ -- name: "Query with missing jwt token - type with auth directive" +- name: Query with missing jwt token - type with auth directive gqlquery: | query { queryTodo { @@ -7,10 +7,9 @@ text } } - error: - { "message": "a valid JWT is required but was not provided"} + error: { "message": a valid JWT is required but was not provided } -- name: "Query with missing jwt token - type without auth directive" +- name: Query with missing jwt token - type without auth directive gqlquery: | query { queryTodo { @@ -19,5 +18,4 @@ text } } - error: - { "message": "a valid JWT is required but was not provided" } + error: { "message": a valid JWT is required but was not provided } diff --git a/graphql/resolve/auth_closed_by_default_update_test.yaml b/graphql/resolve/auth_closed_by_default_update_test.yaml index 52fa150805d..838e5629f8d 100644 --- a/graphql/resolve/auth_closed_by_default_update_test.yaml +++ b/graphql/resolve/auth_closed_by_default_update_test.yaml @@ -1,4 +1,4 @@ -- name: "Update with top level And RBAC false - type with Auth " +- name: Update with top level And RBAC false - type with Auth gqlquery: | mutation updateIssue($issue: UpdateIssueInput!) { updateIssue(input: $issue) { @@ -21,9 +21,12 @@ x as updateIssue() } error: - { "message": "couldn't rewrite mutation updateIssue because a valid JWT is required but was not provided" } + { + "message": + couldn't rewrite mutation updateIssue because a valid JWT is required but was not provided, + } -- name: "Update with top level And RBAC false - type without auth" +- name: Update with top level And RBAC false - type without auth gqlquery: | mutation updateTodo($todo: UpdateTodoInput!) { updateTodo(input: $todo) { @@ -46,4 +49,7 @@ x as updateTodo() } error: - { "message": "couldn't rewrite mutation updateTodo because a valid JWT is required but was not provided" } \ No newline at end of file + { + "message": + couldn't rewrite mutation updateTodo because a valid JWT is required but was not provided, + } diff --git a/graphql/resolve/auth_delete_test.yaml b/graphql/resolve/auth_delete_test.yaml index 66d7b97f361..2028b6d4b65 100644 --- a/graphql/resolve/auth_delete_test.yaml +++ b/graphql/resolve/auth_delete_test.yaml @@ -1,4 +1,4 @@ -- name: "Delete with auth" +- name: Delete with auth gqlquery: | mutation deleteUserSecret($filter: UserSecretFilter!) { deleteUserSecret(filter: $filter) { @@ -6,7 +6,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "filter": { "aSecret": { "anyofterms": "auth is applied" } } } dgmutations: @@ -24,7 +24,7 @@ UserSecret_Auth2 as var(func: uid(UserSecret_1)) @filter(eq(UserSecret.ownedBy, "user1")) @cascade } -- name: "Delete with inverse field and RBAC true" +- name: Delete with inverse field and RBAC true gqlquery: | mutation { deleteTweets( @@ -37,8 +37,8 @@ } } jwtvar: - USER: "foo" - ROLE: "admin" + USER: foo + ROLE: admin dgmutations: - deletejson: | [ @@ -70,7 +70,7 @@ Tweets_4 as var(func: uid(x)) } -- name: "Delete with inverse field and RBAC false" +- name: Delete with inverse field and RBAC false gqlquery: | mutation { deleteTweets( @@ -83,7 +83,7 @@ } } jwtvar: - ROLE: "admin" + ROLE: admin dgmutations: - deletejson: | [ @@ -104,7 +104,7 @@ Tweets_2 as var(func: uid(x)) } -- name: "Delete with deep auth" +- name: Delete with deep auth gqlquery: | mutation deleteTicket($filter: TicketFilter!) { deleteTicket(filter: $filter) { @@ -112,7 +112,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "filter": { "title": { "anyofterms": "auth is applied" } } } dgmutations: @@ -148,8 +148,7 @@ } } - -- name: "Delete with deep query" +- name: Delete with deep query gqlquery: | mutation deleteTicket($filter: TicketFilter!) { deleteTicket(filter: $filter) { @@ -171,7 +170,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "filter": { "title": { "anyofterms": "auth is applied" } } } dgmutations: @@ -279,7 +278,7 @@ } } -- name: "Delete with top level RBAC true." +- name: Delete with top level RBAC true gqlquery: | mutation($projs: [ID!]) { deleteProject (filter: { projID: $projs}) { @@ -291,8 +290,8 @@ "projs" : ["0x01", "0x02"] } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgmutations: - deletejson: | [{ @@ -313,7 +312,7 @@ } } -- name: "Delete with top level RBAC false." +- name: Delete with top level RBAC false gqlquery: | mutation deleteLog($filter: LogFilter!) { deleteLog(filter: $filter) { @@ -331,8 +330,8 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgmutations: - deletejson: | [{ @@ -348,7 +347,7 @@ DeleteLogPayload.log() } -- name: "multiple rule in delete mutation" +- name: Multiple rule in delete mutation gqlquery: | mutation deleteUser($filter: UserFilter!) { deleteUser(filter: $filter) { @@ -362,7 +361,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgmutations: - deletejson: | [ @@ -389,7 +388,7 @@ User_Auth3 as var(func: uid(User_1)) @filter(eq(User.isPublic, true)) @cascade } -- name: "Filtering by ID" +- name: Filtering by ID gqlquery: | mutation deleteRegion($filter: RegionFilter!) { deleteRegion(filter: $filter) { @@ -397,7 +396,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "filter": { @@ -419,7 +418,7 @@ Region_Auth2 as var(func: uid(Region_1)) @filter(eq(Region.global, true)) @cascade } -- name: "Delete with top level RBAC false." +- name: Delete with top level RBAC false gqlquery: | mutation deleteLog($filter: LogFilter!) { deleteLog(filter: $filter) { @@ -433,8 +432,8 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgmutations: - deletejson: | [{ @@ -445,7 +444,7 @@ x as deleteLog() } -- name: "Delete with top level RBAC true." +- name: Delete with top level RBAC true gqlquery: | mutation deleteLog($filter: LogFilter!) { deleteLog(filter: $filter) { @@ -463,8 +462,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgmutations: - deletejson: | [{ @@ -492,7 +491,7 @@ Log_3 as var(func: uid(x)) } -- name: "Delete with top level OR RBAC true." +- name: Delete with top level OR RBAC true gqlquery: | mutation($ids: [ID!]) { deleteComplexLog (filter: { id: $ids}) { @@ -504,8 +503,8 @@ "ids" : ["0x01", "0x02"] } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgmutations: - deletejson: | [{ "uid": "uid(x)" }] @@ -518,7 +517,7 @@ ComplexLog_1 as var(func: uid(0x1, 0x2)) @filter(type(ComplexLog)) } -- name: "Delete with top level OR RBAC false." +- name: Delete with top level OR RBAC false gqlquery: | mutation($ids: [ID!]) { deleteComplexLog (filter: { id: $ids}) { @@ -530,7 +529,7 @@ "ids" : ["0x01", "0x02"] } jwtvar: - USER: "user1" + USER: user1 dgmutations: - deletejson: | [{ "uid": "uid(x)" }] @@ -544,7 +543,7 @@ ComplexLog_Auth2 as var(func: uid(ComplexLog_1)) @filter(eq(ComplexLog.visible, true)) @cascade } -- name: "Delete with top level AND RBAC true." +- name: Delete with top level AND RBAC true gqlquery: | mutation ($ids: [ID!]) { deleteIssue(filter: {id: $ids}) { @@ -556,8 +555,8 @@ "ids": ["0x1", "0x2"] } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgmutations: - deletejson: | [{ @@ -575,7 +574,7 @@ } } -- name: "Delete with top level AND RBAC false." +- name: Delete with top level AND RBAC false gqlquery: | mutation ($ids: [ID!]) { deleteIssue(filter: {id: $ids}) { @@ -587,8 +586,8 @@ "ids": ["0x1", "0x2"] } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgmutations: - deletejson: | [{ @@ -599,7 +598,7 @@ x as deleteIssue() } -- name: "Delete with top level not RBAC false." +- name: Delete with top level not RBAC false gqlquery: | mutation ($ids: [ID!]) { deleteRole(filter: {id: $ids}) { @@ -611,8 +610,8 @@ "ids": ["0x1", "0x2"] } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgmutations: - deletejson: | [{ @@ -623,7 +622,7 @@ x as deleteRole() } -- name: "Delete with top level not RBAC true." +- name: Delete with top level not RBAC true gqlquery: | mutation ($ids: [ID!]) { deleteRole(filter: {id: $ids}) { @@ -635,8 +634,8 @@ "ids": ["0x1", "0x2"] } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgmutations: - deletejson: | [{ @@ -649,7 +648,9 @@ } } -- name: "Deleting interface having its own auth rules and implementing types also have auth rules and some of the rules of implementing types are not satisfied" +- name: + Deleting interface having its own auth rules and implementing types also have auth rules and + some of the rules of implementing types are not satisfied gqlquery: | mutation ($ids: [ID!]) { deletePost(filter: {id: $ids}) { @@ -661,8 +662,8 @@ "ids": ["0x1", "0x2"] } jwtvar: - USER: "user1" - ANS: "true" + USER: user1 + ANS: "true" dgmutations: - deletejson: | [{ @@ -700,7 +701,9 @@ } } -- name: "Deleting interface having its own auth rules and implementing types also have auth rules and the rules of interface are not satisfied" +- name: + Deleting interface having its own auth rules and implementing types also have auth rules and the + rules of interface are not satisfied gqlquery: | mutation ($ids: [ID!]) { deletePost(filter: {id: $ids}) { @@ -708,7 +711,7 @@ } } jwtvar: - ROLE: "ADMIN" + ROLE: ADMIN AND: "true" variables: | { @@ -724,7 +727,9 @@ x as deletePost() } -- name: "Deleting interface having no own auth rules but some implementing types have auth rules and they are not satisfied." +- name: + Deleting interface having no own auth rules but some implementing types have auth rules and they + are not satisfied gqlquery: | mutation ($ids: [ID!]) { deleteA(filter: {id: $ids}) { @@ -750,7 +755,7 @@ B_2 as var(func: type(B)) } -- name: "Delete Type Having Graph Traversal Auth Rules on Interface." +- name: Delete Type Having Graph Traversal Auth Rules on Interface gqlquery: | mutation ($ids: [ID!]) { deleteQuestion(filter: {id: $ids}) { @@ -762,7 +767,7 @@ "ids": ["0x1", "0x2"] } jwtvar: - USER: "user1" + USER: user1 ANS: "true" dgmutations: - deletejson: | @@ -793,7 +798,7 @@ } } -- name: "Delete Type Having Graph Traversal Auth Rules on Interface and those are not satisfied." +- name: Delete Type Having Graph Traversal Auth Rules on Interface and those are not satisfied gqlquery: | mutation ($ids: [ID!]) { deleteQuestion(filter: {id: $ids}) { @@ -816,7 +821,7 @@ x as deleteQuestion() } -- name: "Delete type having RBAC Auth Rules on interface and those are not satisfied." +- name: Delete type having RBAC Auth Rules on interface and those are not satisfied gqlquery: | mutation ($ids: [ID!]) { deleteFbPost(filter: {id: $ids}) { @@ -828,8 +833,8 @@ "ids": ["0x1", "0x2"] } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgmutations: - deletejson: | [{ @@ -840,7 +845,7 @@ x as deleteFbPost() } -- name: "Delete type having RBAC Auth Rules on interface and all are satisfied." +- name: Delete type having RBAC Auth Rules on interface and all are satisfied gqlquery: | mutation ($ids: [ID!]) { deleteFbPost(filter: {id: $ids}) { @@ -852,8 +857,8 @@ "ids": ["0x1", "0x2"] } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgmutations: - deletejson: | [{ @@ -879,4 +884,3 @@ } } } - diff --git a/graphql/resolve/auth_query_test.yaml b/graphql/resolve/auth_query_test.yaml index a0083d44266..381bacf98f6 100644 --- a/graphql/resolve/auth_query_test.yaml +++ b/graphql/resolve/auth_query_test.yaml @@ -1,4 +1,4 @@ -- name: "Deep RBAC rule - All level true" +- name: Deep RBAC rule - All level true gqlquery: | query { queryContact { @@ -46,7 +46,7 @@ TaskOccurrence_Auth5 as var(func: uid(TaskOccurrence_4)) @filter(eq(TaskOccurrence.role, "ADMINISTRATOR")) @cascade } -- name: "Deep RBAC rule - Level 0 false" +- name: Deep RBAC rule - Level 0 false gqlquery: | query { queryContact { @@ -71,7 +71,7 @@ queryContact() } -- name: "Deep RBAC rule - Level 1 false" +- name: Deep RBAC rule - Level 1 false gqlquery: | query { queryContact { @@ -101,7 +101,7 @@ Contact_6 as var(func: type(Contact)) } -- name: "Deep RBAC rule with cascade - Level 1 false" +- name: Deep RBAC rule with cascade - Level 1 false gqlquery: | query { queryContact @cascade { @@ -150,7 +150,7 @@ AdminTask_6 as var(func: uid()) } -- name: "Deep RBAC rule - Level 2 false" +- name: Deep RBAC rule - Level 2 false gqlquery: | query { queryContact { @@ -188,7 +188,7 @@ AdminTask_1 as var(func: uid(AdminTask_2)) } -- name: "Deep RBAC rule - Level 1 type without auth." +- name: Deep RBAC rule - Level 1 type without auth gqlquery: | query { queryContact { @@ -236,7 +236,7 @@ TaskOccurrence_Auth5 as var(func: uid(TaskOccurrence_4)) @filter(eq(TaskOccurrence.role, "ADMINISTRATOR")) @cascade } -- name: "Auth query with @dgraph pred." +- name: Auth query with @dgraph pred gqlquery: | query { queryStudent { @@ -244,8 +244,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { queryStudent(func: uid(StudentRoot)) { @@ -257,7 +257,7 @@ Student_Auth2 as var(func: uid(Student_1)) @filter(eq(IOw80vnV, "user1")) @cascade } -- name: "Auth query with @dgraph pred (Test RBAC)." +- name: Auth query with @dgraph pred (Test RBAC) gqlquery: | query { queryStudent { @@ -265,14 +265,14 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { queryStudent() } -- name: "Auth with deep get query." +- name: Auth with deep get query gqlquery: | query { getProject(projID: "0x123") { @@ -284,7 +284,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { getProject(func: uid(ProjectRoot)) @filter(type(Project)) { @@ -323,7 +323,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { queryUserSecret(func: uid(UserSecretRoot)) { @@ -335,7 +335,7 @@ UserSecret_Auth2 as var(func: uid(UserSecret_1)) @filter(eq(UserSecret.ownedBy, "user1")) @cascade } -- name: "Auth with Aggregate Root Query" +- name: Auth with Aggregate Root Query gqlquery: | query { aggregateUserSecret { @@ -345,7 +345,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { aggregateUserSecret() { @@ -371,7 +371,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { getUserSecret(func: uid(UserSecretRoot)) @filter(type(UserSecret)) { @@ -392,7 +392,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { queryUserSecret(func: uid(UserSecretRoot)) { @@ -404,7 +404,7 @@ UserSecret_Auth2 as var(func: uid(UserSecret_1)) @filter(eq(UserSecret.ownedBy, "user1")) @cascade } -- name: "Deep RBAC rules true" +- name: Deep RBAC rules true gqlquery: | query { queryUser { @@ -414,8 +414,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { queryUser(func: uid(UserRoot)) { @@ -435,7 +435,7 @@ } } -- name: "Deep RBAC rules false" +- name: Deep RBAC rules false gqlquery: | query { queryUser { @@ -446,8 +446,8 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { queryUser(func: uid(UserRoot)) { @@ -458,7 +458,7 @@ User_3 as var(func: type(User)) } -- name: "Auth with top level AND rbac true" +- name: Auth with top level AND rbac true gqlquery: | query { queryIssue { @@ -466,8 +466,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { queryIssue(func: uid(IssueRoot)) { @@ -481,7 +481,7 @@ } } -- name: "Auth with complex rbac rules, true" +- name: Auth with complex rbac rules, true gqlquery: | query { queryComplexLog { @@ -489,8 +489,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { queryComplexLog(func: uid(ComplexLogRoot)) { @@ -501,7 +501,7 @@ ComplexLog_1 as var(func: type(ComplexLog)) } -- name: "Auth with complex rbac rules, false" +- name: Auth with complex rbac rules, false gqlquery: | query { queryComplexLog { @@ -509,14 +509,14 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { queryComplexLog() } -- name: "Auth with top level rbac true" +- name: Auth with top level rbac true gqlquery: | query { queryLog { @@ -524,8 +524,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { queryLog(func: uid(LogRoot)) { @@ -536,7 +536,7 @@ Log_1 as var(func: type(Log)) } -- name: "Auth with top level rbac false" +- name: Auth with top level rbac false gqlquery: | query { queryLog { @@ -544,14 +544,14 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { queryLog() } -- name: "Auth with top level AND rbac false" +- name: Auth with top level AND rbac false gqlquery: | query { queryIssue { @@ -559,14 +559,14 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { queryIssue() } -- name: "Aggregate Query on Auth with top level AND rbac false" +- name: Aggregate Query on Auth with top level AND rbac false gqlquery: | query { aggregateIssue { @@ -575,14 +575,14 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { aggregateIssue() } -- name: "Auth with top level OR rbac true" +- name: Auth with top level OR rbac true gqlquery: | query { queryProject { @@ -590,8 +590,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { queryProject(func: uid(ProjectRoot)) { @@ -602,7 +602,7 @@ Project_1 as var(func: type(Project)) } -- name: "Aggregate on Auth with top level OR rbac true" +- name: Aggregate on Auth with top level OR rbac true gqlquery: | query { aggregateProject { @@ -612,8 +612,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { aggregateProject() { @@ -630,7 +630,7 @@ Project_1 as var(func: type(Project)) } -- name: "Query with missing jwt variables" +- name: Query with missing jwt variables gqlquery: | query { queryGroup { @@ -638,7 +638,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { queryGroup(func: uid(GroupRoot)) { @@ -651,7 +651,7 @@ } } -- name: "Auth with top level OR rbac false" +- name: Auth with top level OR rbac false gqlquery: | query { queryProject { @@ -659,8 +659,8 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { queryProject(func: uid(ProjectRoot)) { @@ -685,7 +685,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { queryUserSecret(func: uid(UserSecretRoot), orderasc: UserSecret.aSecret) { @@ -706,7 +706,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { queryTicket(func: uid(TicketRoot)) { @@ -738,7 +738,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { queryUser(func: uid(UserRoot)) { @@ -778,7 +778,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { queryUser(func: uid(UserRoot)) { @@ -806,7 +806,7 @@ } } -- name: "Auth deep query - 0 level" +- name: Auth deep query - 0 level gqlquery: | query { queryMovie(filter: { content: { eq: "A. N. Author" } }, order: { asc: content }, first: 10, offset: 10) { @@ -814,7 +814,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { queryMovie(func: uid(MovieRoot), orderasc: Movie.content) { @@ -834,7 +834,7 @@ } } -- name: "Auth deep query - 1 level" +- name: Auth deep query - 1 level gqlquery: | query { queryMovie(filter: { content: { eq: "MovieXYZ" } }, order: { asc: content }, first: 10, offset: 10) @cascade { @@ -846,7 +846,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { queryMovie(func: uid(MovieRoot), orderasc: Movie.content, first: 10, offset: 10) @cascade { @@ -875,7 +875,7 @@ Region_1 as var(func: uid(Region_2)) } -- name: "Auth deep query - 3 level" +- name: Auth deep query - 3 level gqlquery: | query { queryMovie(filter: { content: { eq: "MovieXYZ" } }, order: { asc: content }, first: 10, offset: 10) { @@ -896,7 +896,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { queryMovie(func: uid(MovieRoot), orderasc: Movie.content) { @@ -945,7 +945,7 @@ UserSecret_Auth7 as var(func: uid(UserSecret_6)) @filter(eq(UserSecret.ownedBy, "user1")) @cascade } -- name: "Auth deep query with @cascade at all the levels - 3 level" +- name: Auth deep query with @cascade at all the levels - 3 level gqlquery: | query { queryMovie(filter: { content: { eq: "MovieXYZ" } }, order: { asc: content }, first: 10, offset: 10) @cascade { @@ -966,7 +966,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { queryMovie(func: uid(MovieRoot), orderasc: Movie.content, first: 10, offset: 10) @cascade { @@ -1015,7 +1015,7 @@ UserSecret_Auth7 as var(func: uid(UserSecret_6)) @filter(eq(UserSecret.ownedBy, "user1")) @cascade } -- name: "Auth with complex filter" +- name: Auth with complex filter gqlquery: | query { queryMovie { @@ -1023,7 +1023,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { queryMovie(func: uid(MovieRoot)) { @@ -1043,7 +1043,7 @@ } } -- name: "Aggregate Query with complex auth filter" +- name: Aggregate Query with complex auth filter gqlquery: | query { aggregateMovie { @@ -1052,7 +1052,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { aggregateMovie() { @@ -1076,7 +1076,7 @@ } } -- name: "Query with missing variable - top level" +- name: Query with missing variable - top level gqlquery: | query { queryUserSecret { @@ -1088,7 +1088,7 @@ queryUserSecret() } -- name: "Query with null variable - top level" +- name: Query with null variable - top level gqlquery: | query { queryUserSecret { @@ -1102,7 +1102,7 @@ queryUserSecret() } -- name: "Get with top level RBAC false" +- name: Get with top level RBAC false gqlquery: | query { getLog(id: "0x123") { @@ -1110,13 +1110,13 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { getLog() } -- name: "Query with missing variable - deep query" +- name: Query with missing variable - deep query gqlquery: | query { queryUser { @@ -1137,7 +1137,7 @@ User_3 as var(func: type(User)) } -- name: "Query with null variable - deep query" +- name: Query with null variable - deep query gqlquery: | query { queryUser { @@ -1160,7 +1160,7 @@ User_3 as var(func: type(User)) } -- name: "Query with missing variable - partial jwt token" +- name: Query with missing variable - partial jwt token gqlquery: | query { queryProject { @@ -1168,7 +1168,7 @@ } } jwtvar: - ROLE: "ADMIN" + ROLE: ADMIN dgquery: |- query { queryProject(func: uid(ProjectRoot)) { @@ -1179,7 +1179,7 @@ Project_1 as var(func: type(Project)) } -- name: "Query with missing jwt token - type without auth directive" +- name: Query with missing jwt token - type without auth directive gqlquery: | query { queryRole { @@ -1194,7 +1194,7 @@ } } -- name: "Query with missing jwt token - type with auth directive" +- name: Query with missing jwt token - type with auth directive gqlquery: | query { queryMovie { @@ -1215,7 +1215,7 @@ } } -- name: "Query with missing jwt token - type with empty auth directive" +- name: Query with missing jwt token - type with empty auth directive gqlquery: | query { queryReview { @@ -1230,7 +1230,7 @@ } } -- name: "Aggregate Fields at child with Auth deep filter and field filter" +- name: Aggregate Fields at child with Auth deep filter and field filter gqlquery: | query { queryUser { @@ -1242,7 +1242,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { queryUser(func: uid(UserRoot)) { @@ -1272,7 +1272,7 @@ } } -- name: "Multiple Aggregate queries at child level and other queries with Auth deep filter" +- name: Multiple Aggregate queries at child level and other queries with Auth deep filter gqlquery: | query { queryUser { @@ -1289,8 +1289,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { queryUser(func: uid(UserRoot)) { @@ -1348,7 +1348,7 @@ } } -- name: "Aggregate at child with RBAC rules true" +- name: Aggregate at child with RBAC rules true gqlquery: | query { queryUser { @@ -1359,8 +1359,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { queryUser(func: uid(UserRoot)) { @@ -1383,7 +1383,7 @@ } } -- name: "Aggregate Fields with Deep RBAC rules false" +- name: Aggregate Fields with Deep RBAC rules false gqlquery: | query { queryUser { @@ -1395,8 +1395,8 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { queryUser(func: uid(UserRoot)) { @@ -1407,7 +1407,7 @@ User_1 as var(func: type(User)) } -- name: "Type should apply Interface's query rules and along with its own auth rules" +- name: Type should apply Interface's query rules and along with its own auth rules gqlquery: | query { queryQuestion { @@ -1417,7 +1417,7 @@ } jwtvar: ANS: "true" - USER: "Random" + USER: Random dgquery: |- query { queryQuestion(func: uid(QuestionRoot)) { @@ -1437,7 +1437,7 @@ } } -- name: "Type should apply only Interface's query auth rules" +- name: Type should apply only Interface's query auth rules gqlquery: | query { queryAnswer { @@ -1446,7 +1446,7 @@ } } jwtvar: - USER: "Random" + USER: Random dgquery: |- query { queryAnswer(func: uid(AnswerRoot)) { @@ -1463,7 +1463,7 @@ } } -- name: "Type should apply query auth rules from all the interfaces that it implements." +- name: Type should apply query auth rules from all the interfaces that it implements gqlquery: | query { queryFbPost { @@ -1472,8 +1472,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "Random" + ROLE: ADMIN + USER: Random dgquery: |- query { queryFbPost(func: uid(FbPostRoot)) { @@ -1490,7 +1490,7 @@ } } -- name: "Type which inherits auth rules from interfaces returns no results when auth rules fail" +- name: Type which inherits auth rules from interfaces returns no results when auth rules fail gqlquery: | query { queryFbPost { @@ -1499,14 +1499,14 @@ } } jwtvar: - ROLE: "REGULAR" - USER: "Random" + ROLE: REGULAR + USER: Random dgquery: |- query { queryFbPost() } -- name: "Auth rules of All the implementing types should Apply to the interface also" +- name: Auth rules of All the implementing types should Apply to the interface also gqlquery: | query { queryPost { @@ -1514,9 +1514,9 @@ } } jwtvar: - ROLE: "ADMIN" - ANS: "true" - USER: "Random" + ROLE: ADMIN + ANS: "true" + USER: Random dgquery: |- query { queryPost(func: uid(PostRoot)) { @@ -1552,7 +1552,7 @@ } } -- name: "Filters on query Interface should work correctly" +- name: Filters on query Interface should work correctly gqlquery: | query { queryPost(filter: {text: {eq: "A Post"}}, order: { desc: text}, first: 10, offset: 5 ) { @@ -1560,9 +1560,9 @@ } } jwtvar: - ROLE: "ADMIN" - ANS: "true" - USER: "Random" + ROLE: ADMIN + ANS: "true" + USER: Random dgquery: |- query { queryPost(func: uid(PostRoot), orderdesc: Post.text) { @@ -1598,7 +1598,7 @@ } } -- name: "Query interface should return empty if the auth rule of interface is not satisfied" +- name: Query interface should return empty if the auth rule of interface is not satisfied gqlquery: | query { queryPost { @@ -1606,14 +1606,14 @@ } } jwtvar: - ROLE: "ADMIN" + ROLE: ADMIN ANS: "true" dgquery: |- query { queryPost() } -- name: "Query interface should return partial types if the auth rule of interface is not satisfied" +- name: Query interface should return partial types if the auth rule of interface is not satisfied gqlquery: | query { queryPost { @@ -1621,7 +1621,7 @@ } } jwtvar: - USER: "Random" + USER: Random ANS: "true" dgquery: |- query { @@ -1651,7 +1651,7 @@ } } -- name: "Get Query interface having Auth Rules apply Auth filters of types also" +- name: Get Query interface having Auth Rules apply Auth filters of types also gqlquery: | query { getPost(id: "0x1") { @@ -1659,7 +1659,7 @@ } } jwtvar: - USER: "Random" + USER: Random ANS: "true" dgquery: |- query { @@ -1689,7 +1689,8 @@ } } -- name: "Get Query interface having Auth Rules should return empty if the Auth rules are not satisfied" +- name: + Get Query interface having Auth Rules should return empty if the Auth rules are not satisfied gqlquery: | query { getPost(id: "0x1") { @@ -1702,7 +1703,9 @@ getPost() } -- name: "Query interface having no Auth Rules should apply auth rules on implementing types that are satisfied" +- name: + Query interface having no Auth Rules should apply auth rules on implementing types that are + satisfied gqlquery: | query { queryA { @@ -1727,7 +1730,9 @@ } } -- name: "Query interface having no Auth Rules but some type have Auth rules and those are not satified are excluded (for eg: type C )" +- name: + "Query interface having no Auth Rules but some type have Auth rules and those are not satified + are excluded (for eg: type C )" gqlquery: | query { queryA { @@ -1747,8 +1752,7 @@ B_2 as var(func: type(B)) } -- - name: "Password Query with no rule applied for password" +- name: Password Query with no rule applied for password gqlquery: | query { checkUserPassword(username: "user", password: "Password") { @@ -1766,8 +1770,7 @@ } } -- - name: "Password Query with RBAC rule true" +- name: Password Query with RBAC rule true gqlquery: | query { checkLogPassword(id: "0x123", pwd: "something") { @@ -1777,7 +1780,7 @@ } } jwtvar: - ROLE: "Admin" + ROLE: Admin dgquery: |- query { checkLogPassword(func: uid(LogRoot)) @filter((eq(val(pwd), 1) AND type(Log))) { @@ -1792,8 +1795,7 @@ } } -- - name: "Password Query with RBAC rule false" +- name: Password Query with RBAC rule false gqlquery: | query { checkLogPassword(id: "0x123", pwd: "something") { @@ -1802,14 +1804,13 @@ } } jwtvar: - ROLE: "User" + ROLE: User dgquery: |- query { checkLogPassword() } -- - name: "Password Query with auth rules" +- name: Password Query with auth rules gqlquery: | query { checkProjectPassword(projID: "0x123", pwd: "something") { @@ -1822,7 +1823,7 @@ } } jwtvar: - USER: "user1" + USER: user1 dgquery: |- query { checkProjectPassword(func: uid(ProjectRoot)) @filter((eq(val(pwd), 1) AND type(Project))) { @@ -1856,7 +1857,9 @@ } } -- name: "Type with password query should apply Interface's password rules and along with its own auth rules" +- name: + Type with password query should apply Interface's password rules and along with its own auth + rules gqlquery: | query { checkQuestionPassword(id: "0x123", pwd: "something") { @@ -1865,9 +1868,9 @@ } } jwtvar: - ROLE: "Admin" + ROLE: Admin ANS: "true" - USER: "ADMIN" + USER: ADMIN dgquery: |- query { checkQuestionPassword(func: uid(QuestionRoot)) @filter((eq(val(pwd), 1) AND type(Question))) { @@ -1885,7 +1888,8 @@ } } -- name: "Type which inherits password auth rules from interfaces returns no results when auth rules fail" +- name: + Type which inherits password auth rules from interfaces returns no results when auth rules fail gqlquery: | query { checkQuestionPassword(id: "0x123", pwd: "something") { @@ -1894,15 +1898,15 @@ } } jwtvar: - ROLE: "NotAdmin" + ROLE: NotAdmin ANS: "true" - USER: "ADMIN" + USER: ADMIN dgquery: |- query { checkQuestionPassword() } -- name: "Password Auth rules of All the implementing types should Apply to the interface also" +- name: Password Auth rules of All the implementing types should Apply to the interface also gqlquery: | query { checkPostPassword(id: "0x123", pwd: "something") { @@ -1910,9 +1914,9 @@ } } jwtvar: - ROLE: "Admin" + ROLE: Admin ANS: "true" - USER: "ADMIN" + USER: ADMIN dgquery: |- query { checkPostPassword(func: uid(PostRoot)) @filter((eq(val(pwd), 1) AND type(Post))) { @@ -1939,7 +1943,7 @@ } } -- name: "Entities query with query auth rules" +- name: Entities query with query auth rules gqlquery: | query { _entities(representations: [{__typename: "Mission", id: "0x1"}{__typename: "Mission", id: "0x2"}, {__typename: "Mission", id: "0x3"}]) { @@ -1951,7 +1955,7 @@ } } jwtvar: - USER: "user" + USER: user dgquery: |- query { _entities(func: uid(_EntityRoot), orderasc: Mission.id) { @@ -1967,7 +1971,7 @@ Mission.id : Mission.id } } -- name: "Entities query with top level RBAC rule true and level 1 query auth rule" +- name: Entities query with top level RBAC rule true and level 1 query auth rule gqlquery: | query { _entities(representations: [{__typename: "Astronaut", id: "0x1"},{__typename: "Astronaut", id: "0x2"},{__typename: "Astronaut", id: "0x3"}]) { @@ -1979,8 +1983,8 @@ } } jwtvar: - ROLE: "admin" - USER: "user" + ROLE: admin + USER: user dgquery: |- query { _entities(func: uid(_EntityRoot), orderasc: Astronaut.id) { @@ -2002,7 +2006,7 @@ } } -- name: "Entities query with RBAC rule false" +- name: Entities query with RBAC rule false gqlquery: | query { _entities(representations: [{__typename: "Astronaut", id: "0x1"},{__typename: "Astronaut", id: "0x2"},{__typename: "Astronaut", id: "0x3"}]) { @@ -2014,13 +2018,13 @@ } } jwtvar: - ROLE: "user" + ROLE: user dgquery: |- query { _entities() } -- name: "Entities query with top RBAC rules true and missing JWT variable for level 1 query auth rule" +- name: Entities query with top RBAC rules true and missing JWT variable for level 1 query auth rule gqlquery: | query { _entities(representations: [{__typename: "Astronaut", id: "0x1"},{__typename: "Astronaut", id: "0x2"},{__typename: "Astronaut", id: "0x3"}]) { @@ -2032,7 +2036,7 @@ } } jwtvar: - ROLE: "admin" + ROLE: admin dgquery: |- query { _entities(func: uid(_EntityRoot), orderasc: Astronaut.id) { @@ -2043,8 +2047,7 @@ Astronaut_3 as var(func: eq(Astronaut.id, "0x1", "0x2", "0x3")) @filter(type(Astronaut)) } -- - name: "Query interface should return all the nodes of a type if rbac rules of type are true" +- name: Query interface should return all the nodes of a type if rbac rules of type are true gqlquery: | query { queryVehicle{ @@ -2052,8 +2055,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user" + ROLE: ADMIN + USER: user dgquery: |- query { queryVehicle(func: uid(VehicleRoot)) { @@ -2066,8 +2069,7 @@ Car_2 as var(func: type(Car)) } -- - name: "Fragments in auth queries with user defined cascade" +- name: Fragments in auth queries with user defined cascade gqlquery: | query { queryHome { @@ -2101,8 +2103,7 @@ } } -- - name: "Query auth rules with filter on field with ID type" +- name: Query auth rules with filter on field with ID type gqlquery: | query{ queryPerson{ @@ -2125,8 +2126,7 @@ } } -- - name: "Query auth rules with filter on field with ID type, single JWT ID param" +- name: Query auth rules with filter on field with ID type, single JWT ID param gqlquery: | query{ queryPerson{ diff --git a/graphql/resolve/auth_tests.yaml b/graphql/resolve/auth_tests.yaml index 69170db2286..a3eeef55c2e 100644 --- a/graphql/resolve/auth_tests.yaml +++ b/graphql/resolve/auth_tests.yaml @@ -1,5 +1,4 @@ -- - name: "Type Authorization OR (dgquery, dgquery) filter at root node, rbac rules false" +- name: Type Authorization OR (dgquery, dgquery) filter at root node, rbac rules false gqlquery: | query { queryUser(filter: {username: {eq: "user1"}}, order: {asc: username}) { @@ -8,14 +7,13 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { } -- - name: "Type Authorization OR (dgquery, rbac) filter at root node, rbac rules false" +- name: Type Authorization OR (dgquery, rbac) filter at root node, rbac rules false gqlquery: | query { getProject(projID: "0x1") { @@ -23,15 +21,13 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { } - -- - name: "Type Authorization AND (dgquery, rbac) filter at root node, rbac rules false" +- name: Type Authorization AND (dgquery, rbac) filter at root node, rbac rules false gqlquery: | query { getIssue(id: "0x1") { @@ -39,14 +35,13 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { } -- - name: "Type Authorization AND (dgquery, dgquery) filter at root node, rbac rules false" +- name: Type Authorization AND (dgquery, dgquery) filter at root node, rbac rules false gqlquery: | query { getMovie(id: "0x1") { @@ -54,14 +49,13 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { } -- - name: "Type Authorization filter at root node, rbac rules false" +- name: Type Authorization filter at root node, rbac rules false gqlquery: | query { getTicket(id: "0x1") { @@ -69,14 +63,13 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { } -- - name: "Type Authorization RBAC filter at root node, rbac rules false" +- name: Type Authorization RBAC filter at root node, rbac rules false gqlquery: | query { getLog(id: "0x1") { @@ -84,15 +77,13 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { } - -- - name: "Type Authorization filter at deep node, rbac rules false" +- name: Type Authorization filter at deep node, rbac rules false gqlquery: | query { queryProject(filter: {name: {eq: "Project1"}}, order: {asc: name}) { @@ -107,14 +98,13 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { } -- - name: "Field authorization filters at root node, rbac rules false" +- name: Field authorization filters at root node, rbac rules false gqlquery: | query { getUser(username: "user1") { @@ -124,14 +114,13 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { } -- - name: "Field authorization filters at deep node, rbac rules false" +- name: Field authorization filters at deep node, rbac rules false gqlquery: | query { getProject(projID: "0x1") { @@ -147,14 +136,13 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 dgquery: |- query { } -- - name: "Type Authorization OR (dgquery, rbac) filter at root node, rbac rules true" +- name: Type Authorization OR (dgquery, rbac) filter at root node, rbac rules true gqlquery: | query { getProject(projID: "0x1") { @@ -162,15 +150,13 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { } - -- - name: "Type Authorization AND (dgquery, rbac) filter at root node, rbac rules true" +- name: Type Authorization AND (dgquery, rbac) filter at root node, rbac rules true gqlquery: | query { getIssue(id: "0x1") { @@ -178,14 +164,13 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { } -- - name: "Type Authorization AND filter at root node, rbac rules true" +- name: Type Authorization AND filter at root node, rbac rules true gqlquery: | query { getMovie(id: "0x1") { @@ -193,14 +178,13 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { } -- - name: "Type Authorization filter at root node, rbac rules true" +- name: Type Authorization filter at root node, rbac rules true gqlquery: | query { getTicket(id: "0x1") { @@ -208,14 +192,13 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { } -- - name: "Type Authorization RBAC filter at root node, rbac rules true" +- name: Type Authorization RBAC filter at root node, rbac rules true gqlquery: | query { getLog(id: "0x1") { @@ -223,15 +206,13 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { } - -- - name: "Type Authorization filter at deep node, rbac rules true" +- name: Type Authorization filter at deep node, rbac rules true gqlquery: | query { queryProject(filter: {name: {eq: "Project1"}}, order: {asc: name}) { @@ -246,14 +227,13 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { } -- - name: "Field authorization filters at root node, rbac rules true" +- name: Field authorization filters at root node, rbac rules true gqlquery: | query { getUser(username: "user1") { @@ -263,14 +243,13 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { } -- - name: "Field authorization filters at deep node, rbac rules true" +- name: Field authorization filters at deep node, rbac rules true gqlquery: | query { getProject(projID: "0x1") { @@ -286,9 +265,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 dgquery: |- query { } - diff --git a/graphql/resolve/auth_update_test.yaml b/graphql/resolve/auth_update_test.yaml index 385d9a886ac..8b4ea54aac5 100644 --- a/graphql/resolve/auth_update_test.yaml +++ b/graphql/resolve/auth_update_test.yaml @@ -1,4 +1,4 @@ -- name: "Update one node that creates nothing" +- name: Update one node that creates nothing gqlquery: | mutation updateUserSecret($upd: UpdateUserSecretInput!) { updateUserSecret(input: $upd) { @@ -8,7 +8,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "upd": { "filter": { "id": [ "0x123" ] }, @@ -27,7 +27,7 @@ uids: | { } -- name: "Update a node that does a deep add" +- name: Update a node that does a deep add gqlquery: | mutation updateColumn($upd: UpdateColumnInput!) { updateColumn(input: $upd) { @@ -37,7 +37,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "upd": { @@ -88,8 +88,7 @@ "Ticket": [ { "uid": "0x789" } ] } - -- name: "Update a node that does a deep add and fails auth" +- name: Update a node that does a deep add and fails auth gqlquery: | mutation updateColumn($upd: UpdateColumnInput!) { updateColumn(input: $upd) { @@ -99,7 +98,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "upd": { @@ -147,14 +146,13 @@ } authjson: | { } - error: - { "message": "mutation failed because authorization failed" } + error: { "message": mutation failed because authorization failed } # See comments about additional deletes in update_mutation_test.yaml. # Because of those additional deletes, for example, when we update a column and # link it to an existing ticket, we might remove that ticket from the column it was # attached to ... so we need authorization to update that column as well. -- name: "update with auth on additional delete (updt list edge)" +- name: update with auth on additional delete (updt list edge) gqlquery: | mutation updateColumn($upd: UpdateColumnInput!) { updateColumn(input: $upd) { @@ -164,7 +162,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "upd": { @@ -225,7 +223,7 @@ "Column_5.auth": [ { "uid": "0x456" } ] } -- name: "update with auth on additional delete that fails (updt list edge)" +- name: update with auth on additional delete that fails (updt list edge) gqlquery: | mutation updateColumn($upd: UpdateColumnInput!) { updateColumn(input: $upd) { @@ -235,7 +233,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "upd": { @@ -300,9 +298,9 @@ authjson: | { } error: - { "message": "couldn't rewrite query for mutation updateColumn because authorization failed" } + { "message": couldn't rewrite query for mutation updateColumn because authorization failed } -- name: "update with auth on additional delete (updt single edge)" +- name: update with auth on additional delete (updt single edge) gqlquery: | mutation updateTicket($upd: UpdateTicketInput!) { updateTicket(input: $upd) { @@ -312,7 +310,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "upd": { @@ -374,7 +372,7 @@ "Column_5.auth": [ { "uid": "0x499" } ] } -- name: "update with auth on additional delete that fails (updt single edge)" +- name: update with auth on additional delete that fails (updt single edge) gqlquery: | mutation updateTicket($upd: UpdateTicketInput!) { updateTicket(input: $upd) { @@ -384,7 +382,7 @@ } } jwtvar: - USER: "user1" + USER: user1 variables: | { "upd": { @@ -445,9 +443,9 @@ "Column_5": [ { "uid": "0x499" } ] } error: - { "message": "couldn't rewrite query for mutation updateTicket because authorization failed" } + { "message": couldn't rewrite query for mutation updateTicket because authorization failed } -- name: "Update with top level RBAC false." +- name: Update with top level RBAC false gqlquery: | mutation updateLog($log: UpdateLogInput!) { updateLog(input: $log) { @@ -457,8 +455,8 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 variables: | { "log": { @@ -474,7 +472,7 @@ x as updateLog() } -- name: "Update with top level RBAC true." +- name: Update with top level RBAC true gqlquery: | mutation updateLog($log: UpdateLogInput!) { updateLog(input: $log) { @@ -484,8 +482,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 variables: | { "log": { @@ -505,7 +503,7 @@ Log_1 as var(func: uid(0x123)) @filter(type(Log)) } -- name: "Update with top level OR RBAC false." +- name: Update with top level OR RBAC false gqlquery: | mutation updateProject($proj: UpdateProjectInput!) { updateProject(input: $proj) { @@ -515,8 +513,8 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 variables: | { "proj": { @@ -540,7 +538,7 @@ } } -- name: "Update with top level OR RBAC true." +- name: Update with top level OR RBAC true gqlquery: | mutation updateProject($proj: UpdateProjectInput!) { updateProject(input: $proj) { @@ -550,8 +548,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 variables: | { "proj": { @@ -570,7 +568,7 @@ Project_1 as var(func: uid(0x123)) @filter(type(Project)) } -- name: "Update with top level And RBAC true." +- name: Update with top level And RBAC true gqlquery: | mutation updateIssue($issue: UpdateIssueInput!) { updateIssue(input: $issue) { @@ -580,8 +578,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 variables: | { "issue": { @@ -603,7 +601,7 @@ } } -- name: "Update with top level And RBAC false." +- name: Update with top level And RBAC false gqlquery: | mutation updateIssue($issue: UpdateIssueInput!) { updateIssue(input: $issue) { @@ -613,8 +611,8 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 variables: | { "issue": { @@ -629,7 +627,7 @@ x as updateIssue() } -- name: "Update with top level not RBAC true." +- name: Update with top level not RBAC true gqlquery: | mutation updateComplexLog($log: UpdateComplexLogInput!) { updateComplexLog(input: $log) { @@ -639,8 +637,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 variables: | { "log": { @@ -659,7 +657,7 @@ ComplexLog_1 as var(func: uid(0x123)) @filter(type(ComplexLog)) } -- name: "Update with top level not RBAC false." +- name: Update with top level not RBAC false gqlquery: | mutation updateComplexLog($log: UpdateComplexLogInput!) { updateComplexLog(input: $log) { @@ -669,8 +667,8 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 variables: | { "log": { @@ -685,7 +683,7 @@ x as updateComplexLog() } -- name: "Update Type inheriting Graph Traversal Auth Rules from Interface." +- name: Update Type inheriting Graph Traversal Auth Rules from Interface. gqlquery: | mutation updateQuestion($question: UpdateQuestionInput!) { updateQuestion(input: $question) { @@ -695,7 +693,7 @@ } } jwtvar: - USER: "user1" + USER: user1 ANS: "true" variables: | { @@ -725,7 +723,7 @@ } } -- name: "Update Type inheriting Graph Traversal Auth Rules on Interface failed." +- name: Update Type inheriting Graph Traversal Auth Rules on Interface failed gqlquery: | mutation updateQuestion($question: UpdateQuestionInput!) { updateQuestion(input: $question) { @@ -749,7 +747,7 @@ x as updateQuestion() } -- name: "Update Type inheriting RBAC Auth Rules from Interface." +- name: Update Type inheriting RBAC Auth Rules from Interface gqlquery: | mutation updateFbPost($post: UpdateFbPostInput!) { updateFbPost(input: $post) { @@ -759,8 +757,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 variables: | { "post": @@ -786,7 +784,7 @@ } } -- name: "Update Type inheriting RBAC Auth Rules from Interface failed" +- name: Update Type inheriting RBAC Auth Rules from Interface failed gqlquery: | mutation updateFbPost($post: UpdateFbPostInput!) { updateFbPost(input: $post) { @@ -796,8 +794,8 @@ } } jwtvar: - ROLE: "USER" - USER: "user1" + ROLE: USER + USER: user1 variables: | { "post": @@ -813,7 +811,9 @@ x as updateFbPost() } -- name: "Updating interface having its own auth rules and implementing types also have auth rules and all are satisfied" +- name: + Updating interface having its own auth rules and implementing types also have auth rules and all + are satisfied gqlquery: | mutation updatePost($post: UpdatePostInput!) { updatePost(input: $post) { @@ -823,8 +823,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 ANS: "true" variables: | { @@ -869,7 +869,9 @@ } } -- name: "Updating interface having its own auth rules and implementing types also have auth rules and some of the rules of implementing types are not satisfied" +- name: + Updating interface having its own auth rules and implementing types also have auth rules and + some of the rules of implementing types are not satisfied gqlquery: | mutation updatePost($post: UpdatePostInput!) { updatePost(input: $post) { @@ -879,8 +881,8 @@ } } jwtvar: - ROLE: "ADMIN" - USER: "user1" + ROLE: ADMIN + USER: user1 variables: | { "post": @@ -914,7 +916,9 @@ } } -- name: "Updating interface having its own auth rules and implementing types also have auth rules and the rules of interface are not satisfied" +- name: + Updating interface having its own auth rules and implementing types also have auth rules and the + rules of interface are not satisfied gqlquery: | mutation updatePost($post: UpdatePostInput!) { updatePost(input: $post) { @@ -924,7 +928,7 @@ } } jwtvar: - ROLE: "ADMIN" + ROLE: ADMIN ANS: "true" variables: | { @@ -941,7 +945,9 @@ x as updatePost() } -- name: "Updating interface having no own auth rules but some implementing types have auth rules and they are not satisfied." +- name: + Updating interface having no own auth rules but some implementing types have auth rules and they + are not satisfied gqlquery: | mutation updateA($inp: UpdateAInput!) { updateA(input: $inp) { @@ -951,7 +957,7 @@ } } jwtvar: - ROLE: "ADMIN" + ROLE: ADMIN ANS: "true" variables: | { diff --git a/graphql/resolve/custom_mutation_test.yaml b/graphql/resolve/custom_mutation_test.yaml index 25388aff27a..fadfb8d6ea2 100644 --- a/graphql/resolve/custom_mutation_test.yaml +++ b/graphql/resolve/custom_mutation_test.yaml @@ -1,4 +1,4 @@ -- name: "custom POST mutation creating movies gets body filled from variables" +- name: custom POST mutation creating movies gets body filled from variables gqlquery: | mutation createMovies($movs: [MovieInput!]) { createMyFavouriteMovies(input: $movs) { @@ -43,7 +43,7 @@ { "name": "Mov2" } ] } - headers: { "X-App-Token": ["val"], "Auth0-Token": ["tok"], "Content-type": ["application/json"] } + headers: { "X-App-Token": [val], "Auth0-Token": [tok], "Content-type": [application/json] } resolvedresponse: | { "createMyFavouriteMovies": [ @@ -65,7 +65,7 @@ ] } -- name: "custom PATCH mutation updating movies gets url & body filled from variables" +- name: custom PATCH mutation updating movies gets url & body filled from variables gqlquery: | mutation updateMovies($id: ID!, $mov: MovieInput!) { updateMyFavouriteMovie(id: $id, input: $mov) { @@ -105,7 +105,7 @@ "director": [ { "name": "Dir1" } ] } } - headers: { "Content-type": ["application/json"] } + headers: { "Content-type": [application/json] } resolvedresponse: | { "updateMyFavouriteMovie": { @@ -120,7 +120,7 @@ } } -- name: "custom DELETE mutation deleting movie, gets url filled from variables" +- name: custom DELETE mutation deleting movie, gets url filled from variables gqlquery: | mutation deleteMovie($id: ID!) { deleteMyFavouriteMovie(id: $id) { @@ -149,7 +149,7 @@ } url: http://myapi.com/favMovies/0x01 method: DELETE - headers: { "Content-type": ["application/json"] } + headers: { "Content-type": [application/json] } resolvedresponse: | { "deleteMyFavouriteMovie": { diff --git a/graphql/resolve/custom_query_test.yaml b/graphql/resolve/custom_query_test.yaml index dc3b092c0b4..45884375077 100644 --- a/graphql/resolve/custom_query_test.yaml +++ b/graphql/resolve/custom_query_test.yaml @@ -1,5 +1,4 @@ -- - name: "custom GET query returning users" +- name: custom GET query returning users gqlquery: | query { myFavoriteMovies(id: "0x1", name: "Michael", num: null) { @@ -30,7 +29,7 @@ ] url: http://myapi.com/favMovies/0x1?name=Michael&num= method: GET - headers: { "Content-type": ["application/json"] } + headers: { "Content-type": [application/json] } resolvedresponse: | { "myFavoriteMovies": [ @@ -52,8 +51,7 @@ ] } -- - name: "custom POST query gets body filled from variables" +- name: custom POST query gets body filled from variables gqlquery: | query movies($id: ID!) { myFavoriteMoviesPart2(id: $id, name: "Michael", num: 10) { @@ -86,7 +84,7 @@ url: http://myapi.com/favMovies/0x9?name=Michael&num=10 method: POST body: '{ "id": "0x9", "name": "Michael", "director": { "number": 10 }}' - headers: { "X-App-Token": ["val"], "Auth0-Token": ["tok"], "Content-type": ["application/json"] } + headers: { "X-App-Token": [val], "Auth0-Token": [tok], "Content-type": [application/json] } resolvedresponse: | { "myFavoriteMoviesPart2": [ diff --git a/graphql/resolve/delete_mutation_test.yaml b/graphql/resolve/delete_mutation_test.yaml index 36064ed1667..3e82d526c57 100644 --- a/graphql/resolve/delete_mutation_test.yaml +++ b/graphql/resolve/delete_mutation_test.yaml @@ -1,5 +1,4 @@ -- - name: "Only id filter" +- name: Only id filter gqlmutation: | mutation deleteAuthor($filter: AuthorFilter!) { deleteAuthor(filter: $filter) { @@ -10,7 +9,7 @@ { "filter": { "id": ["0x1", "0x2"] } } - explanation: "The correct mutation and query should be built using variable and filters." + explanation: The correct mutation and query should be built using variable and filters. dgmutations: - deletejson: | [ @@ -28,8 +27,7 @@ } } -- - name: "Delete with deep query in result" +- name: Delete with deep query in result gqlmutation: | mutation deleteAuthor($filter: AuthorFilter!) { deleteAuthor(filter: $filter) { @@ -53,7 +51,7 @@ { "filter": { "id": ["0x1", "0x2"] } } - explanation: "The correct mutation and query should be built using variable and filters." + explanation: The correct mutation and query should be built using variable and filters. dgmutations: - deletejson: | [ @@ -89,8 +87,7 @@ } } -- - name: "Multiple filters including id" +- name: Multiple filters including id gqlmutation: | mutation deleteAuthor($filter: AuthorFilter!) { deleteAuthor(filter: $filter) { @@ -104,7 +101,7 @@ "name": { "eq": "A.N. Author" } } } - explanation: "The correct mutation and query should be built using variable and filters." + explanation: The correct mutation and query should be built using variable and filters. dgmutations: - deletejson: | [ @@ -122,8 +119,7 @@ } } -- - name: "Multiple non-id filters" +- name: Multiple non-id filters gqlmutation: | mutation deleteAuthor($filter: AuthorFilter!) { deleteAuthor(filter: $filter) { @@ -137,7 +133,7 @@ "dob": { "eq": "2000-01-01" } } } - explanation: "The correct mutation and query should be built using variable and filters." + explanation: The correct mutation and query should be built using variable and filters. dgmutations: - deletejson: | [ @@ -155,8 +151,7 @@ } } -- - name: "With list inverse" +- name: With list inverse gqlmutation: | mutation deleteState($filter: StateFilter!) { deleteState(filter: $filter) { @@ -167,7 +162,7 @@ { "filter": { "code": { "eq": "abc" } } } - explanation: "The correct mutation and query should be built using variable and filters." + explanation: The correct mutation and query should be built using variable and filters. dgmutations: - deletejson: | [ @@ -185,8 +180,7 @@ } } -- - name: "With multiple inverses" +- name: With multiple inverses gqlmutation: | mutation deletePost($filter: PostFilter!) { deletePost(filter: $filter) { @@ -197,7 +191,7 @@ { "filter": { "postID": ["0x1", "0x2"] } } - explanation: "The correct mutation and query should be built using variable and filters." + explanation: The correct mutation and query should be built using variable and filters. dgmutations: - deletejson: | [ @@ -220,8 +214,7 @@ } } -- - name: "Delete mutation on a type with a field with reverse predicate" +- name: Delete mutation on a type with a field with reverse predicate gqlmutation: | mutation deleteMovie($filter: MovieFilter!) { deleteMovie(filter: $filter) { @@ -232,7 +225,7 @@ { "filter": { "id": ["0x1", "0x2"] } } - explanation: "The correct mutation and query should be built using variable and filters." + explanation: The correct mutation and query should be built using variable and filters. dgmutations: - deletejson: | [ @@ -249,8 +242,7 @@ MovieDirector_2 as ~directed.movies } } -- - name: "Deleting an interface with just a field with @id directive" +- name: Deleting an interface with just a field with @id directive gqlmutation: | mutation{ deleteA(filter:{name:{eq: "xyz"}}){ @@ -278,8 +270,7 @@ - deletejson: | [{ "uid": "uid(x)"}] -- - name: "delete with multiple id's" +- name: delete with multiple id's gqlmutation: | mutation deleteBook($filter: BookFilter!) { deleteBook(filter: $filter) { @@ -324,4 +315,4 @@ uid author_2 as Book.author } - } \ No newline at end of file + } diff --git a/graphql/resolve/mutation_query_test.yaml b/graphql/resolve/mutation_query_test.yaml index 8ced23604f4..366495b2982 100644 --- a/graphql/resolve/mutation_query_test.yaml +++ b/graphql/resolve/mutation_query_test.yaml @@ -1,6 +1,5 @@ ADD_UPDATE_MUTATION: - - - name: "single level" + - name: single level gqlquery: | mutation { ADD_UPDATE_MUTATION { @@ -18,8 +17,7 @@ ADD_UPDATE_MUTATION: } } - - - name: "alias is ignored in query rewriting" + - name: alias is ignored in query rewriting gqlquery: | mutation { ADD_UPDATE_MUTATION { @@ -44,8 +42,7 @@ ADD_UPDATE_MUTATION: } } - - - name: "selection set in result" + - name: selection set in result gqlquery: | mutation { ADD_UPDATE_MUTATION { @@ -63,8 +60,7 @@ ADD_UPDATE_MUTATION: } } - - - name: "deep" + - name: deep gqlquery: | mutation { ADD_UPDATE_MUTATION { @@ -89,8 +85,7 @@ ADD_UPDATE_MUTATION: } } - - - name: "can do deep filter" + - name: can do deep filter gqlquery: | mutation { ADD_UPDATE_MUTATION { @@ -122,8 +117,7 @@ ADD_UPDATE_MUTATION: } } - - - name: "can work with skip and filter" + - name: can work with skip and filter gqlquery: | mutation ($skip: Boolean!, $include: Boolean!) { ADD_UPDATE_MUTATION { @@ -152,8 +146,7 @@ ADD_UPDATE_MUTATION: } } - - - name: "cascade directive on mutation payload" + - name: cascade directive on mutation payload gqlquery: | mutation { ADD_UPDATE_MUTATION @cascade { @@ -181,8 +174,7 @@ ADD_UPDATE_MUTATION: } } - - - name: "cascade directive on mutation query field" + - name: cascade directive on mutation query field gqlquery: | mutation { ADD_UPDATE_MUTATION { @@ -210,8 +202,7 @@ ADD_UPDATE_MUTATION: } } - - - name: "cascade directive inside mutation query" + - name: cascade directive inside mutation query gqlquery: | mutation { ADD_UPDATE_MUTATION { @@ -239,8 +230,7 @@ ADD_UPDATE_MUTATION: } } - - - name: "parameterized cascade directive on mutation payload" + - name: parameterized cascade directive on mutation payload gqlquery: | mutation { ADD_UPDATE_MUTATION @cascade(fields:["post","numUids"]) { @@ -268,8 +258,7 @@ ADD_UPDATE_MUTATION: } } - - - name: "parametrized cascade directive on mutation query field" + - name: parametrized cascade directive on mutation query field gqlquery: | mutation { ADD_UPDATE_MUTATION { @@ -297,8 +286,7 @@ ADD_UPDATE_MUTATION: } } - - - name: "parameterized cascade directive inside mutation query" + - name: parameterized cascade directive inside mutation query gqlquery: | mutation { ADD_UPDATE_MUTATION { @@ -326,8 +314,7 @@ ADD_UPDATE_MUTATION: } } - - - name: "parameterized cascade directive at multiple levels " + - name: parameterized cascade directive at multiple levels gqlquery: | mutation { ADD_UPDATE_MUTATION @cascade(fields:["post"]) { @@ -355,8 +342,7 @@ ADD_UPDATE_MUTATION: } } UPDATE_MUTATION: - - - name: "filter update result" + - name: filter update result gqlquery: | mutation { UPDATE_MUTATION { @@ -373,8 +359,7 @@ UPDATE_MUTATION: Post.title : Post.title } } - - - name: "order update result" + - name: order update result gqlquery: | mutation { UPDATE_MUTATION { @@ -392,8 +377,7 @@ UPDATE_MUTATION: } } - - - name: "order and pagination update result" + - name: order and pagination update result gqlquery: | mutation { UPDATE_MUTATION { diff --git a/graphql/resolve/query_test.yaml b/graphql/resolve/query_test.yaml index ab15599d020..a9bae8e59b8 100644 --- a/graphql/resolve/query_test.yaml +++ b/graphql/resolve/query_test.yaml @@ -1,4 +1,4 @@ -- name: "eq filter with null value get translated into NOT(has) filter" +- name: eq filter with null value get translated into NOT(has) filter gqlquery: | query { queryState(filter: {code: {eq: null}}) { @@ -15,7 +15,7 @@ } } -- name: "le filter with null value doesn't get translated" +- name: le filter with null value doesn't get translated gqlquery: | query { queryCountry(filter: {name: {le: null}}) { @@ -30,7 +30,7 @@ } } -- name: "in filter on string type" +- name: in filter on string type gqlquery: | query { queryState(filter: {code: {in: ["abc", "def", "ghi"]}}) { @@ -47,7 +47,7 @@ } } -- name: "in filter on float type" +- name: in filter on float type gqlquery: | query { queryAuthor(filter: {reputation: {in: [10.3, 12.6, 13.6]}}) { @@ -64,7 +64,7 @@ } } -- name: "in filter on datetime type" +- name: in filter on datetime type gqlquery: | query { queryAuthor(filter: {dob: {in: ["2001-01-01", "2002-02-01"]}}) { @@ -81,7 +81,7 @@ } } -- name: "in filter on int type" +- name: in filter on int type gqlquery: | query { queryPost(filter: {numLikes: {in: [10, 15, 100]}}) { @@ -95,7 +95,8 @@ dgraph.uid : uid } } -- name: "in filter on field which is of enum type" + +- name: in filter on field which is of enum type gqlquery: | query{ queryVerification(filter: {prevStatus: {in: [ACTIVE, DEACTIVATED]}}){ @@ -112,7 +113,7 @@ } } -- name: "in filter on field which is a List of enum type" +- name: in filter on field which is a List of enum type gqlquery: | query{ queryVerification(filter: {status: {in: [ACTIVE, DEACTIVATED]}}){ @@ -129,7 +130,7 @@ } } -- name: "eq filter on field which is a List of enum type" +- name: eq filter on field which is a List of enum type gqlquery: | query{ queryVerification(filter: {status: {eq: ACTIVE}}){ @@ -146,7 +147,7 @@ } } -- name: "le filter on field which is a List of enum type" +- name: le filter on field which is a List of enum type gqlquery: | query{ queryVerification(filter: {status: {le: INACTIVE}}){ @@ -162,7 +163,7 @@ dgraph.uid : uid } } -- name: "Point query near filter" +- name: Point query near filter gqlquery: | query { queryHotel(filter: { location: { near: { distance: 33.33, coordinate: { latitude: 11.11, longitude: 22.22} } } }) { @@ -182,7 +183,7 @@ } } -- name: "Point query within filter" +- name: Point query within filter gqlquery: | query { queryHotel(filter: { location: { within: { polygon: { coordinates: [ { points: [{ latitude: 11.11, longitude: 22.22}, { latitude: 15.15, longitude: 16.16} , { latitude: 20.20, longitude: 21.21} ]}, { points: [{ latitude: 11.18, longitude: 22.28}, { latitude: 15.18, longitude: 16.18} , { latitude: 20.28, longitude: 21.28}]} ] } } } }) { @@ -202,7 +203,7 @@ } } -- name: "Polygon query near filter" +- name: Polygon query near filter gqlquery: | query { queryHotel(filter: { area: { near: { distance: 33.33, coordinate: { latitude: 11.11, longitude: 22.22} } } }) { @@ -226,7 +227,7 @@ } } -- name: "Polygon query within filter" +- name: Polygon query within filter gqlquery: | query { queryHotel(filter: { area: { within: { polygon: { coordinates: [ { points: [{ latitude: 11.11, longitude: 22.22}, { latitude: 15.15, longitude: 16.16} , { latitude: 20.20, longitude: 21.21} ]}, { points: [{ latitude: 11.18, longitude: 22.28}, { latitude: 15.18, longitude: 16.18} , { latitude: 20.28, longitude: 21.28}]} ] } } } }) { @@ -250,7 +251,7 @@ } } -- name: "Polygon query contains polygon filter" +- name: Polygon query contains polygon filter gqlquery: | query { queryHotel(filter: { area: { contains: { polygon: { coordinates: [ { points: [{ latitude: 11.11, longitude: 22.22}, { latitude: 15.15, longitude: 16.16} , { latitude: 20.20, longitude: 21.21} ]}, { points: [{ latitude: 11.18, longitude: 22.28}, { latitude: 15.18, longitude: 16.18} , { latitude: 20.28, longitude: 21.28}]} ] } } } }) { @@ -274,7 +275,7 @@ } } -- name: "Polygon query contains point filter" +- name: Polygon query contains point filter gqlquery: | query { queryHotel(filter: { area: { contains: { point: { latitude: 11.11, longitude: 22.22}} } }) { @@ -298,7 +299,7 @@ } } -- name: "Polygon query intersect polygon filter" +- name: Polygon query intersect polygon filter gqlquery: | query { queryHotel(filter: { @@ -352,7 +353,7 @@ } } -- name: "Polygon query intersect multi-polygon filter" +- name: Polygon query intersect multi-polygon filter gqlquery: | query { queryHotel(filter: { @@ -432,7 +433,7 @@ } } -- name: "MultiPolygon query near filter" +- name: MultiPolygon query near filter gqlquery: | query { queryHotel(filter: { branches: { near: { distance: 33.33, coordinate: { latitude: 11.11, longitude: 22.22} } } }) { @@ -458,7 +459,7 @@ } } -- name: "MultiPolygon query within filter" +- name: MultiPolygon query within filter gqlquery: | query { queryHotel(filter: { branches: { within: { polygon: { coordinates: [ { points: [{ latitude: 11.11, longitude: 22.22}, { latitude: 15.15, longitude: 16.16} , { latitude: 20.20, longitude: 21.21} ]}, { points: [{ latitude: 11.18, longitude: 22.28}, { latitude: 15.18, longitude: 16.18} , { latitude: 20.28, longitude: 21.28}]} ] } } } }) { @@ -484,7 +485,7 @@ } } -- name: "MultiPolygon query contains polygon filter" +- name: MultiPolygon query contains polygon filter gqlquery: | query { queryHotel(filter: { branches: { contains: { polygon: { coordinates: [ { points: [{ latitude: 11.11, longitude: 22.22}, { latitude: 15.15, longitude: 16.16} , { latitude: 20.20, longitude: 21.21} ]}, { points: [{ latitude: 11.18, longitude: 22.28}, { latitude: 15.18, longitude: 16.18} , { latitude: 20.28, longitude: 21.28}]} ] } } } }) { @@ -510,7 +511,7 @@ } } -- name: "MultiPolygon query contains point filter" +- name: MultiPolygon query contains point filter gqlquery: | query { queryHotel(filter: { branches: { contains: { point: { latitude: 11.11, longitude: 22.22}} } }) { @@ -536,7 +537,7 @@ } } -- name: "MultiPolygon query intersect polygon filter" +- name: MultiPolygon query intersect polygon filter gqlquery: | query { queryHotel(filter: { @@ -592,7 +593,7 @@ } } -- name: "MultiPolygon query intersect multi-polygon filter" +- name: MultiPolygon query intersect multi-polygon filter gqlquery: | query { queryHotel(filter: { @@ -674,7 +675,7 @@ } } -- name: "ID query" +- name: ID query gqlquery: | query { getAuthor(id: "0x1") { @@ -689,7 +690,7 @@ } } -- name: "Alias isn't ignored in query rewriting - get" +- name: Alias isn't ignored in query rewriting - get gqlquery: | query { author : getAuthor(id: "0x1") { @@ -711,7 +712,7 @@ } } -- name: "Alias isn't ignored in query rewriting - query" +- name: Alias isn't ignored in query rewriting - query gqlquery: | query { author : queryAuthor { @@ -733,7 +734,7 @@ } } -- name: "ID field gets transformed to uid" +- name: ID field gets transformed to uid gqlquery: | query { getAuthor(id: "0x1") { @@ -749,7 +750,7 @@ } } -- name: "ID query with depth" +- name: ID query with depth gqlquery: | query { getAuthor(id: "0x1") { @@ -773,7 +774,7 @@ } } -- name: "ID query deep" +- name: ID query deep gqlquery: | query { getAuthor(id: "0x1") { @@ -805,7 +806,7 @@ } } -- name: "Query with no args is query for everything of that type" +- name: Query with no args is query for everything of that type gqlquery: | query { queryAuthor { @@ -820,8 +821,7 @@ } } - -- name: "eq Filter gets rewritten as root func" +- name: eq Filter gets rewritten as root func gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" } }) { @@ -851,7 +851,7 @@ } } -- name: "Query with has Filter" +- name: Query with has Filter gqlquery: | query { queryTeacher(filter: {has: subject}) { @@ -866,7 +866,7 @@ } } -- name: "has Filter with not" +- name: has Filter with not gqlquery: | query { queryTeacher(filter: { not : {has: subject } }) { @@ -881,7 +881,7 @@ } } -- name: "has Filter with and" +- name: has Filter with and gqlquery: | query { queryTeacher(filter: {has: subject, and: {has: teaches } } ) { @@ -896,7 +896,7 @@ } } -- name: "has Filter on list of fields" +- name: has Filter on list of fields gqlquery: | query { queryTeacher(filter: {has: [subject, teaches ] } ) { @@ -910,7 +910,7 @@ dgraph.uid : uid } } -- name: "Query Has Filter on type which has neither ID field nor any search argument" +- name: Query Has Filter on type which has neither ID field nor any search argument gqlquery: | query { queryNode(filter: {has: name}){ @@ -924,7 +924,7 @@ dgraph.uid : uid } } -- name: "Filters in same input object implies AND" +- name: Filters in same input object implies AND gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" }, dob: { le: "2001-01-01" }, reputation: { gt: 2.5 } } ) { @@ -939,7 +939,7 @@ } } -- name: "Filter with nested 'and'" +- name: Filter with nested 'and' gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" }, and: { dob: { le: "2001-01-01" }, and: { reputation: { gt: 2.5 } } } } ) { @@ -954,7 +954,7 @@ } } -- name: "has Filter with nested 'and'" +- name: has Filter with nested 'and' gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" }, and: { dob: { le: "2001-01-01" }, and: { has: country } } } ) { @@ -969,7 +969,7 @@ } } -- name: "Filter with 'or'" +- name: Filter with 'or' gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" }, or: { dob: { le: "2001-01-01" } } } ) { @@ -984,7 +984,7 @@ } } -- name: "Filter with 'or' array" +- name: Filter with 'or' array gqlquery: | query { queryAuthor(filter: { or: [ { name: { eq: "A. N. Author" } }, { dob: { le: "2001-01-01" } }] } ) { @@ -999,7 +999,7 @@ } } -- name: "Filter with 'or' object" +- name: Filter with 'or' object gqlquery: | query { queryAuthor(filter: { or: { name: { eq: "A. N. Author" } }} ) { @@ -1014,8 +1014,7 @@ } } - -- name: "Filter with implied and as well as 'or'" +- name: Filter with implied and as well as 'or' gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" }, reputation: { gt: 2.5 }, or: { dob: { le: "2001-01-01" } } } ) { @@ -1030,7 +1029,7 @@ } } -- name: "Filter with implied and nested in 'or'" +- name: Filter with implied and nested in 'or' gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" }, or: { reputation: { gt: 2.5 }, dob: { le: "2001-01-01" } } } ) { @@ -1045,7 +1044,7 @@ } } -- name: "Filter nested 'or'" +- name: Filter nested 'or' gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" }, or: { reputation: { gt: 2.5 }, or: { dob: { le: "2001-01-01" } } } } ) { @@ -1060,7 +1059,7 @@ } } -- name: "Filter with 'not" +- name: Filter with 'not gqlquery: | query { queryAuthor(filter: { not: { reputation: { gt: 2.5 } } } ) { @@ -1075,7 +1074,7 @@ } } -- name: "Filter with first" +- name: Filter with first gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" } }, first: 10) { @@ -1090,7 +1089,7 @@ } } -- name: "Filter with first and offset" +- name: Filter with first and offset gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" } }, first: 10, offset: 10) { @@ -1105,7 +1104,7 @@ } } -- name: "Filter with order asc" +- name: Filter with order asc gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" } }, order: { asc: reputation }) { @@ -1120,7 +1119,7 @@ } } -- name: "Filter with order desc" +- name: Filter with order desc gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" } }, order: { desc: reputation }) { @@ -1135,8 +1134,7 @@ } } - -- name: "Filter with nested order" +- name: Filter with nested order gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" } }, order: { desc: reputation, then: { asc: dob } }) { @@ -1151,7 +1149,7 @@ } } -- name: "Filter with order, first and offset" +- name: Filter with order, first and offset gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" } }, order: { desc: reputation }, first: 10, offset: 10) { @@ -1166,7 +1164,7 @@ } } -- name: "Deep filter" +- name: Deep filter gqlquery: | query { queryAuthor { @@ -1188,8 +1186,7 @@ } } - -- name: "Deep filter with has filter" +- name: Deep filter with has filter gqlquery: | query { queryAuthor { @@ -1210,7 +1207,8 @@ dgraph.uid : uid } } -- name: "Deep filter with has filter on list of fields" + +- name: Deep filter with has filter on list of fields gqlquery: | query { queryAuthor { @@ -1232,7 +1230,7 @@ } } -- name: "Deep filter with has and other filters" +- name: Deep filter with has and other filters gqlquery: | query { queryAuthor { @@ -1253,7 +1251,8 @@ dgraph.uid : uid } } -- name: "Deep filter with first" + +- name: Deep filter with first gqlquery: | query { queryAuthor { @@ -1275,7 +1274,7 @@ } } -- name: "Deep filter with order, first and offset" +- name: Deep filter with order, first and offset gqlquery: | query { queryAuthor { @@ -1297,7 +1296,7 @@ } } -- name: "Deep filter with multiple order, first and offset" +- name: Deep filter with multiple order, first and offset gqlquery: | query { queryAuthor { @@ -1319,7 +1318,7 @@ } } -- name: "Float with large exponentiation" +- name: Float with large exponentiation gqlquery: | query { queryAuthor(filter:{ reputation: { gt: 123456789.113 } }) { @@ -1334,7 +1333,7 @@ } } -- name: "All Float filters work" +- name: All Float filters work gqlquery: | query { queryAuthor(filter: { reputation: { gt: 1.1 }, or: { reputation: { ge: 1.1 }, or: { reputation: { lt: 1.1 }, or: { reputation: { le: 1.1 }, or: { reputation: { eq: 1.1 } } } } } } ) { @@ -1349,7 +1348,7 @@ } } -- name: "All DateTime filters work" +- name: All DateTime filters work gqlquery: | query { queryAuthor(filter: { dob: { gt: "2000-01-01" }, or: { dob: { ge: "2000-01-01" }, or: { dob: { lt: "2000-01-01" }, or: { dob: { le: "2000-01-01" }, or: { dob: { eq: "2000-01-01" } } } } } } ) { @@ -1364,7 +1363,7 @@ } } -- name: "All Int filters work" +- name: All Int filters work gqlquery: | query { queryPost(filter: { numLikes: { gt: 10 }, or: { numLikes: { ge: 10 }, or: { numLikes: { lt: 10 }, or: { numLikes: { le: 10 }, or: { numLikes: { eq: 10 } } } } } } ) { @@ -1379,7 +1378,7 @@ } } -- name: "All String hash filters work" +- name: All String hash filters work gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" } } ) { @@ -1394,7 +1393,7 @@ } } -- name: "All String exact filters work" +- name: All String exact filters work gqlquery: | query { queryCountry(filter: { name: { gt: "AAA" }, or: { name: { ge: "AAA" }, or: { name: { lt: "AAA" }, or: { name: { le: "AAA" }, or: { name: { eq: "AAA" } } } } } } ) { @@ -1409,7 +1408,7 @@ } } -- name: "All String exact filters work with an array for OR" +- name: All String exact filters work with an array for OR gqlquery: | query { queryCountry(filter: { name: { gt: "AAA" }, or: [{ name: { ge: "AAA" }}, { name: { lt: "AAA" }}, { name: { le: "AAA" }}, { name: { eq: "AAA" } }] }) { @@ -1424,7 +1423,7 @@ } } -- name: "All String exact filters work with an array for AND" +- name: All String exact filters work with an array for AND gqlquery: | query { queryCountry(filter: { name: { gt: "AAA" }, and: [{ name: { ge: "AAA" }}, { name: { lt: "AAA" }}, { name: { le: "AAA" }}, { name: { eq: "AAA" } }] }) { @@ -1439,8 +1438,7 @@ } } - -- name: "Represent (A OR B) AND (C OR D)" +- name: Represent (A OR B) AND (C OR D) gqlquery: | query { queryCountry(filter: { and: [{ name: { gt: "AAA" }, or: { name: { lt: "XXX" }}}, { name: { gt : "CCC" }, or: { name: { lt: "MMM" }}}] }) { @@ -1455,7 +1453,7 @@ } } -- name: "All String term filters work" +- name: All String term filters work gqlquery: | query { queryPost(filter: { title: { anyofterms: "GraphQL"}, or: { title: { allofterms: "GraphQL" } } } ) { @@ -1470,8 +1468,7 @@ } } - -- name: "All String fulltext filters work" +- name: All String fulltext filters work gqlquery: | query { queryPost(filter: { text: { anyoftext: "GraphQL"}, or: { text: { alloftext: "GraphQL" } } } ) { @@ -1486,7 +1483,7 @@ } } -- name: "All String regexp filters work" +- name: All String regexp filters work gqlquery: | query { queryCountry(filter: { name: { regexp: "/.*ust.*/" }}) { @@ -1501,7 +1498,7 @@ } } -- name: "Aggregate Query" +- name: Aggregate Query gqlquery: | query { aggregateCountry(filter: { name: { regexp: "/.*ust.*/" }}) { @@ -1527,7 +1524,7 @@ } } -- name: "Skip directive" +- name: Skip directive gqlquery: | query ($skipTrue: Boolean!, $skipFalse: Boolean!) { getAuthor(id: "0x1") { @@ -1551,7 +1548,7 @@ } } -- name: "Include directive" +- name: Include directive gqlquery: | query ($includeTrue: Boolean!, $includeFalse: Boolean!) { queryAuthor { @@ -1575,7 +1572,7 @@ } } -- name: "Include only fields for which skip is !false or include is true" +- name: Include only fields for which skip is !false or include is true variables: includeFalse: false includeTrue: true @@ -1610,7 +1607,7 @@ } } -- name: "Cascade directive on get query" +- name: Cascade directive on get query gqlquery: | query { getAuthor(id: "0x1") @cascade { @@ -1632,7 +1629,7 @@ } } -- name: "Cascade directive on filter query" +- name: Cascade directive on filter query gqlquery: | query { queryAuthor @cascade { @@ -1654,7 +1651,7 @@ } } -- name: "Cascade directive on query field" +- name: Cascade directive on query field gqlquery: | query { queryAuthor { @@ -1676,7 +1673,7 @@ } } -- name: "Cascade directive on root query and query field" +- name: Cascade directive on root query and query field gqlquery: | query { queryAuthor @cascade { @@ -1698,7 +1695,7 @@ } } -- name: "Parameterized Cascade directive on filter query" +- name: Parameterized Cascade directive on filter query gqlquery: | query { queryAuthor @cascade(fields:["dob"]) { @@ -1722,7 +1719,7 @@ } } -- name: "Parameterized Cascade directive on get query" +- name: Parameterized Cascade directive on get query gqlquery: | query { getAuthor(id: "0x1") @cascade(fields:["dob"]) { @@ -1746,7 +1743,7 @@ } } -- name: "Parameterized Cascade directive on query field" +- name: Parameterized Cascade directive on query field gqlquery: | query { queryAuthor { @@ -1770,7 +1767,7 @@ } } -- name: "Parameterized Cascade directive on root and query field" +- name: Parameterized Cascade directive on root and query field gqlquery: | query { queryAuthor @cascade(fields:["dob"]) { @@ -1796,7 +1793,7 @@ } } -- name: "Parameterized Cascade directive with multiple parameters on root and query field" +- name: Parameterized Cascade directive with multiple parameters on root and query field gqlquery: | query { queryAuthor @cascade(fields:["dob","reputation","id"]) { @@ -1822,7 +1819,8 @@ } } -- name: "Parameterized Cascade directive with argument at outer level which is not present in inner level " +- name: + Parameterized Cascade directive with argument at outer level which is not present in inner level gqlquery: | query { queryAuthor @cascade(fields:["dob"]) { @@ -1848,7 +1846,7 @@ } } -- name: "parameterized cascade with interface implementation Human" +- name: parameterized cascade with interface implementation Human gqlquery: | query { queryHuman @cascade(fields:["id","name","ename","dob"]) { @@ -1870,7 +1868,7 @@ } } -- name: "parameterized cascade with interface Character" +- name: parameterized cascade with interface Character gqlquery: | query { queryCharacter @cascade(fields:["id","name"]) { @@ -1887,7 +1885,7 @@ } } -- name: "Parameterized Cascade directive on root and nested field using variables" +- name: Parameterized Cascade directive on root and nested field using variables gqlquery: | query($fieldsRoot:[String],$fieldsDeep:[String]) { queryAuthor @cascade(fields: $fieldsRoot) { @@ -1923,7 +1921,7 @@ } } -- name: "getHuman which implements an interface" +- name: getHuman which implements an interface gqlquery: | query { getHuman(id: "0x1") { @@ -1945,7 +1943,7 @@ } } -- name: "queryHuman which implements an interface" +- name: queryHuman which implements an interface gqlquery: | query { queryHuman { @@ -1967,7 +1965,7 @@ } } -- name: "Get Query on interface whose implementation contains Auth rules." +- name: Get Query on interface whose implementation contains Auth rules gqlquery: | query { getX(id: "0x1") { @@ -1980,7 +1978,7 @@ getX() } -- name: "Query on interface whose implementation contains Auth rules." +- name: Query on interface whose implementation contains Auth rules gqlquery: | query { queryX { @@ -1993,7 +1991,7 @@ queryX() } -- name: "filter with order for type which implements an interface" +- name: filter with order for type which implements an interface gqlquery: | query { queryHuman (filter: { name: { anyofterms: "GraphQL" } }, order: { asc: ename }) { @@ -2013,7 +2011,7 @@ } } -- name: "queryCharacter with fragment for human" +- name: queryCharacter with fragment for human gqlquery: | query { queryCharacter { @@ -2036,7 +2034,7 @@ } } -- name: "queryCharacter with fragment on multiple types" +- name: queryCharacter with fragment on multiple types gqlquery: | query { queryCharacter { @@ -2063,7 +2061,9 @@ } } -- name: "fragment on interface implemented by type which implements multiple interfaces in query on some other interface" +- name: + fragment on interface implemented by type which implements multiple interfaces in query on some + other interface gqlquery: | query { queryCharacter { @@ -2088,7 +2088,7 @@ } } -- name: "Filter with id uses uid func at root." +- name: Filter with id uses uid func at root gqlquery: | query { queryAuthor(filter: { id: ["0x1", "0x2"], and: { name: { eq: "A. N. Author" } }}) { @@ -2103,7 +2103,7 @@ } } -- name: "Between filter" +- name: Between filter gqlquery: | query { queryPost(filter: { numLikes: { between : { min :10, max: 20 }}}) { @@ -2120,7 +2120,7 @@ } } -- name: "deep Between filter" +- name: deep Between filter gqlquery: | query{ queryAuthor(filter: {reputation: {between: {min:6.0, max: 7.2}}}){ @@ -2146,7 +2146,7 @@ } } -- name: "Filter with id inside and argument doesn't use uid func at root." +- name: Filter with id inside and argument doesn't use uid func at root gqlquery: | query { queryAuthor(filter: { name: { eq: "A. N. Author" }, and: { id: ["0x1", "0x2"] }}) { @@ -2161,7 +2161,7 @@ } } -- name: "Filter with id and not translates correctly.." +- name: Filter with id and not translates correctly gqlquery: | query { queryAuthor(filter: { not: { id: ["0x1", "0x2"] }}) { @@ -2176,7 +2176,7 @@ } } -- name: "Deep filter with id" +- name: Deep filter with id gqlquery: | query { queryAuthor { @@ -2198,7 +2198,7 @@ } } -- name: "Deep filter with id in not key" +- name: Deep filter with id in not key gqlquery: | query { queryAuthor { @@ -2220,7 +2220,7 @@ } } -- name: "Pagination and Order at root node with UID." +- name: Pagination and Order at root node with UID gqlquery: | query { queryAuthor(filter: { id: ["0x1", "0x2"] }, order: {asc: name}, first: 0, offset: 1 ) { @@ -2235,7 +2235,7 @@ } } -- name: "Order at root node with UID." +- name: Order at root node with UID gqlquery: | query { queryAuthor(filter: { id: ["0x1", "0x2"] }, order: {asc: name}) { @@ -2250,7 +2250,7 @@ } } -- name: "Order at root node without UID." +- name: Order at root node without UID gqlquery: | query { queryAuthor(order: {asc: name}) { @@ -2265,7 +2265,7 @@ } } -- name: "Order and Pagination at root node without UID." +- name: Order and Pagination at root node without UID gqlquery: | query { queryAuthor(order: {asc: name}, first: 2, offset: 3) { @@ -2280,8 +2280,7 @@ } } - -- name: "Filter with no valid id construct the right query with type func at root." +- name: Filter with no valid id construct the right query with type func at root gqlquery: | query { queryAuthor(filter: { id: ["alice", "bob"], and: { name: { eq: "A. N. Author" } }}) { @@ -2296,7 +2295,7 @@ } } -- name: "Filter with id only includes valid id in dgquery." +- name: Filter with id only includes valid id in dgquery gqlquery: | query { queryAuthor(filter: { id: ["0x1", "bob"], and: { name: { eq: "A. N. Author" } }}) { @@ -2311,7 +2310,7 @@ } } -- name: "Get editor without supplying anything" +- name: Get editor without supplying anything gqlquery: | query { getEditor { @@ -2326,7 +2325,7 @@ } } -- name: "Get editor using code" +- name: Get editor using code gqlquery: | query { getEditor(code: "tolstoy") { @@ -2341,7 +2340,7 @@ } } -- name: "Get editor using both code and id" +- name: Get editor using both code and id gqlquery: | query { getEditor(code: "tolstoy", id: "0x1") { @@ -2356,7 +2355,7 @@ } } -- name: "Get with XID where no ID in type" +- name: Get with XID where no ID in type gqlquery: | query { getState(code: "NSW") { @@ -2371,7 +2370,7 @@ } } -- name: "Query editor using code" +- name: Query editor using code gqlquery: | query { queryEditor(filter: { code: { eq: "editor" }, and: { name: { eq: "A. N. Editor" }}}) { @@ -2386,7 +2385,7 @@ } } -- name: "Query editor using code and uid" +- name: Query editor using code and uid gqlquery: | query { queryEditor(filter: { id: ["0x1"], and: { code: { eq: "editor"}}}) { @@ -2401,7 +2400,7 @@ } } -- name: "Query along reverse edge is converted appropriately" +- name: Query along reverse edge is converted appropriately gqlquery: | query { queryMovie { @@ -2423,7 +2422,7 @@ } } -- name: "deprecated fields can be queried" +- name: deprecated fields can be queried gqlquery: | query { queryCategory { @@ -2439,7 +2438,7 @@ } } -- name: "Password query" +- name: Password query gqlquery: | query { checkUserPassword(name: "user1", pwd: "Password") { @@ -2457,7 +2456,7 @@ } } -- name: "Password query with alias" +- name: Password query with alias gqlquery: | query { verify : checkUserPassword(name: "user1", pwd: "Password") { @@ -2475,7 +2474,7 @@ } } -- name: "Rewrite without custom fields" +- name: Rewrite without custom fields gqlquery: | query { getComment(id: "0x1") { @@ -2499,7 +2498,7 @@ } } -- name: "Include fields needed by custom directive" +- name: Include fields needed by custom directive gqlquery: | query { getComment(id: "0x1") { @@ -2517,7 +2516,7 @@ Comment.url : Comment.url } } -- name: "Rewrite without custom fields deep" +- name: Rewrite without custom fields deep gqlquery: |- query { getPost(postID: "0x1") { @@ -2548,7 +2547,7 @@ } } } -- name: "Include fields needed by custom directive deep" +- name: Include fields needed by custom directive deep gqlquery: |- query { getPost(postID: "0x1") { @@ -2577,7 +2576,7 @@ } } } -- name: "getType by id should work" +- name: getType by id should work gqlquery: |- query { getTweets(id: "1286891968727982081") { @@ -2594,7 +2593,9 @@ } } -- name: "querying a inbuiltType field multiple times with different aliases adds it multiple times in rewriting" +- name: + querying a inbuiltType field multiple times with different aliases adds it multiple times in + rewriting gqlquery: |- query { queryThingOne { @@ -2616,7 +2617,9 @@ } } -- name: "querying an Enum type field multiple times with different aliases adds it multiple times in rewriting" +- name: + querying an Enum type field multiple times with different aliases adds it multiple times in + rewriting gqlquery: |- query { queryPost { @@ -2634,7 +2637,9 @@ dgraph.uid : uid } } -- name: "querying a non-inbuiltType field multiple times with different aliases should reflect in rewriting" +- name: + querying a non-inbuiltType field multiple times with different aliases should reflect in + rewriting gqlquery: |- query { queryAuthor { @@ -2667,7 +2672,7 @@ } } -- name: "querying field multiple times with different aliases and same filters" +- name: querying field multiple times with different aliases and same filters gqlquery: |- query { queryAuthor { @@ -2699,7 +2704,7 @@ dgraph.uid : uid } } -- name: "Query with Same Alias" +- name: Query with Same Alias gqlquery: |- query { queryAuthor { @@ -2726,7 +2731,7 @@ dgraph.uid : uid } } -- name: "Aggregate Query with multiple aliases" +- name: Aggregate Query with multiple aliases gqlquery: | query{ queryAuthor{ @@ -2751,7 +2756,7 @@ } } -- name: "query with fragments inside interface" +- name: query with fragments inside interface gqlquery: |- query { queryThing { @@ -2790,7 +2795,7 @@ } } -- name: "query only __typename in fragments inside interface" +- name: query only __typename in fragments inside interface gqlquery: |- query { queryThing { @@ -2810,7 +2815,7 @@ } } -- name: "query only __typename in fragment inside object" +- name: query only __typename in fragment inside object gqlquery: |- query { queryThingOne { @@ -2826,7 +2831,7 @@ } } -- name: "query union field - with fragment on interface implemented by member-types" +- name: query union field - with fragment on interface implemented by member-types gqlquery: |- query { queryHome { @@ -2865,7 +2870,7 @@ } } -- name: "query union field - with repeated field in member-types" +- name: query union field - with repeated field in member-types gqlquery: |- query { queryHome { @@ -2894,7 +2899,7 @@ } } -- name: "query union field - with arguments on union field" +- name: query union field - with arguments on union field gqlquery: |- query { queryHome { @@ -2928,7 +2933,7 @@ } } -- name: "query union field - memberTypes is empty list" +- name: query union field - memberTypes is empty list gqlquery: |- query { queryHome { @@ -2952,7 +2957,7 @@ queryHome(func: type(Home)) } -- name: "query union field - memberTypes isn't specified" +- name: query union field - memberTypes isn't specified gqlquery: |- query { queryHome { @@ -2978,7 +2983,7 @@ } } -- name: "query union field - memberTypes contains all the types" +- name: query union field - memberTypes contains all the types gqlquery: |- query { queryHome { @@ -3005,7 +3010,7 @@ } } -- name: "Count query at child level" +- name: Count query at child level gqlquery: | query { queryCountry { @@ -3024,7 +3029,7 @@ } } -- name: "Aggregate query at child level with filter and multiple aggregate fields" +- name: Aggregate query at child level with filter and multiple aggregate fields gqlquery: | query { queryCountry { @@ -3068,7 +3073,7 @@ } } -- name: "Count query at child level with filter" +- name: Count query at child level with filter gqlquery: | query { queryCountry { @@ -3094,7 +3099,7 @@ } } -- name: "Deep child level get query with count" +- name: Deep child level get query with count gqlquery: | query { getAuthor(id: "0x1") { @@ -3118,7 +3123,7 @@ } } -- name: "Aggregate Query with Sum and Avg" +- name: Aggregate Query with Sum and Avg gqlquery: | query { aggregateTweets() { @@ -3144,7 +3149,7 @@ } } -- name: "query using single ID in filter" +- name: query using single ID in filter gqlquery: | query { queryAuthor(filter:{id: "0x1"}) { @@ -3159,7 +3164,7 @@ } } -- name: "entities query for extended type having @key field of ID type" +- name: entities query for extended type having @key field of ID type gqlquery: | query { _entities(representations: [{__typename: "Astronaut", id: "0x1" },{__typename: "Astronaut", id: "0x2" }]) { @@ -3182,7 +3187,7 @@ } } -- name: "entities query for extended type having @key field of string type with @id directive" +- name: entities query for extended type having @key field of string type with @id directive gqlquery: | query { _entities(representations: [{__typename: "SpaceShip", id: "0x1" },{__typename: "SpaceShip", id: "0x2" }]) { @@ -3205,7 +3210,7 @@ } } -- name: "get query with multiple @id and an ID field" +- name: get query with multiple @id and an ID field gqlquery: | query { getBook(id: "0x1", title: "GraphQL", ISBN: "001HB") { @@ -3255,8 +3260,7 @@ } } -- - name: "Query fields linked to reverse predicates in Dgraph" +- name: Query fields linked to reverse predicates in Dgraph gqlquery: | query { queryLinkX(filter:{f9:{eq: "Alice"}}) { @@ -3303,8 +3307,7 @@ } } -- - name: "query language tag fields with filter and order" +- name: query language tag fields with filter and order gqlquery: | query { queryPerson(filter:{or:[{name:{eq:"Alice"}},{nameHi:{eq:"ऐलिस"}},{nameZh:{eq:"爱丽丝"}},{name_Untag_AnyLang:{eq:"Alice"}}]}, order: { asc: nameHi }) @@ -3330,7 +3333,7 @@ } } -- name: "get query on interface with @id field having interface argument set" +- name: get query on interface with @id field having interface argument set gqlquery: | query { getMember(refID: "101") { @@ -3353,7 +3356,7 @@ dgraph.uid : uid } } -- name: "query similar_to" +- name: query similar_to gqlquery: | query { querySimilarProductByEmbedding(by: productVector, topK: 1, vector: [0.1, 0.2, 0.3, 0.4, 0.5]) { @@ -3377,7 +3380,8 @@ Product.vector_distance : val(distance) } } -- name: "query vector using uid" + +- name: query vector using uid gqlquery: | query { querySimilarProductById(by: productVector, topK: 3, id: "0x1") { @@ -3408,7 +3412,7 @@ } } -- name: "query vector by id with cosine distance" +- name: query vector by id with cosine distance gqlquery: | query { querySimilarProjectCosineById(by: description_v, topK: 3, id: "0x1") { @@ -3439,7 +3443,7 @@ } } -- name: "query similar_to with cosine distance" +- name: query similar_to with cosine distance gqlquery: | query { querySimilarProjectCosineByEmbedding(by: description_v, topK: 1, vector: [0.1, 0.2, 0.3, 0.4, 0.5]) { @@ -3463,7 +3467,7 @@ ProjectCosine.vector_distance : val(distance) } } -- name: "query vector by id with dot product distance" +- name: query vector by id with dot product distance gqlquery: | query { querySimilarProjectDotProductById(by: description_v, topK: 3, id: "0x1") { @@ -3494,7 +3498,7 @@ } } -- name: "query similar_to with dot product distance" +- name: query similar_to with dot product distance gqlquery: | query { querySimilarProjectDotProductByEmbedding(by: description_v, topK: 1, vector: [0.1, 0.2, 0.3, 0.4, 0.5]) { @@ -3517,4 +3521,4 @@ dgraph.uid : uid ProjectDotProduct.vector_distance : val(distance) } - } \ No newline at end of file + } diff --git a/graphql/resolve/resolver_error_test.yaml b/graphql/resolve/resolver_error_test.yaml index ff9d79fda34..59a5d1032d6 100644 --- a/graphql/resolve/resolver_error_test.yaml +++ b/graphql/resolve/resolver_error_test.yaml @@ -1,56 +1,59 @@ -- - name: "Strip Dgraph result list for non-list query result" +- name: Strip Dgraph result list for non-list query result gqlquery: | query { getAuthor(id: "0x1") { name } } - explanation: "Dgraph always returns a query result as a list. That needs to be - fixed for queries with non-list result types." + explanation: + Dgraph always returns a query result as a list. That needs to be fixed for queries with + non-list result types. response: | { "getAuthor": [ { "uid": "0x1", "name": "A.N. Author" } ] } expected: | { "getAuthor": { "name": "A.N. Author" } } - -- - name: "Empty query result becomes null" + +- name: Empty query result becomes null gqlquery: | query { getAuthor(id: "0x1") { name } } - explanation: "If Dgraph finds no results for a query, and the GraphQL - type is nullable, we should set the result to null." + explanation: + If Dgraph finds no results for a query, and the GraphQL type is nullable, we should set the + result to null. response: | { } expected: | { "getAuthor": null } -- - name: "Root level handled correctly if just uid when non-nullable missing" +- name: Root level handled correctly if just uid when non-nullable missing gqlquery: | query { getAuthor(id: "0x1") { name } } - explanation: "GraphQL error propagation causes an error on a non-nullable field - (like name: String!) to propagate to the parent object." + explanation: + "GraphQL error propagation causes an error on a non-nullable field (like name: String!) to + propagate to the parent object." response: | { "getAuthor": [ { "uid": "0x1" } ] } expected: | { "getAuthor": null } errors: - [ { - "message": "Non-nullable field 'name' (type String!) was not present in - result from Dgraph. GraphQL error propagation triggered." , - "path": [ "getAuthor", "name" ], - "locations": [ { "line": 3, "column": 5 } ] } ] + [ + { + "message": + Non-nullable field 'name' (type String!) was not present in result from Dgraph. GraphQL + error propagation triggered., + "path": [getAuthor, name], + "locations": [{ "line": 3, "column": 5 }], + }, + ] -- - name: "Multiple nullable query results becomes nulls (with alias)" +- name: Multiple nullable query results becomes nulls (with alias) gqlquery: | query { getAuthor(id: "0x1") { @@ -60,15 +63,15 @@ name } } - explanation: "If Dgraph finds no results for a query, and the GraphQL - type is nullable, we should set the result to null." + explanation: + If Dgraph finds no results for a query, and the GraphQL type is nullable, we should set the + result to null. response: | { } expected: | { "getAuthor": null, "auth": null } -- - name: "Multiple query results with a nullable becomes null" +- name: Multiple query results with a nullable becomes null gqlquery: | query { getAuthor(id: "0x1") { @@ -78,15 +81,13 @@ text } } - explanation: "Even if some queries result in null, we should return all the - results we got." + explanation: Even if some queries result in null, we should return all the results we got response: | { "getAuthor": [ { "uid": "0x1", "name": "A.N. Author" } ] } expected: | { "getAuthor": { "name": "A.N. Author" }, "post": null } -- - name: "Missing nullable field becomes null" +- name: Missing nullable field becomes null gqlquery: | query { getAuthor(id: "0x1") { @@ -94,30 +95,30 @@ dob } } - explanation: "When a field that's nullable (like dob: DateTime) is missing - in the Dgraph result, it should be added as null to the GraphQL result." + explanation: + "When a field that's nullable (like dob: DateTime) is missing in the Dgraph result, it should be + added as null to the GraphQL result." response: | { "getAuthor": [ { "uid": "0x1", "name": "A.N. Author" } ] } expected: | { "getAuthor": { "name": "A.N. Author", "dob": null } } -- - name: "Root level handled correctly if just uid when nullable missing" +- name: Root level handled correctly if just uid when nullable missing gqlquery: | query { getAuthor(id: "0x1") { dob } } - explanation: "GraphQL error propagation causes an error on a non-nullable field - (like name: String!) to propagate to the parent object." + explanation: + "GraphQL error propagation causes an error on a non-nullable field (like name: String!) to + propagate to the parent object." response: | { "getAuthor": [ { "uid": "0x1" } ] } expected: | { "getAuthor": { "dob": null } } -- - name: "Missing nullable field becomes null (aliased)" +- name: Missing nullable field becomes null (aliased) gqlquery: | query { getAuthor(id: "0x1") { @@ -125,15 +126,15 @@ birthday : dob } } - explanation: "When a field that's nullable (like dob: DateTime) is missing - in the Dgraph result, it should be added as null to the GraphQL result." + explanation: + "When a field that's nullable (like dob: DateTime) is missing in the Dgraph result, it should be + added as null to the GraphQL result." response: | { "getAuthor": [ { "uid": "0x1", "name": "A.N. Author" } ] } expected: | { "getAuthor": { "name": "A.N. Author", "birthday": null } } -- - name: "Missing nullable becomes null (deep)" +- name: Missing nullable becomes null (deep) gqlquery: | query { getAuthor(id: "0x1") { @@ -144,8 +145,9 @@ } } } - explanation: "When a field that's nullable (like text: String) is missing - in the Dgraph result, it should be added as null to the GraphQL result." + explanation: + "When a field that's nullable (like text: String) is missing in the Dgraph result, it should be + added as null to the GraphQL result." response: | { "getAuthor": [ { "uid": "0x1", @@ -158,8 +160,7 @@ "postsRequired": [ { "title": "A Title", "text": null } ] } } -- - name: "Missing required list becomes []" +- name: Missing required list becomes [] gqlquery: | query { getAuthor(id: "0x1") { @@ -169,15 +170,15 @@ } } } - explanation: "When a field of any list type is missing in the result, - it should be added as an empty list [], not null" + explanation: + When a field of any list type is missing in the result, it should be added as an empty list [], + not null response: | { "getAuthor": [ { "uid": "0x1", "name": "A.N. Author" } ] } expected: | { "getAuthor": { "name": "A.N. Author", "postsRequired": [ ] } } -- - name: "Missing nullable list becomes []" +- name: Missing nullable list becomes [] gqlquery: | query { getAuthor(id: "0x1") { @@ -187,15 +188,15 @@ } } } - explanation: "When a field of any list type is missing in the result, - it should be added as an empty list [], not null" + explanation: + When a field of any list type is missing in the result, it should be added as an empty list [], + not null response: | { "getAuthor": [ { "uid": "0x1", "name": "A.N. Author" } ] } expected: | { "getAuthor": { "name": "A.N. Author", "postsNullable": [ ] } } -- - name: "Missing list becomes [] (aliased)" +- name: Missing list becomes [] (aliased) gqlquery: | query { getAuthor(id: "0x1") { @@ -205,15 +206,15 @@ } } } - explanation: "When a field of any list type is missing in the result, - it should be added as an empty list [], not null" + explanation: + When a field of any list type is missing in the result, it should be added as an empty list [], + not null response: | { "getAuthor": [ { "uid": "0x1", "name": "A.N. Author" } ] } expected: | { "getAuthor": { "name": "A.N. Author", "posts": [ ] } } -- - name: "Multiple missing lists become [] (with alias)" +- name: Multiple missing lists become [] (with alias) gqlquery: | query { getAuthor(id: "0x1") { @@ -226,23 +227,24 @@ } } } - explanation: "When a field of any list type is missing in the result, - it should be added as an empty list [], not null" + explanation: + When a field of any list type is missing in the result, it should be added as an empty list [], + not null response: | { "getAuthor": [ { "uid": "0x1", "name": "A.N. Author" } ] } expected: | { "getAuthor": { "name": "A.N. Author", "posts": [ ], "postsNullable": [ ] } } -- - name: "Sensible error when expecting single but multiple items returned" +- name: Sensible error when expecting single but multiple items returned gqlquery: | query { getAuthor(id: "0x1") { name } } - explanation: "When a query result is of a non-list type, we really should only - get one item in the Dgraph result." + explanation: + When a query result is of a non-list type, we really should only get one item in the Dgraph + result response: | { "getAuthor": [ { "uid": "0x1", "name": "A.N. Author" }, @@ -251,32 +253,39 @@ expected: | { "getAuthor": null } errors: - [ { "message": "A list was returned, but GraphQL was expecting just one item. This indicates - an internal error - probably a mismatch between the GraphQL and Dgraph/remote schemas. The value - was resolved as null (which may trigger GraphQL error propagation) and as much other data as + [ + { + "message": + "A list was returned, but GraphQL was expecting just one item. This indicates an internal + error - probably a mismatch between the GraphQL and Dgraph/remote schemas. The value was + resolved as null (which may trigger GraphQL error propagation) and as much other data as possible returned.", - "locations": [ { "column":3, "line":2 } ], - "path": ["getAuthor"] } ] + "locations": [{ "column": 3, "line": 2 }], + "path": [getAuthor], + }, + ] -- - name: "Sensible error when un-processable Dgraph result" +- name: Sensible error when un-processable Dgraph result gqlquery: | query { getAuthor(id: "0x1") { name } } - explanation: "Shouldn't happen" + explanation: Shouldn't happen response: | { something is wrong } expected: | { "getAuthor": null } errors: - [ { "message": "invalid character 's' looking for beginning of object key string" , - "locations": [ { "column":3, "line":2 } ] } ] + [ + { + "message": invalid character 's' looking for beginning of object key string, + "locations": [{ "column": 3, "line": 2 }], + }, + ] -- - name: "Error gets propagated to nullable parent if missing non-nullable field" +- name: Error gets propagated to nullable parent if missing non-nullable field gqlquery: | query { getAuthor(id: "0x1") { @@ -284,21 +293,25 @@ dob } } - explanation: "GraphQL error propagation causes an error on a non-nullable field - (like name: String!) to propagate to the parent object." + explanation: + "GraphQL error propagation causes an error on a non-nullable field (like name: String!) to + propagate to the parent object." response: | { "getAuthor": [ { "uid": "0x1", "dob": "2000-01-01" } ] } expected: | { "getAuthor": null } errors: - [ { - "message": "Non-nullable field 'name' (type String!) was not present in - result from Dgraph. GraphQL error propagation triggered." , - "path": [ "getAuthor", "name" ], - "locations": [ { "line": 3, "column": 5 } ] } ] + [ + { + "message": + Non-nullable field 'name' (type String!) was not present in result from Dgraph. GraphQL + error propagation triggered., + "path": [getAuthor, name], + "locations": [{ "line": 3, "column": 5 }], + }, + ] -- - name: "Error in [T!] list propagated as null list" +- name: Error in [T!] list propagated as null list gqlquery: | query { getAuthor(id: "0x1") { @@ -309,9 +322,9 @@ } } } - explanation: "If a list has non-nullable elements and an element becomes null, - here because title (String!) is missing, GraphQL error propagation - says the list becomes null." + explanation: + If a list has non-nullable elements and an element becomes null, here because title (String!) is + missing, GraphQL error propagation says the list becomes null. response: | { "getAuthor": [ { "uid": "0x1", @@ -324,13 +337,17 @@ expected: | { "getAuthor": { "name": "A.N. Author", "postsElmntRequired": null } } errors: - [ { "message": "Non-nullable field 'title' (type String!) was not present - in result from Dgraph. GraphQL error propagation triggered.", - "path": [ "getAuthor", "postsElmntRequired", 1, "title" ], - "locations": [ { "line": 5, "column": 7 } ] } ] + [ + { + "message": + Non-nullable field 'title' (type String!) was not present in result from Dgraph. GraphQL + error propagation triggered., + "path": [getAuthor, postsElmntRequired, 1, title], + "locations": [{ "line": 5, "column": 7 }], + }, + ] -- - name: "Only uid in [T!] list propagated as null list" +- name: Only uid in [T!] list propagated as null list gqlquery: | query { getAuthor(id: "0x1") { @@ -341,9 +358,9 @@ } } } - explanation: "If a list has non-nullable elements and an element becomes null, - here because title (String!) is missing, GraphQL error propagation - says the list becomes null." + explanation: + If a list has non-nullable elements and an element becomes null, here because title (String!) is + missing, GraphQL error propagation says the list becomes null. response: | { "getAuthor": [ { "uid": "0x1", @@ -356,13 +373,17 @@ expected: | { "getAuthor": { "name": "A.N. Author", "postsElmntRequired": null } } errors: - [ { "message": "Non-nullable field 'title' (type String!) was not present - in result from Dgraph. GraphQL error propagation triggered.", - "path": [ "getAuthor", "postsElmntRequired", 1, "title" ], - "locations": [ { "line": 5, "column": 7 } ] } ] + [ + { + "message": + Non-nullable field 'title' (type String!) was not present in result from Dgraph. GraphQL + error propagation triggered., + "path": [getAuthor, postsElmntRequired, 1, title], + "locations": [{ "line": 5, "column": 7 }], + }, + ] -- - name: "Error in [T] list propagated as null element in list" +- name: Error in [T] list propagated as null element in list gqlquery: | query { getAuthor(id: "0x1") { @@ -373,9 +394,10 @@ } } } - explanation: "The schema asserts a Post's title as non nullable (title: String!), - but allows nulls in an Author's postsNullable (postsNullable: [Post]). So a - post in the result list that's missing a title gets squashed to null" + explanation: + "The schema asserts a Post's title as non nullable (title: String!), but allows nulls in an + Author's postsNullable (postsNullable: [Post]). So a post in the result list that's missing a + title gets squashed to null" response: | { "getAuthor": [ { "uid": "0x1", @@ -394,13 +416,17 @@ ] } } errors: - [ { "message": "Non-nullable field 'title' (type String!) was not present - in result from Dgraph. GraphQL error propagation triggered.", - "path": [ "getAuthor", "postsNullable", 1, "title" ], - "locations": [ { "line": 5, "column": 7 } ] } ] + [ + { + "message": + Non-nullable field 'title' (type String!) was not present in result from Dgraph. GraphQL + error propagation triggered., + "path": [getAuthor, postsNullable, 1, title], + "locations": [{ "line": 5, "column": 7 }], + }, + ] -- - name: "Only uid in [T] list propagated as null element in list" +- name: Only uid in [T] list propagated as null element in list gqlquery: | query { getAuthor(id: "0x1") { @@ -410,9 +436,10 @@ } } } - explanation: "The schema asserts a Post's title as non nullable (title: String!), - but allows nulls in an Author's postsNullable (postsNullable: [Post]). So a - post in the result list that's missing a title gets squashed to null" + explanation: + "The schema asserts a Post's title as non nullable (title: String!), but allows nulls in an + Author's postsNullable (postsNullable: [Post]). So a post in the result list that's missing a + title gets squashed to null" response: | { "getAuthor": [ { "uid": "0x1", @@ -431,13 +458,17 @@ ] } } errors: - [ { "message": "Non-nullable field 'title' (type String!) was not present - in result from Dgraph. GraphQL error propagation triggered.", - "path": [ "getAuthor", "postsNullable", 0, "title" ], - "locations": [ { "line": 5, "column": 7 } ] } ] + [ + { + "message": + Non-nullable field 'title' (type String!) was not present in result from Dgraph. GraphQL + error propagation triggered., + "path": [getAuthor, postsNullable, 0, title], + "locations": [{ "line": 5, "column": 7 }], + }, + ] -- - name: "Many errors in [T] list propagated as null elements in list" +- name: Many errors in [T] list propagated as null elements in list gqlquery: | query { getAuthor(id: "0x1") { @@ -448,9 +479,10 @@ } } } - explanation: "The schema asserts a Post's title as non nullable (title: String!), - but allows nulls in an Author's postsNullable (postsNullable: [Post]). So any - post in the result list that's missing a title gets squashed to null" + explanation: + "The schema asserts a Post's title as non nullable (title: String!), but allows nulls in an + Author's postsNullable (postsNullable: [Post]). So any post in the result list that's missing a + title gets squashed to null" response: | { "getAuthor": [ { "uid": "0x1", @@ -473,21 +505,31 @@ ] } } errors: - [ { "message": "Non-nullable field 'title' (type String!) was not present - in result from Dgraph. GraphQL error propagation triggered.", - "path": [ "getAuthor", "postsNullable", 0, "title" ], - "locations": [ { "line": 6, "column": 7 } ] }, - { "message": "Non-nullable field 'title' (type String!) was not present - in result from Dgraph. GraphQL error propagation triggered.", - "path": [ "getAuthor", "postsNullable", 2, "title" ], - "locations": [ { "line": 6, "column": 7 } ] }, - { "message": "Non-nullable field 'title' (type String!) was not present - in result from Dgraph. GraphQL error propagation triggered.", - "path": [ "getAuthor", "postsNullable", 3, "title" ], - "locations": [ { "line": 6, "column": 7 } ] } ] + [ + { + "message": + Non-nullable field 'title' (type String!) was not present in result from Dgraph. GraphQL + error propagation triggered., + "path": [getAuthor, postsNullable, 0, title], + "locations": [{ "line": 6, "column": 7 }], + }, + { + "message": + Non-nullable field 'title' (type String!) was not present in result from Dgraph. GraphQL + error propagation triggered., + "path": [getAuthor, postsNullable, 2, title], + "locations": [{ "line": 6, "column": 7 }], + }, + { + "message": + Non-nullable field 'title' (type String!) was not present in result from Dgraph. GraphQL + error propagation triggered., + "path": [getAuthor, postsNullable, 3, title], + "locations": [{ "line": 6, "column": 7 }], + }, + ] -- - name: "Only uid on nullable field list gets inserted correctly" +- name: Only uid on nullable field list gets inserted correctly gqlquery: | query { getAuthor(id: "0x1") { @@ -497,8 +539,9 @@ } } } - explanation: "The schema asserts a Post's text as nullable (text: String), - so if a query finds posts without any text, nulls should be inserted" + explanation: + "The schema asserts a Post's text as nullable (text: String), so if a query finds posts without + any text, nulls should be inserted" response: | { "getAuthor": [ { "uid": "0x1", @@ -521,8 +564,7 @@ ] } } -- - name: "Error in [T]! list propagated as null element in list" +- name: Error in [T]! list propagated as null element in list gqlquery: | query { getAuthor(id: "0x1") { @@ -533,9 +575,10 @@ } } } - explanation: "The schema asserts a Post's title as non nullable (title: String!), - but allows nulls in an Author's postsNullable (postsNullable: [Post]). So a - post in the result list that's missing a title gets squashed to null" + explanation: + "The schema asserts a Post's title as non nullable (title: String!), but allows nulls in an + Author's postsNullable (postsNullable: [Post]). So a post in the result list that's missing a + title gets squashed to null" response: | { "getAuthor": [ { "uid": "0x1", @@ -554,7 +597,12 @@ ] } } errors: - [ { "message": "Non-nullable field 'title' (type String!) was not present - in result from Dgraph. GraphQL error propagation triggered.", - "path": [ "getAuthor", "postsNullableListRequired", 0, "title" ], - "locations": [ { "line": 5, "column": 7 } ] } ] + [ + { + "message": + Non-nullable field 'title' (type String!) was not present in result from Dgraph. GraphQL + error propagation triggered., + "path": [getAuthor, postsNullableListRequired, 0, title], + "locations": [{ "line": 5, "column": 7 }], + }, + ] diff --git a/graphql/resolve/update_mutation_test.yaml b/graphql/resolve/update_mutation_test.yaml index bf434c04f7f..ef5155ebc94 100644 --- a/graphql/resolve/update_mutation_test.yaml +++ b/graphql/resolve/update_mutation_test.yaml @@ -1,5 +1,4 @@ -- - name: "Update set mutation on Geo - Point type" +- name: Update set mutation on Geo - Point type gqlmutation: | mutation updateHotel($patch: UpdateHotelInput!) { updateHotel(input: $patch) { @@ -22,7 +21,7 @@ } } } - explanation: "The update patch should get rewritten into the Dgraph set mutation" + explanation: The update patch should get rewritten into the Dgraph set mutation dgquerysec: |- query { x as updateHotel(func: type(Hotel)) @filter(near(Hotel.location, [22.22,11.11], 33.33)) { @@ -39,8 +38,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update remove mutation on Geo - Point type" +- name: Update remove mutation on Geo - Point type gqlmutation: | mutation updateHotel($patch: UpdateHotelInput!) { updateHotel(input: $patch) { @@ -63,7 +61,7 @@ } } } - explanation: "The update patch should get rewritten into the Dgraph delete mutation" + explanation: The update patch should get rewritten into the Dgraph delete mutation dgquerysec: |- query { x as updateHotel(func: uid(0x123, 0x124)) @filter(type(Hotel)) { @@ -80,9 +78,7 @@ } cond: "@if(gt(len(x), 0))" - -- - name: "Update remove mutation on Geo - Polygon type" +- name: Update remove mutation on Geo - Polygon type gqlmutation: | mutation updateHotel($patch: UpdateHotelInput!) { updateHotel(input: $patch) { @@ -133,7 +129,7 @@ } } } - explanation: "The update patch should get rewritten into the Dgraph delete mutation" + explanation: The update patch should get rewritten into the Dgraph delete mutation dgquerysec: |- query { x as updateHotel(func: uid(0x123, 0x124)) @filter(type(Hotel)) { @@ -150,8 +146,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update set mutation on Geo - MultiPolygon type" +- name: Update set mutation on Geo - MultiPolygon type gqlmutation: | mutation updateHotel($patch: UpdateHotelInput!) { updateHotel(input: $patch) { @@ -218,7 +213,7 @@ } } } - explanation: "The update patch should get rewritten into the Dgraph set mutation" + explanation: The update patch should get rewritten into the Dgraph set mutation dgquerysec: |- query { x as updateHotel(func: uid(0x123, 0x124)) @filter(type(Hotel)) { @@ -235,8 +230,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update set mutation with variables" +- name: Update set mutation with variables gqlmutation: | mutation updatePost($patch: UpdatePostInput!) { updatePost(input: $patch) { @@ -255,7 +249,7 @@ } } } - explanation: "The update patch should get rewritten into the Dgraph set mutation" + explanation: The update patch should get rewritten into the Dgraph set mutation dgquerysec: |- query { x as updatePost(func: uid(0x123, 0x124)) @filter(type(Post)) { @@ -269,8 +263,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update remove mutation with variables and value" +- name: Update remove mutation with variables and value gqlmutation: | mutation updatePost($patch: UpdatePostInput!) { updatePost(input: $patch) { @@ -289,7 +282,7 @@ } } } - explanation: "The update patch should get rewritten into the Dgraph delete mutation" + explanation: The update patch should get rewritten into the Dgraph delete mutation dgquerysec: |- query { x as updatePost(func: uid(0x123, 0x124)) @filter(type(Post)) { @@ -303,8 +296,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update delete mutation with variables and null" +- name: Update delete mutation with variables and null gqlmutation: | mutation updatePost($patch: UpdatePostInput!) { updatePost(input: $patch) { @@ -323,7 +315,7 @@ } } } - explanation: "The update patch should get rewritten into the Dgraph mutation" + explanation: The update patch should get rewritten into the Dgraph mutation dgquerysec: |- query { x as updatePost(func: uid(0x123, 0x124)) @filter(type(Post)) { @@ -337,8 +329,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update mutation for a type that implements an interface" +- name: Update mutation for a type that implements an interface gqlmutation: | mutation updateHuman($patch: UpdateHumanInput!) { updateHuman(input: $patch) { @@ -362,7 +353,7 @@ } } } - explanation: "The mutation should get rewritten with correct edges from the interface." + explanation: The mutation should get rewritten with correct edges from the interface dgquerysec: |- query { x as updateHuman(func: uid(0x123)) @filter(type(Human)) { @@ -379,8 +370,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update mutation for an interface" +- name: Update mutation for an interface gqlmutation: |- mutation { updateCharacter(input: {filter: { id: ["0x123"] }, set: {name:"Bob"}}) { @@ -390,7 +380,7 @@ } } } - explanation: "The mutation should get rewritten with correct edges from the interface." + explanation: The mutation should get rewritten with correct edges from the interface dgquerysec: |- query { x as updateCharacter(func: uid(0x123)) @filter(type(Character)) { @@ -404,8 +394,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update mutation using filters" +- name: Update mutation using filters gqlmutation: | mutation updatePost($patch: UpdatePostInput!) { updatePost(input: $patch) { @@ -424,7 +413,7 @@ } } } - explanation: "The update patch should get rewritten into the Dgraph mutation" + explanation: The update patch should get rewritten into the Dgraph mutation dgquerysec: |- query { x as updatePost(func: type(Post)) @filter(eq(Post.tags, "foo")) { @@ -438,8 +427,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update mutation using code" +- name: Update mutation using code gqlmutation: | mutation updateState($patch: UpdateStateInput!) { updateState(input: $patch) { @@ -458,7 +446,7 @@ } } } - explanation: "The update mutation should get rewritten into a Dgraph upsert mutation" + explanation: The update mutation should get rewritten into a Dgraph upsert mutation dgquerysec: |- query { x as updateState(func: type(State)) @filter(eq(State.code, "nsw")) { @@ -472,9 +460,7 @@ } cond: "@if(gt(len(x), 0))" - -- - name: "Update mutation using code on type which also has an ID field" +- name: Update mutation using code on type which also has an ID field gqlmutation: | mutation updateEditor($patch: UpdateEditorInput!) { updateEditor(input: $patch) { @@ -494,7 +480,7 @@ } } } - explanation: "The update mutation should get rewritten into a Dgraph upsert mutation" + explanation: The update mutation should get rewritten into a Dgraph upsert mutation dgquerysec: |- query { x as updateEditor(func: uid(0x1, 0x2)) @filter((eq(Editor.code, "editor") AND type(Editor))) { @@ -508,9 +494,7 @@ } cond: "@if(gt(len(x), 0))" - -- - name: "Update add reference" +- name: Update add reference gqlmutation: | mutation updateAuthor($patch: UpdateAuthorInput!) { updateAuthor(input: $patch) { @@ -568,8 +552,7 @@ ] cond: "@if(gt(len(x), 0))" -- - name: "Update remove without XID or ID" +- name: Update remove without XID or ID gqlmutation: | mutation updateComputer($patch: UpdateComputerInput!) { updateComputer(input: $patch) { @@ -590,13 +573,10 @@ } } } - explanation: "Remove requires an XID or ID" - error2: - { "message": - "failed to rewrite mutation payload because field name cannot be empty" } + explanation: Remove requires an XID or ID + error2: { "message": failed to rewrite mutation payload because field name cannot be empty } -- - name: "Update remove with XID" +- name: Update remove with XID gqlmutation: | mutation updateComputer($patch: UpdateComputerInput!) { updateComputer(input: $patch) { @@ -648,8 +628,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update remove with ID" +- name: Update remove with ID gqlmutation: | mutation updateAuthor($patch: UpdateAuthorInput!) { updateAuthor(input: $patch) { @@ -698,8 +677,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update remove reference" +- name: Update remove reference gqlmutation: | mutation updateAuthor($patch: UpdateAuthorInput!) { updateAuthor(input: $patch) { @@ -747,8 +725,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update remove reference without id or xid" +- name: Update remove reference without id or xid gqlmutation: | mutation updateWorkflow($patch: UpdateWorkflowInput!) { updateWorkflow(input: $patch) { @@ -774,8 +751,7 @@ message: |- failed to rewrite mutation payload because id is not provided -- - name: "Update add and remove together" +- name: Update add and remove together gqlmutation: | mutation updateAuthor($patch: UpdateAuthorInput!) { updateAuthor(input: $patch) { @@ -851,8 +827,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Deep updates don't alter linked objects" +- name: Deep updates don't alter linked objects gqlmutation: | mutation updateAuthor($patch: UpdateAuthorInput!) { updateAuthor(input: $patch) { @@ -875,7 +850,7 @@ } } } - explanation: "updateAuthor doesn't update posts except where references are removed" + explanation: updateAuthor doesn't update posts except where references are removed dgquery: |- query { Post_1(func: uid(0x456)) { @@ -915,8 +890,7 @@ ] cond: "@if(gt(len(x), 0))" -- - name: "Deep update" +- name: Deep update gqlmutation: | mutation updateAuthor($patch: UpdateAuthorInput!) { updateAuthor(input: $patch) { @@ -937,7 +911,7 @@ } } } - explanation: "The update creates a new country" + explanation: The update creates a new country dgquerysec: |- query { x as updateAuthor(func: uid(0x123)) @filter(type(Author)) { @@ -955,8 +929,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Deep xid create options 1" +- name: Deep xid create options 1 gqlmutation: | mutation updateAuthor($patch: UpdateAuthorInput!) { updateAuthor(input: $patch) { @@ -981,7 +954,7 @@ } } } - explanation: "The update creates a new state" + explanation: The update creates a new state dgquery: |- query { State_1(func: eq(State.code, "dg")) { @@ -1017,8 +990,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Deep xid create options 2" +- name: Deep xid create options 2 gqlmutation: | mutation updateAuthor($patch: UpdateAuthorInput!) { updateAuthor(input: $patch) { @@ -1043,7 +1015,7 @@ } } } - explanation: "The update links to existing state" + explanation: The update links to existing state dgquery: |- query { State_1(func: eq(State.code, "dg")) { @@ -1088,9 +1060,7 @@ ] cond: "@if(gt(len(x), 0))" - -- - name: "Deep xid link only" +- name: Deep xid link only gqlmutation: | mutation updateAuthor($patch: UpdateAuthorInput!) { updateAuthor(input: $patch) { @@ -1114,7 +1084,7 @@ } } } - explanation: "The update must link to the existing state" + explanation: The update must link to the existing state dgquery: |- query { State_1(func: eq(State.code, "dg")) { @@ -1159,8 +1129,7 @@ ] cond: "@if(gt(len(x), 0))" -- - name: "update two single edges" +- name: update two single edges gqlmutation: | mutation updateOwner($patch: UpdateOwnerInput!) { updateOwner(input: $patch) { @@ -1226,8 +1195,7 @@ ] cond: "@if(gt(len(x), 0))" -- - name: "Update add reference doesn't add reverse edge" +- name: Update add reference doesn't add reverse edge gqlmutation: | mutation updateMovieDirector($patch: UpdateMovieDirectorInput!) { updateMovieDirector(input: $patch) { @@ -1274,8 +1242,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update remove reference doesn't try to remove reverse edge." +- name: Update remove reference doesn't try to remove reverse edge gqlmutation: | mutation updateMovieDirector($patch: UpdateMovieDirectorInput!) { updateMovieDirector(input: $patch) { @@ -1322,7 +1289,7 @@ } cond: "@if(gt(len(x), 0))" -- name: "Deep Mutation Duplicate XIDs with same object Test" +- name: Deep Mutation Duplicate XIDs with same object Test gqlmutation: | mutation updateStudent($input: UpdateStudentInput!) { updateStudent(input: $input) { @@ -1351,8 +1318,9 @@ } } } - explanation: "When duplicate XIDs are given as input to deep mutation but the object structure - is same, it should not return error." + explanation: + When duplicate XIDs are given as input to deep mutation but the object structure is same, it + should not return error dgquery: |- query { Teacher_1(func: eq(People.xid, "T1")) { @@ -1386,7 +1354,7 @@ } cond: "@if(gt(len(x), 0))" -- name: "Deep Mutation Duplicate XIDs with same object with @hasInverse Test" +- name: Deep Mutation Duplicate XIDs with same object with @hasInverse Test gqlmutation: | mutation updateCountry($input: UpdateCountryInput!) { updateCountry(input: $input) { @@ -1415,14 +1383,15 @@ } } } - explanation: "When duplicate XIDs are given as input to deep mutation and the object structure - is same and the containing object has @hasInverse on its xid object field, but the xid object - does not have the @hasInverse field of List type, it should return error." + explanation: + When duplicate XIDs are given as input to deep mutation and the object structure is same and the + containing object has @hasInverse on its xid object field, but the xid object does not have the + @hasInverse field of List type, it should return error. error: message: |- failed to rewrite mutation payload because duplicate XID found: S1 -- name: "Deep Mutation Duplicate XIDs with different object Test" +- name: Deep Mutation Duplicate XIDs with different object Test gqlmutation: | mutation updateStudent($input: UpdateStudentInput!) { updateStudent(input: $input) { @@ -1451,13 +1420,14 @@ } } } - explanation: "When duplicate XIDs are given as input to deep mutation but the object structure - is different, it should return error." + explanation: + When duplicate XIDs are given as input to deep mutation but the object structure is different, + it should return error. error: message: |- failed to rewrite mutation payload because duplicate XID found: T1 -- name: "Duplicate XIDs in single mutation for Interface" +- name: Duplicate XIDs in single mutation for Interface gqlmutation: | mutation updateStudent($input: UpdateStudentInput!) { updateStudent(input: $input) { @@ -1492,13 +1462,13 @@ } } } - explanation: "When duplicate XIDs are given as input for an Interface in a single mutation, it - should return error." + explanation: + When duplicate XIDs are given as input for an Interface in a single mutation, it should return + error. error: message: |- failed to rewrite mutation payload because duplicate XID found: T1 - # Additional Deletes # # If we have @@ -1538,7 +1508,7 @@ # edge is in the updated node, not the reference node) # * as per case two, but with the singular edge in the updated node. -- name: "Additional Deletes - Update references existing node by ID (update list edge)" +- name: Additional Deletes - Update references existing node by ID (update list edge) gqlmutation: | mutation updateAuthor($patch: UpdateAuthorInput!) { updateAuthor(input: $patch) { @@ -1598,7 +1568,7 @@ ] cond: "@if(gt(len(x), 0))" -- name: "Additional Deletes - Update references existing node by ID (update single edge)" +- name: Additional Deletes - Update references existing node by ID (update single edge) gqlmutation: | mutation updatePost($patch: UpdatePostInput!) { updatePost(input: $patch) { @@ -1656,7 +1626,7 @@ ] cond: "@if(gt(len(x), 0))" -- name: "Additional Deletes - Update references existing node by XID (update list edge)" +- name: Additional Deletes - Update references existing node by XID (update list edge) gqlmutation: | mutation updateCountry($patch: UpdateCountryInput!) { updateCountry(input: $patch) { @@ -1705,7 +1675,7 @@ } cond: "@if(gt(len(x), 0))" -- name: "Update mutation error on @id field for empty value" +- name: Update mutation error on @id field for empty value gqlmutation: | mutation updateCountry($patch: UpdateCountryInput!) { updateCountry(input: $patch) { @@ -1725,11 +1695,15 @@ } } } - explanation: "The update mutation should not be allowed since value of @id field is empty." + explanation: The update mutation should not be allowed since value of @id field is empty error: - { "message": "failed to rewrite mutation payload because encountered an empty value for @id field `State.code`" } + { + "message": + failed to rewrite mutation payload because encountered an empty value for @id field + `State.code`, + } -- name: "Additional Deletes - Update references existing node by XID (update single edge)" +- name: Additional Deletes - Update references existing node by XID (update single edge) gqlmutation: | mutation updateComputerOwner($patch: UpdateComputerOwnerInput!) { updateComputerOwner(input: $patch) { @@ -1771,8 +1745,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Add mutation with union" +- name: Add mutation with union gqlmutation: | mutation($patch: UpdateHomeInput!) { updateHome(input: $patch) { @@ -1865,8 +1838,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update set mutation with multiple Id's" +- name: Update set mutation with multiple Id's gqlmutation: | mutation update($patch: UpdateBookInput!) { updateBook(input: $patch) { @@ -1912,8 +1884,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "delete json shouldn't be generated for empty remove" +- name: delete json shouldn't be generated for empty remove gqlmutation: | mutation updateAuthor($patch: UpdateAuthorInput!) { updateAuthor(input: $patch) { @@ -1946,8 +1917,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "set json shouldn't be generated for empty set" +- name: set json shouldn't be generated for empty set gqlmutation: | mutation updateAuthor($patch: UpdateAuthorInput!) { updateAuthor(input: $patch) { @@ -1980,11 +1950,11 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Updating @id field when given values for @id fields doesn't exists" - explaination: "We are giving two @id fields title and ISBN in set part of update mutation, - and will generate two existence queries for both of them. As none of the @id field is present,we - update the values successfully " +- name: Updating @id field when given values for @id fields doesn't exists + explaination: + We are giving two @id fields title and ISBN in set part of update mutation, and will generate + two existence queries for both of them. As none of the @id field is present,we update the values + successfully gqlmutation: | mutation update($patch: UpdateBookInput!) { updateBook(input: $patch) { @@ -2044,11 +2014,11 @@ "Book.title": "History of Humans" } cond: "@if(gt(len(x), 0))" -- - name: "Updating @id field when given value for @id fields exist in some node" - explaination: "We are giving two @id fields title and ISBN in set part of update mutation, - and will generate two existence queries for both of them.As we already have node with title - Sapiens, we will return error in this case " +- name: Updating @id field when given value for @id fields exist in some node + explaination: + We are giving two @id fields title and ISBN in set part of update mutation, and will generate + two existence queries for both of them.As we already have node with title Sapiens, we will + return error in this case gqlmutation: | mutation update($patch: UpdateBookInput!) { updateBook(input: $patch) { @@ -2099,16 +2069,18 @@ "Book_2": "0x123" } error2: - { "message": - "failed to rewrite mutation payload because id History of Humans already exists for field title inside type Book" + { + "message": + failed to rewrite mutation payload because id History of Humans already exists for field + title inside type Book, } -- - name: "skipping nullable @id values while Updating link to non-existent nested object" - explaination: "when we update link to nested field, we check if that node already exists or not, - In this case nested object doesn't exists and update mutation create it and link it to root object. - while creating nested object it skip @id nullable fields which don't exists in nested object, in this case - it skips commentId in nested type Comment1" +- name: skipping nullable @id values while Updating link to non-existent nested object + explaination: + when we update link to nested field, we check if that node already exists or not, In this case + nested object doesn't exists and update mutation create it and link it to root object. while + creating nested object it skip @id nullable fields which don't exists in nested object, in this + case it skips commentId in nested type Comment1 gqlmutation: | mutation update($patch: UpdatePost1Input!) { updatePost1(input: $patch) { @@ -2171,12 +2143,12 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Updating link to nested field require all the non-null id's to be present in nested field" - explaination: "when we update link to nested field then we check if that already exist or not, - In this case since @id field is not present in nested field, so we assume it to be a new node. - update mutation tries to create it but failed because non-nullable id field is required to add new - node." +- name: Updating link to nested field require all the non-null id's to be present in nested field + explaination: + when we update link to nested field then we check if that already exist or not, In this case + since @id field is not present in nested field, so we assume it to be a new node. update + mutation tries to create it but failed because non-nullable id field is required to add new + node. gqlmutation: | mutation update($patch: UpdatePost1Input!) { updatePost1(input: $patch) { @@ -2209,16 +2181,13 @@ dgraph.type } } - error2: - { "message": - "failed to rewrite mutation payload because field id cannot be empty" - } + error2: { "message": failed to rewrite mutation payload because field id cannot be empty } -- - name: "Updating inherited @id field with interface arg -1 " - explaination: "For this case we will generate one more existence query for inherited @id field refID which have - interface arg set. No node with given refID exist in same or other implementing type of interface so we will - successfully update node in this case" +- name: "Updating inherited @id field with interface arg -1 " + explaination: + For this case we will generate one more existence query for inherited @id field refID which have + interface arg set. No node with given refID exist in same or other implementing type of + interface so we will successfully update node in this case gqlmutation: | mutation update($patch: UpdateLibraryMemberInput!) { updateLibraryMember(input: $patch) { @@ -2265,19 +2234,20 @@ } } dgmutations: - - setjson: | + - setjson: | { "LibraryMember.readHours":"3d2hr", "Member.name":"Alice", "Member.refID":"102", "uid":"uid(x)" } - cond: "@if(gt(len(x), 0))" + cond: "@if(gt(len(x), 0))" -- - name: "Updating inherited @id field with interface arg -2 " - explaination: "For this case we will generate one more existence query for inherited @id field refID. - There already exist node with refID in other implementing type of interface so we will generate error for this case" +- name: "Updating inherited @id field with interface arg -2 " + explaination: + For this case we will generate one more existence query for inherited @id field refID. There + already exist node with refID in other implementing type of interface so we will generate error + for this case gqlmutation: | mutation update($patch: UpdateLibraryMemberInput!) { updateLibraryMember(input: $patch) { @@ -2322,16 +2292,17 @@ } error2: { - "message": "failed to rewrite mutation payload because id 102 already exists for field refID - in some other implementing type of interface Member" + "message": + failed to rewrite mutation payload because id 102 already exists for field refID in some + other implementing type of interface Member, } -- - name: "Updating link to nested object inheriting @id field with interface argument-1" - explaination: "If nested object have inherited @id field which have interface argument set, and that - field already exist in some other implementing type than we returns error.In below mutation manages - is of type LibraryMember but node with given refID already exist in some other - type than than LibraryMember" +- name: Updating link to nested object inheriting @id field with interface argument-1 + explaination: + If nested object have inherited @id field which have interface argument set, and that field + already exist in some other implementing type than we returns error.In below mutation manages is + of type LibraryMember but node with given refID already exist in some other type than than + LibraryMember gqlmutation: | mutation update($patch: UpdateLibraryManagerInput!) { updateLibraryManager(input: $patch) { @@ -2377,14 +2348,15 @@ } error2: { - "message": "failed to rewrite mutation payload because id 101 already exists for field refID - in some other implementing type of interface Member" + "message": + failed to rewrite mutation payload because id 101 already exists for field refID in some + other implementing type of interface Member, } -- - name: "Updating link to nested object inheriting @id field with interface argument-2" - explaination: "In below mutation manages is of type LibraryMember and node of type LibraryMember already - existed with given refID, so we link that correctly" +- name: Updating link to nested object inheriting @id field with interface argument-2" + explaination: + In below mutation manages is of type LibraryMember and node of type LibraryMember already + existed with given refID, so we link that correctly gqlmutation: | mutation update($patch: UpdateLibraryManagerInput!) { updateLibraryManager(input: $patch) { @@ -2436,20 +2408,19 @@ } } dgmutations: - - setjson: | - { - "LibraryManager.manages": [ - { - "uid": "0x123" - } - ], - "LibraryManager.name": "Bob", - "uid": "uid(x)" - } - cond: "@if(gt(len(x), 0))" + - setjson: | + { + "LibraryManager.manages": [ + { + "uid": "0x123" + } + ], + "LibraryManager.name": "Bob", + "uid": "uid(x)" + } + cond: "@if(gt(len(x), 0))" -- - name: "Update with @default directive" +- name: Update with @default directive gqlmutation: | mutation updateBooking($patch: UpdateBookingInput!) { updateBooking(input: $patch) { @@ -2468,7 +2439,9 @@ } } } - explanation: "The update patch should include default values on the fields with the @default(update:) directive" + explanation: + The update patch should include default values on the fields with the @default(update:) + directive dgquerysec: |- query { x as updateBooking(func: uid(0x123, 0x124)) @filter(type(Booking)) { @@ -2488,8 +2461,7 @@ } cond: "@if(gt(len(x), 0))" -- - name: "Update with @default directive uses provided values" +- name: Update with @default directive uses provided values gqlmutation: | mutation updateBooking($patch: UpdateBookingInput!) { updateBooking(input: $patch) { @@ -2513,7 +2485,9 @@ } } } - explanation: "Fields with @default(update) should use input values if provided (note that count is still using default)" + explanation: + Fields with @default(update) should use input values if provided (note that count is still using + default) dgquerysec: |- query { x as updateBooking(func: uid(0x123, 0x124)) @filter(type(Booking)) { diff --git a/graphql/resolve/validate_mutation_test.yaml b/graphql/resolve/validate_mutation_test.yaml index ee5a88b2ca4..4f3ad928da6 100644 --- a/graphql/resolve/validate_mutation_test.yaml +++ b/graphql/resolve/validate_mutation_test.yaml @@ -1,5 +1,4 @@ -- - name: "Add mutation with object instead of an array" +- name: Add mutation with object instead of an array gqlmutation: | mutation addAuthor($auth: AddAuthorInput!) { addAuthor(input: $auth) { @@ -15,16 +14,16 @@ "posts": [] } } - explanation: "Add mutation expects an array instead of an object" + explanation: Add mutation expects an array instead of an object validationerror: - { "message": - "input:2: Variable type provided AddAuthorInput! is incompatible with expected type - [AddAuthorInput!]!\ninput:2: Variable \"$auth\" of type \"AddAuthorInput!\" used in - position expecting type \"[AddAuthorInput!]!\".\n" } - + { + "message": + "input:2: Variable type provided AddAuthorInput! is incompatible with expected type + [AddAuthorInput!]!\ninput:2: Variable \"$auth\" of type \"AddAuthorInput!\" used in position + expecting type \"[AddAuthorInput!]!\".\n", + } -- - name: "Add mutation with invalid object" +- name: Add mutation with invalid object gqlmutation: | mutation addAuthor($auth: AddAuthorInput!) { addAuthor(input: [$auth]) { @@ -38,14 +37,10 @@ { "posts": [] } } - explanation: "Name is a required field here and all the elements provided - should have one" - validationerror: - { "message": - "input: variable.auth.name must be defined" } + explanation: Name is a required field here and all the elements provided should have one + validationerror: { "message": "input: variable.auth.name must be defined" } -- - name: "Add multiple mutation with invalid object" +- name: Add multiple mutation with invalid object gqlmutation: | mutation addAuthor($auth: [AddAuthorInput!]!) { addAuthor(input: $auth) { @@ -62,8 +57,5 @@ { "posts": [] }] } - explanation: "Name is a required field and all the elements provided - should have one" - validationerror: - { "message": - "input: variable.auth[1].name must be defined" } + explanation: Name is a required field and all the elements provided should have one + validationerror: { "message": "input: variable.auth[1].name must be defined" } diff --git a/graphql/schema/auth_schemas_test.yaml b/graphql/schema/auth_schemas_test.yaml index 1a7195938e2..26057e12204 100644 --- a/graphql/schema/auth_schemas_test.yaml +++ b/graphql/schema/auth_schemas_test.yaml @@ -1,6 +1,5 @@ invalid_schemas: - - - name: "GraphQL parsing errors should be reported" + - name: GraphQL parsing errors should be reported input: | type X @auth( query: { rule: "query { " } @@ -8,12 +7,15 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [ - {"message": "Type X: @auth: failed to parse GraphQL rule - [reason : Expected Name, found ]"} - ] + errlist: + [ + { + "message": + "Type X: @auth: failed to parse GraphQL rule [reason : Expected Name, found ]", + }, + ] - - name: "GraphQL validation errors should be reported" + - name: GraphQL validation errors should be reported input: | type X @auth( query: {rule: "query { queryX(filter: { userRle: { eq: \"ADMIN\" } }) { __typename } }"} @@ -21,11 +23,14 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [ - {"message": "Type X: @auth: failed to validate GraphQL rule - [reason : Field \"userRle\" is not defined by type XFilter. - Did you mean userRole or username?]"} - ] + errlist: + [ + { + "message": + 'Type X: @auth: failed to validate GraphQL rule [reason : Field "userRle" is not defined + by type XFilter. Did you mean userRole or username?]', + }, + ] - name: "Invalid RBAC rule: in filter not array variable 1" input: | @@ -35,10 +40,14 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [ - { "message": "Type X: @auth: `in` operator has invalid value `xyz@dgraph.io`. - Value should be an array." } - ] + errlist: + [ + { + "message": + "Type X: @auth: `in` operator has invalid value `xyz@dgraph.io`. Value should be an + array.", + }, + ] - name: "Invalid RBAC rule: in filter not array variable 2" input: | @@ -48,10 +57,13 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [ - { "message": "Type X: @auth: `in` operator has invalid value `true`. - Value should be an array."} - ] + errlist: + [ + { + "message": + "Type X: @auth: `in` operator has invalid value `true`. Value should be an array.", + }, + ] - name: "Invalid RBAC rule: nil as the value" input: | @@ -61,9 +73,7 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [ - { "message": "Type X: @auth: `$USER` is not a valid GraphQL variable." } - ] + errlist: [{ "message": "Type X: @auth: `$USER` is not a valid GraphQL variable." }] - name: "Invalid RBAC rule: null as the value" input: | @@ -73,9 +83,13 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [ - { "message": "Type X: @auth: `eq` operator has invalid value. null values aren't supported." } - ] + errlist: + [ + { + "message": + "Type X: @auth: `eq` operator has invalid value. null values aren't supported.", + }, + ] - name: "Invalid RBAC rule: regexp filter not string variable" input: | @@ -85,12 +99,16 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [ - { "message": "Type X: @auth: `regexp` operator has invalid value `12345`. - Value should be of type String." } - ] + errlist: + [ + { + "message": + "Type X: @auth: `regexp` operator has invalid value `12345`. Value should be of type + String.", + }, + ] - - name: "RBAC rule invalid variable" + - name: RBAC rule invalid variable input: | type X @auth( query: {rule: "{ X_MyApp_Role : { eq : \"ADMIN\"}}" @@ -99,9 +117,9 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [{"message": "Type X: @auth: `X_MyApp_Role` is not a valid GraphQL variable."}] + errlist: [{ "message": "Type X: @auth: `X_MyApp_Role` is not a valid GraphQL variable." }] - - name: "RBAC rule invalid operator" + - name: RBAC rule invalid operator input: | type X @auth( query: {rule: "{ $X_MyApp_Role : { xyz : \"ADMIN\"}}" @@ -110,9 +128,9 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [{"message": "Type X: @auth: `xyz` operator is not supported."}] + errlist: [{ "message": "Type X: @auth: `xyz` operator is not supported." }] - - name: "Invalid RBAC rule" + - name: Invalid RBAC rule input: | type X @auth( query: {rule: "{ \"ADMIN\" }" @@ -121,9 +139,9 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [{"message": "Type X: @auth: `{ \"ADMIN\" }` is not a valid rule."}] + errlist: [{ "message": 'Type X: @auth: `{ "ADMIN" }` is not a valid rule.' }] - - name: "Empty rule" + - name: Empty rule input: | type X @auth( query: { rule: "" @@ -132,12 +150,15 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [ - {"message": "Type X: @auth: a rule should be exactly one query, - found 0 GraphQL operations"} - ] + errlist: + [ + { + "message": + "Type X: @auth: a rule should be exactly one query, found 0 GraphQL operations", + }, + ] - - name: "Invalid auth syntax" + - name: Invalid auth syntax input: | type X @auth( query: { xyz: "" @@ -146,12 +167,10 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [ - {"message": "Type X: @auth: there should be only one of \"and\", \"or\", - \"not\" and \"rule\""} - ] + errlist: + [{ "message": 'Type X: @auth: there should be only one of "and", "or", "not" and "rule"' }] - - name: "Single or rule" + - name: Single or rule input: | type X @auth( query: { @@ -167,9 +186,9 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [{"message": "Type X: @auth: 'OR' should contain at least two rules"}] + errlist: [{ "message": "Type X: @auth: 'OR' should contain at least two rules" }] - - name: "Multiple logical operation at same level" + - name: Multiple logical operation at same level input: | type X @auth( query: { @@ -204,12 +223,10 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [ - {"message": "Type X: @auth: there should be only one of \"and\", \"or\", - \"not\" and \"rule\""} - ] + errlist: + [{ "message": 'Type X: @auth: there should be only one of "and", "or", "not" and "rule"' }] - - name: "Same logical operation at same level" + - name: Same logical operation at same level input: | type X @auth( query: { @@ -244,12 +261,10 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [ - {"message": "Type X: @auth: there should be only one of \"and\", \"or\", - \"not\" and \"rule\""} - ] + errlist: + [{ "message": 'Type X: @auth: there should be only one of "and", "or", "not" and "rule"' }] - - name: "Rules with null value" + - name: Rules with null value input: | type X @auth( query: { and: [ null, null ] } @@ -257,16 +272,20 @@ invalid_schemas: username: String! @id userRole: String @search(by: [hash]) } - errlist: [ - {"message": "Type X: @auth: no arguments - there should be only one of \"and\", \"or\", - \"not\" and \"rule\""}, - {"message": "Type X: @auth: no arguments - there should be only one of \"and\", \"or\", - \"not\" and \"rule\""} - ] + errlist: + [ + { + "message": + 'Type X: @auth: no arguments - there should be only one of "and", "or", "not" and "rule"', + }, + { + "message": + 'Type X: @auth: no arguments - there should be only one of "and", "or", "not" and "rule"', + }, + ] valid_schemas: - - - name: "GraphQL Should Parse" + - name: GraphQL Should Parse input: | type X @auth( query: {rule: """ @@ -281,7 +300,7 @@ valid_schemas: userRole: String @search(by: [hash]) } - - name: "GraphQL auth RBAC rule" + - name: GraphQL auth RBAC rule input: | type X @auth( query: { rule: "{ $X_MyApp_Role: { eq: \"ADMIN\" }}" @@ -291,7 +310,7 @@ valid_schemas: userRole: String @search(by: [hash]) } - - name: "GraphQL With Variable Should Parse" + - name: GraphQL With Variable Should Parse input: | type X @auth( query: { rule: """ @@ -306,7 +325,7 @@ valid_schemas: userRole: String @search(by: [hash]) } - - name: "Complex GraphQL Should Parse" + - name: Complex GraphQL Should Parse input: | type Proj @auth( update: { rule: """ @@ -331,7 +350,7 @@ valid_schemas: username: String! @id } - - name: "Rule using logical `or` operation" + - name: Rule using logical `or` operation input: | type X @auth( query: { @@ -354,7 +373,7 @@ valid_schemas: userRole: String @search(by: [hash]) } - - name: "Rule using logical `and` operation" + - name: Rule using logical `and` operation input: | type X @auth( query: { @@ -377,7 +396,7 @@ valid_schemas: userRole: String @search(by: [hash]) } - - name: "Rule using logical `not` operation" + - name: Rule using logical `not` operation input: | type X @auth( query: { not: { rule: """ diff --git a/graphql/schema/custom_http_config_test.yaml b/graphql/schema/custom_http_config_test.yaml index 67b6a1fc085..bf19f784314 100644 --- a/graphql/schema/custom_http_config_test.yaml +++ b/graphql/schema/custom_http_config_test.yaml @@ -1,6 +1,5 @@ -- - name: "custom query" - type: "query" +- name: custom query + type: query gqlschema: | type Country @remote { code: String @@ -45,9 +44,8 @@ remotevariables: |- { "id": "0x1" } -- - name: "custom query with arguments on fields" - type: "query" +- name: custom query with arguments on fields + type: query gqlschema: | input ExactFilter { eq: String @@ -110,9 +108,8 @@ remotevariables: |- { "id": "0x1" } -- - name: "custom mutation with arguments on field" - type: "mutation" +- name: custom mutation with arguments on field + type: mutation gqlschema: | input ExactFilter { eq: String @@ -252,9 +249,8 @@ } } -- - name: "custom field single mode" - type: "field" +- name: custom field single mode + type: field gqlschema: | type User { id: ID! @@ -289,9 +285,8 @@ inputvariables: |- { "id": "0x2", "age": 10 } -- - name: "custom field batch mode" - type: "field" +- name: custom field batch mode + type: field gqlschema: | type User { id: ID! @@ -330,4 +325,4 @@ remotequery: |- query($random: [UserInput]) { userName(random: $random)} inputvariables: |- - {"random": [{ "id": "0x2", "age": "10" },{ "id": "0x3", "age": "20"}]} \ No newline at end of file + {"random": [{ "id": "0x2", "age": "10" },{ "id": "0x3", "age": "20"}]} diff --git a/graphql/schema/dgraph_schemagen_test.yml b/graphql/schema/dgraph_schemagen_test.yml index 408171ce7d3..cac70c84aca 100644 --- a/graphql/schema/dgraph_schemagen_test.yml +++ b/graphql/schema/dgraph_schemagen_test.yml @@ -1,5 +1,5 @@ schemas: - - name: "Object data type" + - name: Object data type input: | type A { id: ID! @@ -19,7 +19,7 @@ schemas: } P.q: uid . - - name: "Scalar list" + - name: Scalar list input: | type X { id: ID! @@ -31,7 +31,7 @@ schemas: } X.names: [string] . - - name: "Password type" + - name: Password type input: | type X @secret(field: "pwd"){ id: ID! @@ -45,8 +45,7 @@ schemas: X.names: [string] . X.pwd: password . - - - name: "Object list" + - name: Object list input: | type X { p: [P!]! @@ -65,7 +64,7 @@ schemas: } P.name: string . - - name: "Scalar types" + - name: Scalar types input: | type X { p: Int @@ -107,7 +106,7 @@ schemas: X.v: int . X.vList: [int] . - - name: "enum - always gets an index" + - name: enum - always gets an index input: | type X { e: E @@ -122,8 +121,7 @@ schemas: X.e: string @index(hash) . X.f: [string] @index(hash) . - - - name: "Search indexes are correct" + - name: Search indexes are correct input: | type X { i1: Int @search @@ -231,7 +229,7 @@ schemas: X.e6: string @index(hash, trigram) . X.e7: string @index(exact, trigram) . - - name: "interface and types interact properly" + - name: interface and types interact properly input: | interface A { id: ID! @@ -259,7 +257,7 @@ schemas: } C.dob: dateTime . - - name: "interface using other interface generate type in dgraph" + - name: interface using other interface generate type in dgraph input: | interface A { id: ID! @@ -301,7 +299,7 @@ schemas: D.link: uid . D.correct: bool . - - name: "Schema with union" + - name: Schema with union input: | interface W { f1: ID! @@ -349,7 +347,7 @@ schemas: data: [uid] . V.f6: uid . - - name: "Schema with @dgraph directive." + - name: Schema with @dgraph directive input: | type A @dgraph(type: "dgraph.type.A") { id: ID! @@ -436,7 +434,9 @@ schemas: dgraph.pList: [int] . f: float . - - name: "Schema with multiple language tags, indexes on language tag fields got merged on language untagged field" + - name: + Schema with multiple language tags, indexes on language tag fields got merged on language + untagged field input: | interface Node { f1: String @@ -474,7 +474,7 @@ schemas: Person.address: string @index(fulltext) @lang . Person.profession: string @lang . - - name: "Field with @id directive but no search directive gets hash index." + - name: Field with @id directive but no search directive gets hash index input: | interface A { id: String! @id @@ -493,7 +493,7 @@ schemas: } B.correct: bool @index(bool) . - - name: "Field with @id directive gets hash index." + - name: Field with @id directive gets hash index input: | interface A { id: String! @id @search(by: [trigram]) @@ -512,7 +512,7 @@ schemas: } B.correct: bool @index(bool) . - - name: "Field with @id directive and a hash arg in search directive generates correct schema." + - name: Field with @id directive and a hash arg in search directive generates correct schema input: | interface A { id: String! @id @search(by: ["hash", "term"]) @@ -531,7 +531,7 @@ schemas: } B.correct: bool @index(bool) . - - name: "Field with @id directive and a exact arg in search directive generates correct schema." + - name: Field with @id directive and a exact arg in search directive generates correct schema input: | interface A { id: String! @id @search(by: [exact]) @@ -550,7 +550,7 @@ schemas: } B.correct: bool @index(bool) . - - name: "Field with reverse predicate in dgraph directive adds @reverse to predicate." + - name: Field with reverse predicate in dgraph directive adds @reverse to predicate input: | type Movie { director: [Person] @dgraph(pred: "~directed.movies") @@ -566,7 +566,7 @@ schemas: } directed.movies: [uid] @reverse . - - name: "Field with reverse predicate in dgraph directive where actual predicate comes first." + - name: Field with reverse predicate in dgraph directive where actual predicate comes first input: | type Person { directed: [Movie] @dgraph(pred: "directed.movies") @@ -582,7 +582,7 @@ schemas: type Movie { } - - name: "deprecated fields get included in Dgraph schema" + - name: deprecated fields get included in Dgraph schema input: | type A { id: ID! @@ -597,7 +597,7 @@ schemas: A.p: string . A.q: string . - - name: "remote types shouldn't be part of Dgraph schema" + - name: remote types shouldn't be part of Dgraph schema input: | type B { id: ID! @@ -649,8 +649,8 @@ schemas: } C.name: string . - - name: "fields with same @dgraph(pred: ...) and different @search(by: [...]) have indexes - combined" + - name: + "fields with same @dgraph(pred: ...) and different @search(by: [...]) have indexes combined" input: | type A { p: String @dgraph(pred: "name") @search(by: ["exact", "term"]) @@ -687,7 +687,7 @@ schemas: post: string @index(exact, term) . <公司>: string @index(exact, term) . - - name: "custom query and mutation shouldn't be part of Dgraph schema" + - name: custom query and mutation shouldn't be part of Dgraph schema input: | type User @remote { id: ID! @@ -708,7 +708,7 @@ schemas: }) } - - name: "custom field shouldn't be part of dgraph schema" + - name: custom field shouldn't be part of dgraph schema input: | type User { id: ID! @@ -725,7 +725,7 @@ schemas: } User.name: string . - - name: "Geo field in schema." + - name: Geo field in schema input: | type Hotel { id: ID! @@ -764,7 +764,7 @@ schemas: Hotel.branches2: geo . Hotel.branches3: geo @index(geo) . - - name: "Int field with @id Directive" + - name: Int field with @id Directive input: | type T { id : Int! @id @@ -778,7 +778,7 @@ schemas: T.id: int @index(int) @upsert . T.value: string . - - name: "Int64 field with @id Directive" + - name: Int64 field with @id Directive input: | type T { id : Int64! @id @@ -792,7 +792,7 @@ schemas: T.id: int @index(int) @upsert . T.value: string . - - name: "type extension having @external field of ID type which is @key" + - name: type extension having @external field of ID type which is @key input: | extend type Product @key(fields: "id") { id: ID! @external @@ -810,7 +810,7 @@ schemas: Product.name: string . Product.reviews: [string] . - - name: "type extension having @external field of non ID type which is @key" + - name: type extension having @external field of non ID type which is @key input: | extend type Product @key(fields: "name") { id: ID! @external @@ -825,7 +825,7 @@ schemas: Product.name: string @index(hash) @upsert . Product.reviews: [string] . - - name: "A full valid federation schema" + - name: A full valid federation schema input: | type Review { body: String @@ -873,7 +873,7 @@ schemas: User.username: string . User.reviews: [uid] . - - name: "nothing is added in dgraph schema with lambdaOnMutate" + - name: nothing is added in dgraph schema with lambdaOnMutate input: | type T @lambdaOnMutate(add: true, update: true, delete: true) { id : ID! @@ -884,4 +884,3 @@ schemas: T.value } T.value: string . - diff --git a/graphql/schema/gqlschema_test.yml b/graphql/schema/gqlschema_test.yml index a82500b4426..19fc92afa61 100644 --- a/graphql/schema/gqlschema_test.yml +++ b/graphql/schema/gqlschema_test.yml @@ -1,6 +1,5 @@ invalid_schemas: - - - name: "More than 1 id field" + - name: More than 1 id field input: | type P { id1: ID! @@ -12,7 +11,7 @@ invalid_schemas: {"message":"Type P; is invalid, a type must have atleast one field that is not of ID! type and doesn't have @custom/@lambda directive.", "locations":[{"line":1, "column":6}]} ] - - name: "Geo field with invalid argument in @search." + - name: Geo field with invalid argument in @search input: | type Hotel { id: ID! @@ -24,7 +23,7 @@ invalid_schemas: ] - - name: "UID as a field name" + name: UID as a field name input: | type P { uid: String @@ -34,7 +33,7 @@ invalid_schemas: ] - - name: "Query, Mutation in initial schema" + name: Query, Mutation in initial schema input: | type Query { getAuthor(id: ID): Author! @@ -43,16 +42,16 @@ invalid_schemas: getAuthor(id: ID): Author! } errlist: [ - {"message":"GraphQL Query and Mutation types are only allowed to have fields + {"message": GraphQL Query and Mutation types are only allowed to have fields with @custom/@lambda directive. Other fields are built automatically for you. Found Query getAuthor - without @custom/@lambda.", "locations":[{"line":1, "column":6}]}, - {"message":"GraphQL Query and Mutation types are only allowed to have fields with + without @custom/@lambda., "locations":[{"line":1, "column":6}]}, + {"message":GraphQL Query and Mutation types are only allowed to have fields with @custom/@lambda directive. Other fields are built automatically for you. Found Mutation getAuthor - without @custom/@lambda.", "locations":[{"line":4, "column":6}]}, + without @custom/@lambda., "locations":[{"line":4, "column":6}]}, ] - - name: "No ID list of any kind" + name: No ID list of any kind input: | type A { f: [ID] @@ -64,7 +63,7 @@ invalid_schemas: - - name: "No nested list of any kind" + name: No nested list of any kind input: | type A { f: [[String]] @@ -74,7 +73,7 @@ invalid_schemas: ] - - name: "Enum indexes clash trigram and regexp" + name: Enum indexes clash trigram and regexp input: | type T { f: E @search(by: ["trigram", "regexp"]) @@ -88,7 +87,7 @@ invalid_schemas: ] - - name: "Enum indexes clash hash and exact" + name: Enum indexes clash hash and exact input: | type T { f: E @search(by: ["hash", "exact"]) @@ -101,7 +100,7 @@ invalid_schemas: ] - - name: "HNSW index options malformed" + name: HNSW index options malformed input: | type T { f: [Float!] @embedding @search(by: ["hnsw(metric:dotproduct)"]) @@ -112,17 +111,17 @@ invalid_schemas: ] - - name: "Reference type that is not in input schema" + name: Reference type that is not in input schema input: | type T { f: Author } errlist: [ - {"message": "Undefined type Author.", "locations": [{"line": 2, "column": 8}]} + {"message": Undefined type Author., "locations": [{"line": 2, "column": 8}]} ] - - name: "Unsupported definitions in initial schema" + name: Unsupported definitions in initial schema input: | scalar Int interface P { @@ -133,30 +132,30 @@ invalid_schemas: x: X! } errlist: [ - {"message":"You can't add scalar definitions. Only type, interface, union, input and enums are allowed in initial schema.", "locations":[{"line":1, "column":8}]} + {"message":"You can't add scalar definitions. Only type, interface, union, input and enums are allowed in initial schema.", "locations":[{"line":1, "column":8}]} ] - - name: "union members can't be non-object types - Interface" + name: union members can't be non-object types - Interface input: | interface I { f: String } union U = I errlist: [ - {"message":"UNION type \"I\" must be OBJECT.", "locations":[{"line":4, "column":7}]} + {"message": UNION type \"I\" must be OBJECT., "locations":[{"line":4, "column":7}]} ] - - name: "union members can't be non-object types - Scalar" + name: union members can't be non-object types - Scalar input: | union U = String errlist: [ - {"message":"UNION type \"String\" must be OBJECT.", "locations":[{"line":1, "column":7}]} + {"message": UNION type \"String\" must be OBJECT., "locations":[{"line":1, "column":7}]} ] - - name: "union members can't be non-object types - Enum" + name: union members can't be non-object types - Enum input: | enum E { E1 @@ -164,18 +163,18 @@ invalid_schemas: } union U = E errlist: [ - {"message":"UNION type \"E\" must be OBJECT.", "locations":[{"line":5, "column":7}]} + {"message": UNION type \"E\" must be OBJECT., "locations":[{"line":5, "column":7}]} ] - - name: "union members can't be non-object types - Input Object" + name: union members can't be non-object types - Input Object input: | input I { f: String } union U = I errlist: [ - {"message":"UNION type \"I\" must be OBJECT.", "locations":[{"line":4, "column":7}]} + {"message": UNION type \"I\" must be OBJECT., "locations":[{"line":4, "column":7}]} ] - @@ -193,7 +192,7 @@ invalid_schemas: ] - - name: "union can't be used with @withSubscription" + name: union can't be used with @withSubscription input: | type X { f1: String @@ -207,7 +206,7 @@ invalid_schemas: ] - - name: "union can't be used with @secret" + name: union can't be used with @secret input: | type X { f1: String @@ -221,7 +220,7 @@ invalid_schemas: ] - - name: "union can't be used with @auth" + name: union can't be used with @auth input: | type X { f1: String @@ -235,7 +234,7 @@ invalid_schemas: ] - - name: "union can't be used with @hasInverse, @search, @id" + name: union can't be used with @hasInverse, @search, @id input: | type X { f1: String @@ -254,7 +253,7 @@ invalid_schemas: ] - - name: "Typename is reserved word" + name: Typename is reserved word input: | type String { id: ID! @@ -281,7 +280,7 @@ invalid_schemas: {"message":"uid is a reserved word, so you can't declare a type with this name. Pick a different name for the type.", "locations":[{"line":14, "column":6}]}, ] - - name: "Point is reserved word" + - name: Point is reserved word input: | type Point { id: ID! @@ -291,7 +290,7 @@ invalid_schemas: ] - - name: "More than 1 errors" + name: More than 1 errors input: | type X { i1: ID! @@ -306,7 +305,7 @@ invalid_schemas: ] - - name: "Non linking inverse directive with correct field type" + name: Non linking inverse directive with correct field type input: | type Post { author: Author! @hasInverse(field: "posts") @@ -320,7 +319,7 @@ invalid_schemas: ] - - name: "Multiple hasInverse to one field" + name: Multiple hasInverse to one field input: | type Post { author: Author! @hasInverse(field: "posts") @@ -335,7 +334,7 @@ invalid_schemas: ] - - name: "Non linking inverse directives" + name: Non linking inverse directives input: | type X { f1: P @hasInverse(field: "f1") @@ -350,7 +349,7 @@ invalid_schemas: ] - - name: "Inverse Directive on non object field" + name: Inverse Directive on non object field input: | type X { f1: String @hasInverse(field: "f1") @@ -360,7 +359,7 @@ invalid_schemas: ] - - name: "Inverse Directive doesn't have field argument" + name: Inverse Directive doesn't have field argument input: | type X { f1: X @hasInverse @@ -370,7 +369,7 @@ invalid_schemas: ] - - name: "hasInverse on non existing field" + name: hasInverse on non existing field input: | type X { f1: [P!]! @hasInverse(field: "f2") @@ -383,7 +382,7 @@ invalid_schemas: ] - - name: "ID can't have the @search directive" + name: ID can't have the @search directive input: | type X { id: ID! @search @@ -404,7 +403,7 @@ invalid_schemas: ] - - name: "Search will error on type that can't have the @search" + name: Search will error on type that can't have the @search input: | type X { y: Y @search @@ -419,7 +418,7 @@ invalid_schemas: ] - - name: "Search (with arg) will error that can't have the @search" + name: Search (with arg) will error that can't have the @search input: | type X { y: Y @search(by: [term]) @@ -435,7 +434,7 @@ invalid_schemas: ] - - name: "Search with wrong arg with error on default search type" + name: Search with wrong arg with error on default search type input: | type X { y: Int @search(by: [term]) @@ -448,7 +447,7 @@ invalid_schemas: ] - - name: "Search with wrong arg (int) with error on default search type (Int64)" + name: Search with wrong arg (int) with error on default search type (Int64) input: | type X { y: Int64 @search(by: [int]) @@ -461,7 +460,7 @@ invalid_schemas: ] - - name: "Search with wrong arg with error on search type" + name: Search with wrong arg with error on search type input: | type X { y: String @search(by: [day]) @@ -474,7 +473,7 @@ invalid_schemas: ] - - name: "Search with wrong arg for the index" + name: Search with wrong arg for the index input: | type X { y: String @search(by: ["hash", "hour"]) @@ -487,7 +486,7 @@ invalid_schemas: ] - - name: "Search without []" + name: Search without [] input: | type X { y: String @search(by: "hash") @@ -499,7 +498,7 @@ invalid_schemas: ] - - name: "Search doesn't allow hash and exact together" + name: Search doesn't allow hash and exact together input: | type X { y: String @search(by: ["hash", "exact"]) @@ -511,7 +510,7 @@ invalid_schemas: ] - - name: "Search with multiple datetime index" + name: Search with multiple datetime index input: | type X { y: DateTime @search(by: ["hour", "month"]) @@ -523,7 +522,7 @@ invalid_schemas: ] - - name: "Search doesn't allow trigram and regexp together" + name: Search doesn't allow trigram and regexp together input: | type X { y: String @search(by: ["trigram", "regexp"]) @@ -535,7 +534,7 @@ invalid_schemas: ] - - name: "Search doesn't accept bogus args" + name: Search doesn't accept bogus args input: | type X { y: String @search(by: ["bogus"]) @@ -547,7 +546,7 @@ invalid_schemas: ] - - name: "Type implements an interface which wasn't defined" + name: Type implements an interface which wasn't defined input: | type X implements Y { y: String @@ -558,7 +557,7 @@ invalid_schemas: ] - - name: "Type implements an interface with the field name repeated but different type" + name: Type implements an interface with the field name repeated but different type input: | interface Y { id: ID @@ -568,12 +567,12 @@ invalid_schemas: y: String } errlist: [ - {"message": "For type X to implement interface Y the field id must have type ID", + {"message": For type X to implement interface Y the field id must have type ID, "locations":[{"line":4, "column":6}]} ] - - name: "Type implements an interface with no field of its own" + name: Type implements an interface with no field of its own input: | interface Y { id: ID @@ -586,7 +585,7 @@ invalid_schemas: ] - - name: "Type implements from two interfaces where both have ID with different type" + name: Type implements from two interfaces where both have ID with different type input: | interface X { id: ID! @@ -598,12 +597,12 @@ invalid_schemas: name: String } errlist: [ - {"message": "field id is of type ID in interface Y and is of type ID! in interface X", + {"message": field id is of type ID in interface Y and is of type ID! in interface X, "locations":[{"line":7, "column":6}]} ] - - name: "List of Boolean is not allowed" + name: List of Boolean is not allowed input: | type X { q: [Boolean] @@ -614,7 +613,7 @@ invalid_schemas: ] - - name: "ID field can't have @dgraph directive" + name: ID field can't have @dgraph directive input: | type X { id: ID @dgraph(pred: "X.id") @@ -627,7 +626,7 @@ invalid_schemas: ] - - name: "Field with @id directive has wrong type" + name: Field with @id directive has wrong type input: | type X { f1: [String] @id @@ -649,7 +648,7 @@ invalid_schemas: ] - - name: "Dgraph directive with wrong argument produces an error" + name: Dgraph directive with wrong argument produces an error input: | type X { f1: String! @dgraph(type: "f1") @@ -661,7 +660,7 @@ invalid_schemas: ] - - name: "Dgraph directive with no argument on field produces an error" + name: Dgraph directive with no argument on field produces an error input: | type X { f1: String! @dgraph @@ -673,7 +672,7 @@ invalid_schemas: ] - - name: "Dgraph directive with wrong argument type on field produces an error" + name: Dgraph directive with wrong argument type on field produces an error input: | type X { f1: String! @dgraph(pred: 2) @@ -684,40 +683,39 @@ invalid_schemas: ] - - name: "Dgraph directive with wrong argument on type produces an error" + name: Dgraph directive with wrong argument on type produces an error input: | type X @dgraph(pred: "X") { f1: String! } errlist: [ - {"message": "Type X; type argument for @dgraph directive should not be empty.", + {"message": Type X; type argument for @dgraph directive should not be empty., "locations":[{"line":1, "column":9}]} ] - - - name: "Dgraph directive with no argument on type produces an error" + - name: Dgraph directive with no argument on type produces an error input: | type X @dgraph { f1: String! } errlist: [ - {"message": "Type X; type argument for @dgraph directive should not be empty.", + {"message": Type X; type argument for @dgraph directive should not be empty., "locations":[{"line":1, "column":9}]} ] - - name: "Dgraph directive with wrong argument type on type produces an error" + name: Dgraph directive with wrong argument type on type produces an error input: | type X @dgraph(type: 2) { f1: String! } errlist: [ - {"message": "Type X; type argument for @dgraph directive should of type String.", + {"message": Type X; type argument for @dgraph directive should of type String., "locations":[{"line":1, "column":9}]} ] - - name: "Dgraph directive with reverse pred argument on scalar field produces an error" + name: Dgraph directive with reverse pred argument on scalar field produces an error input: | type X { f1: String! @dgraph(pred:"~movie") @@ -733,7 +731,7 @@ invalid_schemas: ] - - name: "Dgraph directive with reverse pred argument on field without a corresponding reverse field is an error" + name: Dgraph directive with reverse pred argument on field without a corresponding reverse field is an error input: | type Y { g1: String! @@ -748,7 +746,7 @@ invalid_schemas: ] - - name: "Dgraph directive with reverse pred argument along with hasInverse produces an error" + name: Dgraph directive with reverse pred argument along with hasInverse produces an error input: | type X { f1: [Y] @dgraph(pred: "f1") @@ -763,8 +761,8 @@ invalid_schemas: ] - - name: "Dgraph directive with reverse pred argument along with hasInverse in forward direction - produces an error" + name: Dgraph directive with reverse pred argument along with hasInverse in forward direction + produces an error input: | type X { f1: [Y] @dgraph(pred: "f1") @hasInverse(field: "f1") @@ -779,7 +777,7 @@ invalid_schemas: ] - - name: "Dgraph directive with reverse pred argument matching with wrong type produces an error" + name: Dgraph directive with reverse pred argument matching with wrong type produces an error input: | type Z { f1: String! @@ -797,7 +795,7 @@ invalid_schemas: ] - - name: "Dgraph directive with reverse pred argument matching with wrong type implementing an interface produces an error" + name: Dgraph directive with reverse pred argument matching with wrong type implementing an interface produces an error input: | type Z { f1: String! @@ -820,7 +818,7 @@ invalid_schemas: ] - - name: "Dgraph directive with reverse pred argument matching with wrong type implementing multiple interfaces produces an error" + name: Dgraph directive with reverse pred argument matching with wrong type implementing multiple interfaces produces an error input: | type Z { f1: String! @@ -847,7 +845,7 @@ invalid_schemas: ] - - name: "Field with a dgraph directive with reverse pred argument should be a list" + name: Field with a dgraph directive with reverse pred argument should be a list input: | type X { f1: [Y] @dgraph(pred: "f1") @@ -863,18 +861,18 @@ invalid_schemas: - - name: "Empty field in secret directive" + name: Empty field in secret directive input: | type X @secret(field:""){ f1: String! } errlist: [ - {"message": "Type X; Argument \"field\" of secret directive is empty", + {"message": Type X; Argument \"field\" of secret directive is empty, "locations":[{"line":1, "column":6}]}, ] - - name: "Multiple secret directive" + name: Multiple secret directive input: | type X @secret(field:"password") @secret(field: "psss"){ f1: String! @@ -884,14 +882,14 @@ invalid_schemas: "locations":[{"line":1, "column":6}]}, ] - - name: "Conflicting secret directive and field" + - name: Conflicting secret directive and field input: | type X @secret(field:"f1"){ f1: String! } errlist: [ - {"message": "Type X; has a secret directive and field of the same name f1", - "locations":[{"line":1, "column":6}]}, + {"message": Type X; has a secret directive and field of the same name f1, + "locations":[{"line":1, "column":6}]}, ] - @@ -921,24 +919,25 @@ invalid_schemas: f10: String @dgraph(pred: "pwd") } errlist: [ - {"message": "Type X; implements interfaces [V W], all of which have fields with @dgraph predicate: ff1. These fields must use different Dgraph predicates.", - "locations":[{"line":10, "column":6}]}, - {"message": "Type X; Field f9: has the @dgraph directive, which conflicts with interface W; field f4, that this type implements. These fields must use different Dgraph predicates.", - "locations":[{"line":14, "column":3}]}, - {"message": "Type Y; Field f2: has type Int, which is different to type W; field f2, which has the same @dgraph directive but type String. These fields must have either the same GraphQL types, or use different Dgraph predicates.", - "locations":[{"line":17, "column":3}]}, - {"message": "Type Y; Field f3: has type Float, which is different to type W; field f3, which has the same @dgraph directive but type [Float]. These fields must have either the same GraphQL types, or use different Dgraph predicates.", - "locations":[{"line":18, "column":3}]}, - {"message": "Type Y; Field f6: has type X, which is different to type X; field f6, which has the same @dgraph directive but type Y. These fields must have either the same GraphQL types, or use different Dgraph predicates.", - "locations":[{"line":19, "column":3}]}, - {"message": "Type Y; Field f7: doesn't have @id directive, which conflicts with type X; field f7, which has the same @dgraph directive along with @id directive. Both these fields must either use @id directive, or use different Dgraph predicates.", - "locations":[{"line":20, "column":3}]}, - {"message": "Type Y; Field f8: has type Int, which is different to type X; field f8, which has the same @dgraph directive but type String. These fields must have either the same GraphQL types, or use different Dgraph predicates.", - "locations":[{"line":21, "column":3}]}, - {"message": "Type Y; Field f10: has the @dgraph predicate, but that conflicts with type W @secret directive on the same predicate. @secret predicates are stored encrypted and so the same predicate can't be used as a String.", - "locations":[{"line":22, "column":3}]}] + {"message": "Type X; implements interfaces [V W], all of which have fields with @dgraph predicate: ff1. These fields must use different Dgraph predicates.", + "locations":[{"line":10, "column":6}]}, + {"message": "Type X; Field f9: has the @dgraph directive, which conflicts with interface W; field f4, that this type implements. These fields must use different Dgraph predicates.", + "locations":[{"line":14, "column":3}]}, + {"message": "Type Y; Field f2: has type Int, which is different to type W; field f2, which has the same @dgraph directive but type String. These fields must have either the same GraphQL types, or use different Dgraph predicates.", + "locations":[{"line":17, "column":3}]}, + {"message": "Type Y; Field f3: has type Float, which is different to type W; field f3, which has the same @dgraph directive but type [Float]. These fields must have either the same GraphQL types, or use different Dgraph predicates.", + "locations":[{"line":18, "column":3}]}, + {"message": "Type Y; Field f6: has type X, which is different to type X; field f6, which has the same @dgraph directive but type Y. These fields must have either the same GraphQL types, or use different Dgraph predicates.", + "locations":[{"line":19, "column":3}]}, + {"message": "Type Y; Field f7: doesn't have @id directive, which conflicts with type X; field f7, which has the same @dgraph directive along with @id directive. Both these fields must either use @id directive, or use different Dgraph predicates.", + "locations":[{"line":20, "column":3}]}, + {"message": "Type Y; Field f8: has type Int, which is different to type X; field f8, which has the same @dgraph directive but type String. These fields must have either the same GraphQL types, or use different Dgraph predicates.", + "locations":[{"line":21, "column":3}]}, + {"message": "Type Y; Field f10: has the @dgraph predicate, but that conflicts with type W @secret directive on the same predicate. @secret predicates are stored encrypted and so the same predicate can't be used as a String.", + "locations":[{"line":22, "column":3}]} + ] - - name: "user-defined types can't have same name as the types generated for other user-defined types or any inbuilt types" + - name: user-defined types can't have same name as the types generated for other user-defined types or any inbuilt types input: | type Author { id: ID! @@ -956,9 +955,9 @@ invalid_schemas: name: String } errlist: [ - {"message": "UpdateAuthorInput is a reserved word, so you can't declare a INPUT_OBJECT with this name. Pick a different name for the INPUT_OBJECT.", "locations":[{"line":5, "column":7}]}, - {"message": "URef is a reserved word, so you can't declare a INPUT_OBJECT with this name. Pick a different name for the INPUT_OBJECT.", "locations":[{"line":10, "column":7}]}, - {"message": "IntFilter is a reserved word, so you can't declare a OBJECT with this name. Pick a different name for the OBJECT.", "locations":[{"line":13, "column":6}]}, + {"message": "UpdateAuthorInput is a reserved word, so you can't declare a INPUT_OBJECT with this name. Pick a different name for the INPUT_OBJECT.", "locations":[{"line":5, "column":7}]}, + {"message": "URef is a reserved word, so you can't declare a INPUT_OBJECT with this name. Pick a different name for the INPUT_OBJECT.", "locations":[{"line":10, "column":7}]}, + {"message": "IntFilter is a reserved word, so you can't declare a OBJECT with this name. Pick a different name for the OBJECT.", "locations":[{"line":13, "column":6}]}, ] - name: "@custom query can't have same name as the query generated for other types" @@ -972,8 +971,8 @@ invalid_schemas: getAuthor(id: ID): Author! @custom(http: {url: "http://blah.com", method: "GET"}) } errlist: [ - {"message": "getAuthor is a reserved word, so you can't declare a query with this name. Pick a different name for the query.", - "locations":[{"line":7, "column":3}]}, + {"message": "getAuthor is a reserved word, so you can't declare a query with this name. Pick a different name for the query.", + "locations":[{"line":7, "column":3}]}, ] - name: "@custom mutation can't have same name as the mutation generated for other types" @@ -987,8 +986,8 @@ invalid_schemas: addAuthor(id: ID): Author! @custom(http: {url: "http://blah.com", method: "GET"}) } errlist: [ - {"message": "addAuthor is a reserved word, so you can't declare a mutation with this name. Pick a different name for the mutation.", - "locations":[{"line":7, "column":3}]}, + {"message": "addAuthor is a reserved word, so you can't declare a mutation with this name. Pick a different name for the mutation.", + "locations":[{"line":7, "column":3}]}, ] - name: "@custom directive with extra arguments" @@ -1002,8 +1001,8 @@ invalid_schemas: getAuthor1(id: ID): Author! @custom(http: {url: "blah.com", method: "GET"}, dql: "random") } errlist: [ - {"message": "Type Query; Field getAuthor1: has 2 arguments for @custom directive, it should contain exactly one of `http` or `dql` arguments.", - "locations":[{"line":7, "column":32}]}, + {"message": "Type Query; Field getAuthor1: has 2 arguments for @custom directive, it should contain exactly one of `http` or `dql` arguments.", + "locations":[{"line":7, "column":32}]}, ] - name: "@custom directive without http or dql argument" @@ -1017,7 +1016,7 @@ invalid_schemas: getAuthor1(id: ID): Author! @custom(https: {url: "blah.com", method: "GET"}) } errlist: [ - {"message": "https is not supported as an argument for custom directive.", + {"message": https is not supported as an argument for custom directive., "locations":[{"line":7, "column":32}]}, ] @@ -1033,8 +1032,8 @@ invalid_schemas: dql: "{me(func: uid(0x1))}") } errlist: [ - {"message": "Type Query; Field getAuthor1: has 2 arguments for @custom directive, it should contain exactly one of `http` or `dql` arguments.", - "locations":[{"line":7, "column":32}]}, + {"message": "Type Query; Field getAuthor1: has 2 arguments for @custom directive, it should contain exactly one of `http` or `dql` arguments.", + "locations":[{"line":7, "column":32}]}, ] - @@ -1052,9 +1051,9 @@ invalid_schemas: """) } errlist: [ - {"message": "Type Author; Field name: @custom directive with `dql` can be used only on - queries.", - "locations": [{"line": 4,"column": 25}]} + {"message": "Type Author; Field name: @custom directive with `dql` can be used only on + queries.", + "locations": [{"line": 4,"column": 25}]} ] - @@ -1070,8 +1069,8 @@ invalid_schemas: """) } errlist: [ - {"message": "Type Mutation; Field customMutation: @custom directive with `dql` can be used only on queries.", - "locations": [{"line": 2,"column": 35}]} + {"message": "Type Mutation; Field customMutation: @custom directive with `dql` can be used only on queries.", + "locations": [{"line": 2,"column": 35}]} ] - @@ -1081,8 +1080,8 @@ invalid_schemas: query1: String! @custom(dql: 5) } errlist: [ - {"message": "Type Query; Field query1: dql argument for @custom directive must be of type String.", - "locations": [{"line": 2,"column": 27}]} + {"message": "Type Query; Field query1: dql argument for @custom directive must be of type String.", + "locations": [{"line": 2,"column": 27}]} ] - @@ -1092,8 +1091,8 @@ invalid_schemas: query1: String! @custom(dql: " ") } errlist: [ - {"message": "Type Query; Field query1: dql argument for @custom directive must not be empty.", - "locations": [{"line": 2,"column": 27}]} + {"message": "Type Query; Field query1: dql argument for @custom directive must not be empty.", + "locations": [{"line": 2,"column": 27}]} ] - @@ -1109,8 +1108,8 @@ invalid_schemas: """) } errlist: [ - {"message": "Type Query; Field query1: Argument arg1: must be of a scalar type. @custom DQL queries accept only scalar arguments.", - "locations": [{"line": 2,"column": 43}]} + {"message": "Type Query; Field query1: Argument arg1: must be of a scalar type. @custom DQL queries accept only scalar arguments.", + "locations": [{"line": 2,"column": 43}]} ] - @@ -1125,7 +1124,7 @@ invalid_schemas: getAuthor1(id: ID): Author! @custom(http: {url: "123", method: "GET"}) } errlist: [ - {"message": "Type Query; Field getAuthor1; url field inside @custom directive is invalid.", + {"message": Type Query; Field getAuthor1; url field inside @custom directive is invalid., "locations":[{"line":7, "column":52}]}, ] @@ -1141,7 +1140,7 @@ invalid_schemas: getAuthor1(id: ID): Author! @custom(http: {url: "http://google.com/$idm", method: "GET"}) } errlist: [ - {"message": "Type Query; Field getAuthor1; url path inside @custom directive uses an argument idm that is not defined.", + {"message": Type Query; Field getAuthor1; url path inside @custom directive uses an argument idm that is not defined., "locations":[{"line":7, "column":52}]}, ] @@ -1157,7 +1156,7 @@ invalid_schemas: getAuthor1(id: ID): Author! @custom(http: {url: "http://google.com/$id", method: "GET"}) } errlist: [ - {"message": "Type Query; Field getAuthor1; url path inside @custom directive uses an argument id that can be null.", + {"message": Type Query; Field getAuthor1; url path inside @custom directive uses an argument id that can be null., "locations":[{"line":7, "column":52}]}, ] @@ -1173,7 +1172,7 @@ invalid_schemas: getAuthor1(id: ID): Author! @custom(http: {url: "http://google.com?a=$idm", method: "GET"}) } errlist: [ - {"message": "Type Query; Field getAuthor1; url query inside @custom directive uses an argument idm that is not defined.", + {"message": Type Query; Field getAuthor1; url query inside @custom directive uses an argument idm that is not defined., "locations":[{"line":7, "column":52}]}, ] @@ -1189,7 +1188,7 @@ invalid_schemas: getAuthor1(id: ID): Author! @custom(http: {url: "http://google.com/", method: "GETS"}) } errlist: [ - {"message": "Type Query; Field getAuthor1; method field inside @custom directive can only be GET/POST/PUT/PATCH/DELETE.", + {"message": Type Query; Field getAuthor1; method field inside @custom directive can only be GET/POST/PUT/PATCH/DELETE., "locations":[{"line":7, "column":82}]}, ] @@ -1205,7 +1204,7 @@ invalid_schemas: getAuthor1(id: ID): Author! @custom(http: {url: "http://google.com/", method: "GET", mode: SINGLE}) } errlist: [ - {"message": "Type Query; Field getAuthor1; mode field inside @custom directive can't be present on Query/Mutation.", + {"message": Type Query; Field getAuthor1; mode field inside @custom directive can't be present on Query/Mutation., "locations":[{"line":7, "column":94}]}, ] @@ -1223,7 +1222,7 @@ invalid_schemas: author: Author! @custom(http: {url: "http://google.com/", method: "GET", mode: RANDOM}) } errlist: [ - {"message": "Type Post; Field author; mode field inside @custom directive can only be SINGLE/BATCH.", + {"message": Type Post; Field author; mode field inside @custom directive can only be SINGLE/BATCH., "locations":[{"line":9, "column":82}]}, ] @@ -1346,7 +1345,7 @@ invalid_schemas: }) } errlist: [ - {"message": "Type Query; Field getAuthor1; body template inside @custom directive uses an argument idm that is not defined.", + {"message": Type Query; Field getAuthor1; body template inside @custom directive uses an argument idm that is not defined., "locations":[{"line":10, "column":12}]}, ] @@ -1653,7 +1652,7 @@ invalid_schemas: } errlist: [ { - "message": "Type Author; Field id; custom directive not allowed on field of type ID! or field with @id directive.", + "message": Type Author; Field id; custom directive not allowed on field of type ID! or field with @id directive., "locations": [ { "line": 2, @@ -1694,7 +1693,7 @@ invalid_schemas: bar: String } errlist: [ - {"message": "Type Author; Field name; custom directive not allowed on field of type ID! or field with @id directive.", + {"message": Type Author; Field name; custom directive not allowed on field of type ID! or field with @id directive., "locations":[{"line":3, "column":22}]}, ] @@ -2003,7 +2002,7 @@ invalid_schemas: } errlist: [ { - "message": "Type Author; Field name; @custom directive is only allowed on fields where the type definition has a field with type ID! or a field with @id directive.", + "message": Type Author; Field name; @custom directive is only allowed on fields where the type definition has a field with type ID! or a field with @id directive., "locations": [ { "line": 3, @@ -2044,7 +2043,7 @@ invalid_schemas: bar: String } errlist: [ - {"message": "Type Author; Field name; custom directive not allowed along with @search directive.", + {"message": Type Author; Field name; custom directive not allowed along with @search directive., "locations":[{"line":3, "column":26}]}, ] @@ -2061,7 +2060,7 @@ invalid_schemas: bar: String } errlist: [ - {"message": "Type Author; Field name; custom directive not allowed along with @dgraph directive.", + {"message": Type Author; Field name; custom directive not allowed along with @dgraph directive., "locations":[{"line":3, "column":39}]}, ] @@ -2079,7 +2078,7 @@ invalid_schemas: } errlist: [ { - "message": "Type Author; Field name; url path inside @custom directive uses a field fooz that is not defined.", + "message": Type Author; Field name; url path inside @custom directive uses a field fooz that is not defined., "locations": [ { "line": 5, @@ -2088,7 +2087,7 @@ invalid_schemas: ] }, { - "message": "Type Author; Field name; url path inside @custom directive uses a field bar that can be null.", + "message": Type Author; Field name; url path inside @custom directive uses a field bar that can be null., "locations": [ { "line": 5, @@ -2113,7 +2112,7 @@ invalid_schemas: } errlist: [ { - "message": "Type Author; Field name; url path inside @custom directive uses a field foo that can be null.", + "message": Type Author; Field name; url path inside @custom directive uses a field foo that can be null., "locations": [ { "line": 6, @@ -2122,7 +2121,7 @@ invalid_schemas: ] }, { - "message": "Type Author; Field name; url path inside @custom directive uses a field bar that can be null.", + "message": Type Author; Field name; url path inside @custom directive uses a field bar that can be null., "locations": [ { "line": 6, @@ -2243,7 +2242,7 @@ invalid_schemas: }) } errlist: [ - {"message": "Type Author; Field name; url query inside @custom directive uses a field fooz that is not defined.", + {"message": Type Author; Field name; url query inside @custom directive uses a field fooz that is not defined., "locations":[{"line":5, "column":11}]}, ] @@ -2254,7 +2253,7 @@ invalid_schemas: userRole: String @search(by: [hash]) } errlist: [ - {"message": "Directive auth is not applicable on FIELD_DEFINITION.", + {"message": Directive auth is not applicable on FIELD_DEFINITION., "locations":[{"line":2, "column":26}]}, ] @@ -2276,7 +2275,7 @@ invalid_schemas: }) } errlist: [ - {"message": "Type Class; cannot have both @auth and @remote directive", + {"message": Type Class; cannot have both @auth and @remote directive, "locations":[{"line":1, "column":6}]}, ] @@ -2298,7 +2297,7 @@ invalid_schemas: }) } errlist: [ - {"message": "Type Class; cannot have both @withSubscription and @remote directive", + {"message": Type Class; cannot have both @withSubscription and @remote directive, "locations":[{"line":1, "column":6}]}, ] @@ -2411,7 +2410,7 @@ invalid_schemas: ] - - name: "invalid value for skip introspection" + name: invalid value for skip introspection input: | type Author { id: ID! @@ -2437,7 +2436,7 @@ invalid_schemas: ] - - name: "type can't just have ID! type field" + name: type can't just have ID! type field input: | type Author { id: ID! @@ -2449,7 +2448,7 @@ invalid_schemas: ] - - name: "types must have field which is not of ID! type and doesn't have @custom directive" + name: types must have field which is not of ID! type and doesn't have @custom directive input: | type Author { id: ID! @@ -2465,7 +2464,7 @@ invalid_schemas: "locations":[{"line":1, "column":6}]}, ] - - name: "There shoudnt be any reserved arguments on any field" + - name: There shoudnt be any reserved arguments on any field input: | type T { f(first: Int): String @@ -2473,9 +2472,8 @@ invalid_schemas: errlist: [ {"message": "Type T; Field f: can't have first as an argument because it is a reserved argument.", "locations": [{"line": 2, "column": 3}]}] - - name: "remote type with @custom directives on fields shouldn't be allowed." - description: "Remote types are not resolved further currently, hence they shouldn't have - fields with @custom directive on them." + - name: remote type with @custom directives on fields shouldn't be allowed + description: Remote types are not resolved further currently, hence they shouldn't have fields with @custom directive on them. input: | type User { id: ID! @@ -2492,14 +2490,13 @@ invalid_schemas: }) } errlist: [ - {"message": "Type School; field name; can't have @custom/@lambda directive as a @remote - type can't have fields with @custom/@lambda directive.", "locations": [{"line":9, "column":3}]} + {"message": Type School; field name; can't have @custom/@lambda directive as a @remote + type can't have fields with @custom/@lambda directive., "locations": [{"line":9, "column":3}]} ] - - name: "a non-remote type can't have fields which are of remote type" - description: "This is disallowed because we don't generate UserRef etc., so we can't - allow adding/updating user from author." + name: a non-remote type can't have fields which are of remote type + description: This is disallowed because we don't generate UserRef etc., so we can't allow adding/updating user from author input: | type User @remote { id: ID! @@ -2512,15 +2509,14 @@ invalid_schemas: neighbour: [User!] } errlist: [ - {"message": "Type Author; field neighbour; is of a type that has @remote directive. Those - would need to be resolved by a @custom/@lambda directive.", + {"message": Type Author; field neighbour; is of a type that has @remote directive. Those + would need to be resolved by a @custom/@lambda directive., "locations": [{"line":9, "column":3}]} ] - - name: "a remote type can't implement a non-remote interface" - description: "Since we won't be adding/update the remote type, it wouldn't show up in - getPerson, queryPerson etc., hence causing confusion." + name: a remote type can't implement a non-remote interface + description: Since we won't be adding/update the remote type, it wouldn't show up in getPerson, queryPerson etc., hence causing confusion. input: | interface Person { id: ID! @@ -2530,15 +2526,14 @@ invalid_schemas: age: Int! } errlist: [ - {"message": "Type User; with @remote directive implements interface Person; which doesn't have - @remote directive.", + {"message": Type User; with @remote directive implements interface Person; which doesn't have + @remote directive., "locations": [{"line":5, "column":6}]} ] - - name: "non-remote type can't implement a remote type" - description: "Dgraph schema generation and possibly the way we do field mapping would have to - be re-worked to make this work correctly." + name: non-remote type can't implement a remote type + description: Dgraph schema generation and possibly the way we do field mapping would have to be re-worked to make this work correctly input: | interface Person @remote { id: ID! @@ -2548,12 +2543,12 @@ invalid_schemas: age: Int! } errlist: [ - {"message": "Type User; without @remote directive can't implement an interface Person; with - have @remote directive.", + {"message": Type User; without @remote directive can't implement an interface Person; with + have @remote directive., "locations": [{"line":5, "column":6}]} ] - - name: "ID field can't have @dgraph directive and @search directive" + - name: ID field can't have @dgraph directive and @search directive input: | type X { id: ID @dgraph(pred: "X.id") @search @@ -2604,7 +2599,7 @@ invalid_schemas: ] - - name: "as is reserved keyword - type Name" + name: as is reserved keyword - type Name input: | type As { id: ID! @@ -2614,7 +2609,7 @@ invalid_schemas: { "message": "As is a reserved word, so you can't declare a type with this name. Pick a different name for the type.", "locations": [ { "line": 1, "column": 6 } ] }, ] - - name: "as is reserved keyword - field name" + - name: as is reserved keyword - field name input: | type X { as: ID! @@ -2624,17 +2619,17 @@ invalid_schemas: { "message": "Type X; Field as: as is a reserved keyword and you cannot declare a field with this name.", "locations": [ { "line": 2, "column": 3 } ] }, ] - - name: "as is reserved keyword - type name using @dgraph directive" + - name: as is reserved keyword - type name using @dgraph directive input: | type X @dgraph(type:"as") { id: ID! name: String } errlist: [ - { "message": "Type X; type argument 'as' for @dgraph directive is a reserved keyword.", "locations": [ { "line": 1, "column": 9 } ] }, + { "message": Type X; type argument 'as' for @dgraph directive is a reserved keyword., "locations": [ { "line": 1, "column": 9 } ] }, ] - - name: "as is reserved keyword - field name using @dgraph directive" + - name: as is reserved keyword - field name using @dgraph directive input: | type X { id: ID! @@ -2644,7 +2639,7 @@ invalid_schemas: { "message": "Type X; Field name: pred argument 'as' for @dgraph directive is a reserved keyword.", "locations": [ { "line": 3, "column": 17 } ] }, ] - - name: "field type mismatched between implementation and interface" + - name: field type mismatched between implementation and interface input: | interface I1 { name: String! @@ -2653,10 +2648,10 @@ invalid_schemas: name:String } errlist: [ - { "message": "For type I3 to implement interface I1 the field name must have type String!", "locations": [ { "line": 4, "column": 6 } ] }, + { "message": For type I3 to implement interface I1 the field name must have type String!, "locations": [ { "line": 4, "column": 6 } ] }, ] - - name: "Type implements multiple interfaces with same field name" + - name: Type implements multiple interfaces with same field name input: | interface I1 { name: String! @@ -2668,7 +2663,7 @@ invalid_schemas: name:String! } errlist: [ - { "message": "Field I3.name can only be defined once.", "locations": [ { "line": 2, "column": 5 } ] }, + { "message": Field I3.name can only be defined once., "locations": [ { "line": 2, "column": 5 } ] }, ] - name: "@external directive can only be used on fields of Type Extension" @@ -2689,10 +2684,10 @@ invalid_schemas: reviews: String } errlist: [ - { "message": "Type Product; @key directive should not be defined more than once.", "locations": [ { "line": 1, "column": 34 } ] }, + { "message": Type Product; @key directive should not be defined more than once., "locations": [ { "line": 1, "column": 34 } ] }, ] - - name: "Argument inside @key directive uses field not defined in the type" + - name: Argument inside @key directive uses field not defined in the type input: | type Product @key(fields: "username") { id: ID! @@ -2700,10 +2695,10 @@ invalid_schemas: reviews: String } errlist: [ - { "message": "Type Product; @key directive uses a field username which is not defined inside the type.", "locations": [ { "line": 1, "column":19 } ] }, + { "message": Type Product; @key directive uses a field username which is not defined inside the type., "locations": [ { "line": 1, "column":19 } ] }, ] - - name: "Argument inside @key directive must have ID field or field with @id directive" + - name: Argument inside @key directive must have ID field or field with @id directive input: | extend type Product @key(fields: "name") { id: ID! @external @@ -2727,7 +2722,7 @@ invalid_schemas: review: String! } errlist: [ - {"message": "Type Product; Type Extension cannot be defined without @key directive", "locations": [ { "line": 13, "column": 12} ] }, + {"message": Type Product; Type Extension cannot be defined without @key directive, "locations": [ { "line": 13, "column": 12} ] }, ] - name: "@remote directive with @key" @@ -2743,10 +2738,10 @@ invalid_schemas: review: String! } errlist: [ - {"message": "Type Product; @remote directive cannot be defined with @key directive", "locations": [ { "line": 181, "column": 12} ] }, + {"message": Type Product; @remote directive cannot be defined with @key directive, "locations": [ { "line": 181, "column": 12} ] }, ] - - name: "directives defined on @external fields that are not @key." + - name: directives defined on @external fields that are not @key. input: | extend type Product @key(fields: "id"){ id: ID! @external @@ -2800,7 +2795,7 @@ invalid_schemas: {"message": "Type Product: Field reviews: @requires directive can only be defined on fields in type extensions. i.e., the type must have `@extends` or use `extend` keyword.", "locations": [ { "line": 4, "column": 23} ] } ] - - name: "argument inside @requires directive is not an @external field." + - name: argument inside @requires directive is not an @external field. input: | extend type Product @key(fields: "id"){ id: ID! @external @@ -2812,7 +2807,7 @@ invalid_schemas: review: String! } errlist: [ - {"message": "Type Product; Field name must be @external.", "locations": [ { "line": 4, "column": 23} ] } + {"message": Type Product; Field name must be @external., "locations": [ { "line": 4, "column": 23} ] } ] - name: "@provides directive used on field with type that does not have a @key." @@ -2827,7 +2822,7 @@ invalid_schemas: name: String } errlist: [ - {"message": "Type Product; Field reviews does not return a type that has a @key.", "locations": [ { "line": 4, "column": 23} ] } + {"message": Type Product; Field reviews does not return a type that has a @key., "locations": [ { "line": 4, "column": 23} ] } ] - name: "@provides directive uses a field that is not defined in the extended type" @@ -2909,10 +2904,10 @@ invalid_schemas: }) } errlist: [ - { "message": "Type TwitterUser; @lambdaOnMutate directive not allowed along with @remote directive.", "locations": [{"line": 1, "column": 27}]} + { "message": Type TwitterUser; @lambdaOnMutate directive not allowed along with @remote directive., "locations": [{"line": 1, "column": 27}]} ] - - name: "language tag field can't contain more than on @" + - name: language tag field can't contain more than on @ input: | type Person { name: String! @@ -2923,7 +2918,7 @@ invalid_schemas: "locations": [ { "line": 3, "column": 19 } ] }, ] - - name: "language tag field should be of String type" + - name: language tag field should be of String type input: | type Person { name: String! @@ -2957,7 +2952,7 @@ invalid_schemas: "locations": [ { "line": 3, "column": 56 } ] }, ] - - name: "unsupported `*` language tag in graphql" + - name: unsupported `*` language tag in graphql input: | type Person { name: String! @@ -3100,20 +3095,20 @@ invalid_schemas: ] valid_schemas: - - name: "Multiple fields with @id directive should be allowed" + - name: Multiple fields with @id directive should be allowed input: | type X { f1: String! @id f2: String! @id } - - name: "field with @id directive can have exact index" + - name: field with @id directive can have exact index input: | type X { f1: String! @id @search(by:[exact]) } - - name: "Type implements from two interfaces where both have ID" + - name: Type implements from two interfaces where both have ID input: | interface X { id: ID @@ -3125,7 +3120,7 @@ valid_schemas: name: String } - - name: "Type implements an interface with the field definition repeated" + - name: Type implements an interface with the field definition repeated input: | interface Y { id: ID @@ -3137,7 +3132,7 @@ valid_schemas: y: String } - - name: "schema with union" + - name: schema with union input: | interface W { f1: ID! @@ -3177,7 +3172,7 @@ valid_schemas: } - - name: "hasInverse directive on singleton" + name: hasInverse directive on singleton input: | type X { f1: Y @hasInverse(field: "f1") @@ -3187,7 +3182,7 @@ valid_schemas: } - - name: "hasInverse directive on list type 1" + name: hasInverse directive on list type 1 input: | type X { f1: [Y] @hasInverse(field: "f1") @@ -3197,7 +3192,7 @@ valid_schemas: } - - name: "hasInverse directive from list type" + name: hasInverse directive from list type input: | type Post { postId: ID! @@ -3208,7 +3203,7 @@ valid_schemas: posts: [Post!]! @hasInverse(field: "author") } - - name: "hasInverse directive to list type" + name: hasInverse directive to list type input: | type Post { postId: ID! @@ -3220,7 +3215,7 @@ valid_schemas: } - - name: "hasInverse directive on list type 2" + name: hasInverse directive on list type 2 input: | type X { f1: [Y] @hasInverse(field: "f1") @@ -3230,7 +3225,7 @@ valid_schemas: } - - name: "Correct search types" + name: Correct search types input: | type X { int1: Int @search @@ -3271,7 +3266,7 @@ valid_schemas: } - - name: "dgraph directive with correct reverse field works" + name: dgraph directive with correct reverse field works input: | type X { id: ID! @@ -3305,7 +3300,7 @@ valid_schemas: } - - name: "initial schema with @custom directive" + name: initial schema with @custom directive input: | type Author { id: ID! @@ -3339,7 +3334,7 @@ valid_schemas: method: "POST"}) } - - name: "Schema with @custom directives on fields." + - name: Schema with @custom directives on fields input: | type Class @remote { id: ID! @@ -3363,7 +3358,7 @@ valid_schemas: } - - name: "Schema with @custom directives on field where body requires field with @id directive." + name: Schema with @custom directives on field where body requires field with @id directive input: | type Class @remote { id: ID! @@ -3433,7 +3428,7 @@ valid_schemas: } - - name: "remote type can use other types which are dgraph types" + name: remote type can use other types which are dgraph types input: | type User @remote { id: ID! @@ -3447,7 +3442,7 @@ valid_schemas: } - - name: "remote type can implement a remote type" + name: remote type can implement a remote type input: | type Car { id: ID! @@ -3464,8 +3459,7 @@ valid_schemas: - - name: "a non-remote type can have fields which are of remote type if they have @custom - directive" + name: a non-remote type can have fields which are of remote type if they have @custom directive input: | type User @remote { id: ID! @@ -3483,7 +3477,7 @@ valid_schemas: } - - name: "dgraph directive with reverse edges should work with interfaces" + name: dgraph directive with reverse edges should work with interfaces input: | type Object { id: ID! @@ -3523,7 +3517,7 @@ valid_schemas: addAuthor(id: ID): Author! @custom(http: {url: "http://blah.com", method: "GET"}) } - - name: "UpdateAuthorInput is allowed if Author is of remote type" + - name: UpdateAuthorInput is allowed if Author is of remote type input: | type Author @remote { id: ID! @@ -3540,7 +3534,7 @@ valid_schemas: name: String } - - name: "A valid federation schema" + - name: A valid federation schema input: | type Review { body: String @@ -3577,7 +3571,7 @@ valid_schemas: questionText: String } - - name: "Same reverse dgraph predicate can be used by two different GraphQL fields" + - name: Same reverse dgraph predicate can be used by two different GraphQL fields input: | type X { f1: [Y] @dgraph(pred: "~link") @@ -3590,7 +3584,7 @@ valid_schemas: f4: [X] @dgraph(pred: "link") } - - name: "valid schema with multiple language tag fields" + - name: valid schema with multiple language tag fields input: | interface Node { f1: String @@ -3610,7 +3604,7 @@ valid_schemas: professionEn: String @dgraph(pred: "Person.profession@en") } - - name: "valid schema with @id directive having interface argument in interface" + - name: valid schema with @id directive having interface argument in interface input: | interface Member { refID: String! @id(interface: true) @@ -3642,4 +3636,4 @@ valid_schemas: type LibraryManager { name: String! @id manages: [LibraryMember] - } + } \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/password-type.graphql b/graphql/schema/testdata/schemagen/input/password-type.graphql index 508ae881b1a..8e2b746cbf0 100644 --- a/graphql/schema/testdata/schemagen/input/password-type.graphql +++ b/graphql/schema/testdata/schemagen/input/password-type.graphql @@ -1,4 +1,4 @@ type Author @secret(field: "pwd") { - name: String! @id - token: String + name: String! @id + token: String } diff --git a/graphql/schema/testdata/schemagen/input/searchables-references.graphql b/graphql/schema/testdata/schemagen/input/searchables-references.graphql index d69dad886ce..2cdcf0ef15a 100644 --- a/graphql/schema/testdata/schemagen/input/searchables-references.graphql +++ b/graphql/schema/testdata/schemagen/input/searchables-references.graphql @@ -1,13 +1,13 @@ type Author { - id: ID! - name: String! @search(by: [hash]) - dob: DateTime # Have something not search - posts: [Post] # This should have arguments added for a filter on Post + id: ID! + name: String! @search(by: [hash]) + dob: DateTime # Have something not search + posts: [Post] # This should have arguments added for a filter on Post } type Post { - postID: ID! - title: String! @search(by: ["term", "fulltext"]) - text: String @search(by: ["fulltext", "term"]) - datePublished: DateTime # Have something not search + postID: ID! + title: String! @search(by: ["term", "fulltext"]) + text: String @search(by: ["fulltext", "term"]) + datePublished: DateTime # Have something not search } diff --git a/graphql/schema/testdata/schemagen/input/searchables.graphql b/graphql/schema/testdata/schemagen/input/searchables.graphql index 3690268b843..54649df9c55 100644 --- a/graphql/schema/testdata/schemagen/input/searchables.graphql +++ b/graphql/schema/testdata/schemagen/input/searchables.graphql @@ -1,38 +1,38 @@ type Post { - postID: ID! - title: String! @search(by: [term]) - titleByEverything: String! @search(by: ["term", "fulltext", "trigram", "hash"]) - text: String @search(by: [fulltext]) + postID: ID! + title: String! @search(by: [term]) + titleByEverything: String! @search(by: ["term", "fulltext", "trigram", "hash"]) + text: String @search(by: [fulltext]) - tags: [String] @search(by: [trigram]) - tagsHash: [String] @search(by: [hash]) - tagsExact: [String] @search(by: [exact]) + tags: [String] @search(by: [trigram]) + tagsHash: [String] @search(by: [hash]) + tagsExact: [String] @search(by: [exact]) - publishByYear: DateTime @search(by: [year]) - publishByMonth: DateTime @search(by: [month]) - publishByDay: DateTime @search(by: [day]) - publishByHour: DateTime @search(by: [hour]) - publishTimestamp: Int64 @search + publishByYear: DateTime @search(by: [year]) + publishByMonth: DateTime @search(by: [month]) + publishByDay: DateTime @search(by: [day]) + publishByHour: DateTime @search(by: [hour]) + publishTimestamp: Int64 @search - numViewers: Int64 @search(by: [int64]) - numLikes: Int @search - score: Float @search - isPublished: Boolean @search + numViewers: Int64 @search(by: [int64]) + numLikes: Int @search + score: Float @search + isPublished: Boolean @search - postType: PostType @search - postTypeNonNull: PostType! @search - postTypeList: [PostType] @search - postTypeTrigram: PostType @search(by: [trigram]) - postTypeRegexp: PostType @search(by: [regexp]) - postTypeExact: [PostType] @search(by: [exact]) - postTypeHash: PostType @search(by: [hash]) - postTypeRegexpExact: PostType @search(by: ["exact", "regexp"]) - postTypeHashRegexp: PostType @search(by: ["hash", "regexp"]) - postTypeNone: PostType @search(by: []) + postType: PostType @search + postTypeNonNull: PostType! @search + postTypeList: [PostType] @search + postTypeTrigram: PostType @search(by: [trigram]) + postTypeRegexp: PostType @search(by: [regexp]) + postTypeExact: [PostType] @search(by: [exact]) + postTypeHash: PostType @search(by: [hash]) + postTypeRegexpExact: PostType @search(by: ["exact", "regexp"]) + postTypeHashRegexp: PostType @search(by: ["hash", "regexp"]) + postTypeNone: PostType @search(by: []) } enum PostType { - Fact - Question - Opinion + Fact + Question + Opinion } diff --git a/graphql/schema/testdata/schemagen/input/single-type-with-enum.graphql b/graphql/schema/testdata/schemagen/input/single-type-with-enum.graphql index 16a10daf72d..5ff4d9b3f2e 100644 --- a/graphql/schema/testdata/schemagen/input/single-type-with-enum.graphql +++ b/graphql/schema/testdata/schemagen/input/single-type-with-enum.graphql @@ -9,4 +9,4 @@ enum PostType { Statement Question Answer -} \ No newline at end of file +} diff --git a/graphql/schema/testdata/schemagen/input/single-type.graphql b/graphql/schema/testdata/schemagen/input/single-type.graphql index 7816c5016a9..714b30895fe 100644 --- a/graphql/schema/testdata/schemagen/input/single-type.graphql +++ b/graphql/schema/testdata/schemagen/input/single-type.graphql @@ -1,7 +1,7 @@ type Message { - id: ID! - content: String! - author: String - uniqueId: Int64 - datePosted: DateTime + id: ID! + content: String! + author: String + uniqueId: Int64 + datePosted: DateTime } diff --git a/graphql/schema/testdata/schemagen/input/type-implements-multiple-interfaces.graphql b/graphql/schema/testdata/schemagen/input/type-implements-multiple-interfaces.graphql index 91cd15ad088..2ab2ef40a70 100644 --- a/graphql/schema/testdata/schemagen/input/type-implements-multiple-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/input/type-implements-multiple-interfaces.graphql @@ -1,14 +1,14 @@ interface Character { - id: ID! - name: String! @search(by: [exact]) - friends: [Character] + id: ID! + name: String! @search(by: [exact]) + friends: [Character] } interface Employee { - employeeId: String! - title: String! + employeeId: String! + title: String! } type Human implements Character & Employee { - totalCredits: Int + totalCredits: Int } diff --git a/graphql/schema/testdata/schemagen/input/type-with-arguments-on-field.graphql b/graphql/schema/testdata/schemagen/input/type-with-arguments-on-field.graphql index d544aa76608..29ff7259196 100644 --- a/graphql/schema/testdata/schemagen/input/type-with-arguments-on-field.graphql +++ b/graphql/schema/testdata/schemagen/input/type-with-arguments-on-field.graphql @@ -1,10 +1,10 @@ interface Abstract { - id: ID! - name(random: Int!, size: String): String! + id: ID! + name(random: Int!, size: String): String! } type Message implements Abstract { - content(pick: Int!, name: String): String! - author: String - datePosted: DateTime + content(pick: Int!, name: String): String! + author: String + datePosted: DateTime } diff --git a/graphql/schema/testdata/schemagen/input/type-with-custom-field-on-dgraph-type.graphql b/graphql/schema/testdata/schemagen/input/type-with-custom-field-on-dgraph-type.graphql index e7aa5867c77..479626311e3 100644 --- a/graphql/schema/testdata/schemagen/input/type-with-custom-field-on-dgraph-type.graphql +++ b/graphql/schema/testdata/schemagen/input/type-with-custom-field-on-dgraph-type.graphql @@ -1,19 +1,12 @@ type Car { - id: ID! - name: String! + id: ID! + name: String! } type User { - id: ID! - name: String @custom(http: { - url: "http://mock:8888/userNames", - method: "GET", - body: "{uid: $id}" - }) - age: Int! @search - cars: [Car] @custom(http: { - url: "http://mock:8888/cars", - method: "GET", - body: "{uid: $id}" - }) -} \ No newline at end of file + id: ID! + name: String + @custom(http: { url: "http://mock:8888/userNames", method: "GET", body: "{uid: $id}" }) + age: Int! @search + cars: [Car] @custom(http: { url: "http://mock:8888/cars", method: "GET", body: "{uid: $id}" }) +} diff --git a/graphql/schema/testdata/schemagen/input/type-with-custom-fields-on-remote-type.graphql b/graphql/schema/testdata/schemagen/input/type-with-custom-fields-on-remote-type.graphql index a09b70205e9..37dd774b759 100644 --- a/graphql/schema/testdata/schemagen/input/type-with-custom-fields-on-remote-type.graphql +++ b/graphql/schema/testdata/schemagen/input/type-with-custom-fields-on-remote-type.graphql @@ -1,19 +1,12 @@ type Car @remote { - id: ID! - name: String! + id: ID! + name: String! } type User { - id: ID! - name: String @custom(http: { - url: "http://mock:8888/userNames", - method: "GET", - body: "{uid: $id}" - }) - age: Int! @search - cars: [Car] @custom(http: { - url: "http://mock:8888/cars", - method: "GET", - body: "{uid: $id}" - }) -} \ No newline at end of file + id: ID! + name: String + @custom(http: { url: "http://mock:8888/userNames", method: "GET", body: "{uid: $id}" }) + age: Int! @search + cars: [Car] @custom(http: { url: "http://mock:8888/cars", method: "GET", body: "{uid: $id}" }) +} diff --git a/graphql/schema/testdata/schemagen/input/type-without-orderables.graphql b/graphql/schema/testdata/schemagen/input/type-without-orderables.graphql index 773242e89f6..2f4037f6af5 100644 --- a/graphql/schema/testdata/schemagen/input/type-without-orderables.graphql +++ b/graphql/schema/testdata/schemagen/input/type-without-orderables.graphql @@ -1,6 +1,6 @@ type Data { - id: ID! - intList: [Int] - stringList: [String] - metaData: Data -} \ No newline at end of file + id: ID! + intList: [Int] + stringList: [String] + metaData: Data +} diff --git a/graphql/schema/testdata/schemagen/input/union.graphql b/graphql/schema/testdata/schemagen/input/union.graphql index d18f80cd9e1..ef10b9da346 100644 --- a/graphql/schema/testdata/schemagen/input/union.graphql +++ b/graphql/schema/testdata/schemagen/input/union.graphql @@ -1,41 +1,38 @@ interface Character { - id: ID! - name: String! @search(by: [exact]) - friends: [Character] - enemyOf: Resident - appearsIn: [Episode!]! @search + id: ID! + name: String! @search(by: [exact]) + friends: [Character] + enemyOf: Resident + appearsIn: [Episode!]! @search } type Human implements Character { - starships: [Starship] - totalCredits: Int + starships: [Starship] + totalCredits: Int } type Droid implements Character { - primaryFunction: String + primaryFunction: String } enum Episode { - NEWHOPE - EMPIRE - JEDI + NEWHOPE + EMPIRE + JEDI } type Starship { - id: ID! - name: String! @search(by: [term]) - length: Float + id: ID! + name: String! @search(by: [term]) + length: Float } union Resident = Human | Droid | Starship union Tool @remote = Droid | Starship type Planet { - id: ID! - name: String! - residents: [Resident!] @dgraph(pred: "residents") - bestTool: Tool @custom(http: { - url: "http://mock:8888/tool/$id" - method: "GET" - }) + id: ID! + name: String! + residents: [Resident!] @dgraph(pred: "residents") + bestTool: Tool @custom(http: { url: "http://mock:8888/tool/$id", method: "GET" }) } diff --git a/graphql/schema/testdata/schemagen/output/apollo-federation.graphql b/graphql/schema/testdata/schemagen/output/apollo-federation.graphql index ff44a7b8041..32f175da43f 100644 --- a/graphql/schema/testdata/schemagen/output/apollo-federation.graphql +++ b/graphql/schema/testdata/schemagen/output/apollo-federation.graphql @@ -3,43 +3,45 @@ ####################### type Reviews @key(fields: "id") { - id: ID! - review: String! - user(filter: UserFilter): User @provides(fields: "age") + id: ID! + review: String! + user(filter: UserFilter): User @provides(fields: "age") } type Student @key(fields: "id") { - id: ID! - name: String! - age: Int! + id: ID! + name: String! + age: Int! } type School @key(fields: "id") { - id: ID! - students(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] @provides(fields: "name") - studentsAggregate(filter: StudentFilter): StudentAggregateResult + id: ID! + students(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] + @provides(fields: "name") + studentsAggregate(filter: StudentFilter): StudentAggregateResult } type Country { - code: String! @id - name: String! + code: String! @id + name: String! } type Product @key(fields: "id") @extends { - id: ID! @external - name: String! @external - price: Int @external - weight: Int @external - reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] @requires(fields: "price weight") - reviewsAggregate(filter: ReviewsFilter): ReviewsAggregateResult + id: ID! @external + name: String! @external + price: Int @external + weight: Int @external + reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] + @requires(fields: "price weight") + reviewsAggregate(filter: ReviewsFilter): ReviewsAggregateResult } type User @key(fields: "name") @extends { - id: ID! @external - name: String! @id @external - age: Int! @external - reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] - reviewsAggregate(filter: ReviewsFilter): ReviewsAggregateResult + id: ID! @external + name: String! @id @external + age: Int! @external + reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] + reviewsAggregate(filter: ReviewsFilter): ReviewsAggregateResult } ####################### @@ -58,162 +60,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -225,11 +227,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -238,77 +241,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -320,7 +324,7 @@ scalar _Any scalar _FieldSet type _Service { - sdl: String + sdl: String } directive @external on FIELD_DEFINITION @@ -334,143 +338,143 @@ directive @extends on OBJECT | INTERFACE ####################### type AddCountryPayload { - country(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] - numUids: Int + country(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] + numUids: Int } type AddProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } type AddReviewsPayload { - reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] - numUids: Int + reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] + numUids: Int } type AddSchoolPayload { - school(filter: SchoolFilter, first: Int, offset: Int): [School] - numUids: Int + school(filter: SchoolFilter, first: Int, offset: Int): [School] + numUids: Int } type AddStudentPayload { - student(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] - numUids: Int + student(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] + numUids: Int } type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type CountryAggregateResult { - count: Int - codeMin: String - codeMax: String - nameMin: String - nameMax: String + count: Int + codeMin: String + codeMax: String + nameMin: String + nameMax: String } type DeleteCountryPayload { - country(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] - msg: String - numUids: Int + country(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] + msg: String + numUids: Int } type DeleteProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - msg: String - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + msg: String + numUids: Int } type DeleteReviewsPayload { - reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] - msg: String - numUids: Int + reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] + msg: String + numUids: Int } type DeleteSchoolPayload { - school(filter: SchoolFilter, first: Int, offset: Int): [School] - msg: String - numUids: Int + school(filter: SchoolFilter, first: Int, offset: Int): [School] + msg: String + numUids: Int } type DeleteStudentPayload { - student(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] - msg: String - numUids: Int + student(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] + msg: String + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type ProductAggregateResult { - count: Int - idMin: ID - idMax: ID + count: Int + idMin: ID + idMax: ID } type ReviewsAggregateResult { - count: Int - reviewMin: String - reviewMax: String + count: Int + reviewMin: String + reviewMax: String } type SchoolAggregateResult { - count: Int + count: Int } type StudentAggregateResult { - count: Int - nameMin: String - nameMax: String - ageMin: Int - ageMax: Int - ageSum: Int - ageAvg: Float + count: Int + nameMin: String + nameMax: String + ageMin: Int + ageMax: Int + ageSum: Int + ageAvg: Float } type UpdateCountryPayload { - country(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] - numUids: Int + country(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] + numUids: Int } type UpdateProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } type UpdateReviewsPayload { - reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] - numUids: Int + reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] + numUids: Int } type UpdateSchoolPayload { - school(filter: SchoolFilter, first: Int, offset: Int): [School] - numUids: Int + school(filter: SchoolFilter, first: Int, offset: Int): [School] + numUids: Int } type UpdateStudentPayload { - student(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] - numUids: Int + student(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - nameMin: String - nameMax: String - ageMin: Int - ageMax: Int - ageSum: Int - ageAvg: Float + count: Int + nameMin: String + nameMax: String + ageMin: Int + ageMax: Int + ageSum: Int + ageAvg: Float } ####################### @@ -478,55 +482,55 @@ type UserAggregateResult { ####################### enum CountryHasFilter { - code - name + code + name } enum CountryOrderable { - code - name + code + name } enum ProductHasFilter { - reviews + reviews } enum ProductOrderable { - id + id } enum ReviewsHasFilter { - review - user + review + user } enum ReviewsOrderable { - review + review } enum SchoolHasFilter { - students + students } enum StudentHasFilter { - name - age + name + age } enum StudentOrderable { - name - age + name + age } enum UserHasFilter { - name - age - reviews + name + age + reviews } enum UserOrderable { - name - age + name + age } ####################### @@ -534,209 +538,209 @@ enum UserOrderable { ####################### input AddCountryInput { - code: String! - name: String! + code: String! + name: String! } input AddProductInput { - id: ID! - reviews: [ReviewsRef] + id: ID! + reviews: [ReviewsRef] } input AddReviewsInput { - review: String! - user: UserRef + review: String! + user: UserRef } input AddSchoolInput { - students: [StudentRef] + students: [StudentRef] } input AddStudentInput { - name: String! - age: Int! + name: String! + age: Int! } input AddUserInput { - name: String! - age: Int! - reviews: [ReviewsRef] + name: String! + age: Int! + reviews: [ReviewsRef] } input CountryFilter { - code: StringHashFilter - has: [CountryHasFilter] - and: [CountryFilter] - or: [CountryFilter] - not: CountryFilter + code: StringHashFilter + has: [CountryHasFilter] + and: [CountryFilter] + or: [CountryFilter] + not: CountryFilter } input CountryOrder { - asc: CountryOrderable - desc: CountryOrderable - then: CountryOrder + asc: CountryOrderable + desc: CountryOrderable + then: CountryOrder } input CountryPatch { - code: String - name: String + code: String + name: String } input CountryRef { - code: String - name: String + code: String + name: String } input ProductFilter { - id: [ID!] - has: [ProductHasFilter] - and: [ProductFilter] - or: [ProductFilter] - not: ProductFilter + id: [ID!] + has: [ProductHasFilter] + and: [ProductFilter] + or: [ProductFilter] + not: ProductFilter } input ProductOrder { - asc: ProductOrderable - desc: ProductOrderable - then: ProductOrder + asc: ProductOrderable + desc: ProductOrderable + then: ProductOrder } input ProductPatch { - reviews: [ReviewsRef] + reviews: [ReviewsRef] } input ProductRef { - id: ID - reviews: [ReviewsRef] + id: ID + reviews: [ReviewsRef] } input ReviewsFilter { - id: [ID!] - has: [ReviewsHasFilter] - and: [ReviewsFilter] - or: [ReviewsFilter] - not: ReviewsFilter + id: [ID!] + has: [ReviewsHasFilter] + and: [ReviewsFilter] + or: [ReviewsFilter] + not: ReviewsFilter } input ReviewsOrder { - asc: ReviewsOrderable - desc: ReviewsOrderable - then: ReviewsOrder + asc: ReviewsOrderable + desc: ReviewsOrderable + then: ReviewsOrder } input ReviewsPatch { - review: String - user: UserRef + review: String + user: UserRef } input ReviewsRef { - id: ID - review: String - user: UserRef + id: ID + review: String + user: UserRef } input SchoolFilter { - id: [ID!] - has: [SchoolHasFilter] - and: [SchoolFilter] - or: [SchoolFilter] - not: SchoolFilter + id: [ID!] + has: [SchoolHasFilter] + and: [SchoolFilter] + or: [SchoolFilter] + not: SchoolFilter } input SchoolPatch { - students: [StudentRef] + students: [StudentRef] } input SchoolRef { - id: ID - students: [StudentRef] + id: ID + students: [StudentRef] } input StudentFilter { - id: [ID!] - has: [StudentHasFilter] - and: [StudentFilter] - or: [StudentFilter] - not: StudentFilter + id: [ID!] + has: [StudentHasFilter] + and: [StudentFilter] + or: [StudentFilter] + not: StudentFilter } input StudentOrder { - asc: StudentOrderable - desc: StudentOrderable - then: StudentOrder + asc: StudentOrderable + desc: StudentOrderable + then: StudentOrder } input StudentPatch { - name: String - age: Int + name: String + age: Int } input StudentRef { - id: ID - name: String - age: Int + id: ID + name: String + age: Int } input UpdateCountryInput { - filter: CountryFilter! - set: CountryPatch - remove: CountryPatch + filter: CountryFilter! + set: CountryPatch + remove: CountryPatch } input UpdateProductInput { - filter: ProductFilter! - set: ProductPatch - remove: ProductPatch + filter: ProductFilter! + set: ProductPatch + remove: ProductPatch } input UpdateReviewsInput { - filter: ReviewsFilter! - set: ReviewsPatch - remove: ReviewsPatch + filter: ReviewsFilter! + set: ReviewsPatch + remove: ReviewsPatch } input UpdateSchoolInput { - filter: SchoolFilter! - set: SchoolPatch - remove: SchoolPatch + filter: SchoolFilter! + set: SchoolPatch + remove: SchoolPatch } input UpdateStudentInput { - filter: StudentFilter! - set: StudentPatch - remove: StudentPatch + filter: StudentFilter! + set: StudentPatch + remove: StudentPatch } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - name: StringHashFilter - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + name: StringHashFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - name: String - age: Int - reviews: [ReviewsRef] + name: String + age: Int + reviews: [ReviewsRef] } input UserRef { - name: String - age: Int - reviews: [ReviewsRef] + name: String + age: Int + reviews: [ReviewsRef] } ####################### @@ -744,26 +748,26 @@ input UserRef { ####################### type Query { - _entities(representations: [_Any!]!): [_Entity]! - _service: _Service! - getReviews(id: ID!): Reviews - queryReviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] - aggregateReviews(filter: ReviewsFilter): ReviewsAggregateResult - getStudent(id: ID!): Student - queryStudent(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] - aggregateStudent(filter: StudentFilter): StudentAggregateResult - getSchool(id: ID!): School - querySchool(filter: SchoolFilter, first: Int, offset: Int): [School] - aggregateSchool(filter: SchoolFilter): SchoolAggregateResult - getCountry(code: String!): Country - queryCountry(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] - aggregateCountry(filter: CountryFilter): CountryAggregateResult - getProduct(id: ID!): Product - queryProduct(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - aggregateProduct(filter: ProductFilter): ProductAggregateResult - getUser(name: String!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + _entities(representations: [_Any!]!): [_Entity]! + _service: _Service! + getReviews(id: ID!): Reviews + queryReviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] + aggregateReviews(filter: ReviewsFilter): ReviewsAggregateResult + getStudent(id: ID!): Student + queryStudent(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] + aggregateStudent(filter: StudentFilter): StudentAggregateResult + getSchool(id: ID!): School + querySchool(filter: SchoolFilter, first: Int, offset: Int): [School] + aggregateSchool(filter: SchoolFilter): SchoolAggregateResult + getCountry(code: String!): Country + queryCountry(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] + aggregateCountry(filter: CountryFilter): CountryAggregateResult + getProduct(id: ID!): Product + queryProduct(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + aggregateProduct(filter: ProductFilter): ProductAggregateResult + getUser(name: String!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -771,23 +775,22 @@ type Query { ####################### type Mutation { - addReviews(input: [AddReviewsInput!]!): AddReviewsPayload - updateReviews(input: UpdateReviewsInput!): UpdateReviewsPayload - deleteReviews(filter: ReviewsFilter!): DeleteReviewsPayload - addStudent(input: [AddStudentInput!]!): AddStudentPayload - updateStudent(input: UpdateStudentInput!): UpdateStudentPayload - deleteStudent(filter: StudentFilter!): DeleteStudentPayload - addSchool(input: [AddSchoolInput!]!): AddSchoolPayload - updateSchool(input: UpdateSchoolInput!): UpdateSchoolPayload - deleteSchool(filter: SchoolFilter!): DeleteSchoolPayload - addCountry(input: [AddCountryInput!]!, upsert: Boolean): AddCountryPayload - updateCountry(input: UpdateCountryInput!): UpdateCountryPayload - deleteCountry(filter: CountryFilter!): DeleteCountryPayload - addProduct(input: [AddProductInput!]!): AddProductPayload - updateProduct(input: UpdateProductInput!): UpdateProductPayload - deleteProduct(filter: ProductFilter!): DeleteProductPayload - addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addReviews(input: [AddReviewsInput!]!): AddReviewsPayload + updateReviews(input: UpdateReviewsInput!): UpdateReviewsPayload + deleteReviews(filter: ReviewsFilter!): DeleteReviewsPayload + addStudent(input: [AddStudentInput!]!): AddStudentPayload + updateStudent(input: UpdateStudentInput!): UpdateStudentPayload + deleteStudent(filter: StudentFilter!): DeleteStudentPayload + addSchool(input: [AddSchoolInput!]!): AddSchoolPayload + updateSchool(input: UpdateSchoolInput!): UpdateSchoolPayload + deleteSchool(filter: SchoolFilter!): DeleteSchoolPayload + addCountry(input: [AddCountryInput!]!, upsert: Boolean): AddCountryPayload + updateCountry(input: UpdateCountryInput!): UpdateCountryPayload + deleteCountry(filter: CountryFilter!): DeleteCountryPayload + addProduct(input: [AddProductInput!]!): AddProductPayload + updateProduct(input: UpdateProductInput!): UpdateProductPayload + deleteProduct(filter: ProductFilter!): DeleteProductPayload + addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } - diff --git a/graphql/schema/testdata/schemagen/output/auth-on-interfaces.graphql b/graphql/schema/testdata/schemagen/output/auth-on-interfaces.graphql index 79edc9a60e5..93b04644cdb 100644 --- a/graphql/schema/testdata/schemagen/output/auth-on-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/output/auth-on-interfaces.graphql @@ -3,25 +3,39 @@ ####################### type Author { - id: ID! - name: String! @search(by: [hash]) - posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] @hasInverse(field: author) - postsAggregate(filter: PostFilter): PostAggregateResult -} - -interface Post @secret(field: "pwd") @auth(password: {rule:"{$ROLE: { eq: \"Admin\" } }"}, query: {rule:"query($TEXT: String!) { \n queryPost(filter: { text : {eq: $TEXT } } ) { \n id \n } \n}"}) { - id: ID! - text: String @search(by: [exact]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) -} - -type Question implements Post @auth(query: {rule:"query($ANS: Boolean!) { \n queryQuestion(filter: { answered: $ANS } ) { \n id \n } \n}"}) @secret(field: "pwd") { - id: ID! - text: String @search(by: [exact]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) - answered: Boolean @search + id: ID! + name: String! @search(by: [hash]) + posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + @hasInverse(field: author) + postsAggregate(filter: PostFilter): PostAggregateResult +} + +interface Post + @secret(field: "pwd") + @auth( + password: { rule: "{$ROLE: { eq: \"Admin\" } }" } + query: { + rule: "query($TEXT: String!) { \n queryPost(filter: { text : {eq: $TEXT } } ) { \n id \n } \n}" + } + ) { + id: ID! + text: String @search(by: [exact]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) +} + +type Question implements Post + @auth( + query: { + rule: "query($ANS: Boolean!) { \n queryQuestion(filter: { answered: $ANS } ) { \n id \n } \n}" + } + ) + @secret(field: "pwd") { + id: ID! + text: String @search(by: [exact]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) + answered: Boolean @search } ####################### @@ -40,162 +54,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -207,11 +221,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -220,77 +235,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -298,68 +314,68 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type DeleteQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - msg: String - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type QuestionAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type UpdateQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } ####################### @@ -367,35 +383,35 @@ type UpdateQuestionPayload { ####################### enum AuthorHasFilter { - name - posts + name + posts } enum AuthorOrderable { - name + name } enum PostHasFilter { - text - datePublished - author + text + datePublished + author } enum PostOrderable { - text - datePublished + text + datePublished } enum QuestionHasFilter { - text - datePublished - author - answered + text + datePublished + author + answered } enum QuestionOrderable { - text - datePublished + text + datePublished } ####################### @@ -403,121 +419,121 @@ enum QuestionOrderable { ####################### input AddAuthorInput { - name: String! - posts: [PostRef] + name: String! + posts: [PostRef] } input AddQuestionInput { - text: String - datePublished: DateTime - author: AuthorRef! - answered: Boolean - pwd: String! + text: String + datePublished: DateTime + author: AuthorRef! + answered: Boolean + pwd: String! } input AuthorFilter { - id: [ID!] - name: StringHashFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + name: StringHashFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - posts: [PostRef] + name: String + posts: [PostRef] } input AuthorRef { - id: ID - name: String - posts: [PostRef] + id: ID + name: String + posts: [PostRef] } input PostFilter { - id: [ID!] - text: StringExactFilter - datePublished: DateTimeFilter - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + text: StringExactFilter + datePublished: DateTimeFilter + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - text: String - datePublished: DateTime - author: AuthorRef - pwd: String + text: String + datePublished: DateTime + author: AuthorRef + pwd: String } input PostRef { - id: ID! + id: ID! } input QuestionFilter { - id: [ID!] - text: StringExactFilter - datePublished: DateTimeFilter - answered: Boolean - has: [QuestionHasFilter] - and: [QuestionFilter] - or: [QuestionFilter] - not: QuestionFilter + id: [ID!] + text: StringExactFilter + datePublished: DateTimeFilter + answered: Boolean + has: [QuestionHasFilter] + and: [QuestionFilter] + or: [QuestionFilter] + not: QuestionFilter } input QuestionOrder { - asc: QuestionOrderable - desc: QuestionOrderable - then: QuestionOrder + asc: QuestionOrderable + desc: QuestionOrderable + then: QuestionOrder } input QuestionPatch { - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean - pwd: String + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean + pwd: String } input QuestionRef { - id: ID - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean - pwd: String + id: ID + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean + pwd: String } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } input UpdateQuestionInput { - filter: QuestionFilter! - set: QuestionPatch - remove: QuestionPatch + filter: QuestionFilter! + set: QuestionPatch + remove: QuestionPatch } ####################### @@ -525,17 +541,17 @@ input UpdateQuestionInput { ####################### type Query { - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - getPost(id: ID!): Post - checkPostPassword(id: ID!, pwd: String!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getQuestion(id: ID!): Question - checkQuestionPassword(id: ID!, pwd: String!): Question - queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(id: ID!): Post + checkPostPassword(id: ID!, pwd: String!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getQuestion(id: ID!): Question + checkQuestionPassword(id: ID!, pwd: String!): Question + queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult } ####################### @@ -543,13 +559,12 @@ type Query { ####################### type Mutation { - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload - updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload - deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload + updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload + deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload } - diff --git a/graphql/schema/testdata/schemagen/output/authorization.graphql b/graphql/schema/testdata/schemagen/output/authorization.graphql index 2dc4bf64f59..9cd4d757904 100644 --- a/graphql/schema/testdata/schemagen/output/authorization.graphql +++ b/graphql/schema/testdata/schemagen/output/authorization.graphql @@ -2,22 +2,49 @@ # Input Schema ####################### -type Todo @secret(field: "pwd") @auth(password: {rule:"{$ROLE: { eq: \"Admin\" } }"}, query: {or:[{rule:"query($X_MyApp_User: String!) { \n queryTodo { \n owner (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}"},{rule:"query($X_MyApp_User: String!) { \n queryTodo {\n sharedWith (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}"},{rule:"query { \n queryTodo(filter: { isPublic: true }) {\n id\n }\n}"}]}, add: {rule:"query($X_MyApp_User: String!) { \n queryTodo {\n owner (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}"}, update: {rule:"query($X_MyApp_User: String!) { \n queryTodo {\n owner (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}"}) { - id: ID! - title: String - text: String - isPublic: Boolean @search - dateCompleted: String @search - sharedWith(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - owner(filter: UserFilter): User @hasInverse(field: "todos") - somethingPrivate: String - sharedWithAggregate(filter: UserFilter): UserAggregateResult -} - -type User @auth(update: {rule:"query($X_MyApp_User: String!) { \n queryUser(filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n}"}) { - username: String! @id - todos(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] @hasInverse(field: owner) - todosAggregate(filter: TodoFilter): TodoAggregateResult +type Todo + @secret(field: "pwd") + @auth( + password: { rule: "{$ROLE: { eq: \"Admin\" } }" } + query: { + or: [ + { + rule: "query($X_MyApp_User: String!) { \n queryTodo { \n owner (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}" + } + { + rule: "query($X_MyApp_User: String!) { \n queryTodo {\n sharedWith (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}" + } + { rule: "query { \n queryTodo(filter: { isPublic: true }) {\n id\n }\n}" } + ] + } + add: { + rule: "query($X_MyApp_User: String!) { \n queryTodo {\n owner (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}" + } + update: { + rule: "query($X_MyApp_User: String!) { \n queryTodo {\n owner (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}" + } + ) { + id: ID! + title: String + text: String + isPublic: Boolean @search + dateCompleted: String @search + sharedWith(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + owner(filter: UserFilter): User @hasInverse(field: "todos") + somethingPrivate: String + sharedWithAggregate(filter: UserFilter): UserAggregateResult +} + +type User + @auth( + update: { + rule: "query($X_MyApp_User: String!) { \n queryUser(filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n}" + } + ) { + username: String! @id + todos(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + @hasInverse(field: owner) + todosAggregate(filter: TodoFilter): TodoAggregateResult } ####################### @@ -36,162 +63,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -203,11 +230,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -216,77 +244,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -294,53 +323,53 @@ input StringHashFilter { ####################### type AddTodoPayload { - todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - numUids: Int + todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + numUids: Int } type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteTodoPayload { - todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - msg: String - numUids: Int + todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + msg: String + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type TodoAggregateResult { - count: Int - titleMin: String - titleMax: String - textMin: String - textMax: String - dateCompletedMin: String - dateCompletedMax: String - somethingPrivateMin: String - somethingPrivateMax: String + count: Int + titleMin: String + titleMax: String + textMin: String + textMax: String + dateCompletedMin: String + dateCompletedMax: String + somethingPrivateMin: String + somethingPrivateMax: String } type UpdateTodoPayload { - todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - numUids: Int + todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - usernameMin: String - usernameMax: String + count: Int + usernameMin: String + usernameMax: String } ####################### @@ -348,29 +377,29 @@ type UserAggregateResult { ####################### enum TodoHasFilter { - title - text - isPublic - dateCompleted - sharedWith - owner - somethingPrivate + title + text + isPublic + dateCompleted + sharedWith + owner + somethingPrivate } enum TodoOrderable { - title - text - dateCompleted - somethingPrivate + title + text + dateCompleted + somethingPrivate } enum UserHasFilter { - username - todos + username + todos } enum UserOrderable { - username + username } ####################### @@ -378,94 +407,94 @@ enum UserOrderable { ####################### input AddTodoInput { - title: String - text: String - isPublic: Boolean - dateCompleted: String - sharedWith: [UserRef] - owner: UserRef - somethingPrivate: String - pwd: String! + title: String + text: String + isPublic: Boolean + dateCompleted: String + sharedWith: [UserRef] + owner: UserRef + somethingPrivate: String + pwd: String! } input AddUserInput { - username: String! - todos: [TodoRef] + username: String! + todos: [TodoRef] } input TodoFilter { - id: [ID!] - isPublic: Boolean - dateCompleted: StringTermFilter - has: [TodoHasFilter] - and: [TodoFilter] - or: [TodoFilter] - not: TodoFilter + id: [ID!] + isPublic: Boolean + dateCompleted: StringTermFilter + has: [TodoHasFilter] + and: [TodoFilter] + or: [TodoFilter] + not: TodoFilter } input TodoOrder { - asc: TodoOrderable - desc: TodoOrderable - then: TodoOrder + asc: TodoOrderable + desc: TodoOrderable + then: TodoOrder } input TodoPatch { - title: String - text: String - isPublic: Boolean - dateCompleted: String - sharedWith: [UserRef] - owner: UserRef - somethingPrivate: String - pwd: String + title: String + text: String + isPublic: Boolean + dateCompleted: String + sharedWith: [UserRef] + owner: UserRef + somethingPrivate: String + pwd: String } input TodoRef { - id: ID - title: String - text: String - isPublic: Boolean - dateCompleted: String - sharedWith: [UserRef] - owner: UserRef - somethingPrivate: String - pwd: String + id: ID + title: String + text: String + isPublic: Boolean + dateCompleted: String + sharedWith: [UserRef] + owner: UserRef + somethingPrivate: String + pwd: String } input UpdateTodoInput { - filter: TodoFilter! - set: TodoPatch - remove: TodoPatch + filter: TodoFilter! + set: TodoPatch + remove: TodoPatch } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - username: StringHashFilter - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + username: StringHashFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - username: String - todos: [TodoRef] + username: String + todos: [TodoRef] } input UserRef { - username: String - todos: [TodoRef] + username: String + todos: [TodoRef] } ####################### @@ -473,13 +502,13 @@ input UserRef { ####################### type Query { - getTodo(id: ID!): Todo - checkTodoPassword(id: ID!, pwd: String!): Todo - queryTodo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - aggregateTodo(filter: TodoFilter): TodoAggregateResult - getUser(username: String!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getTodo(id: ID!): Todo + checkTodoPassword(id: ID!, pwd: String!): Todo + queryTodo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + aggregateTodo(filter: TodoFilter): TodoAggregateResult + getUser(username: String!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -487,11 +516,10 @@ type Query { ####################### type Mutation { - addTodo(input: [AddTodoInput!]!): AddTodoPayload - updateTodo(input: UpdateTodoInput!): UpdateTodoPayload - deleteTodo(filter: TodoFilter!): DeleteTodoPayload - addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addTodo(input: [AddTodoInput!]!): AddTodoPayload + updateTodo(input: UpdateTodoInput!): UpdateTodoPayload + deleteTodo(filter: TodoFilter!): DeleteTodoPayload + addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } - diff --git a/graphql/schema/testdata/schemagen/output/comments-and-descriptions.graphql b/graphql/schema/testdata/schemagen/output/comments-and-descriptions.graphql index be37be2b30e..c735a4c9271 100644 --- a/graphql/schema/testdata/schemagen/output/comments-and-descriptions.graphql +++ b/graphql/schema/testdata/schemagen/output/comments-and-descriptions.graphql @@ -2,35 +2,53 @@ # Input Schema ####################### -"""Desc""" +""" +Desc +""" interface I { - """Desc""" - s: String! + """ + Desc + """ + s: String! } -"""Desc""" +""" +Desc +""" type T implements I { - s: String! - id: ID! - """Desc""" - i: Int + s: String! + id: ID! + """ + Desc + """ + i: Int } -"""Desc""" +""" +Desc +""" enum AnEnum { - AVal - """Desc""" - AnotherVal + AVal + """ + Desc + """ + AnotherVal } -"""Desc""" +""" +Desc +""" union A_Union = T -"""Desc""" +""" +Desc +""" input AnInput { - id: ID! - """Desc""" - i: Int + id: ID! + """ + Desc + """ + i: Int } ####################### @@ -49,162 +67,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -216,11 +234,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -229,77 +248,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -307,46 +327,46 @@ input StringHashFilter { ####################### type AddTPayload { - t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - numUids: Int + t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + numUids: Int } type DeleteIPayload { - i(filter: IFilter, order: IOrder, first: Int, offset: Int): [I] - msg: String - numUids: Int + i(filter: IFilter, order: IOrder, first: Int, offset: Int): [I] + msg: String + numUids: Int } type DeleteTPayload { - t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - msg: String - numUids: Int + t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + msg: String + numUids: Int } type IAggregateResult { - count: Int - sMin: String - sMax: String + count: Int + sMin: String + sMax: String } type TAggregateResult { - count: Int - sMin: String - sMax: String - iMin: Int - iMax: Int - iSum: Int - iAvg: Float + count: Int + sMin: String + sMax: String + iMin: Int + iMax: Int + iSum: Int + iAvg: Float } type UpdateIPayload { - i(filter: IFilter, order: IOrder, first: Int, offset: Int): [I] - numUids: Int + i(filter: IFilter, order: IOrder, first: Int, offset: Int): [I] + numUids: Int } type UpdateTPayload { - t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - numUids: Int + t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + numUids: Int } ####################### @@ -354,25 +374,25 @@ type UpdateTPayload { ####################### enum A_UnionType { - T + T } enum IHasFilter { - s + s } enum IOrderable { - s + s } enum THasFilter { - s - i + s + i } enum TOrderable { - s - i + s + i } ####################### @@ -380,75 +400,83 @@ enum TOrderable { ####################### input A_UnionFilter { - memberTypes: [A_UnionType!] - tFilter: TFilter + memberTypes: [A_UnionType!] + tFilter: TFilter } input A_UnionRef { - tRef: TRef + tRef: TRef } input AddTInput { - s: String! - """Desc""" - i: Int + s: String! + """ + Desc + """ + i: Int } input IFilter { - has: [IHasFilter] - and: [IFilter] - or: [IFilter] - not: IFilter + has: [IHasFilter] + and: [IFilter] + or: [IFilter] + not: IFilter } input IOrder { - asc: IOrderable - desc: IOrderable - then: IOrder + asc: IOrderable + desc: IOrderable + then: IOrder } input IPatch { - """Desc""" - s: String + """ + Desc + """ + s: String } input TFilter { - id: [ID!] - has: [THasFilter] - and: [TFilter] - or: [TFilter] - not: TFilter + id: [ID!] + has: [THasFilter] + and: [TFilter] + or: [TFilter] + not: TFilter } input TOrder { - asc: TOrderable - desc: TOrderable - then: TOrder + asc: TOrderable + desc: TOrderable + then: TOrder } input TPatch { - s: String - """Desc""" - i: Int + s: String + """ + Desc + """ + i: Int } input TRef { - id: ID - s: String - """Desc""" - i: Int + id: ID + s: String + """ + Desc + """ + i: Int } input UpdateIInput { - filter: IFilter! - set: IPatch - remove: IPatch + filter: IFilter! + set: IPatch + remove: IPatch } input UpdateTInput { - filter: TFilter! - set: TPatch - remove: TPatch + filter: TFilter! + set: TPatch + remove: TPatch } ####################### @@ -456,11 +484,11 @@ input UpdateTInput { ####################### type Query { - queryI(filter: IFilter, order: IOrder, first: Int, offset: Int): [I] - aggregateI(filter: IFilter): IAggregateResult - getT(id: ID!): T - queryT(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - aggregateT(filter: TFilter): TAggregateResult + queryI(filter: IFilter, order: IOrder, first: Int, offset: Int): [I] + aggregateI(filter: IFilter): IAggregateResult + getT(id: ID!): T + queryT(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + aggregateT(filter: TFilter): TAggregateResult } ####################### @@ -468,10 +496,9 @@ type Query { ####################### type Mutation { - updateI(input: UpdateIInput!): UpdateIPayload - deleteI(filter: IFilter!): DeleteIPayload - addT(input: [AddTInput!]!): AddTPayload - updateT(input: UpdateTInput!): UpdateTPayload - deleteT(filter: TFilter!): DeleteTPayload + updateI(input: UpdateIInput!): UpdateIPayload + deleteI(filter: IFilter!): DeleteIPayload + addT(input: [AddTInput!]!): AddTPayload + updateT(input: UpdateTInput!): UpdateTPayload + deleteT(filter: TFilter!): DeleteTPayload } - diff --git a/graphql/schema/testdata/schemagen/output/created-updated-directives.graphql b/graphql/schema/testdata/schemagen/output/created-updated-directives.graphql index d7547094db3..bede3db1e9b 100644 --- a/graphql/schema/testdata/schemagen/output/created-updated-directives.graphql +++ b/graphql/schema/testdata/schemagen/output/created-updated-directives.graphql @@ -3,17 +3,17 @@ ####################### type Booking { - id: ID! - name: String! - created: DateTime! @default(add: {value:"$now"}) - updated: DateTime! @default(add: {value:"$now"}, update: {value:"$now"}) + id: ID! + name: String! + created: DateTime! @default(add: { value: "$now" }) + updated: DateTime! @default(add: { value: "$now" }, update: { value: "$now" }) } type BookingXID { - id: String! @id - name: String! - created: DateTime! @default(add: {value:"$now"}) - updated: DateTime! @default(add: {value:"$now"}, update: {value:"$now"}) + id: String! @id + name: String! + created: DateTime! @default(add: { value: "$now" }) + updated: DateTime! @default(add: { value: "$now" }, update: { value: "$now" }) } ####################### @@ -32,162 +32,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -199,11 +199,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -212,77 +213,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -290,57 +292,72 @@ input StringHashFilter { ####################### type AddBookingPayload { - booking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] - numUids: Int + booking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] + numUids: Int } type AddBookingXIDPayload { - bookingXID(filter: BookingXIDFilter, order: BookingXIDOrder, first: Int, offset: Int): [BookingXID] - numUids: Int + bookingXID( + filter: BookingXIDFilter + order: BookingXIDOrder + first: Int + offset: Int + ): [BookingXID] + numUids: Int } type BookingAggregateResult { - count: Int - nameMin: String - nameMax: String - createdMin: DateTime - createdMax: DateTime - updatedMin: DateTime - updatedMax: DateTime + count: Int + nameMin: String + nameMax: String + createdMin: DateTime + createdMax: DateTime + updatedMin: DateTime + updatedMax: DateTime } type BookingXIDAggregateResult { - count: Int - idMin: String - idMax: String - nameMin: String - nameMax: String - createdMin: DateTime - createdMax: DateTime - updatedMin: DateTime - updatedMax: DateTime + count: Int + idMin: String + idMax: String + nameMin: String + nameMax: String + createdMin: DateTime + createdMax: DateTime + updatedMin: DateTime + updatedMax: DateTime } type DeleteBookingPayload { - booking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] - msg: String - numUids: Int + booking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] + msg: String + numUids: Int } type DeleteBookingXIDPayload { - bookingXID(filter: BookingXIDFilter, order: BookingXIDOrder, first: Int, offset: Int): [BookingXID] - msg: String - numUids: Int + bookingXID( + filter: BookingXIDFilter + order: BookingXIDOrder + first: Int + offset: Int + ): [BookingXID] + msg: String + numUids: Int } type UpdateBookingPayload { - booking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] - numUids: Int + booking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] + numUids: Int } type UpdateBookingXIDPayload { - bookingXID(filter: BookingXIDFilter, order: BookingXIDOrder, first: Int, offset: Int): [BookingXID] - numUids: Int + bookingXID( + filter: BookingXIDFilter + order: BookingXIDOrder + first: Int + offset: Int + ): [BookingXID] + numUids: Int } ####################### @@ -348,29 +365,29 @@ type UpdateBookingXIDPayload { ####################### enum BookingHasFilter { - name - created - updated + name + created + updated } enum BookingOrderable { - name - created - updated + name + created + updated } enum BookingXIDHasFilter { - id - name - created - updated + id + name + created + updated } enum BookingXIDOrderable { - id - name - created - updated + id + name + created + updated } ####################### @@ -378,83 +395,83 @@ enum BookingXIDOrderable { ####################### input AddBookingInput { - name: String! - created: DateTime - updated: DateTime + name: String! + created: DateTime + updated: DateTime } input AddBookingXIDInput { - id: String! - name: String! - created: DateTime - updated: DateTime + id: String! + name: String! + created: DateTime + updated: DateTime } input BookingFilter { - id: [ID!] - has: [BookingHasFilter] - and: [BookingFilter] - or: [BookingFilter] - not: BookingFilter + id: [ID!] + has: [BookingHasFilter] + and: [BookingFilter] + or: [BookingFilter] + not: BookingFilter } input BookingOrder { - asc: BookingOrderable - desc: BookingOrderable - then: BookingOrder + asc: BookingOrderable + desc: BookingOrderable + then: BookingOrder } input BookingPatch { - name: String - created: DateTime - updated: DateTime + name: String + created: DateTime + updated: DateTime } input BookingRef { - id: ID - name: String - created: DateTime - updated: DateTime + id: ID + name: String + created: DateTime + updated: DateTime } input BookingXIDFilter { - id: StringHashFilter - has: [BookingXIDHasFilter] - and: [BookingXIDFilter] - or: [BookingXIDFilter] - not: BookingXIDFilter + id: StringHashFilter + has: [BookingXIDHasFilter] + and: [BookingXIDFilter] + or: [BookingXIDFilter] + not: BookingXIDFilter } input BookingXIDOrder { - asc: BookingXIDOrderable - desc: BookingXIDOrderable - then: BookingXIDOrder + asc: BookingXIDOrderable + desc: BookingXIDOrderable + then: BookingXIDOrder } input BookingXIDPatch { - id: String - name: String - created: DateTime - updated: DateTime + id: String + name: String + created: DateTime + updated: DateTime } input BookingXIDRef { - id: String - name: String - created: DateTime - updated: DateTime + id: String + name: String + created: DateTime + updated: DateTime } input UpdateBookingInput { - filter: BookingFilter! - set: BookingPatch - remove: BookingPatch + filter: BookingFilter! + set: BookingPatch + remove: BookingPatch } input UpdateBookingXIDInput { - filter: BookingXIDFilter! - set: BookingXIDPatch - remove: BookingXIDPatch + filter: BookingXIDFilter! + set: BookingXIDPatch + remove: BookingXIDPatch } ####################### @@ -462,12 +479,17 @@ input UpdateBookingXIDInput { ####################### type Query { - getBooking(id: ID!): Booking - queryBooking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] - aggregateBooking(filter: BookingFilter): BookingAggregateResult - getBookingXID(id: String!): BookingXID - queryBookingXID(filter: BookingXIDFilter, order: BookingXIDOrder, first: Int, offset: Int): [BookingXID] - aggregateBookingXID(filter: BookingXIDFilter): BookingXIDAggregateResult + getBooking(id: ID!): Booking + queryBooking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] + aggregateBooking(filter: BookingFilter): BookingAggregateResult + getBookingXID(id: String!): BookingXID + queryBookingXID( + filter: BookingXIDFilter + order: BookingXIDOrder + first: Int + offset: Int + ): [BookingXID] + aggregateBookingXID(filter: BookingXIDFilter): BookingXIDAggregateResult } ####################### @@ -475,11 +497,10 @@ type Query { ####################### type Mutation { - addBooking(input: [AddBookingInput!]!): AddBookingPayload - updateBooking(input: UpdateBookingInput!): UpdateBookingPayload - deleteBooking(filter: BookingFilter!): DeleteBookingPayload - addBookingXID(input: [AddBookingXIDInput!]!, upsert: Boolean): AddBookingXIDPayload - updateBookingXID(input: UpdateBookingXIDInput!): UpdateBookingXIDPayload - deleteBookingXID(filter: BookingXIDFilter!): DeleteBookingXIDPayload + addBooking(input: [AddBookingInput!]!): AddBookingPayload + updateBooking(input: UpdateBookingInput!): UpdateBookingPayload + deleteBooking(filter: BookingFilter!): DeleteBookingPayload + addBookingXID(input: [AddBookingXIDInput!]!, upsert: Boolean): AddBookingXIDPayload + updateBookingXID(input: UpdateBookingXIDInput!): UpdateBookingXIDPayload + deleteBookingXID(filter: BookingXIDFilter!): DeleteBookingXIDPayload } - diff --git a/graphql/schema/testdata/schemagen/output/custom-dql-query-with-subscription.graphql b/graphql/schema/testdata/schemagen/output/custom-dql-query-with-subscription.graphql index 881b4d5ab04..b22910f9157 100644 --- a/graphql/schema/testdata/schemagen/output/custom-dql-query-with-subscription.graphql +++ b/graphql/schema/testdata/schemagen/output/custom-dql-query-with-subscription.graphql @@ -3,22 +3,23 @@ ####################### type Tweets { - id: ID! - text: String! @search(by: [fulltext]) - author(filter: UserFilter): User @hasInverse(field: tweets) - timestamp: DateTime! @search + id: ID! + text: String! @search(by: [fulltext]) + author(filter: UserFilter): User @hasInverse(field: tweets) + timestamp: DateTime! @search } type User { - screenName: String! @id - followers: Int @search - tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] @hasInverse(field: author) - tweetsAggregate(filter: TweetsFilter): TweetsAggregateResult + screenName: String! @id + followers: Int @search + tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] + @hasInverse(field: author) + tweetsAggregate(filter: TweetsFilter): TweetsAggregateResult } type UserTweetCount @remote { - screenName: String - tweetCount: Int + screenName: String + tweetCount: Int } ####################### @@ -37,162 +38,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -204,11 +205,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -217,77 +219,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -295,53 +298,53 @@ input StringHashFilter { ####################### type AddTweetsPayload { - tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] - numUids: Int + tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] + numUids: Int } type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteTweetsPayload { - tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] - msg: String - numUids: Int + tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] + msg: String + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type TweetsAggregateResult { - count: Int - textMin: String - textMax: String - timestampMin: DateTime - timestampMax: DateTime + count: Int + textMin: String + textMax: String + timestampMin: DateTime + timestampMax: DateTime } type UpdateTweetsPayload { - tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] - numUids: Int + tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - screenNameMin: String - screenNameMax: String - followersMin: Int - followersMax: Int - followersSum: Int - followersAvg: Float + count: Int + screenNameMin: String + screenNameMax: String + followersMin: Int + followersMax: Int + followersSum: Int + followersAvg: Float } ####################### @@ -349,25 +352,25 @@ type UserAggregateResult { ####################### enum TweetsHasFilter { - text - author - timestamp + text + author + timestamp } enum TweetsOrderable { - text - timestamp + text + timestamp } enum UserHasFilter { - screenName - followers - tweets + screenName + followers + tweets } enum UserOrderable { - screenName - followers + screenName + followers } ####################### @@ -375,83 +378,83 @@ enum UserOrderable { ####################### input AddTweetsInput { - text: String! - author: UserRef - timestamp: DateTime! + text: String! + author: UserRef + timestamp: DateTime! } input AddUserInput { - screenName: String! - followers: Int - tweets: [TweetsRef] + screenName: String! + followers: Int + tweets: [TweetsRef] } input TweetsFilter { - id: [ID!] - text: StringFullTextFilter - timestamp: DateTimeFilter - has: [TweetsHasFilter] - and: [TweetsFilter] - or: [TweetsFilter] - not: TweetsFilter + id: [ID!] + text: StringFullTextFilter + timestamp: DateTimeFilter + has: [TweetsHasFilter] + and: [TweetsFilter] + or: [TweetsFilter] + not: TweetsFilter } input TweetsOrder { - asc: TweetsOrderable - desc: TweetsOrderable - then: TweetsOrder + asc: TweetsOrderable + desc: TweetsOrderable + then: TweetsOrder } input TweetsPatch { - text: String - author: UserRef - timestamp: DateTime + text: String + author: UserRef + timestamp: DateTime } input TweetsRef { - id: ID - text: String - author: UserRef - timestamp: DateTime + id: ID + text: String + author: UserRef + timestamp: DateTime } input UpdateTweetsInput { - filter: TweetsFilter! - set: TweetsPatch - remove: TweetsPatch + filter: TweetsFilter! + set: TweetsPatch + remove: TweetsPatch } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - screenName: StringHashFilter - followers: IntFilter - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + screenName: StringHashFilter + followers: IntFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - screenName: String - followers: Int - tweets: [TweetsRef] + screenName: String + followers: Int + tweets: [TweetsRef] } input UserRef { - screenName: String - followers: Int - tweets: [TweetsRef] + screenName: String + followers: Int + tweets: [TweetsRef] } ####################### @@ -459,13 +462,17 @@ input UserRef { ####################### type Query { - queryUserTweetCounts: [UserTweetCount] @withSubscription @custom(dql: "query {\n queryUserTweetCounts(func: type(User)) {\n screenName: User.screenName\n tweetCount: count(User.tweets)\n }\n}") - getTweets(id: ID!): Tweets - queryTweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] - aggregateTweets(filter: TweetsFilter): TweetsAggregateResult - getUser(screenName: String!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + queryUserTweetCounts: [UserTweetCount] + @withSubscription + @custom( + dql: "query {\n queryUserTweetCounts(func: type(User)) {\n screenName: User.screenName\n tweetCount: count(User.tweets)\n }\n}" + ) + getTweets(id: ID!): Tweets + queryTweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] + aggregateTweets(filter: TweetsFilter): TweetsAggregateResult + getUser(screenName: String!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -473,12 +480,12 @@ type Query { ####################### type Mutation { - addTweets(input: [AddTweetsInput!]!): AddTweetsPayload - updateTweets(input: UpdateTweetsInput!): UpdateTweetsPayload - deleteTweets(filter: TweetsFilter!): DeleteTweetsPayload - addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addTweets(input: [AddTweetsInput!]!): AddTweetsPayload + updateTweets(input: UpdateTweetsInput!): UpdateTweetsPayload + deleteTweets(filter: TweetsFilter!): DeleteTweetsPayload + addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } ####################### @@ -486,5 +493,9 @@ type Mutation { ####################### type Subscription { - queryUserTweetCounts: [UserTweetCount] @withSubscription @custom(dql: "query {\n queryUserTweetCounts(func: type(User)) {\n screenName: User.screenName\n tweetCount: count(User.tweets)\n }\n}") + queryUserTweetCounts: [UserTweetCount] + @withSubscription + @custom( + dql: "query {\n queryUserTweetCounts(func: type(User)) {\n screenName: User.screenName\n tweetCount: count(User.tweets)\n }\n}" + ) } diff --git a/graphql/schema/testdata/schemagen/output/custom-mutation.graphql b/graphql/schema/testdata/schemagen/output/custom-mutation.graphql index cd06b5dde7f..e456c5699a3 100644 --- a/graphql/schema/testdata/schemagen/output/custom-mutation.graphql +++ b/graphql/schema/testdata/schemagen/output/custom-mutation.graphql @@ -3,12 +3,12 @@ ####################### type User { - id: ID! - name: String! + id: ID! + name: String! } input UpdateFavouriteUserInput { - name: String! + name: String! } ####################### @@ -27,162 +27,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -194,11 +194,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -207,77 +208,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -285,25 +287,25 @@ input StringHashFilter { ####################### type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } ####################### @@ -311,11 +313,11 @@ type UserAggregateResult { ####################### enum UserHasFilter { - name + name } enum UserOrderable { - name + name } ####################### @@ -323,36 +325,36 @@ enum UserOrderable { ####################### input AddUserInput { - name: String! + name: String! } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - id: [ID!] - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + id: [ID!] + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - name: String + name: String } input UserRef { - id: ID - name: String + id: ID + name: String } ####################### @@ -360,9 +362,9 @@ input UserRef { ####################### type Query { - getUser(id: ID!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getUser(id: ID!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -370,9 +372,9 @@ type Query { ####################### type Mutation { - createMyFavouriteUsers(input: [UpdateFavouriteUserInput!]!): [User] @custom(http: {url:"http://my-api.com",method:"POST",body:"{ data: $input }"}) - addUser(input: [AddUserInput!]!): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + createMyFavouriteUsers(input: [UpdateFavouriteUserInput!]!): [User] + @custom(http: { url: "http://my-api.com", method: "POST", body: "{ data: $input }" }) + addUser(input: [AddUserInput!]!): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } - diff --git a/graphql/schema/testdata/schemagen/output/custom-nested-types.graphql b/graphql/schema/testdata/schemagen/output/custom-nested-types.graphql index 7f6026fba36..8d338393763 100644 --- a/graphql/schema/testdata/schemagen/output/custom-nested-types.graphql +++ b/graphql/schema/testdata/schemagen/output/custom-nested-types.graphql @@ -3,29 +3,29 @@ ####################### type Car @remote { - id: ID! - name: String! + id: ID! + name: String! } interface Person @remote { - age: Int! + age: Int! } type User implements Person @remote { - age: Int! - id: ID! - name: String! - cars: [Car] + age: Int! + id: ID! + name: String! + cars: [Car] } input UserInput { - name: String! - age: Int! - cars: [CarInput] + name: String! + age: Int! + cars: [CarInput] } input CarInput { - name: String! + name: String! } ####################### @@ -44,162 +44,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -211,11 +211,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -224,77 +225,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -302,7 +304,7 @@ input StringHashFilter { ####################### type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: {url:"http://my-api.com",method:"GET"}) + getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) } ####################### @@ -310,6 +312,6 @@ type Query { ####################### type Mutation { - createMyFavouriteUsers(input: [UserInput!]!): [User] @custom(http: {url:"http://my-api.com",method:"POST",body:"$input"}) + createMyFavouriteUsers(input: [UserInput!]!): [User] + @custom(http: { url: "http://my-api.com", method: "POST", body: "$input" }) } - diff --git a/graphql/schema/testdata/schemagen/output/custom-query-mixed-types.graphql b/graphql/schema/testdata/schemagen/output/custom-query-mixed-types.graphql index df50f1e6ef5..a6817a7b917 100644 --- a/graphql/schema/testdata/schemagen/output/custom-query-mixed-types.graphql +++ b/graphql/schema/testdata/schemagen/output/custom-query-mixed-types.graphql @@ -3,13 +3,13 @@ ####################### type User @remote { - id: ID! - name: String! + id: ID! + name: String! } type Car { - id: ID! - name: String! + id: ID! + name: String! } ####################### @@ -28,162 +28,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -195,11 +195,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -208,77 +209,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -286,25 +288,25 @@ input StringHashFilter { ####################### type AddCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + numUids: Int } type CarAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - msg: String - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + msg: String + numUids: Int } type UpdateCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + numUids: Int } ####################### @@ -312,11 +314,11 @@ type UpdateCarPayload { ####################### enum CarHasFilter { - name + name } enum CarOrderable { - name + name } ####################### @@ -324,36 +326,36 @@ enum CarOrderable { ####################### input AddCarInput { - name: String! + name: String! } input CarFilter { - id: [ID!] - has: [CarHasFilter] - and: [CarFilter] - or: [CarFilter] - not: CarFilter + id: [ID!] + has: [CarHasFilter] + and: [CarFilter] + or: [CarFilter] + not: CarFilter } input CarOrder { - asc: CarOrderable - desc: CarOrderable - then: CarOrder + asc: CarOrderable + desc: CarOrderable + then: CarOrder } input CarPatch { - name: String + name: String } input CarRef { - id: ID - name: String + id: ID + name: String } input UpdateCarInput { - filter: CarFilter! - set: CarPatch - remove: CarPatch + filter: CarFilter! + set: CarPatch + remove: CarPatch } ####################### @@ -361,10 +363,10 @@ input UpdateCarInput { ####################### type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: {url:"http://my-api.com",method:"GET"}) - getCar(id: ID!): Car - queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - aggregateCar(filter: CarFilter): CarAggregateResult + getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) + getCar(id: ID!): Car + queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + aggregateCar(filter: CarFilter): CarAggregateResult } ####################### @@ -372,8 +374,7 @@ type Query { ####################### type Mutation { - addCar(input: [AddCarInput!]!): AddCarPayload - updateCar(input: UpdateCarInput!): UpdateCarPayload - deleteCar(filter: CarFilter!): DeleteCarPayload + addCar(input: [AddCarInput!]!): AddCarPayload + updateCar(input: UpdateCarInput!): UpdateCarPayload + deleteCar(filter: CarFilter!): DeleteCarPayload } - diff --git a/graphql/schema/testdata/schemagen/output/custom-query-not-dgraph-type.graphql b/graphql/schema/testdata/schemagen/output/custom-query-not-dgraph-type.graphql index 6093f603aaa..9bc2378b146 100644 --- a/graphql/schema/testdata/schemagen/output/custom-query-not-dgraph-type.graphql +++ b/graphql/schema/testdata/schemagen/output/custom-query-not-dgraph-type.graphql @@ -3,12 +3,12 @@ ####################### type User @remote { - id: ID! - name: String! + id: ID! + name: String! } input UserInput { - name: String! + name: String! } ####################### @@ -27,162 +27,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -194,11 +194,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -207,77 +208,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -285,7 +287,7 @@ input StringHashFilter { ####################### type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: {url:"http://my-api.com",method:"GET"}) + getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) } ####################### @@ -293,6 +295,6 @@ type Query { ####################### type Mutation { - createMyFavouriteUsers(input: [UserInput!]!): [User] @custom(http: {url:"http://my-api.com",method:"POST",body:"{ data: $input }"}) + createMyFavouriteUsers(input: [UserInput!]!): [User] + @custom(http: { url: "http://my-api.com", method: "POST", body: "{ data: $input }" }) } - diff --git a/graphql/schema/testdata/schemagen/output/custom-query-with-dgraph-type.graphql b/graphql/schema/testdata/schemagen/output/custom-query-with-dgraph-type.graphql index 06213dddd25..99e65582e90 100644 --- a/graphql/schema/testdata/schemagen/output/custom-query-with-dgraph-type.graphql +++ b/graphql/schema/testdata/schemagen/output/custom-query-with-dgraph-type.graphql @@ -3,8 +3,8 @@ ####################### type User { - id: ID! - name: String! + id: ID! + name: String! } ####################### @@ -23,162 +23,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -190,11 +190,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -203,77 +204,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -281,25 +283,25 @@ input StringHashFilter { ####################### type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } ####################### @@ -307,11 +309,11 @@ type UserAggregateResult { ####################### enum UserHasFilter { - name + name } enum UserOrderable { - name + name } ####################### @@ -319,36 +321,36 @@ enum UserOrderable { ####################### input AddUserInput { - name: String! + name: String! } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - id: [ID!] - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + id: [ID!] + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - name: String + name: String } input UserRef { - id: ID - name: String + id: ID + name: String } ####################### @@ -356,10 +358,10 @@ input UserRef { ####################### type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: {url:"http://my-api.com",method:"GET"}) - getUser(id: ID!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) + getUser(id: ID!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -367,8 +369,7 @@ type Query { ####################### type Mutation { - addUser(input: [AddUserInput!]!): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addUser(input: [AddUserInput!]!): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } - diff --git a/graphql/schema/testdata/schemagen/output/deprecated.graphql b/graphql/schema/testdata/schemagen/output/deprecated.graphql index cd3a425cc03..cd03147a304 100644 --- a/graphql/schema/testdata/schemagen/output/deprecated.graphql +++ b/graphql/schema/testdata/schemagen/output/deprecated.graphql @@ -3,8 +3,8 @@ ####################### type Atype { - iamDeprecated: String @deprecated - soAmI: String! @deprecated(reason: "because") + iamDeprecated: String @deprecated + soAmI: String! @deprecated(reason: "because") } ####################### @@ -23,162 +23,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -190,11 +190,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -203,77 +204,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -281,27 +283,27 @@ input StringHashFilter { ####################### type AddAtypePayload { - atype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] - numUids: Int + atype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] + numUids: Int } type AtypeAggregateResult { - count: Int - iamDeprecatedMin: String - iamDeprecatedMax: String - soAmIMin: String - soAmIMax: String + count: Int + iamDeprecatedMin: String + iamDeprecatedMax: String + soAmIMin: String + soAmIMax: String } type DeleteAtypePayload { - atype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] - msg: String - numUids: Int + atype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] + msg: String + numUids: Int } type UpdateAtypePayload { - atype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] - numUids: Int + atype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] + numUids: Int } ####################### @@ -309,13 +311,13 @@ type UpdateAtypePayload { ####################### enum AtypeHasFilter { - iamDeprecated - soAmI + iamDeprecated + soAmI } enum AtypeOrderable { - iamDeprecated - soAmI + iamDeprecated + soAmI } ####################### @@ -323,37 +325,37 @@ enum AtypeOrderable { ####################### input AddAtypeInput { - iamDeprecated: String - soAmI: String! + iamDeprecated: String + soAmI: String! } input AtypeFilter { - has: [AtypeHasFilter] - and: [AtypeFilter] - or: [AtypeFilter] - not: AtypeFilter + has: [AtypeHasFilter] + and: [AtypeFilter] + or: [AtypeFilter] + not: AtypeFilter } input AtypeOrder { - asc: AtypeOrderable - desc: AtypeOrderable - then: AtypeOrder + asc: AtypeOrderable + desc: AtypeOrderable + then: AtypeOrder } input AtypePatch { - iamDeprecated: String - soAmI: String + iamDeprecated: String + soAmI: String } input AtypeRef { - iamDeprecated: String - soAmI: String + iamDeprecated: String + soAmI: String } input UpdateAtypeInput { - filter: AtypeFilter! - set: AtypePatch - remove: AtypePatch + filter: AtypeFilter! + set: AtypePatch + remove: AtypePatch } ####################### @@ -361,8 +363,8 @@ input UpdateAtypeInput { ####################### type Query { - queryAtype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] - aggregateAtype(filter: AtypeFilter): AtypeAggregateResult + queryAtype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] + aggregateAtype(filter: AtypeFilter): AtypeAggregateResult } ####################### @@ -370,8 +372,7 @@ type Query { ####################### type Mutation { - addAtype(input: [AddAtypeInput!]!): AddAtypePayload - updateAtype(input: UpdateAtypeInput!): UpdateAtypePayload - deleteAtype(filter: AtypeFilter!): DeleteAtypePayload + addAtype(input: [AddAtypeInput!]!): AddAtypePayload + updateAtype(input: UpdateAtypeInput!): UpdateAtypePayload + deleteAtype(filter: AtypeFilter!): DeleteAtypePayload } - diff --git a/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql b/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql index 395ddae515b..f472615167b 100644 --- a/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql @@ -3,25 +3,28 @@ ####################### interface Movie { - id: ID! - name: String! - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] @dgraph(pred: "directed.movies") - directorAggregate(filter: DirectorFilter): DirectorAggregateResult + id: ID! + name: String! + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + @dgraph(pred: "directed.movies") + directorAggregate(filter: DirectorFilter): DirectorAggregateResult } type OscarMovie implements Movie { - id: ID! - name: String! - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] @dgraph(pred: "directed.movies") - year: Int! - directorAggregate(filter: DirectorFilter): DirectorAggregateResult + id: ID! + name: String! + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + @dgraph(pred: "directed.movies") + year: Int! + directorAggregate(filter: DirectorFilter): DirectorAggregateResult } type Director { - id: ID! - name: String! - directed(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] @dgraph(pred: "~directed.movies") - directedAggregate(filter: OscarMovieFilter): OscarMovieAggregateResult + id: ID! + name: String! + directed(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] + @dgraph(pred: "~directed.movies") + directedAggregate(filter: OscarMovieFilter): OscarMovieAggregateResult } ####################### @@ -40,162 +43,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -207,11 +210,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -220,77 +224,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -298,68 +303,83 @@ input StringHashFilter { ####################### type AddDirectorPayload { - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - numUids: Int + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + numUids: Int } type AddOscarMoviePayload { - oscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] - numUids: Int + oscarMovie( + filter: OscarMovieFilter + order: OscarMovieOrder + first: Int + offset: Int + ): [OscarMovie] + numUids: Int } type DeleteDirectorPayload { - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - msg: String - numUids: Int + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + msg: String + numUids: Int } type DeleteMoviePayload { - movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - msg: String - numUids: Int + movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + msg: String + numUids: Int } type DeleteOscarMoviePayload { - oscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] - msg: String - numUids: Int + oscarMovie( + filter: OscarMovieFilter + order: OscarMovieOrder + first: Int + offset: Int + ): [OscarMovie] + msg: String + numUids: Int } type DirectorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type MovieAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type OscarMovieAggregateResult { - count: Int - nameMin: String - nameMax: String - yearMin: Int - yearMax: Int - yearSum: Int - yearAvg: Float + count: Int + nameMin: String + nameMax: String + yearMin: Int + yearMax: Int + yearSum: Int + yearAvg: Float } type UpdateDirectorPayload { - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - numUids: Int + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + numUids: Int } type UpdateMoviePayload { - movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - numUids: Int + movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + numUids: Int } type UpdateOscarMoviePayload { - oscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] - numUids: Int + oscarMovie( + filter: OscarMovieFilter + order: OscarMovieOrder + first: Int + offset: Int + ): [OscarMovie] + numUids: Int } ####################### @@ -367,32 +387,32 @@ type UpdateOscarMoviePayload { ####################### enum DirectorHasFilter { - name - directed + name + directed } enum DirectorOrderable { - name + name } enum MovieHasFilter { - name - director + name + director } enum MovieOrderable { - name + name } enum OscarMovieHasFilter { - name - director - year + name + director + year } enum OscarMovieOrderable { - name - year + name + year } ####################### @@ -400,104 +420,104 @@ enum OscarMovieOrderable { ####################### input AddDirectorInput { - name: String! + name: String! } input AddOscarMovieInput { - name: String! - director: [DirectorRef] - year: Int! + name: String! + director: [DirectorRef] + year: Int! } input DirectorFilter { - id: [ID!] - has: [DirectorHasFilter] - and: [DirectorFilter] - or: [DirectorFilter] - not: DirectorFilter + id: [ID!] + has: [DirectorHasFilter] + and: [DirectorFilter] + or: [DirectorFilter] + not: DirectorFilter } input DirectorOrder { - asc: DirectorOrderable - desc: DirectorOrderable - then: DirectorOrder + asc: DirectorOrderable + desc: DirectorOrderable + then: DirectorOrder } input DirectorPatch { - name: String + name: String } input DirectorRef { - id: ID - name: String + id: ID + name: String } input MovieFilter { - id: [ID!] - has: [MovieHasFilter] - and: [MovieFilter] - or: [MovieFilter] - not: MovieFilter + id: [ID!] + has: [MovieHasFilter] + and: [MovieFilter] + or: [MovieFilter] + not: MovieFilter } input MovieOrder { - asc: MovieOrderable - desc: MovieOrderable - then: MovieOrder + asc: MovieOrderable + desc: MovieOrderable + then: MovieOrder } input MoviePatch { - name: String - director: [DirectorRef] + name: String + director: [DirectorRef] } input MovieRef { - id: ID! + id: ID! } input OscarMovieFilter { - id: [ID!] - has: [OscarMovieHasFilter] - and: [OscarMovieFilter] - or: [OscarMovieFilter] - not: OscarMovieFilter + id: [ID!] + has: [OscarMovieHasFilter] + and: [OscarMovieFilter] + or: [OscarMovieFilter] + not: OscarMovieFilter } input OscarMovieOrder { - asc: OscarMovieOrderable - desc: OscarMovieOrderable - then: OscarMovieOrder + asc: OscarMovieOrderable + desc: OscarMovieOrderable + then: OscarMovieOrder } input OscarMoviePatch { - name: String - director: [DirectorRef] - year: Int + name: String + director: [DirectorRef] + year: Int } input OscarMovieRef { - id: ID - name: String - director: [DirectorRef] - year: Int + id: ID + name: String + director: [DirectorRef] + year: Int } input UpdateDirectorInput { - filter: DirectorFilter! - set: DirectorPatch - remove: DirectorPatch + filter: DirectorFilter! + set: DirectorPatch + remove: DirectorPatch } input UpdateMovieInput { - filter: MovieFilter! - set: MoviePatch - remove: MoviePatch + filter: MovieFilter! + set: MoviePatch + remove: MoviePatch } input UpdateOscarMovieInput { - filter: OscarMovieFilter! - set: OscarMoviePatch - remove: OscarMoviePatch + filter: OscarMovieFilter! + set: OscarMoviePatch + remove: OscarMoviePatch } ####################### @@ -505,15 +525,20 @@ input UpdateOscarMovieInput { ####################### type Query { - getMovie(id: ID!): Movie - queryMovie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - aggregateMovie(filter: MovieFilter): MovieAggregateResult - getOscarMovie(id: ID!): OscarMovie - queryOscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] - aggregateOscarMovie(filter: OscarMovieFilter): OscarMovieAggregateResult - getDirector(id: ID!): Director - queryDirector(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - aggregateDirector(filter: DirectorFilter): DirectorAggregateResult + getMovie(id: ID!): Movie + queryMovie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + aggregateMovie(filter: MovieFilter): MovieAggregateResult + getOscarMovie(id: ID!): OscarMovie + queryOscarMovie( + filter: OscarMovieFilter + order: OscarMovieOrder + first: Int + offset: Int + ): [OscarMovie] + aggregateOscarMovie(filter: OscarMovieFilter): OscarMovieAggregateResult + getDirector(id: ID!): Director + queryDirector(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + aggregateDirector(filter: DirectorFilter): DirectorAggregateResult } ####################### @@ -521,13 +546,12 @@ type Query { ####################### type Mutation { - updateMovie(input: UpdateMovieInput!): UpdateMoviePayload - deleteMovie(filter: MovieFilter!): DeleteMoviePayload - addOscarMovie(input: [AddOscarMovieInput!]!): AddOscarMoviePayload - updateOscarMovie(input: UpdateOscarMovieInput!): UpdateOscarMoviePayload - deleteOscarMovie(filter: OscarMovieFilter!): DeleteOscarMoviePayload - addDirector(input: [AddDirectorInput!]!): AddDirectorPayload - updateDirector(input: UpdateDirectorInput!): UpdateDirectorPayload - deleteDirector(filter: DirectorFilter!): DeleteDirectorPayload + updateMovie(input: UpdateMovieInput!): UpdateMoviePayload + deleteMovie(filter: MovieFilter!): DeleteMoviePayload + addOscarMovie(input: [AddOscarMovieInput!]!): AddOscarMoviePayload + updateOscarMovie(input: UpdateOscarMovieInput!): UpdateOscarMoviePayload + deleteOscarMovie(filter: OscarMovieFilter!): DeleteOscarMoviePayload + addDirector(input: [AddDirectorInput!]!): AddDirectorPayload + updateDirector(input: UpdateDirectorInput!): UpdateDirectorPayload + deleteDirector(filter: DirectorFilter!): DeleteDirectorPayload } - diff --git a/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-with-interfaces.graphql b/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-with-interfaces.graphql index 6cfe972414e..4567be7784e 100644 --- a/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-with-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-with-interfaces.graphql @@ -3,25 +3,28 @@ ####################### interface Movie { - id: ID! - name: String! - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] @dgraph(pred: "~directed.movies") - directorAggregate(filter: DirectorFilter): DirectorAggregateResult + id: ID! + name: String! + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + @dgraph(pred: "~directed.movies") + directorAggregate(filter: DirectorFilter): DirectorAggregateResult } type OscarMovie implements Movie { - id: ID! - name: String! - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] @dgraph(pred: "~directed.movies") - year: Int! - directorAggregate(filter: DirectorFilter): DirectorAggregateResult + id: ID! + name: String! + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + @dgraph(pred: "~directed.movies") + year: Int! + directorAggregate(filter: DirectorFilter): DirectorAggregateResult } type Director { - id: ID! - name: String! - directed(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] @dgraph(pred: "directed.movies") - directedAggregate(filter: OscarMovieFilter): OscarMovieAggregateResult + id: ID! + name: String! + directed(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] + @dgraph(pred: "directed.movies") + directedAggregate(filter: OscarMovieFilter): OscarMovieAggregateResult } ####################### @@ -40,162 +43,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -207,11 +210,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -220,77 +224,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -298,68 +303,83 @@ input StringHashFilter { ####################### type AddDirectorPayload { - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - numUids: Int + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + numUids: Int } type AddOscarMoviePayload { - oscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] - numUids: Int + oscarMovie( + filter: OscarMovieFilter + order: OscarMovieOrder + first: Int + offset: Int + ): [OscarMovie] + numUids: Int } type DeleteDirectorPayload { - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - msg: String - numUids: Int + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + msg: String + numUids: Int } type DeleteMoviePayload { - movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - msg: String - numUids: Int + movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + msg: String + numUids: Int } type DeleteOscarMoviePayload { - oscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] - msg: String - numUids: Int + oscarMovie( + filter: OscarMovieFilter + order: OscarMovieOrder + first: Int + offset: Int + ): [OscarMovie] + msg: String + numUids: Int } type DirectorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type MovieAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type OscarMovieAggregateResult { - count: Int - nameMin: String - nameMax: String - yearMin: Int - yearMax: Int - yearSum: Int - yearAvg: Float + count: Int + nameMin: String + nameMax: String + yearMin: Int + yearMax: Int + yearSum: Int + yearAvg: Float } type UpdateDirectorPayload { - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - numUids: Int + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + numUids: Int } type UpdateMoviePayload { - movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - numUids: Int + movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + numUids: Int } type UpdateOscarMoviePayload { - oscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] - numUids: Int + oscarMovie( + filter: OscarMovieFilter + order: OscarMovieOrder + first: Int + offset: Int + ): [OscarMovie] + numUids: Int } ####################### @@ -367,32 +387,32 @@ type UpdateOscarMoviePayload { ####################### enum DirectorHasFilter { - name - directed + name + directed } enum DirectorOrderable { - name + name } enum MovieHasFilter { - name - director + name + director } enum MovieOrderable { - name + name } enum OscarMovieHasFilter { - name - director - year + name + director + year } enum OscarMovieOrderable { - name - year + name + year } ####################### @@ -400,103 +420,103 @@ enum OscarMovieOrderable { ####################### input AddDirectorInput { - name: String! - directed: [OscarMovieRef] + name: String! + directed: [OscarMovieRef] } input AddOscarMovieInput { - name: String! - year: Int! + name: String! + year: Int! } input DirectorFilter { - id: [ID!] - has: [DirectorHasFilter] - and: [DirectorFilter] - or: [DirectorFilter] - not: DirectorFilter + id: [ID!] + has: [DirectorHasFilter] + and: [DirectorFilter] + or: [DirectorFilter] + not: DirectorFilter } input DirectorOrder { - asc: DirectorOrderable - desc: DirectorOrderable - then: DirectorOrder + asc: DirectorOrderable + desc: DirectorOrderable + then: DirectorOrder } input DirectorPatch { - name: String - directed: [OscarMovieRef] + name: String + directed: [OscarMovieRef] } input DirectorRef { - id: ID - name: String - directed: [OscarMovieRef] + id: ID + name: String + directed: [OscarMovieRef] } input MovieFilter { - id: [ID!] - has: [MovieHasFilter] - and: [MovieFilter] - or: [MovieFilter] - not: MovieFilter + id: [ID!] + has: [MovieHasFilter] + and: [MovieFilter] + or: [MovieFilter] + not: MovieFilter } input MovieOrder { - asc: MovieOrderable - desc: MovieOrderable - then: MovieOrder + asc: MovieOrderable + desc: MovieOrderable + then: MovieOrder } input MoviePatch { - name: String + name: String } input MovieRef { - id: ID! + id: ID! } input OscarMovieFilter { - id: [ID!] - has: [OscarMovieHasFilter] - and: [OscarMovieFilter] - or: [OscarMovieFilter] - not: OscarMovieFilter + id: [ID!] + has: [OscarMovieHasFilter] + and: [OscarMovieFilter] + or: [OscarMovieFilter] + not: OscarMovieFilter } input OscarMovieOrder { - asc: OscarMovieOrderable - desc: OscarMovieOrderable - then: OscarMovieOrder + asc: OscarMovieOrderable + desc: OscarMovieOrderable + then: OscarMovieOrder } input OscarMoviePatch { - name: String - year: Int + name: String + year: Int } input OscarMovieRef { - id: ID - name: String - year: Int + id: ID + name: String + year: Int } input UpdateDirectorInput { - filter: DirectorFilter! - set: DirectorPatch - remove: DirectorPatch + filter: DirectorFilter! + set: DirectorPatch + remove: DirectorPatch } input UpdateMovieInput { - filter: MovieFilter! - set: MoviePatch - remove: MoviePatch + filter: MovieFilter! + set: MoviePatch + remove: MoviePatch } input UpdateOscarMovieInput { - filter: OscarMovieFilter! - set: OscarMoviePatch - remove: OscarMoviePatch + filter: OscarMovieFilter! + set: OscarMoviePatch + remove: OscarMoviePatch } ####################### @@ -504,15 +524,20 @@ input UpdateOscarMovieInput { ####################### type Query { - getMovie(id: ID!): Movie - queryMovie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - aggregateMovie(filter: MovieFilter): MovieAggregateResult - getOscarMovie(id: ID!): OscarMovie - queryOscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] - aggregateOscarMovie(filter: OscarMovieFilter): OscarMovieAggregateResult - getDirector(id: ID!): Director - queryDirector(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - aggregateDirector(filter: DirectorFilter): DirectorAggregateResult + getMovie(id: ID!): Movie + queryMovie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + aggregateMovie(filter: MovieFilter): MovieAggregateResult + getOscarMovie(id: ID!): OscarMovie + queryOscarMovie( + filter: OscarMovieFilter + order: OscarMovieOrder + first: Int + offset: Int + ): [OscarMovie] + aggregateOscarMovie(filter: OscarMovieFilter): OscarMovieAggregateResult + getDirector(id: ID!): Director + queryDirector(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + aggregateDirector(filter: DirectorFilter): DirectorAggregateResult } ####################### @@ -520,13 +545,12 @@ type Query { ####################### type Mutation { - updateMovie(input: UpdateMovieInput!): UpdateMoviePayload - deleteMovie(filter: MovieFilter!): DeleteMoviePayload - addOscarMovie(input: [AddOscarMovieInput!]!): AddOscarMoviePayload - updateOscarMovie(input: UpdateOscarMovieInput!): UpdateOscarMoviePayload - deleteOscarMovie(filter: OscarMovieFilter!): DeleteOscarMoviePayload - addDirector(input: [AddDirectorInput!]!): AddDirectorPayload - updateDirector(input: UpdateDirectorInput!): UpdateDirectorPayload - deleteDirector(filter: DirectorFilter!): DeleteDirectorPayload + updateMovie(input: UpdateMovieInput!): UpdateMoviePayload + deleteMovie(filter: MovieFilter!): DeleteMoviePayload + addOscarMovie(input: [AddOscarMovieInput!]!): AddOscarMoviePayload + updateOscarMovie(input: UpdateOscarMovieInput!): UpdateOscarMoviePayload + deleteOscarMovie(filter: OscarMovieFilter!): DeleteOscarMoviePayload + addDirector(input: [AddDirectorInput!]!): AddDirectorPayload + updateDirector(input: UpdateDirectorInput!): UpdateDirectorPayload + deleteDirector(filter: DirectorFilter!): DeleteDirectorPayload } - diff --git a/graphql/schema/testdata/schemagen/output/embedding-directive-with-similar-queries.graphql b/graphql/schema/testdata/schemagen/output/embedding-directive-with-similar-queries.graphql index f0ecf0a1e0d..3623d4441fb 100644 --- a/graphql/schema/testdata/schemagen/output/embedding-directive-with-similar-queries.graphql +++ b/graphql/schema/testdata/schemagen/output/embedding-directive-with-similar-queries.graphql @@ -3,26 +3,31 @@ ####################### type Product { - id: String! @id - description: String - title: String - imageUrl: String - product_vector: [Float!] @embedding @search(by: ["hnsw(metric: euclidean, exponent: 4)"]) - vector_distance: Float + id: String! @id + description: String + title: String + imageUrl: String + product_vector: [Float!] @embedding @search(by: ["hnsw(metric: euclidean, exponent: 4)"]) + vector_distance: Float } type Purchase @lambdaOnMutate(add: true) { - user(filter: UserFilter): User @hasInverse(field: "purchase_history") - product(filter: ProductFilter): Product - date: DateTime @search(by: [day]) + user(filter: UserFilter): User @hasInverse(field: "purchase_history") + product(filter: ProductFilter): Product + date: DateTime @search(by: [day]) } type User { - email: String! @id - purchase_history(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] @hasInverse(field: user) - user_vector: [Float!] @embedding @search(by: ["hnsw"]) - vector_distance: Float - purchase_historyAggregate(filter: PurchaseFilter): PurchaseAggregateResult + email: String! @id + purchase_history( + filter: PurchaseFilter + order: PurchaseOrder + first: Int + offset: Int + ): [Purchase] @hasInverse(field: user) + user_vector: [Float!] @embedding @search(by: ["hnsw"]) + vector_distance: Float + purchase_historyAggregate(filter: PurchaseFilter): PurchaseAggregateResult } ####################### @@ -41,162 +46,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -208,11 +213,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -221,77 +227,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -299,75 +306,75 @@ input StringHashFilter { ####################### type AddProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } type AddPurchasePayload { - purchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] - numUids: Int + purchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] + numUids: Int } type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - msg: String - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + msg: String + numUids: Int } type DeletePurchasePayload { - purchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] - msg: String - numUids: Int + purchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] + msg: String + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type ProductAggregateResult { - count: Int - idMin: String - idMax: String - descriptionMin: String - descriptionMax: String - titleMin: String - titleMax: String - imageUrlMin: String - imageUrlMax: String + count: Int + idMin: String + idMax: String + descriptionMin: String + descriptionMax: String + titleMin: String + titleMax: String + imageUrlMin: String + imageUrlMax: String } type PurchaseAggregateResult { - count: Int - dateMin: DateTime - dateMax: DateTime + count: Int + dateMin: DateTime + dateMax: DateTime } type UpdateProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } type UpdatePurchasePayload { - purchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] - numUids: Int + purchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - emailMin: String - emailMax: String + count: Int + emailMin: String + emailMax: String } ####################### @@ -375,48 +382,48 @@ type UserAggregateResult { ####################### enum ProductEmbedding { - product_vector + product_vector } enum ProductHasFilter { - id - description - title - imageUrl - product_vector - vector_distance + id + description + title + imageUrl + product_vector + vector_distance } enum ProductOrderable { - id - description - title - imageUrl + id + description + title + imageUrl } enum PurchaseHasFilter { - user - product - date + user + product + date } enum PurchaseOrderable { - date + date } enum UserEmbedding { - user_vector + user_vector } enum UserHasFilter { - email - purchase_history - user_vector - vector_distance + email + purchase_history + user_vector + vector_distance } enum UserOrderable { - email + email } ####################### @@ -424,123 +431,123 @@ enum UserOrderable { ####################### input AddProductInput { - id: String! - description: String - title: String - imageUrl: String - product_vector: [Float!] + id: String! + description: String + title: String + imageUrl: String + product_vector: [Float!] } input AddPurchaseInput { - user: UserRef - product: ProductRef - date: DateTime + user: UserRef + product: ProductRef + date: DateTime } input AddUserInput { - email: String! - purchase_history: [PurchaseRef] - user_vector: [Float!] + email: String! + purchase_history: [PurchaseRef] + user_vector: [Float!] } input ProductFilter { - id: StringHashFilter - has: [ProductHasFilter] - and: [ProductFilter] - or: [ProductFilter] - not: ProductFilter + id: StringHashFilter + has: [ProductHasFilter] + and: [ProductFilter] + or: [ProductFilter] + not: ProductFilter } input ProductOrder { - asc: ProductOrderable - desc: ProductOrderable - then: ProductOrder + asc: ProductOrderable + desc: ProductOrderable + then: ProductOrder } input ProductPatch { - id: String - description: String - title: String - imageUrl: String - product_vector: [Float!] + id: String + description: String + title: String + imageUrl: String + product_vector: [Float!] } input ProductRef { - id: String - description: String - title: String - imageUrl: String - product_vector: [Float!] + id: String + description: String + title: String + imageUrl: String + product_vector: [Float!] } input PurchaseFilter { - date: DateTimeFilter - has: [PurchaseHasFilter] - and: [PurchaseFilter] - or: [PurchaseFilter] - not: PurchaseFilter + date: DateTimeFilter + has: [PurchaseHasFilter] + and: [PurchaseFilter] + or: [PurchaseFilter] + not: PurchaseFilter } input PurchaseOrder { - asc: PurchaseOrderable - desc: PurchaseOrderable - then: PurchaseOrder + asc: PurchaseOrderable + desc: PurchaseOrderable + then: PurchaseOrder } input PurchasePatch { - user: UserRef - product: ProductRef - date: DateTime + user: UserRef + product: ProductRef + date: DateTime } input PurchaseRef { - user: UserRef - product: ProductRef - date: DateTime + user: UserRef + product: ProductRef + date: DateTime } input UpdateProductInput { - filter: ProductFilter! - set: ProductPatch - remove: ProductPatch + filter: ProductFilter! + set: ProductPatch + remove: ProductPatch } input UpdatePurchaseInput { - filter: PurchaseFilter! - set: PurchasePatch - remove: PurchasePatch + filter: PurchaseFilter! + set: PurchasePatch + remove: PurchasePatch } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - email: StringHashFilter - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + email: StringHashFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - email: String - purchase_history: [PurchaseRef] - user_vector: [Float!] + email: String + purchase_history: [PurchaseRef] + user_vector: [Float!] } input UserRef { - email: String - purchase_history: [PurchaseRef] - user_vector: [Float!] + email: String + purchase_history: [PurchaseRef] + user_vector: [Float!] } ####################### @@ -548,18 +555,33 @@ input UserRef { ####################### type Query { - getProduct(id: String!): Product - querySimilarProductById(id: String!, by: ProductEmbedding!, topK: Int!, filter: ProductFilter): [Product] - querySimilarProductByEmbedding(by: ProductEmbedding!, topK: Int!, vector: [Float!]!, filter: ProductFilter): [Product] - queryProduct(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - aggregateProduct(filter: ProductFilter): ProductAggregateResult - queryPurchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] - aggregatePurchase(filter: PurchaseFilter): PurchaseAggregateResult - getUser(email: String!): User - querySimilarUserById(email: String!, by: UserEmbedding!, topK: Int!, filter: UserFilter): [User] - querySimilarUserByEmbedding(by: UserEmbedding!, topK: Int!, vector: [Float!]!, filter: UserFilter): [User] - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getProduct(id: String!): Product + querySimilarProductById( + id: String! + by: ProductEmbedding! + topK: Int! + filter: ProductFilter + ): [Product] + querySimilarProductByEmbedding( + by: ProductEmbedding! + topK: Int! + vector: [Float!]! + filter: ProductFilter + ): [Product] + queryProduct(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + aggregateProduct(filter: ProductFilter): ProductAggregateResult + queryPurchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] + aggregatePurchase(filter: PurchaseFilter): PurchaseAggregateResult + getUser(email: String!): User + querySimilarUserById(email: String!, by: UserEmbedding!, topK: Int!, filter: UserFilter): [User] + querySimilarUserByEmbedding( + by: UserEmbedding! + topK: Int! + vector: [Float!]! + filter: UserFilter + ): [User] + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -567,14 +589,13 @@ type Query { ####################### type Mutation { - addProduct(input: [AddProductInput!]!, upsert: Boolean): AddProductPayload - updateProduct(input: UpdateProductInput!): UpdateProductPayload - deleteProduct(filter: ProductFilter!): DeleteProductPayload - addPurchase(input: [AddPurchaseInput!]!): AddPurchasePayload - updatePurchase(input: UpdatePurchaseInput!): UpdatePurchasePayload - deletePurchase(filter: PurchaseFilter!): DeletePurchasePayload - addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addProduct(input: [AddProductInput!]!, upsert: Boolean): AddProductPayload + updateProduct(input: UpdateProductInput!): UpdateProductPayload + deleteProduct(filter: ProductFilter!): DeleteProductPayload + addPurchase(input: [AddPurchaseInput!]!): AddPurchasePayload + updatePurchase(input: UpdatePurchaseInput!): UpdatePurchasePayload + deletePurchase(filter: PurchaseFilter!): DeletePurchasePayload + addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } - diff --git a/graphql/schema/testdata/schemagen/output/field-with-id-directive.graphql b/graphql/schema/testdata/schemagen/output/field-with-id-directive.graphql index 6a0a246aa85..b243dfcd5c1 100644 --- a/graphql/schema/testdata/schemagen/output/field-with-id-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/field-with-id-directive.graphql @@ -3,22 +3,22 @@ ####################### type Post { - postID: ID - content: String! - author(filter: AuthorFilter): Author! - genre(filter: GenreFilter): Genre + postID: ID + content: String! + author(filter: AuthorFilter): Author! + genre(filter: GenreFilter): Genre } type Author { - id: ID - name: String! @id @search(by: [regexp]) - pen_name: String - posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID + name: String! @id @search(by: [regexp]) + pen_name: String + posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + postsAggregate(filter: PostFilter): PostAggregateResult } type Genre { - name: String! @id @search(by: [exact]) + name: String! @id @search(by: [exact]) } ####################### @@ -37,162 +37,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -204,11 +204,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -217,77 +218,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -295,71 +297,71 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + numUids: Int } type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String - pen_nameMin: String - pen_nameMax: String + count: Int + nameMin: String + nameMax: String + pen_nameMin: String + pen_nameMax: String } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeleteGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - msg: String - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type GenreAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type PostAggregateResult { - count: Int - contentMin: String - contentMax: String + count: Int + contentMin: String + contentMax: String } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdateGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -367,32 +369,32 @@ type UpdatePostPayload { ####################### enum AuthorHasFilter { - name - pen_name - posts + name + pen_name + posts } enum AuthorOrderable { - name - pen_name + name + pen_name } enum GenreHasFilter { - name + name } enum GenreOrderable { - name + name } enum PostHasFilter { - content - author - genre + content + author + genre } enum PostOrderable { - content + content } ####################### @@ -400,120 +402,120 @@ enum PostOrderable { ####################### input AddAuthorInput { - name: String! - pen_name: String - posts: [PostRef] + name: String! + pen_name: String + posts: [PostRef] } input AddGenreInput { - name: String! + name: String! } input AddPostInput { - content: String! - author: AuthorRef! - genre: GenreRef + content: String! + author: AuthorRef! + genre: GenreRef } input AuthorFilter { - id: [ID!] - name: StringHashFilter_StringRegExpFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + name: StringHashFilter_StringRegExpFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - pen_name: String - posts: [PostRef] + name: String + pen_name: String + posts: [PostRef] } input AuthorRef { - id: ID - name: String - pen_name: String - posts: [PostRef] + id: ID + name: String + pen_name: String + posts: [PostRef] } input GenreFilter { - name: StringExactFilter - has: [GenreHasFilter] - and: [GenreFilter] - or: [GenreFilter] - not: GenreFilter + name: StringExactFilter + has: [GenreHasFilter] + and: [GenreFilter] + or: [GenreFilter] + not: GenreFilter } input GenreOrder { - asc: GenreOrderable - desc: GenreOrderable - then: GenreOrder + asc: GenreOrderable + desc: GenreOrderable + then: GenreOrder } input GenrePatch { - name: String + name: String } input GenreRef { - name: String! + name: String! } input PostFilter { - postID: [ID!] - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + postID: [ID!] + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - content: String - author: AuthorRef - genre: GenreRef + content: String + author: AuthorRef + genre: GenreRef } input PostRef { - postID: ID - content: String - author: AuthorRef - genre: GenreRef + postID: ID + content: String + author: AuthorRef + genre: GenreRef } input StringHashFilter_StringRegExpFilter { - eq: String - in: [String] - regexp: String + eq: String + in: [String] + regexp: String } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdateGenreInput { - filter: GenreFilter! - set: GenrePatch - remove: GenrePatch + filter: GenreFilter! + set: GenrePatch + remove: GenrePatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -521,15 +523,15 @@ input UpdatePostInput { ####################### type Query { - getPost(postID: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getAuthor(id: ID, name: String): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - getGenre(name: String!): Genre - queryGenre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - aggregateGenre(filter: GenreFilter): GenreAggregateResult + getPost(postID: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getAuthor(id: ID, name: String): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getGenre(name: String!): Genre + queryGenre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + aggregateGenre(filter: GenreFilter): GenreAggregateResult } ####################### @@ -537,14 +539,13 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addAuthor(input: [AddAuthorInput!]!, upsert: Boolean): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - addGenre(input: [AddGenreInput!]!, upsert: Boolean): AddGenrePayload - updateGenre(input: UpdateGenreInput!): UpdateGenrePayload - deleteGenre(filter: GenreFilter!): DeleteGenrePayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addAuthor(input: [AddAuthorInput!]!, upsert: Boolean): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addGenre(input: [AddGenreInput!]!, upsert: Boolean): AddGenrePayload + updateGenre(input: UpdateGenreInput!): UpdateGenrePayload + deleteGenre(filter: GenreFilter!): DeleteGenrePayload } - diff --git a/graphql/schema/testdata/schemagen/output/field-with-multiple-@id-fields.graphql b/graphql/schema/testdata/schemagen/output/field-with-multiple-@id-fields.graphql index 71548212021..6517ca5ab13 100644 --- a/graphql/schema/testdata/schemagen/output/field-with-multiple-@id-fields.graphql +++ b/graphql/schema/testdata/schemagen/output/field-with-multiple-@id-fields.graphql @@ -3,22 +3,22 @@ ####################### type Post { - postID: ID - content: String! - author(filter: AuthorFilter): Author! - genre(filter: GenreFilter): Genre + postID: ID + content: String! + author(filter: AuthorFilter): Author! + genre(filter: GenreFilter): Genre } type Author { - id: ID - name: String! @id @search(by: [regexp]) - pen_name: String! @id - posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID + name: String! @id @search(by: [regexp]) + pen_name: String! @id + posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + postsAggregate(filter: PostFilter): PostAggregateResult } type Genre { - name: String! @id + name: String! @id } ####################### @@ -37,162 +37,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -204,11 +204,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -217,77 +218,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -295,71 +297,71 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + numUids: Int } type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String - pen_nameMin: String - pen_nameMax: String + count: Int + nameMin: String + nameMax: String + pen_nameMin: String + pen_nameMax: String } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeleteGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - msg: String - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type GenreAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type PostAggregateResult { - count: Int - contentMin: String - contentMax: String + count: Int + contentMin: String + contentMax: String } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdateGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -367,32 +369,32 @@ type UpdatePostPayload { ####################### enum AuthorHasFilter { - name - pen_name - posts + name + pen_name + posts } enum AuthorOrderable { - name - pen_name + name + pen_name } enum GenreHasFilter { - name + name } enum GenreOrderable { - name + name } enum PostHasFilter { - content - author - genre + content + author + genre } enum PostOrderable { - content + content } ####################### @@ -400,121 +402,121 @@ enum PostOrderable { ####################### input AddAuthorInput { - name: String! - pen_name: String! - posts: [PostRef] + name: String! + pen_name: String! + posts: [PostRef] } input AddGenreInput { - name: String! + name: String! } input AddPostInput { - content: String! - author: AuthorRef! - genre: GenreRef + content: String! + author: AuthorRef! + genre: GenreRef } input AuthorFilter { - id: [ID!] - name: StringHashFilter_StringRegExpFilter - pen_name: StringHashFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + name: StringHashFilter_StringRegExpFilter + pen_name: StringHashFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - pen_name: String - posts: [PostRef] + name: String + pen_name: String + posts: [PostRef] } input AuthorRef { - id: ID - name: String - pen_name: String - posts: [PostRef] + id: ID + name: String + pen_name: String + posts: [PostRef] } input GenreFilter { - name: StringHashFilter - has: [GenreHasFilter] - and: [GenreFilter] - or: [GenreFilter] - not: GenreFilter + name: StringHashFilter + has: [GenreHasFilter] + and: [GenreFilter] + or: [GenreFilter] + not: GenreFilter } input GenreOrder { - asc: GenreOrderable - desc: GenreOrderable - then: GenreOrder + asc: GenreOrderable + desc: GenreOrderable + then: GenreOrder } input GenrePatch { - name: String + name: String } input GenreRef { - name: String! + name: String! } input PostFilter { - postID: [ID!] - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + postID: [ID!] + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - content: String - author: AuthorRef - genre: GenreRef + content: String + author: AuthorRef + genre: GenreRef } input PostRef { - postID: ID - content: String - author: AuthorRef - genre: GenreRef + postID: ID + content: String + author: AuthorRef + genre: GenreRef } input StringHashFilter_StringRegExpFilter { - eq: String - in: [String] - regexp: String + eq: String + in: [String] + regexp: String } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdateGenreInput { - filter: GenreFilter! - set: GenrePatch - remove: GenrePatch + filter: GenreFilter! + set: GenrePatch + remove: GenrePatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -522,15 +524,15 @@ input UpdatePostInput { ####################### type Query { - getPost(postID: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getAuthor(id: ID, name: String, pen_name: String): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - getGenre(name: String!): Genre - queryGenre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - aggregateGenre(filter: GenreFilter): GenreAggregateResult + getPost(postID: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getAuthor(id: ID, name: String, pen_name: String): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getGenre(name: String!): Genre + queryGenre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + aggregateGenre(filter: GenreFilter): GenreAggregateResult } ####################### @@ -538,14 +540,13 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addAuthor(input: [AddAuthorInput!]!, upsert: Boolean): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - addGenre(input: [AddGenreInput!]!, upsert: Boolean): AddGenrePayload - updateGenre(input: UpdateGenreInput!): UpdateGenrePayload - deleteGenre(filter: GenreFilter!): DeleteGenrePayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addAuthor(input: [AddAuthorInput!]!, upsert: Boolean): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addGenre(input: [AddGenreInput!]!, upsert: Boolean): AddGenrePayload + updateGenre(input: UpdateGenreInput!): UpdateGenrePayload + deleteGenre(filter: GenreFilter!): DeleteGenrePayload } - diff --git a/graphql/schema/testdata/schemagen/output/field-with-reverse-predicate-in-dgraph-directive.graphql b/graphql/schema/testdata/schemagen/output/field-with-reverse-predicate-in-dgraph-directive.graphql index 31b594c2a7e..1d31ebac1cf 100644 --- a/graphql/schema/testdata/schemagen/output/field-with-reverse-predicate-in-dgraph-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/field-with-reverse-predicate-in-dgraph-directive.graphql @@ -3,17 +3,23 @@ ####################### type Movie { - id: ID! - name: String! - director(filter: MovieDirectorFilter, order: MovieDirectorOrder, first: Int, offset: Int): [MovieDirector] @dgraph(pred: "~directed.movies") - directorAggregate(filter: MovieDirectorFilter): MovieDirectorAggregateResult + id: ID! + name: String! + director( + filter: MovieDirectorFilter + order: MovieDirectorOrder + first: Int + offset: Int + ): [MovieDirector] @dgraph(pred: "~directed.movies") + directorAggregate(filter: MovieDirectorFilter): MovieDirectorAggregateResult } type MovieDirector { - id: ID! - name: String! - directed(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] @dgraph(pred: "directed.movies") - directedAggregate(filter: MovieFilter): MovieAggregateResult + id: ID! + name: String! + directed(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + @dgraph(pred: "directed.movies") + directedAggregate(filter: MovieFilter): MovieAggregateResult } ####################### @@ -32,162 +38,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -199,11 +205,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -212,77 +219,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -290,47 +298,62 @@ input StringHashFilter { ####################### type AddMovieDirectorPayload { - movieDirector(filter: MovieDirectorFilter, order: MovieDirectorOrder, first: Int, offset: Int): [MovieDirector] - numUids: Int + movieDirector( + filter: MovieDirectorFilter + order: MovieDirectorOrder + first: Int + offset: Int + ): [MovieDirector] + numUids: Int } type AddMoviePayload { - movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - numUids: Int + movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + numUids: Int } type DeleteMovieDirectorPayload { - movieDirector(filter: MovieDirectorFilter, order: MovieDirectorOrder, first: Int, offset: Int): [MovieDirector] - msg: String - numUids: Int + movieDirector( + filter: MovieDirectorFilter + order: MovieDirectorOrder + first: Int + offset: Int + ): [MovieDirector] + msg: String + numUids: Int } type DeleteMoviePayload { - movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - msg: String - numUids: Int + movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + msg: String + numUids: Int } type MovieAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type MovieDirectorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type UpdateMovieDirectorPayload { - movieDirector(filter: MovieDirectorFilter, order: MovieDirectorOrder, first: Int, offset: Int): [MovieDirector] - numUids: Int + movieDirector( + filter: MovieDirectorFilter + order: MovieDirectorOrder + first: Int + offset: Int + ): [MovieDirector] + numUids: Int } type UpdateMoviePayload { - movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - numUids: Int + movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + numUids: Int } ####################### @@ -338,21 +361,21 @@ type UpdateMoviePayload { ####################### enum MovieDirectorHasFilter { - name - directed + name + directed } enum MovieDirectorOrderable { - name + name } enum MovieHasFilter { - name - director + name + director } enum MovieOrderable { - name + name } ####################### @@ -360,72 +383,72 @@ enum MovieOrderable { ####################### input AddMovieDirectorInput { - name: String! - directed: [MovieRef] + name: String! + directed: [MovieRef] } input AddMovieInput { - name: String! + name: String! } input MovieDirectorFilter { - id: [ID!] - has: [MovieDirectorHasFilter] - and: [MovieDirectorFilter] - or: [MovieDirectorFilter] - not: MovieDirectorFilter + id: [ID!] + has: [MovieDirectorHasFilter] + and: [MovieDirectorFilter] + or: [MovieDirectorFilter] + not: MovieDirectorFilter } input MovieDirectorOrder { - asc: MovieDirectorOrderable - desc: MovieDirectorOrderable - then: MovieDirectorOrder + asc: MovieDirectorOrderable + desc: MovieDirectorOrderable + then: MovieDirectorOrder } input MovieDirectorPatch { - name: String - directed: [MovieRef] + name: String + directed: [MovieRef] } input MovieDirectorRef { - id: ID - name: String - directed: [MovieRef] + id: ID + name: String + directed: [MovieRef] } input MovieFilter { - id: [ID!] - has: [MovieHasFilter] - and: [MovieFilter] - or: [MovieFilter] - not: MovieFilter + id: [ID!] + has: [MovieHasFilter] + and: [MovieFilter] + or: [MovieFilter] + not: MovieFilter } input MovieOrder { - asc: MovieOrderable - desc: MovieOrderable - then: MovieOrder + asc: MovieOrderable + desc: MovieOrderable + then: MovieOrder } input MoviePatch { - name: String + name: String } input MovieRef { - id: ID - name: String + id: ID + name: String } input UpdateMovieDirectorInput { - filter: MovieDirectorFilter! - set: MovieDirectorPatch - remove: MovieDirectorPatch + filter: MovieDirectorFilter! + set: MovieDirectorPatch + remove: MovieDirectorPatch } input UpdateMovieInput { - filter: MovieFilter! - set: MoviePatch - remove: MoviePatch + filter: MovieFilter! + set: MoviePatch + remove: MoviePatch } ####################### @@ -433,12 +456,17 @@ input UpdateMovieInput { ####################### type Query { - getMovie(id: ID!): Movie - queryMovie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - aggregateMovie(filter: MovieFilter): MovieAggregateResult - getMovieDirector(id: ID!): MovieDirector - queryMovieDirector(filter: MovieDirectorFilter, order: MovieDirectorOrder, first: Int, offset: Int): [MovieDirector] - aggregateMovieDirector(filter: MovieDirectorFilter): MovieDirectorAggregateResult + getMovie(id: ID!): Movie + queryMovie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + aggregateMovie(filter: MovieFilter): MovieAggregateResult + getMovieDirector(id: ID!): MovieDirector + queryMovieDirector( + filter: MovieDirectorFilter + order: MovieDirectorOrder + first: Int + offset: Int + ): [MovieDirector] + aggregateMovieDirector(filter: MovieDirectorFilter): MovieDirectorAggregateResult } ####################### @@ -446,11 +474,10 @@ type Query { ####################### type Mutation { - addMovie(input: [AddMovieInput!]!): AddMoviePayload - updateMovie(input: UpdateMovieInput!): UpdateMoviePayload - deleteMovie(filter: MovieFilter!): DeleteMoviePayload - addMovieDirector(input: [AddMovieDirectorInput!]!): AddMovieDirectorPayload - updateMovieDirector(input: UpdateMovieDirectorInput!): UpdateMovieDirectorPayload - deleteMovieDirector(filter: MovieDirectorFilter!): DeleteMovieDirectorPayload + addMovie(input: [AddMovieInput!]!): AddMoviePayload + updateMovie(input: UpdateMovieInput!): UpdateMoviePayload + deleteMovie(filter: MovieFilter!): DeleteMoviePayload + addMovieDirector(input: [AddMovieDirectorInput!]!): AddMovieDirectorPayload + updateMovieDirector(input: UpdateMovieDirectorInput!): UpdateMovieDirectorPayload + deleteMovieDirector(filter: MovieDirectorFilter!): DeleteMovieDirectorPayload } - diff --git a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-all-empty.graphql b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-all-empty.graphql index 2cf10c23814..675fcdcbba8 100644 --- a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-all-empty.graphql +++ b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-all-empty.graphql @@ -3,20 +3,20 @@ ####################### type X { - name(filter: YFilter, first: Int, offset: Int): [Y] - f1(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f1") - nameAggregate(filter: YFilter): YAggregateResult - f1Aggregate(filter: YFilter): YAggregateResult + name(filter: YFilter, first: Int, offset: Int): [Y] + f1(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f1") + nameAggregate(filter: YFilter): YAggregateResult + f1Aggregate(filter: YFilter): YAggregateResult } type Y { - f1(filter: XFilter, first: Int, offset: Int): [X] @dgraph(pred: "~f1") - f1Aggregate(filter: XFilter): XAggregateResult + f1(filter: XFilter, first: Int, offset: Int): [X] @dgraph(pred: "~f1") + f1Aggregate(filter: XFilter): XAggregateResult } type Z { - add(filter: XFilter, first: Int, offset: Int): [X] - addAggregate(filter: XFilter): XAggregateResult + add(filter: XFilter, first: Int, offset: Int): [X] + addAggregate(filter: XFilter): XAggregateResult } ####################### @@ -35,162 +35,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -202,11 +202,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -215,77 +216,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -293,53 +295,53 @@ input StringHashFilter { ####################### type AddXPayload { - x(filter: XFilter, first: Int, offset: Int): [X] - numUids: Int + x(filter: XFilter, first: Int, offset: Int): [X] + numUids: Int } type AddZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + numUids: Int } type DeleteXPayload { - x(filter: XFilter, first: Int, offset: Int): [X] - msg: String - numUids: Int + x(filter: XFilter, first: Int, offset: Int): [X] + msg: String + numUids: Int } type DeleteYPayload { - y(filter: YFilter, first: Int, offset: Int): [Y] - msg: String - numUids: Int + y(filter: YFilter, first: Int, offset: Int): [Y] + msg: String + numUids: Int } type DeleteZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - msg: String - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + msg: String + numUids: Int } type UpdateXPayload { - x(filter: XFilter, first: Int, offset: Int): [X] - numUids: Int + x(filter: XFilter, first: Int, offset: Int): [X] + numUids: Int } type UpdateZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + numUids: Int } type XAggregateResult { - count: Int + count: Int } type YAggregateResult { - count: Int + count: Int } type ZAggregateResult { - count: Int + count: Int } ####################### @@ -347,16 +349,16 @@ type ZAggregateResult { ####################### enum XHasFilter { - name - f1 + name + f1 } enum YHasFilter { - f1 + f1 } enum ZHasFilter { - add + add } ####################### @@ -364,21 +366,21 @@ enum ZHasFilter { ####################### input XFilter { - has: [XHasFilter] - and: [XFilter] - or: [XFilter] - not: XFilter + has: [XHasFilter] + and: [XFilter] + or: [XFilter] + not: XFilter } input YFilter { - not: YFilter + not: YFilter } input ZFilter { - has: [ZHasFilter] - and: [ZFilter] - or: [ZFilter] - not: ZFilter + has: [ZHasFilter] + and: [ZFilter] + or: [ZFilter] + not: ZFilter } ####################### @@ -386,12 +388,12 @@ input ZFilter { ####################### type Query { - queryX(filter: XFilter, first: Int, offset: Int): [X] - aggregateX(filter: XFilter): XAggregateResult - queryY(filter: YFilter, first: Int, offset: Int): [Y] - aggregateY(filter: YFilter): YAggregateResult - queryZ(filter: ZFilter, first: Int, offset: Int): [Z] - aggregateZ(filter: ZFilter): ZAggregateResult + queryX(filter: XFilter, first: Int, offset: Int): [X] + aggregateX(filter: XFilter): XAggregateResult + queryY(filter: YFilter, first: Int, offset: Int): [Y] + aggregateY(filter: YFilter): YAggregateResult + queryZ(filter: ZFilter, first: Int, offset: Int): [Z] + aggregateZ(filter: ZFilter): ZAggregateResult } ####################### @@ -399,8 +401,7 @@ type Query { ####################### type Mutation { - deleteX(filter: XFilter!): DeleteXPayload - deleteY(filter: YFilter!): DeleteYPayload - deleteZ(filter: ZFilter!): DeleteZPayload + deleteX(filter: XFilter!): DeleteXPayload + deleteY(filter: YFilter!): DeleteYPayload + deleteZ(filter: ZFilter!): DeleteZPayload } - diff --git a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-circular.graphql b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-circular.graphql index 78e536d76ed..c05def0d14f 100644 --- a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-circular.graphql +++ b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-circular.graphql @@ -3,24 +3,24 @@ ####################### type X { - f1(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f1") - f3(filter: ZFilter, first: Int, offset: Int): [Z] @dgraph(pred: "~f3") - f1Aggregate(filter: YFilter): YAggregateResult - f3Aggregate(filter: ZFilter): ZAggregateResult + f1(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f1") + f3(filter: ZFilter, first: Int, offset: Int): [Z] @dgraph(pred: "~f3") + f1Aggregate(filter: YFilter): YAggregateResult + f3Aggregate(filter: ZFilter): ZAggregateResult } type Y { - f1(filter: XFilter, first: Int, offset: Int): [X] @dgraph(pred: "~f1") - f2(filter: ZFilter, first: Int, offset: Int): [Z] @dgraph(pred: "f2") - f1Aggregate(filter: XFilter): XAggregateResult - f2Aggregate(filter: ZFilter): ZAggregateResult + f1(filter: XFilter, first: Int, offset: Int): [X] @dgraph(pred: "~f1") + f2(filter: ZFilter, first: Int, offset: Int): [Z] @dgraph(pred: "f2") + f1Aggregate(filter: XFilter): XAggregateResult + f2Aggregate(filter: ZFilter): ZAggregateResult } type Z { - f2(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "~f2") - f3(filter: XFilter, first: Int, offset: Int): [X] @dgraph(pred: "f3") - f2Aggregate(filter: YFilter): YAggregateResult - f3Aggregate(filter: XFilter): XAggregateResult + f2(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "~f2") + f3(filter: XFilter, first: Int, offset: Int): [X] @dgraph(pred: "f3") + f2Aggregate(filter: YFilter): YAggregateResult + f3Aggregate(filter: XFilter): XAggregateResult } ####################### @@ -39,162 +39,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -206,11 +206,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -219,77 +220,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -297,63 +299,63 @@ input StringHashFilter { ####################### type AddXPayload { - x(filter: XFilter, first: Int, offset: Int): [X] - numUids: Int + x(filter: XFilter, first: Int, offset: Int): [X] + numUids: Int } type AddYPayload { - y(filter: YFilter, first: Int, offset: Int): [Y] - numUids: Int + y(filter: YFilter, first: Int, offset: Int): [Y] + numUids: Int } type AddZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + numUids: Int } type DeleteXPayload { - x(filter: XFilter, first: Int, offset: Int): [X] - msg: String - numUids: Int + x(filter: XFilter, first: Int, offset: Int): [X] + msg: String + numUids: Int } type DeleteYPayload { - y(filter: YFilter, first: Int, offset: Int): [Y] - msg: String - numUids: Int + y(filter: YFilter, first: Int, offset: Int): [Y] + msg: String + numUids: Int } type DeleteZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - msg: String - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + msg: String + numUids: Int } type UpdateXPayload { - x(filter: XFilter, first: Int, offset: Int): [X] - numUids: Int + x(filter: XFilter, first: Int, offset: Int): [X] + numUids: Int } type UpdateYPayload { - y(filter: YFilter, first: Int, offset: Int): [Y] - numUids: Int + y(filter: YFilter, first: Int, offset: Int): [Y] + numUids: Int } type UpdateZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + numUids: Int } type XAggregateResult { - count: Int + count: Int } type YAggregateResult { - count: Int + count: Int } type ZAggregateResult { - count: Int + count: Int } ####################### @@ -361,18 +363,18 @@ type ZAggregateResult { ####################### enum XHasFilter { - f1 - f3 + f1 + f3 } enum YHasFilter { - f1 - f2 + f1 + f2 } enum ZHasFilter { - f2 - f3 + f2 + f3 } ####################### @@ -380,78 +382,78 @@ enum ZHasFilter { ####################### input AddXInput { - f1: [YRef] + f1: [YRef] } input AddYInput { - f2: [ZRef] + f2: [ZRef] } input AddZInput { - f3: [XRef] + f3: [XRef] } input UpdateXInput { - filter: XFilter! - set: XPatch - remove: XPatch + filter: XFilter! + set: XPatch + remove: XPatch } input UpdateYInput { - filter: YFilter! - set: YPatch - remove: YPatch + filter: YFilter! + set: YPatch + remove: YPatch } input UpdateZInput { - filter: ZFilter! - set: ZPatch - remove: ZPatch + filter: ZFilter! + set: ZPatch + remove: ZPatch } input XFilter { - has: [XHasFilter] - and: [XFilter] - or: [XFilter] - not: XFilter + has: [XHasFilter] + and: [XFilter] + or: [XFilter] + not: XFilter } input XPatch { - f1: [YRef] + f1: [YRef] } input XRef { - f1: [YRef] + f1: [YRef] } input YFilter { - has: [YHasFilter] - and: [YFilter] - or: [YFilter] - not: YFilter + has: [YHasFilter] + and: [YFilter] + or: [YFilter] + not: YFilter } input YPatch { - f2: [ZRef] + f2: [ZRef] } input YRef { - f2: [ZRef] + f2: [ZRef] } input ZFilter { - has: [ZHasFilter] - and: [ZFilter] - or: [ZFilter] - not: ZFilter + has: [ZHasFilter] + and: [ZFilter] + or: [ZFilter] + not: ZFilter } input ZPatch { - f3: [XRef] + f3: [XRef] } input ZRef { - f3: [XRef] + f3: [XRef] } ####################### @@ -459,12 +461,12 @@ input ZRef { ####################### type Query { - queryX(filter: XFilter, first: Int, offset: Int): [X] - aggregateX(filter: XFilter): XAggregateResult - queryY(filter: YFilter, first: Int, offset: Int): [Y] - aggregateY(filter: YFilter): YAggregateResult - queryZ(filter: ZFilter, first: Int, offset: Int): [Z] - aggregateZ(filter: ZFilter): ZAggregateResult + queryX(filter: XFilter, first: Int, offset: Int): [X] + aggregateX(filter: XFilter): XAggregateResult + queryY(filter: YFilter, first: Int, offset: Int): [Y] + aggregateY(filter: YFilter): YAggregateResult + queryZ(filter: ZFilter, first: Int, offset: Int): [Z] + aggregateZ(filter: ZFilter): ZAggregateResult } ####################### @@ -472,14 +474,13 @@ type Query { ####################### type Mutation { - addX(input: [AddXInput!]!): AddXPayload - updateX(input: UpdateXInput!): UpdateXPayload - deleteX(filter: XFilter!): DeleteXPayload - addY(input: [AddYInput!]!): AddYPayload - updateY(input: UpdateYInput!): UpdateYPayload - deleteY(filter: YFilter!): DeleteYPayload - addZ(input: [AddZInput!]!): AddZPayload - updateZ(input: UpdateZInput!): UpdateZPayload - deleteZ(filter: ZFilter!): DeleteZPayload + addX(input: [AddXInput!]!): AddXPayload + updateX(input: UpdateXInput!): UpdateXPayload + deleteX(filter: XFilter!): DeleteXPayload + addY(input: [AddYInput!]!): AddYPayload + updateY(input: UpdateYInput!): UpdateYPayload + deleteY(filter: YFilter!): DeleteYPayload + addZ(input: [AddZInput!]!): AddZPayload + updateZ(input: UpdateZInput!): UpdateZPayload + deleteZ(filter: ZFilter!): DeleteZPayload } - diff --git a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-custom-mutation.graphql b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-custom-mutation.graphql index e94e759d18b..63cf8e888d1 100644 --- a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-custom-mutation.graphql +++ b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-custom-mutation.graphql @@ -3,12 +3,12 @@ ####################### type User { - id: ID! - name: String! + id: ID! + name: String! } input UserInput { - name: String! + name: String! } ####################### @@ -27,162 +27,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -194,11 +194,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -207,77 +208,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -285,25 +287,25 @@ input StringHashFilter { ####################### type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } ####################### @@ -311,11 +313,11 @@ type UserAggregateResult { ####################### enum UserHasFilter { - name + name } enum UserOrderable { - name + name } ####################### @@ -323,36 +325,36 @@ enum UserOrderable { ####################### input AddUserInput { - name: String! + name: String! } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - id: [ID!] - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + id: [ID!] + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - name: String + name: String } input UserRef { - id: ID - name: String + id: ID + name: String } ####################### @@ -360,9 +362,9 @@ input UserRef { ####################### type Query { - getUser(id: ID!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getUser(id: ID!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -370,9 +372,9 @@ type Query { ####################### type Mutation { - addMyFavouriteUsers(input: [UserInput!]!): [User] @custom(http: {url:"http://my-api.com",method:"POST",body:"{ data: $input }"}) - addUser(input: [AddUserInput!]!): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addMyFavouriteUsers(input: [UserInput!]!): [User] + @custom(http: { url: "http://my-api.com", method: "POST", body: "{ data: $input }" }) + addUser(input: [AddUserInput!]!): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } - diff --git a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-directLink.graphql b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-directLink.graphql index e26f5cc4672..8d105fcc8fa 100644 --- a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-directLink.graphql +++ b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-directLink.graphql @@ -3,22 +3,22 @@ ####################### type X { - f1(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f1") - name: String - id: ID - f1Aggregate(filter: YFilter): YAggregateResult + f1(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f1") + name: String + id: ID + f1Aggregate(filter: YFilter): YAggregateResult } type Y { - f2(filter: ZFilter, first: Int, offset: Int): [Z] @dgraph(pred: "~f2") - f1(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] @dgraph(pred: "~f1") - f2Aggregate(filter: ZFilter): ZAggregateResult - f1Aggregate(filter: XFilter): XAggregateResult + f2(filter: ZFilter, first: Int, offset: Int): [Z] @dgraph(pred: "~f2") + f1(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] @dgraph(pred: "~f1") + f2Aggregate(filter: ZFilter): ZAggregateResult + f1Aggregate(filter: XFilter): XAggregateResult } type Z { - f2(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f2") - f2Aggregate(filter: YFilter): YAggregateResult + f2(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f2") + f2Aggregate(filter: YFilter): YAggregateResult } ####################### @@ -37,162 +37,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -204,11 +204,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -217,77 +218,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -295,55 +297,55 @@ input StringHashFilter { ####################### type AddXPayload { - x(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] - numUids: Int + x(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] + numUids: Int } type AddZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + numUids: Int } type DeleteXPayload { - x(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] - msg: String - numUids: Int + x(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] + msg: String + numUids: Int } type DeleteYPayload { - y(filter: YFilter, first: Int, offset: Int): [Y] - msg: String - numUids: Int + y(filter: YFilter, first: Int, offset: Int): [Y] + msg: String + numUids: Int } type DeleteZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - msg: String - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + msg: String + numUids: Int } type UpdateXPayload { - x(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] - numUids: Int + x(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] + numUids: Int } type UpdateZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + numUids: Int } type XAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type YAggregateResult { - count: Int + count: Int } type ZAggregateResult { - count: Int + count: Int } ####################### @@ -351,21 +353,21 @@ type ZAggregateResult { ####################### enum XHasFilter { - f1 - name + f1 + name } enum XOrderable { - name + name } enum YHasFilter { - f2 - f1 + f2 + f1 } enum ZHasFilter { - f2 + f2 } ####################### @@ -373,47 +375,47 @@ enum ZHasFilter { ####################### input AddXInput { - name: String + name: String } input UpdateXInput { - filter: XFilter! - set: XPatch - remove: XPatch + filter: XFilter! + set: XPatch + remove: XPatch } input XFilter { - id: [ID!] - has: [XHasFilter] - and: [XFilter] - or: [XFilter] - not: XFilter + id: [ID!] + has: [XHasFilter] + and: [XFilter] + or: [XFilter] + not: XFilter } input XOrder { - asc: XOrderable - desc: XOrderable - then: XOrder + asc: XOrderable + desc: XOrderable + then: XOrder } input XPatch { - name: String + name: String } input XRef { - id: ID - name: String + id: ID + name: String } input YFilter { - not: YFilter + not: YFilter } input ZFilter { - has: [ZHasFilter] - and: [ZFilter] - or: [ZFilter] - not: ZFilter + has: [ZHasFilter] + and: [ZFilter] + or: [ZFilter] + not: ZFilter } ####################### @@ -421,13 +423,13 @@ input ZFilter { ####################### type Query { - getX(id: ID!): X - queryX(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] - aggregateX(filter: XFilter): XAggregateResult - queryY(filter: YFilter, first: Int, offset: Int): [Y] - aggregateY(filter: YFilter): YAggregateResult - queryZ(filter: ZFilter, first: Int, offset: Int): [Z] - aggregateZ(filter: ZFilter): ZAggregateResult + getX(id: ID!): X + queryX(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] + aggregateX(filter: XFilter): XAggregateResult + queryY(filter: YFilter, first: Int, offset: Int): [Y] + aggregateY(filter: YFilter): YAggregateResult + queryZ(filter: ZFilter, first: Int, offset: Int): [Z] + aggregateZ(filter: ZFilter): ZAggregateResult } ####################### @@ -435,10 +437,9 @@ type Query { ####################### type Mutation { - addX(input: [AddXInput!]!): AddXPayload - updateX(input: UpdateXInput!): UpdateXPayload - deleteX(filter: XFilter!): DeleteXPayload - deleteY(filter: YFilter!): DeleteYPayload - deleteZ(filter: ZFilter!): DeleteZPayload + addX(input: [AddXInput!]!): AddXPayload + updateX(input: UpdateXInput!): UpdateXPayload + deleteX(filter: XFilter!): DeleteXPayload + deleteY(filter: YFilter!): DeleteYPayload + deleteZ(filter: ZFilter!): DeleteZPayload } - diff --git a/graphql/schema/testdata/schemagen/output/generate-directive.graphql b/graphql/schema/testdata/schemagen/output/generate-directive.graphql index b5cda816303..cb3e0dd0406 100644 --- a/graphql/schema/testdata/schemagen/output/generate-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/generate-directive.graphql @@ -2,24 +2,34 @@ # Input Schema ####################### -interface Character @secret(field: "password") @generate(query: {get:false,password:false}, subscription: false) { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult -} - -type Human implements Character @generate(query: {aggregate:true}, subscription: true) @secret(field: "password") { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - totalCredits: Int - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult -} - -type Person @withSubscription @generate(query: {get:false,query:true,password:true,aggregate:false}, mutation: {add:false,delete:false}, subscription: false) { - id: ID! - name: String! +interface Character + @secret(field: "password") + @generate(query: { get: false, password: false }, subscription: false) { + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult +} + +type Human implements Character + @generate(query: { aggregate: true }, subscription: true) + @secret(field: "password") { + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + totalCredits: Int + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult +} + +type Person + @withSubscription + @generate( + query: { get: false, query: true, password: true, aggregate: false } + mutation: { add: false, delete: false } + subscription: false + ) { + id: ID! + name: String! } ####################### @@ -38,162 +48,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -205,11 +215,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -218,77 +229,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -296,57 +308,57 @@ input StringHashFilter { ####################### type AddHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type CharacterAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - msg: String - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + msg: String + numUids: Int } type DeleteHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - msg: String - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + msg: String + numUids: Int } type HumanAggregateResult { - count: Int - nameMin: String - nameMax: String - totalCreditsMin: Int - totalCreditsMax: Int - totalCreditsSum: Int - totalCreditsAvg: Float + count: Int + nameMin: String + nameMax: String + totalCreditsMin: Int + totalCreditsMax: Int + totalCreditsSum: Int + totalCreditsAvg: Float } type PersonAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type UpdateCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + numUids: Int } type UpdateHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type UpdatePersonPayload { - person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - numUids: Int + person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + numUids: Int } ####################### @@ -354,31 +366,31 @@ type UpdatePersonPayload { ####################### enum CharacterHasFilter { - name - friends + name + friends } enum CharacterOrderable { - name + name } enum HumanHasFilter { - name - friends - totalCredits + name + friends + totalCredits } enum HumanOrderable { - name - totalCredits + name + totalCredits } enum PersonHasFilter { - name + name } enum PersonOrderable { - name + name } ####################### @@ -386,106 +398,106 @@ enum PersonOrderable { ####################### input AddHumanInput { - name: String! - friends: [CharacterRef] - totalCredits: Int - password: String! + name: String! + friends: [CharacterRef] + totalCredits: Int + password: String! } input CharacterFilter { - id: [ID!] - name: StringExactFilter - has: [CharacterHasFilter] - and: [CharacterFilter] - or: [CharacterFilter] - not: CharacterFilter + id: [ID!] + name: StringExactFilter + has: [CharacterHasFilter] + and: [CharacterFilter] + or: [CharacterFilter] + not: CharacterFilter } input CharacterOrder { - asc: CharacterOrderable - desc: CharacterOrderable - then: CharacterOrder + asc: CharacterOrderable + desc: CharacterOrderable + then: CharacterOrder } input CharacterPatch { - name: String - friends: [CharacterRef] - password: String + name: String + friends: [CharacterRef] + password: String } input CharacterRef { - id: ID! + id: ID! } input HumanFilter { - id: [ID!] - name: StringExactFilter - has: [HumanHasFilter] - and: [HumanFilter] - or: [HumanFilter] - not: HumanFilter + id: [ID!] + name: StringExactFilter + has: [HumanHasFilter] + and: [HumanFilter] + or: [HumanFilter] + not: HumanFilter } input HumanOrder { - asc: HumanOrderable - desc: HumanOrderable - then: HumanOrder + asc: HumanOrderable + desc: HumanOrderable + then: HumanOrder } input HumanPatch { - name: String - friends: [CharacterRef] - totalCredits: Int - password: String + name: String + friends: [CharacterRef] + totalCredits: Int + password: String } input HumanRef { - id: ID - name: String - friends: [CharacterRef] - totalCredits: Int - password: String + id: ID + name: String + friends: [CharacterRef] + totalCredits: Int + password: String } input PersonFilter { - id: [ID!] - has: [PersonHasFilter] - and: [PersonFilter] - or: [PersonFilter] - not: PersonFilter + id: [ID!] + has: [PersonHasFilter] + and: [PersonFilter] + or: [PersonFilter] + not: PersonFilter } input PersonOrder { - asc: PersonOrderable - desc: PersonOrderable - then: PersonOrder + asc: PersonOrderable + desc: PersonOrderable + then: PersonOrder } input PersonPatch { - name: String + name: String } input PersonRef { - id: ID - name: String + id: ID + name: String } input UpdateCharacterInput { - filter: CharacterFilter! - set: CharacterPatch - remove: CharacterPatch + filter: CharacterFilter! + set: CharacterPatch + remove: CharacterPatch } input UpdateHumanInput { - filter: HumanFilter! - set: HumanPatch - remove: HumanPatch + filter: HumanFilter! + set: HumanPatch + remove: HumanPatch } input UpdatePersonInput { - filter: PersonFilter! - set: PersonPatch - remove: PersonPatch + filter: PersonFilter! + set: PersonPatch + remove: PersonPatch } ####################### @@ -493,13 +505,18 @@ input UpdatePersonInput { ####################### type Query { - queryCharacter(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult - getHuman(id: ID!): Human - checkHumanPassword(id: ID!, password: String!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult - queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + queryCharacter( + filter: CharacterFilter + order: CharacterOrder + first: Int + offset: Int + ): [Character] + aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult + getHuman(id: ID!): Human + checkHumanPassword(id: ID!, password: String!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult + queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] } ####################### @@ -507,12 +524,12 @@ type Query { ####################### type Mutation { - updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload - deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload - addHuman(input: [AddHumanInput!]!): AddHumanPayload - updateHuman(input: UpdateHumanInput!): UpdateHumanPayload - deleteHuman(filter: HumanFilter!): DeleteHumanPayload - updatePerson(input: UpdatePersonInput!): UpdatePersonPayload + updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload + deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload + addHuman(input: [AddHumanInput!]!): AddHumanPayload + updateHuman(input: UpdateHumanInput!): UpdateHumanPayload + deleteHuman(filter: HumanFilter!): DeleteHumanPayload + updatePerson(input: UpdatePersonInput!): UpdatePersonPayload } ####################### @@ -520,8 +537,8 @@ type Mutation { ####################### type Subscription { - getHuman(id: ID!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult - queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + getHuman(id: ID!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult + queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] } diff --git a/graphql/schema/testdata/schemagen/output/geo-type.graphql b/graphql/schema/testdata/schemagen/output/geo-type.graphql index 290522facbb..d1bda13f933 100644 --- a/graphql/schema/testdata/schemagen/output/geo-type.graphql +++ b/graphql/schema/testdata/schemagen/output/geo-type.graphql @@ -3,14 +3,14 @@ ####################### type Hotel { - id: ID! - name: String! - location: Point @search - secretLocation: Point - area: Polygon @search - secretArea: Polygon - branches: MultiPolygon @search - secretBranches: MultiPolygon + id: ID! + name: String! + location: Point @search + secretLocation: Point + area: Polygon @search + secretArea: Polygon + branches: MultiPolygon @search + secretBranches: MultiPolygon } ####################### @@ -29,162 +29,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -196,11 +196,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -209,77 +210,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -287,25 +289,25 @@ input StringHashFilter { ####################### type AddHotelPayload { - hotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] - numUids: Int + hotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] + numUids: Int } type DeleteHotelPayload { - hotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] - msg: String - numUids: Int + hotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] + msg: String + numUids: Int } type HotelAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type UpdateHotelPayload { - hotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] - numUids: Int + hotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] + numUids: Int } ####################### @@ -313,17 +315,17 @@ type UpdateHotelPayload { ####################### enum HotelHasFilter { - name - location - secretLocation - area - secretArea - branches - secretBranches + name + location + secretLocation + area + secretArea + branches + secretBranches } enum HotelOrderable { - name + name } ####################### @@ -331,57 +333,57 @@ enum HotelOrderable { ####################### input AddHotelInput { - name: String! - location: PointRef - secretLocation: PointRef - area: PolygonRef - secretArea: PolygonRef - branches: MultiPolygonRef - secretBranches: MultiPolygonRef + name: String! + location: PointRef + secretLocation: PointRef + area: PolygonRef + secretArea: PolygonRef + branches: MultiPolygonRef + secretBranches: MultiPolygonRef } input HotelFilter { - id: [ID!] - location: PointGeoFilter - area: PolygonGeoFilter - branches: PolygonGeoFilter - has: [HotelHasFilter] - and: [HotelFilter] - or: [HotelFilter] - not: HotelFilter + id: [ID!] + location: PointGeoFilter + area: PolygonGeoFilter + branches: PolygonGeoFilter + has: [HotelHasFilter] + and: [HotelFilter] + or: [HotelFilter] + not: HotelFilter } input HotelOrder { - asc: HotelOrderable - desc: HotelOrderable - then: HotelOrder + asc: HotelOrderable + desc: HotelOrderable + then: HotelOrder } input HotelPatch { - name: String - location: PointRef - secretLocation: PointRef - area: PolygonRef - secretArea: PolygonRef - branches: MultiPolygonRef - secretBranches: MultiPolygonRef + name: String + location: PointRef + secretLocation: PointRef + area: PolygonRef + secretArea: PolygonRef + branches: MultiPolygonRef + secretBranches: MultiPolygonRef } input HotelRef { - id: ID - name: String - location: PointRef - secretLocation: PointRef - area: PolygonRef - secretArea: PolygonRef - branches: MultiPolygonRef - secretBranches: MultiPolygonRef + id: ID + name: String + location: PointRef + secretLocation: PointRef + area: PolygonRef + secretArea: PolygonRef + branches: MultiPolygonRef + secretBranches: MultiPolygonRef } input UpdateHotelInput { - filter: HotelFilter! - set: HotelPatch - remove: HotelPatch + filter: HotelFilter! + set: HotelPatch + remove: HotelPatch } ####################### @@ -389,9 +391,9 @@ input UpdateHotelInput { ####################### type Query { - getHotel(id: ID!): Hotel - queryHotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] - aggregateHotel(filter: HotelFilter): HotelAggregateResult + getHotel(id: ID!): Hotel + queryHotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] + aggregateHotel(filter: HotelFilter): HotelAggregateResult } ####################### @@ -399,8 +401,7 @@ type Query { ####################### type Mutation { - addHotel(input: [AddHotelInput!]!): AddHotelPayload - updateHotel(input: UpdateHotelInput!): UpdateHotelPayload - deleteHotel(filter: HotelFilter!): DeleteHotelPayload + addHotel(input: [AddHotelInput!]!): AddHotelPayload + updateHotel(input: UpdateHotelInput!): UpdateHotelPayload + deleteHotel(filter: HotelFilter!): DeleteHotelPayload } - diff --git a/graphql/schema/testdata/schemagen/output/hasInverse-with-interface-having-directive.graphql b/graphql/schema/testdata/schemagen/output/hasInverse-with-interface-having-directive.graphql index 4a92ac3aa88..60863ef7572 100644 --- a/graphql/schema/testdata/schemagen/output/hasInverse-with-interface-having-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/hasInverse-with-interface-having-directive.graphql @@ -3,33 +3,34 @@ ####################### type Author { - id: ID! - name: String! @search(by: [hash]) - posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] @hasInverse(field: author) - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID! + name: String! @search(by: [hash]) + posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + @hasInverse(field: author) + postsAggregate(filter: PostFilter): PostAggregateResult } interface Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) } type Question implements Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) - answered: Boolean + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) + answered: Boolean } type Answer implements Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) - markedUseful: Boolean + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) + markedUseful: Boolean } ####################### @@ -48,162 +49,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -215,11 +216,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -228,77 +230,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -306,92 +309,92 @@ input StringHashFilter { ####################### type AddAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + numUids: Int } type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } type AnswerAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - msg: String - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + msg: String + numUids: Int } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type DeleteQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - msg: String - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type QuestionAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type UpdateAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + numUids: Int } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type UpdateQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } ####################### @@ -399,47 +402,47 @@ type UpdateQuestionPayload { ####################### enum AnswerHasFilter { - text - datePublished - author - markedUseful + text + datePublished + author + markedUseful } enum AnswerOrderable { - text - datePublished + text + datePublished } enum AuthorHasFilter { - name - posts + name + posts } enum AuthorOrderable { - name + name } enum PostHasFilter { - text - datePublished - author + text + datePublished + author } enum PostOrderable { - text - datePublished + text + datePublished } enum QuestionHasFilter { - text - datePublished - author - answered + text + datePublished + author + answered } enum QuestionOrderable { - text - datePublished + text + datePublished } ####################### @@ -447,160 +450,160 @@ enum QuestionOrderable { ####################### input AddAnswerInput { - text: String - datePublished: DateTime - author: AuthorRef! - markedUseful: Boolean + text: String + datePublished: DateTime + author: AuthorRef! + markedUseful: Boolean } input AddAuthorInput { - name: String! - posts: [PostRef] + name: String! + posts: [PostRef] } input AddQuestionInput { - text: String - datePublished: DateTime - author: AuthorRef! - answered: Boolean + text: String + datePublished: DateTime + author: AuthorRef! + answered: Boolean } input AnswerFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [AnswerHasFilter] - and: [AnswerFilter] - or: [AnswerFilter] - not: AnswerFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [AnswerHasFilter] + and: [AnswerFilter] + or: [AnswerFilter] + not: AnswerFilter } input AnswerOrder { - asc: AnswerOrderable - desc: AnswerOrderable - then: AnswerOrder + asc: AnswerOrderable + desc: AnswerOrderable + then: AnswerOrder } input AnswerPatch { - text: String - datePublished: DateTime - author: AuthorRef - markedUseful: Boolean + text: String + datePublished: DateTime + author: AuthorRef + markedUseful: Boolean } input AnswerRef { - id: ID - text: String - datePublished: DateTime - author: AuthorRef - markedUseful: Boolean + id: ID + text: String + datePublished: DateTime + author: AuthorRef + markedUseful: Boolean } input AuthorFilter { - id: [ID!] - name: StringHashFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + name: StringHashFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - posts: [PostRef] + name: String + posts: [PostRef] } input AuthorRef { - id: ID - name: String - posts: [PostRef] + id: ID + name: String + posts: [PostRef] } input PostFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - text: String - datePublished: DateTime - author: AuthorRef + text: String + datePublished: DateTime + author: AuthorRef } input PostRef { - id: ID! + id: ID! } input QuestionFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [QuestionHasFilter] - and: [QuestionFilter] - or: [QuestionFilter] - not: QuestionFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [QuestionHasFilter] + and: [QuestionFilter] + or: [QuestionFilter] + not: QuestionFilter } input QuestionOrder { - asc: QuestionOrderable - desc: QuestionOrderable - then: QuestionOrder + asc: QuestionOrderable + desc: QuestionOrderable + then: QuestionOrder } input QuestionPatch { - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean } input QuestionRef { - id: ID - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean + id: ID + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean } input UpdateAnswerInput { - filter: AnswerFilter! - set: AnswerPatch - remove: AnswerPatch + filter: AnswerFilter! + set: AnswerPatch + remove: AnswerPatch } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } input UpdateQuestionInput { - filter: QuestionFilter! - set: QuestionPatch - remove: QuestionPatch + filter: QuestionFilter! + set: QuestionPatch + remove: QuestionPatch } ####################### @@ -608,18 +611,18 @@ input UpdateQuestionInput { ####################### type Query { - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - getPost(id: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getQuestion(id: ID!): Question - queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult - getAnswer(id: ID!): Answer - queryAnswer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - aggregateAnswer(filter: AnswerFilter): AnswerAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(id: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getQuestion(id: ID!): Question + queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult + getAnswer(id: ID!): Answer + queryAnswer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + aggregateAnswer(filter: AnswerFilter): AnswerAggregateResult } ####################### @@ -627,16 +630,15 @@ type Query { ####################### type Mutation { - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload - updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload - deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload - addAnswer(input: [AddAnswerInput!]!): AddAnswerPayload - updateAnswer(input: UpdateAnswerInput!): UpdateAnswerPayload - deleteAnswer(filter: AnswerFilter!): DeleteAnswerPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload + updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload + deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload + addAnswer(input: [AddAnswerInput!]!): AddAnswerPayload + updateAnswer(input: UpdateAnswerInput!): UpdateAnswerPayload + deleteAnswer(filter: AnswerFilter!): DeleteAnswerPayload } - diff --git a/graphql/schema/testdata/schemagen/output/hasInverse-with-interface.graphql b/graphql/schema/testdata/schemagen/output/hasInverse-with-interface.graphql index 6a0e7001198..ea2d33a0b0f 100644 --- a/graphql/schema/testdata/schemagen/output/hasInverse-with-interface.graphql +++ b/graphql/schema/testdata/schemagen/output/hasInverse-with-interface.graphql @@ -3,35 +3,37 @@ ####################### type Author { - id: ID! - name: String! @search(by: [hash]) - questions(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] @hasInverse(field: author) - answers(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] @hasInverse(field: author) - questionsAggregate(filter: QuestionFilter): QuestionAggregateResult - answersAggregate(filter: AnswerFilter): AnswerAggregateResult + id: ID! + name: String! @search(by: [hash]) + questions(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + @hasInverse(field: author) + answers(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + @hasInverse(field: author) + questionsAggregate(filter: QuestionFilter): QuestionAggregateResult + answersAggregate(filter: AnswerFilter): AnswerAggregateResult } interface Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! } type Question implements Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: questions) - answered: Boolean + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: questions) + answered: Boolean } type Answer implements Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: answers) - markedUseful: Boolean + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: answers) + markedUseful: Boolean } ####################### @@ -50,162 +52,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -217,11 +219,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -230,77 +233,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -308,92 +312,92 @@ input StringHashFilter { ####################### type AddAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + numUids: Int } type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } type AnswerAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - msg: String - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + msg: String + numUids: Int } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type DeleteQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - msg: String - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type QuestionAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type UpdateAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + numUids: Int } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type UpdateQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } ####################### @@ -401,48 +405,48 @@ type UpdateQuestionPayload { ####################### enum AnswerHasFilter { - text - datePublished - author - markedUseful + text + datePublished + author + markedUseful } enum AnswerOrderable { - text - datePublished + text + datePublished } enum AuthorHasFilter { - name - questions - answers + name + questions + answers } enum AuthorOrderable { - name + name } enum PostHasFilter { - text - datePublished - author + text + datePublished + author } enum PostOrderable { - text - datePublished + text + datePublished } enum QuestionHasFilter { - text - datePublished - author - answered + text + datePublished + author + answered } enum QuestionOrderable { - text - datePublished + text + datePublished } ####################### @@ -450,163 +454,163 @@ enum QuestionOrderable { ####################### input AddAnswerInput { - text: String - datePublished: DateTime - author: AuthorRef! - markedUseful: Boolean + text: String + datePublished: DateTime + author: AuthorRef! + markedUseful: Boolean } input AddAuthorInput { - name: String! - questions: [QuestionRef] - answers: [AnswerRef] + name: String! + questions: [QuestionRef] + answers: [AnswerRef] } input AddQuestionInput { - text: String - datePublished: DateTime - author: AuthorRef! - answered: Boolean + text: String + datePublished: DateTime + author: AuthorRef! + answered: Boolean } input AnswerFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [AnswerHasFilter] - and: [AnswerFilter] - or: [AnswerFilter] - not: AnswerFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [AnswerHasFilter] + and: [AnswerFilter] + or: [AnswerFilter] + not: AnswerFilter } input AnswerOrder { - asc: AnswerOrderable - desc: AnswerOrderable - then: AnswerOrder + asc: AnswerOrderable + desc: AnswerOrderable + then: AnswerOrder } input AnswerPatch { - text: String - datePublished: DateTime - author: AuthorRef - markedUseful: Boolean + text: String + datePublished: DateTime + author: AuthorRef + markedUseful: Boolean } input AnswerRef { - id: ID - text: String - datePublished: DateTime - author: AuthorRef - markedUseful: Boolean + id: ID + text: String + datePublished: DateTime + author: AuthorRef + markedUseful: Boolean } input AuthorFilter { - id: [ID!] - name: StringHashFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + name: StringHashFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - questions: [QuestionRef] - answers: [AnswerRef] + name: String + questions: [QuestionRef] + answers: [AnswerRef] } input AuthorRef { - id: ID - name: String - questions: [QuestionRef] - answers: [AnswerRef] + id: ID + name: String + questions: [QuestionRef] + answers: [AnswerRef] } input PostFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - text: String - datePublished: DateTime - author: AuthorRef + text: String + datePublished: DateTime + author: AuthorRef } input PostRef { - id: ID! + id: ID! } input QuestionFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [QuestionHasFilter] - and: [QuestionFilter] - or: [QuestionFilter] - not: QuestionFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [QuestionHasFilter] + and: [QuestionFilter] + or: [QuestionFilter] + not: QuestionFilter } input QuestionOrder { - asc: QuestionOrderable - desc: QuestionOrderable - then: QuestionOrder + asc: QuestionOrderable + desc: QuestionOrderable + then: QuestionOrder } input QuestionPatch { - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean } input QuestionRef { - id: ID - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean + id: ID + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean } input UpdateAnswerInput { - filter: AnswerFilter! - set: AnswerPatch - remove: AnswerPatch + filter: AnswerFilter! + set: AnswerPatch + remove: AnswerPatch } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } input UpdateQuestionInput { - filter: QuestionFilter! - set: QuestionPatch - remove: QuestionPatch + filter: QuestionFilter! + set: QuestionPatch + remove: QuestionPatch } ####################### @@ -614,18 +618,18 @@ input UpdateQuestionInput { ####################### type Query { - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - getPost(id: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getQuestion(id: ID!): Question - queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult - getAnswer(id: ID!): Answer - queryAnswer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - aggregateAnswer(filter: AnswerFilter): AnswerAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(id: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getQuestion(id: ID!): Question + queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult + getAnswer(id: ID!): Answer + queryAnswer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + aggregateAnswer(filter: AnswerFilter): AnswerAggregateResult } ####################### @@ -633,16 +637,15 @@ type Query { ####################### type Mutation { - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload - updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload - deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload - addAnswer(input: [AddAnswerInput!]!): AddAnswerPayload - updateAnswer(input: UpdateAnswerInput!): UpdateAnswerPayload - deleteAnswer(filter: AnswerFilter!): DeleteAnswerPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload + updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload + deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload + addAnswer(input: [AddAnswerInput!]!): AddAnswerPayload + updateAnswer(input: UpdateAnswerInput!): UpdateAnswerPayload + deleteAnswer(filter: AnswerFilter!): DeleteAnswerPayload } - diff --git a/graphql/schema/testdata/schemagen/output/hasInverse-with-type-having-directive.graphql b/graphql/schema/testdata/schemagen/output/hasInverse-with-type-having-directive.graphql index 4a92ac3aa88..60863ef7572 100644 --- a/graphql/schema/testdata/schemagen/output/hasInverse-with-type-having-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/hasInverse-with-type-having-directive.graphql @@ -3,33 +3,34 @@ ####################### type Author { - id: ID! - name: String! @search(by: [hash]) - posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] @hasInverse(field: author) - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID! + name: String! @search(by: [hash]) + posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + @hasInverse(field: author) + postsAggregate(filter: PostFilter): PostAggregateResult } interface Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) } type Question implements Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) - answered: Boolean + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) + answered: Boolean } type Answer implements Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) - markedUseful: Boolean + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) + markedUseful: Boolean } ####################### @@ -48,162 +49,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -215,11 +216,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -228,77 +230,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -306,92 +309,92 @@ input StringHashFilter { ####################### type AddAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + numUids: Int } type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } type AnswerAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - msg: String - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + msg: String + numUids: Int } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type DeleteQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - msg: String - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type QuestionAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type UpdateAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + numUids: Int } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type UpdateQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } ####################### @@ -399,47 +402,47 @@ type UpdateQuestionPayload { ####################### enum AnswerHasFilter { - text - datePublished - author - markedUseful + text + datePublished + author + markedUseful } enum AnswerOrderable { - text - datePublished + text + datePublished } enum AuthorHasFilter { - name - posts + name + posts } enum AuthorOrderable { - name + name } enum PostHasFilter { - text - datePublished - author + text + datePublished + author } enum PostOrderable { - text - datePublished + text + datePublished } enum QuestionHasFilter { - text - datePublished - author - answered + text + datePublished + author + answered } enum QuestionOrderable { - text - datePublished + text + datePublished } ####################### @@ -447,160 +450,160 @@ enum QuestionOrderable { ####################### input AddAnswerInput { - text: String - datePublished: DateTime - author: AuthorRef! - markedUseful: Boolean + text: String + datePublished: DateTime + author: AuthorRef! + markedUseful: Boolean } input AddAuthorInput { - name: String! - posts: [PostRef] + name: String! + posts: [PostRef] } input AddQuestionInput { - text: String - datePublished: DateTime - author: AuthorRef! - answered: Boolean + text: String + datePublished: DateTime + author: AuthorRef! + answered: Boolean } input AnswerFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [AnswerHasFilter] - and: [AnswerFilter] - or: [AnswerFilter] - not: AnswerFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [AnswerHasFilter] + and: [AnswerFilter] + or: [AnswerFilter] + not: AnswerFilter } input AnswerOrder { - asc: AnswerOrderable - desc: AnswerOrderable - then: AnswerOrder + asc: AnswerOrderable + desc: AnswerOrderable + then: AnswerOrder } input AnswerPatch { - text: String - datePublished: DateTime - author: AuthorRef - markedUseful: Boolean + text: String + datePublished: DateTime + author: AuthorRef + markedUseful: Boolean } input AnswerRef { - id: ID - text: String - datePublished: DateTime - author: AuthorRef - markedUseful: Boolean + id: ID + text: String + datePublished: DateTime + author: AuthorRef + markedUseful: Boolean } input AuthorFilter { - id: [ID!] - name: StringHashFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + name: StringHashFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - posts: [PostRef] + name: String + posts: [PostRef] } input AuthorRef { - id: ID - name: String - posts: [PostRef] + id: ID + name: String + posts: [PostRef] } input PostFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - text: String - datePublished: DateTime - author: AuthorRef + text: String + datePublished: DateTime + author: AuthorRef } input PostRef { - id: ID! + id: ID! } input QuestionFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [QuestionHasFilter] - and: [QuestionFilter] - or: [QuestionFilter] - not: QuestionFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [QuestionHasFilter] + and: [QuestionFilter] + or: [QuestionFilter] + not: QuestionFilter } input QuestionOrder { - asc: QuestionOrderable - desc: QuestionOrderable - then: QuestionOrder + asc: QuestionOrderable + desc: QuestionOrderable + then: QuestionOrder } input QuestionPatch { - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean } input QuestionRef { - id: ID - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean + id: ID + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean } input UpdateAnswerInput { - filter: AnswerFilter! - set: AnswerPatch - remove: AnswerPatch + filter: AnswerFilter! + set: AnswerPatch + remove: AnswerPatch } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } input UpdateQuestionInput { - filter: QuestionFilter! - set: QuestionPatch - remove: QuestionPatch + filter: QuestionFilter! + set: QuestionPatch + remove: QuestionPatch } ####################### @@ -608,18 +611,18 @@ input UpdateQuestionInput { ####################### type Query { - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - getPost(id: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getQuestion(id: ID!): Question - queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult - getAnswer(id: ID!): Answer - queryAnswer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - aggregateAnswer(filter: AnswerFilter): AnswerAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(id: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getQuestion(id: ID!): Question + queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult + getAnswer(id: ID!): Answer + queryAnswer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + aggregateAnswer(filter: AnswerFilter): AnswerAggregateResult } ####################### @@ -627,16 +630,15 @@ type Query { ####################### type Mutation { - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload - updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload - deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload - addAnswer(input: [AddAnswerInput!]!): AddAnswerPayload - updateAnswer(input: UpdateAnswerInput!): UpdateAnswerPayload - deleteAnswer(filter: AnswerFilter!): DeleteAnswerPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload + updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload + deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload + addAnswer(input: [AddAnswerInput!]!): AddAnswerPayload + updateAnswer(input: UpdateAnswerInput!): UpdateAnswerPayload + deleteAnswer(filter: AnswerFilter!): DeleteAnswerPayload } - diff --git a/graphql/schema/testdata/schemagen/output/hasInverse.graphql b/graphql/schema/testdata/schemagen/output/hasInverse.graphql index c9e38071c69..b6aec055aca 100644 --- a/graphql/schema/testdata/schemagen/output/hasInverse.graphql +++ b/graphql/schema/testdata/schemagen/output/hasInverse.graphql @@ -3,14 +3,14 @@ ####################### type Post { - id: ID! - author(filter: AuthorFilter): Author! @hasInverse(field: "posts") + id: ID! + author(filter: AuthorFilter): Author! @hasInverse(field: "posts") } type Author { - id: ID! - posts(filter: PostFilter, first: Int, offset: Int): [Post!]! @hasInverse(field: "author") - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID! + posts(filter: PostFilter, first: Int, offset: Int): [Post!]! @hasInverse(field: "author") + postsAggregate(filter: PostFilter): PostAggregateResult } ####################### @@ -29,162 +29,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -196,11 +196,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -209,77 +210,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -287,43 +289,43 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, first: Int, offset: Int): [Author] + numUids: Int } type AddPostPayload { - post(filter: PostFilter, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, first: Int, offset: Int): [Post] + numUids: Int } type AuthorAggregateResult { - count: Int + count: Int } type DeleteAuthorPayload { - author(filter: AuthorFilter, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type PostAggregateResult { - count: Int + count: Int } type UpdateAuthorPayload { - author(filter: AuthorFilter, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -331,11 +333,11 @@ type UpdatePostPayload { ####################### enum AuthorHasFilter { - posts + posts } enum PostHasFilter { - author + author } ####################### @@ -343,57 +345,57 @@ enum PostHasFilter { ####################### input AddAuthorInput { - posts: [PostRef!]! + posts: [PostRef!]! } input AddPostInput { - author: AuthorRef! + author: AuthorRef! } input AuthorFilter { - id: [ID!] - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorPatch { - posts: [PostRef!] + posts: [PostRef!] } input AuthorRef { - id: ID - posts: [PostRef!] + id: ID + posts: [PostRef!] } input PostFilter { - id: [ID!] - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostPatch { - author: AuthorRef + author: AuthorRef } input PostRef { - id: ID - author: AuthorRef + id: ID + author: AuthorRef } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -401,12 +403,12 @@ input UpdatePostInput { ####################### type Query { - getPost(id: ID!): Post - queryPost(filter: PostFilter, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(id: ID!): Post + queryPost(filter: PostFilter, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult } ####################### @@ -414,11 +416,10 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload } - diff --git a/graphql/schema/testdata/schemagen/output/hasInverse_withSubscription.graphql b/graphql/schema/testdata/schemagen/output/hasInverse_withSubscription.graphql index 36b180d322c..e225b95ed13 100644 --- a/graphql/schema/testdata/schemagen/output/hasInverse_withSubscription.graphql +++ b/graphql/schema/testdata/schemagen/output/hasInverse_withSubscription.graphql @@ -3,14 +3,14 @@ ####################### type Post { - id: ID! - author(filter: AuthorFilter): Author! @hasInverse(field: "posts") + id: ID! + author(filter: AuthorFilter): Author! @hasInverse(field: "posts") } type Author @withSubscription { - id: ID! - posts(filter: PostFilter, first: Int, offset: Int): [Post!]! @hasInverse(field: "author") - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID! + posts(filter: PostFilter, first: Int, offset: Int): [Post!]! @hasInverse(field: "author") + postsAggregate(filter: PostFilter): PostAggregateResult } ####################### @@ -29,162 +29,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -196,11 +196,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -209,77 +210,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -287,43 +289,43 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, first: Int, offset: Int): [Author] + numUids: Int } type AddPostPayload { - post(filter: PostFilter, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, first: Int, offset: Int): [Post] + numUids: Int } type AuthorAggregateResult { - count: Int + count: Int } type DeleteAuthorPayload { - author(filter: AuthorFilter, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type PostAggregateResult { - count: Int + count: Int } type UpdateAuthorPayload { - author(filter: AuthorFilter, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -331,11 +333,11 @@ type UpdatePostPayload { ####################### enum AuthorHasFilter { - posts + posts } enum PostHasFilter { - author + author } ####################### @@ -343,57 +345,57 @@ enum PostHasFilter { ####################### input AddAuthorInput { - posts: [PostRef!]! + posts: [PostRef!]! } input AddPostInput { - author: AuthorRef! + author: AuthorRef! } input AuthorFilter { - id: [ID!] - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorPatch { - posts: [PostRef!] + posts: [PostRef!] } input AuthorRef { - id: ID - posts: [PostRef!] + id: ID + posts: [PostRef!] } input PostFilter { - id: [ID!] - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostPatch { - author: AuthorRef + author: AuthorRef } input PostRef { - id: ID - author: AuthorRef + id: ID + author: AuthorRef } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -401,12 +403,12 @@ input UpdatePostInput { ####################### type Query { - getPost(id: ID!): Post - queryPost(filter: PostFilter, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(id: ID!): Post + queryPost(filter: PostFilter, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult } ####################### @@ -414,12 +416,12 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload } ####################### @@ -427,7 +429,7 @@ type Mutation { ####################### type Subscription { - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult } diff --git a/graphql/schema/testdata/schemagen/output/hasfilter.graphql b/graphql/schema/testdata/schemagen/output/hasfilter.graphql index 41964b18b97..9606e1900cc 100644 --- a/graphql/schema/testdata/schemagen/output/hasfilter.graphql +++ b/graphql/schema/testdata/schemagen/output/hasfilter.graphql @@ -3,16 +3,16 @@ ####################### interface I { - id: ID! + id: ID! } type T implements I { - id: ID! - text: String + id: ID! + text: String } type B { - name: String + name: String } ####################### @@ -31,162 +31,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -198,11 +198,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -211,77 +212,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -289,57 +291,57 @@ input StringHashFilter { ####################### type AddBPayload { - b(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] - numUids: Int + b(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] + numUids: Int } type AddTPayload { - t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - numUids: Int + t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + numUids: Int } type BAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteBPayload { - b(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] - msg: String - numUids: Int + b(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] + msg: String + numUids: Int } type DeleteIPayload { - i(filter: IFilter, first: Int, offset: Int): [I] - msg: String - numUids: Int + i(filter: IFilter, first: Int, offset: Int): [I] + msg: String + numUids: Int } type DeleteTPayload { - t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - msg: String - numUids: Int + t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + msg: String + numUids: Int } type IAggregateResult { - count: Int + count: Int } type TAggregateResult { - count: Int - textMin: String - textMax: String + count: Int + textMin: String + textMax: String } type UpdateBPayload { - b(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] - numUids: Int + b(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] + numUids: Int } type UpdateTPayload { - t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - numUids: Int + t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + numUids: Int } ####################### @@ -347,19 +349,19 @@ type UpdateTPayload { ####################### enum BHasFilter { - name + name } enum BOrderable { - name + name } enum THasFilter { - text + text } enum TOrderable { - text + text } ####################### @@ -367,76 +369,76 @@ enum TOrderable { ####################### input AddBInput { - name: String + name: String } input AddTInput { - text: String + text: String } input BFilter { - has: [BHasFilter] - and: [BFilter] - or: [BFilter] - not: BFilter + has: [BHasFilter] + and: [BFilter] + or: [BFilter] + not: BFilter } input BOrder { - asc: BOrderable - desc: BOrderable - then: BOrder + asc: BOrderable + desc: BOrderable + then: BOrder } input BPatch { - name: String + name: String } input BRef { - name: String + name: String } input IFilter { - id: [ID!] - not: IFilter + id: [ID!] + not: IFilter } input IRef { - id: ID! + id: ID! } input TFilter { - id: [ID!] - has: [THasFilter] - and: [TFilter] - or: [TFilter] - not: TFilter + id: [ID!] + has: [THasFilter] + and: [TFilter] + or: [TFilter] + not: TFilter } input TOrder { - asc: TOrderable - desc: TOrderable - then: TOrder + asc: TOrderable + desc: TOrderable + then: TOrder } input TPatch { - text: String + text: String } input TRef { - id: ID - text: String + id: ID + text: String } input UpdateBInput { - filter: BFilter! - set: BPatch - remove: BPatch + filter: BFilter! + set: BPatch + remove: BPatch } input UpdateTInput { - filter: TFilter! - set: TPatch - remove: TPatch + filter: TFilter! + set: TPatch + remove: TPatch } ####################### @@ -444,14 +446,14 @@ input UpdateTInput { ####################### type Query { - getI(id: ID!): I - queryI(filter: IFilter, first: Int, offset: Int): [I] - aggregateI(filter: IFilter): IAggregateResult - getT(id: ID!): T - queryT(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - aggregateT(filter: TFilter): TAggregateResult - queryB(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] - aggregateB(filter: BFilter): BAggregateResult + getI(id: ID!): I + queryI(filter: IFilter, first: Int, offset: Int): [I] + aggregateI(filter: IFilter): IAggregateResult + getT(id: ID!): T + queryT(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + aggregateT(filter: TFilter): TAggregateResult + queryB(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] + aggregateB(filter: BFilter): BAggregateResult } ####################### @@ -459,12 +461,11 @@ type Query { ####################### type Mutation { - deleteI(filter: IFilter!): DeleteIPayload - addT(input: [AddTInput!]!): AddTPayload - updateT(input: UpdateTInput!): UpdateTPayload - deleteT(filter: TFilter!): DeleteTPayload - addB(input: [AddBInput!]!): AddBPayload - updateB(input: UpdateBInput!): UpdateBPayload - deleteB(filter: BFilter!): DeleteBPayload + deleteI(filter: IFilter!): DeleteIPayload + addT(input: [AddTInput!]!): AddTPayload + updateT(input: UpdateTInput!): UpdateTPayload + deleteT(filter: TFilter!): DeleteTPayload + addB(input: [AddBInput!]!): AddBPayload + updateB(input: UpdateBInput!): UpdateBPayload + deleteB(filter: BFilter!): DeleteBPayload } - diff --git a/graphql/schema/testdata/schemagen/output/ignore-unsupported-directive.graphql b/graphql/schema/testdata/schemagen/output/ignore-unsupported-directive.graphql index 517bca9bbe4..16ca925f8fc 100644 --- a/graphql/schema/testdata/schemagen/output/ignore-unsupported-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/ignore-unsupported-directive.graphql @@ -3,15 +3,15 @@ ####################### enum Role { - Admin - User + Admin + User } type Product { - id: ID! - price: Float! @search - name: String! @search @dgraph(pred: "p") - name2: String! @search @dgraph(pred: "p") + id: ID! + price: Float! @search + name: String! @search @dgraph(pred: "p") + name2: String! @search @dgraph(pred: "p") } ####################### @@ -30,162 +30,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -197,11 +197,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -210,77 +211,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -288,31 +290,31 @@ input StringHashFilter { ####################### type AddProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } type DeleteProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - msg: String - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + msg: String + numUids: Int } type ProductAggregateResult { - count: Int - priceMin: Float - priceMax: Float - priceSum: Float - priceAvg: Float - nameMin: String - nameMax: String - name2Min: String - name2Max: String + count: Int + priceMin: Float + priceMax: Float + priceSum: Float + priceAvg: Float + nameMin: String + nameMax: String + name2Min: String + name2Max: String } type UpdateProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } ####################### @@ -320,15 +322,15 @@ type UpdateProductPayload { ####################### enum ProductHasFilter { - price - name - name2 + price + name + name2 } enum ProductOrderable { - price - name - name2 + price + name + name2 } ####################### @@ -336,45 +338,45 @@ enum ProductOrderable { ####################### input AddProductInput { - price: Float! - name: String! - name2: String! + price: Float! + name: String! + name2: String! } input ProductFilter { - id: [ID!] - price: FloatFilter - name: StringTermFilter - name2: StringTermFilter - has: [ProductHasFilter] - and: [ProductFilter] - or: [ProductFilter] - not: ProductFilter + id: [ID!] + price: FloatFilter + name: StringTermFilter + name2: StringTermFilter + has: [ProductHasFilter] + and: [ProductFilter] + or: [ProductFilter] + not: ProductFilter } input ProductOrder { - asc: ProductOrderable - desc: ProductOrderable - then: ProductOrder + asc: ProductOrderable + desc: ProductOrderable + then: ProductOrder } input ProductPatch { - price: Float - name: String - name2: String + price: Float + name: String + name2: String } input ProductRef { - id: ID - price: Float - name: String - name2: String + id: ID + price: Float + name: String + name2: String } input UpdateProductInput { - filter: ProductFilter! - set: ProductPatch - remove: ProductPatch + filter: ProductFilter! + set: ProductPatch + remove: ProductPatch } ####################### @@ -382,9 +384,9 @@ input UpdateProductInput { ####################### type Query { - getProduct(id: ID!): Product - queryProduct(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - aggregateProduct(filter: ProductFilter): ProductAggregateResult + getProduct(id: ID!): Product + queryProduct(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + aggregateProduct(filter: ProductFilter): ProductAggregateResult } ####################### @@ -392,8 +394,7 @@ type Query { ####################### type Mutation { - addProduct(input: [AddProductInput!]!): AddProductPayload - updateProduct(input: UpdateProductInput!): UpdateProductPayload - deleteProduct(filter: ProductFilter!): DeleteProductPayload + addProduct(input: [AddProductInput!]!): AddProductPayload + updateProduct(input: UpdateProductInput!): UpdateProductPayload + deleteProduct(filter: ProductFilter!): DeleteProductPayload } - diff --git a/graphql/schema/testdata/schemagen/output/interface-with-dgraph-pred.graphql b/graphql/schema/testdata/schemagen/output/interface-with-dgraph-pred.graphql index ecd7d1905e0..cad1b0d0f77 100644 --- a/graphql/schema/testdata/schemagen/output/interface-with-dgraph-pred.graphql +++ b/graphql/schema/testdata/schemagen/output/interface-with-dgraph-pred.graphql @@ -3,24 +3,26 @@ ####################### type Object { - id: ID! - name: String - ownedBy(filter: PersonFilter): Person @dgraph(pred: "Object.owner") + id: ID! + name: String + ownedBy(filter: PersonFilter): Person @dgraph(pred: "Object.owner") } type BusinessMan implements Person { - id: ID! - name: String - owns(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] @dgraph(pred: "~Object.owner") - companyName: String - ownsAggregate(filter: ObjectFilter): ObjectAggregateResult + id: ID! + name: String + owns(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] + @dgraph(pred: "~Object.owner") + companyName: String + ownsAggregate(filter: ObjectFilter): ObjectAggregateResult } interface Person { - id: ID! - name: String - owns(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] @dgraph(pred: "~Object.owner") - ownsAggregate(filter: ObjectFilter): ObjectAggregateResult + id: ID! + name: String + owns(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] + @dgraph(pred: "~Object.owner") + ownsAggregate(filter: ObjectFilter): ObjectAggregateResult } ####################### @@ -39,162 +41,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -206,11 +208,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -219,77 +222,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -297,66 +301,81 @@ input StringHashFilter { ####################### type AddBusinessManPayload { - businessMan(filter: BusinessManFilter, order: BusinessManOrder, first: Int, offset: Int): [BusinessMan] - numUids: Int + businessMan( + filter: BusinessManFilter + order: BusinessManOrder + first: Int + offset: Int + ): [BusinessMan] + numUids: Int } type AddObjectPayload { - object(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] - numUids: Int + object(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] + numUids: Int } type BusinessManAggregateResult { - count: Int - nameMin: String - nameMax: String - companyNameMin: String - companyNameMax: String + count: Int + nameMin: String + nameMax: String + companyNameMin: String + companyNameMax: String } type DeleteBusinessManPayload { - businessMan(filter: BusinessManFilter, order: BusinessManOrder, first: Int, offset: Int): [BusinessMan] - msg: String - numUids: Int + businessMan( + filter: BusinessManFilter + order: BusinessManOrder + first: Int + offset: Int + ): [BusinessMan] + msg: String + numUids: Int } type DeleteObjectPayload { - object(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] - msg: String - numUids: Int + object(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] + msg: String + numUids: Int } type DeletePersonPayload { - person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - msg: String - numUids: Int + person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + msg: String + numUids: Int } type ObjectAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type PersonAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type UpdateBusinessManPayload { - businessMan(filter: BusinessManFilter, order: BusinessManOrder, first: Int, offset: Int): [BusinessMan] - numUids: Int + businessMan( + filter: BusinessManFilter + order: BusinessManOrder + first: Int + offset: Int + ): [BusinessMan] + numUids: Int } type UpdateObjectPayload { - object(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] - numUids: Int + object(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] + numUids: Int } type UpdatePersonPayload { - person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - numUids: Int + person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + numUids: Int } ####################### @@ -364,32 +383,32 @@ type UpdatePersonPayload { ####################### enum BusinessManHasFilter { - name - owns - companyName + name + owns + companyName } enum BusinessManOrderable { - name - companyName + name + companyName } enum ObjectHasFilter { - name - ownedBy + name + ownedBy } enum ObjectOrderable { - name + name } enum PersonHasFilter { - name - owns + name + owns } enum PersonOrderable { - name + name } ####################### @@ -397,103 +416,103 @@ enum PersonOrderable { ####################### input AddBusinessManInput { - name: String - companyName: String + name: String + companyName: String } input AddObjectInput { - name: String - ownedBy: PersonRef + name: String + ownedBy: PersonRef } input BusinessManFilter { - id: [ID!] - has: [BusinessManHasFilter] - and: [BusinessManFilter] - or: [BusinessManFilter] - not: BusinessManFilter + id: [ID!] + has: [BusinessManHasFilter] + and: [BusinessManFilter] + or: [BusinessManFilter] + not: BusinessManFilter } input BusinessManOrder { - asc: BusinessManOrderable - desc: BusinessManOrderable - then: BusinessManOrder + asc: BusinessManOrderable + desc: BusinessManOrderable + then: BusinessManOrder } input BusinessManPatch { - name: String - companyName: String + name: String + companyName: String } input BusinessManRef { - id: ID - name: String - companyName: String + id: ID + name: String + companyName: String } input ObjectFilter { - id: [ID!] - has: [ObjectHasFilter] - and: [ObjectFilter] - or: [ObjectFilter] - not: ObjectFilter + id: [ID!] + has: [ObjectHasFilter] + and: [ObjectFilter] + or: [ObjectFilter] + not: ObjectFilter } input ObjectOrder { - asc: ObjectOrderable - desc: ObjectOrderable - then: ObjectOrder + asc: ObjectOrderable + desc: ObjectOrderable + then: ObjectOrder } input ObjectPatch { - name: String - ownedBy: PersonRef + name: String + ownedBy: PersonRef } input ObjectRef { - id: ID - name: String - ownedBy: PersonRef + id: ID + name: String + ownedBy: PersonRef } input PersonFilter { - id: [ID!] - has: [PersonHasFilter] - and: [PersonFilter] - or: [PersonFilter] - not: PersonFilter + id: [ID!] + has: [PersonHasFilter] + and: [PersonFilter] + or: [PersonFilter] + not: PersonFilter } input PersonOrder { - asc: PersonOrderable - desc: PersonOrderable - then: PersonOrder + asc: PersonOrderable + desc: PersonOrderable + then: PersonOrder } input PersonPatch { - name: String + name: String } input PersonRef { - id: ID! + id: ID! } input UpdateBusinessManInput { - filter: BusinessManFilter! - set: BusinessManPatch - remove: BusinessManPatch + filter: BusinessManFilter! + set: BusinessManPatch + remove: BusinessManPatch } input UpdateObjectInput { - filter: ObjectFilter! - set: ObjectPatch - remove: ObjectPatch + filter: ObjectFilter! + set: ObjectPatch + remove: ObjectPatch } input UpdatePersonInput { - filter: PersonFilter! - set: PersonPatch - remove: PersonPatch + filter: PersonFilter! + set: PersonPatch + remove: PersonPatch } ####################### @@ -501,15 +520,20 @@ input UpdatePersonInput { ####################### type Query { - getObject(id: ID!): Object - queryObject(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] - aggregateObject(filter: ObjectFilter): ObjectAggregateResult - getBusinessMan(id: ID!): BusinessMan - queryBusinessMan(filter: BusinessManFilter, order: BusinessManOrder, first: Int, offset: Int): [BusinessMan] - aggregateBusinessMan(filter: BusinessManFilter): BusinessManAggregateResult - getPerson(id: ID!): Person - queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - aggregatePerson(filter: PersonFilter): PersonAggregateResult + getObject(id: ID!): Object + queryObject(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] + aggregateObject(filter: ObjectFilter): ObjectAggregateResult + getBusinessMan(id: ID!): BusinessMan + queryBusinessMan( + filter: BusinessManFilter + order: BusinessManOrder + first: Int + offset: Int + ): [BusinessMan] + aggregateBusinessMan(filter: BusinessManFilter): BusinessManAggregateResult + getPerson(id: ID!): Person + queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + aggregatePerson(filter: PersonFilter): PersonAggregateResult } ####################### @@ -517,13 +541,12 @@ type Query { ####################### type Mutation { - addObject(input: [AddObjectInput!]!): AddObjectPayload - updateObject(input: UpdateObjectInput!): UpdateObjectPayload - deleteObject(filter: ObjectFilter!): DeleteObjectPayload - addBusinessMan(input: [AddBusinessManInput!]!): AddBusinessManPayload - updateBusinessMan(input: UpdateBusinessManInput!): UpdateBusinessManPayload - deleteBusinessMan(filter: BusinessManFilter!): DeleteBusinessManPayload - updatePerson(input: UpdatePersonInput!): UpdatePersonPayload - deletePerson(filter: PersonFilter!): DeletePersonPayload + addObject(input: [AddObjectInput!]!): AddObjectPayload + updateObject(input: UpdateObjectInput!): UpdateObjectPayload + deleteObject(filter: ObjectFilter!): DeleteObjectPayload + addBusinessMan(input: [AddBusinessManInput!]!): AddBusinessManPayload + updateBusinessMan(input: UpdateBusinessManInput!): UpdateBusinessManPayload + deleteBusinessMan(filter: BusinessManFilter!): DeleteBusinessManPayload + updatePerson(input: UpdatePersonInput!): UpdatePersonPayload + deletePerson(filter: PersonFilter!): DeletePersonPayload } - diff --git a/graphql/schema/testdata/schemagen/output/interface-with-id-directive.graphql b/graphql/schema/testdata/schemagen/output/interface-with-id-directive.graphql index 5230262e99f..4a29180d8ff 100644 --- a/graphql/schema/testdata/schemagen/output/interface-with-id-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/interface-with-id-directive.graphql @@ -3,20 +3,20 @@ ####################### interface LibraryItem { - refID: String! @id(interface: false) - itemID: String! @id(interface: true) + refID: String! @id(interface: false) + itemID: String! @id(interface: true) } type Book implements LibraryItem { - refID: String! @id(interface: false) - itemID: String! @id(interface: true) - title: String - author: String + refID: String! @id(interface: false) + itemID: String! @id(interface: true) + title: String + author: String } type Library { - items(filter: LibraryItemFilter, order: LibraryItemOrder, first: Int, offset: Int): [LibraryItem] - itemsAggregate(filter: LibraryItemFilter): LibraryItemAggregateResult + items(filter: LibraryItemFilter, order: LibraryItemOrder, first: Int, offset: Int): [LibraryItem] + itemsAggregate(filter: LibraryItemFilter): LibraryItemAggregateResult } ####################### @@ -35,162 +35,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -202,11 +202,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -215,77 +216,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -293,70 +295,80 @@ input StringHashFilter { ####################### type AddBookPayload { - book(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] - numUids: Int + book(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] + numUids: Int } type AddLibraryPayload { - library(filter: LibraryFilter, first: Int, offset: Int): [Library] - numUids: Int + library(filter: LibraryFilter, first: Int, offset: Int): [Library] + numUids: Int } type BookAggregateResult { - count: Int - refIDMin: String - refIDMax: String - itemIDMin: String - itemIDMax: String - titleMin: String - titleMax: String - authorMin: String - authorMax: String + count: Int + refIDMin: String + refIDMax: String + itemIDMin: String + itemIDMax: String + titleMin: String + titleMax: String + authorMin: String + authorMax: String } type DeleteBookPayload { - book(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] - msg: String - numUids: Int + book(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] + msg: String + numUids: Int } type DeleteLibraryItemPayload { - libraryItem(filter: LibraryItemFilter, order: LibraryItemOrder, first: Int, offset: Int): [LibraryItem] - msg: String - numUids: Int + libraryItem( + filter: LibraryItemFilter + order: LibraryItemOrder + first: Int + offset: Int + ): [LibraryItem] + msg: String + numUids: Int } type DeleteLibraryPayload { - library(filter: LibraryFilter, first: Int, offset: Int): [Library] - msg: String - numUids: Int + library(filter: LibraryFilter, first: Int, offset: Int): [Library] + msg: String + numUids: Int } type LibraryAggregateResult { - count: Int + count: Int } type LibraryItemAggregateResult { - count: Int - refIDMin: String - refIDMax: String - itemIDMin: String - itemIDMax: String + count: Int + refIDMin: String + refIDMax: String + itemIDMin: String + itemIDMax: String } type UpdateBookPayload { - book(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] - numUids: Int + book(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] + numUids: Int } type UpdateLibraryItemPayload { - libraryItem(filter: LibraryItemFilter, order: LibraryItemOrder, first: Int, offset: Int): [LibraryItem] - numUids: Int + libraryItem( + filter: LibraryItemFilter + order: LibraryItemOrder + first: Int + offset: Int + ): [LibraryItem] + numUids: Int } type UpdateLibraryPayload { - library(filter: LibraryFilter, first: Int, offset: Int): [Library] - numUids: Int + library(filter: LibraryFilter, first: Int, offset: Int): [Library] + numUids: Int } ####################### @@ -364,31 +376,31 @@ type UpdateLibraryPayload { ####################### enum BookHasFilter { - refID - itemID - title - author + refID + itemID + title + author } enum BookOrderable { - refID - itemID - title - author + refID + itemID + title + author } enum LibraryHasFilter { - items + items } enum LibraryItemHasFilter { - refID - itemID + refID + itemID } enum LibraryItemOrderable { - refID - itemID + refID + itemID } ####################### @@ -396,100 +408,100 @@ enum LibraryItemOrderable { ####################### input AddBookInput { - refID: String! - itemID: String! - title: String - author: String + refID: String! + itemID: String! + title: String + author: String } input AddLibraryInput { - items: [LibraryItemRef] + items: [LibraryItemRef] } input BookFilter { - refID: StringHashFilter - itemID: StringHashFilter - has: [BookHasFilter] - and: [BookFilter] - or: [BookFilter] - not: BookFilter + refID: StringHashFilter + itemID: StringHashFilter + has: [BookHasFilter] + and: [BookFilter] + or: [BookFilter] + not: BookFilter } input BookOrder { - asc: BookOrderable - desc: BookOrderable - then: BookOrder + asc: BookOrderable + desc: BookOrderable + then: BookOrder } input BookPatch { - refID: String - itemID: String - title: String - author: String + refID: String + itemID: String + title: String + author: String } input BookRef { - refID: String - itemID: String - title: String - author: String + refID: String + itemID: String + title: String + author: String } input LibraryFilter { - has: [LibraryHasFilter] - and: [LibraryFilter] - or: [LibraryFilter] - not: LibraryFilter + has: [LibraryHasFilter] + and: [LibraryFilter] + or: [LibraryFilter] + not: LibraryFilter } input LibraryItemFilter { - refID: StringHashFilter - itemID: StringHashFilter - has: [LibraryItemHasFilter] - and: [LibraryItemFilter] - or: [LibraryItemFilter] - not: LibraryItemFilter + refID: StringHashFilter + itemID: StringHashFilter + has: [LibraryItemHasFilter] + and: [LibraryItemFilter] + or: [LibraryItemFilter] + not: LibraryItemFilter } input LibraryItemOrder { - asc: LibraryItemOrderable - desc: LibraryItemOrderable - then: LibraryItemOrder + asc: LibraryItemOrderable + desc: LibraryItemOrderable + then: LibraryItemOrder } input LibraryItemPatch { - refID: String - itemID: String + refID: String + itemID: String } input LibraryItemRef { - refID: String! + refID: String! } input LibraryPatch { - items: [LibraryItemRef] + items: [LibraryItemRef] } input LibraryRef { - items: [LibraryItemRef] + items: [LibraryItemRef] } input UpdateBookInput { - filter: BookFilter! - set: BookPatch - remove: BookPatch + filter: BookFilter! + set: BookPatch + remove: BookPatch } input UpdateLibraryInput { - filter: LibraryFilter! - set: LibraryPatch - remove: LibraryPatch + filter: LibraryFilter! + set: LibraryPatch + remove: LibraryPatch } input UpdateLibraryItemInput { - filter: LibraryItemFilter! - set: LibraryItemPatch - remove: LibraryItemPatch + filter: LibraryItemFilter! + set: LibraryItemPatch + remove: LibraryItemPatch } ####################### @@ -497,14 +509,22 @@ input UpdateLibraryItemInput { ####################### type Query { - getLibraryItem(refID: String, itemID: String): LibraryItem @deprecated(reason: "@id argument for get query on interface is being deprecated. Only those @id fields which have interface argument set to true will be available in getQuery argument on interface post v21.11.0, please update your schema accordingly.") - queryLibraryItem(filter: LibraryItemFilter, order: LibraryItemOrder, first: Int, offset: Int): [LibraryItem] - aggregateLibraryItem(filter: LibraryItemFilter): LibraryItemAggregateResult - getBook(refID: String, itemID: String): Book - queryBook(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] - aggregateBook(filter: BookFilter): BookAggregateResult - queryLibrary(filter: LibraryFilter, first: Int, offset: Int): [Library] - aggregateLibrary(filter: LibraryFilter): LibraryAggregateResult + getLibraryItem(refID: String, itemID: String): LibraryItem + @deprecated( + reason: "@id argument for get query on interface is being deprecated. Only those @id fields which have interface argument set to true will be available in getQuery argument on interface post v21.11.0, please update your schema accordingly." + ) + queryLibraryItem( + filter: LibraryItemFilter + order: LibraryItemOrder + first: Int + offset: Int + ): [LibraryItem] + aggregateLibraryItem(filter: LibraryItemFilter): LibraryItemAggregateResult + getBook(refID: String, itemID: String): Book + queryBook(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] + aggregateBook(filter: BookFilter): BookAggregateResult + queryLibrary(filter: LibraryFilter, first: Int, offset: Int): [Library] + aggregateLibrary(filter: LibraryFilter): LibraryAggregateResult } ####################### @@ -512,13 +532,12 @@ type Query { ####################### type Mutation { - updateLibraryItem(input: UpdateLibraryItemInput!): UpdateLibraryItemPayload - deleteLibraryItem(filter: LibraryItemFilter!): DeleteLibraryItemPayload - addBook(input: [AddBookInput!]!, upsert: Boolean): AddBookPayload - updateBook(input: UpdateBookInput!): UpdateBookPayload - deleteBook(filter: BookFilter!): DeleteBookPayload - addLibrary(input: [AddLibraryInput!]!): AddLibraryPayload - updateLibrary(input: UpdateLibraryInput!): UpdateLibraryPayload - deleteLibrary(filter: LibraryFilter!): DeleteLibraryPayload + updateLibraryItem(input: UpdateLibraryItemInput!): UpdateLibraryItemPayload + deleteLibraryItem(filter: LibraryItemFilter!): DeleteLibraryItemPayload + addBook(input: [AddBookInput!]!, upsert: Boolean): AddBookPayload + updateBook(input: UpdateBookInput!): UpdateBookPayload + deleteBook(filter: BookFilter!): DeleteBookPayload + addLibrary(input: [AddLibraryInput!]!): AddLibraryPayload + updateLibrary(input: UpdateLibraryInput!): UpdateLibraryPayload + deleteLibrary(filter: LibraryFilter!): DeleteLibraryPayload } - diff --git a/graphql/schema/testdata/schemagen/output/interface-with-no-ids.graphql b/graphql/schema/testdata/schemagen/output/interface-with-no-ids.graphql index 229a55e6141..581845221d5 100644 --- a/graphql/schema/testdata/schemagen/output/interface-with-no-ids.graphql +++ b/graphql/schema/testdata/schemagen/output/interface-with-no-ids.graphql @@ -3,18 +3,18 @@ ####################### interface Message { - text: String + text: String } type Question implements Message { - text: String - askedBy(filter: UserFilter): User + text: String + askedBy(filter: UserFilter): User } type User { - name: String - messages(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - messagesAggregate(filter: MessageFilter): MessageAggregateResult + name: String + messages(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + messagesAggregate(filter: MessageFilter): MessageAggregateResult } ####################### @@ -33,162 +33,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -200,11 +200,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -213,77 +214,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -291,64 +293,64 @@ input StringHashFilter { ####################### type AddQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - msg: String - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + msg: String + numUids: Int } type DeleteQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - msg: String - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + msg: String + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type MessageAggregateResult { - count: Int - textMin: String - textMax: String + count: Int + textMin: String + textMax: String } type QuestionAggregateResult { - count: Int - textMin: String - textMax: String + count: Int + textMin: String + textMax: String } type UpdateMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + numUids: Int } type UpdateQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } ####################### @@ -356,29 +358,29 @@ type UserAggregateResult { ####################### enum MessageHasFilter { - text + text } enum MessageOrderable { - text + text } enum QuestionHasFilter { - text - askedBy + text + askedBy } enum QuestionOrderable { - text + text } enum UserHasFilter { - name - messages + name + messages } enum UserOrderable { - name + name } ####################### @@ -386,91 +388,91 @@ enum UserOrderable { ####################### input AddQuestionInput { - text: String - askedBy: UserRef + text: String + askedBy: UserRef } input AddUserInput { - name: String + name: String } input MessageFilter { - has: [MessageHasFilter] - and: [MessageFilter] - or: [MessageFilter] - not: MessageFilter + has: [MessageHasFilter] + and: [MessageFilter] + or: [MessageFilter] + not: MessageFilter } input MessageOrder { - asc: MessageOrderable - desc: MessageOrderable - then: MessageOrder + asc: MessageOrderable + desc: MessageOrderable + then: MessageOrder } input MessagePatch { - text: String + text: String } input QuestionFilter { - has: [QuestionHasFilter] - and: [QuestionFilter] - or: [QuestionFilter] - not: QuestionFilter + has: [QuestionHasFilter] + and: [QuestionFilter] + or: [QuestionFilter] + not: QuestionFilter } input QuestionOrder { - asc: QuestionOrderable - desc: QuestionOrderable - then: QuestionOrder + asc: QuestionOrderable + desc: QuestionOrderable + then: QuestionOrder } input QuestionPatch { - text: String - askedBy: UserRef + text: String + askedBy: UserRef } input QuestionRef { - text: String - askedBy: UserRef + text: String + askedBy: UserRef } input UpdateMessageInput { - filter: MessageFilter! - set: MessagePatch - remove: MessagePatch + filter: MessageFilter! + set: MessagePatch + remove: MessagePatch } input UpdateQuestionInput { - filter: QuestionFilter! - set: QuestionPatch - remove: QuestionPatch + filter: QuestionFilter! + set: QuestionPatch + remove: QuestionPatch } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - name: String + name: String } input UserRef { - name: String + name: String } ####################### @@ -478,12 +480,12 @@ input UserRef { ####################### type Query { - queryMessage(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - aggregateMessage(filter: MessageFilter): MessageAggregateResult - queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + queryMessage(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + aggregateMessage(filter: MessageFilter): MessageAggregateResult + queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -491,13 +493,12 @@ type Query { ####################### type Mutation { - updateMessage(input: UpdateMessageInput!): UpdateMessagePayload - deleteMessage(filter: MessageFilter!): DeleteMessagePayload - addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload - updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload - deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload - addUser(input: [AddUserInput!]!): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + updateMessage(input: UpdateMessageInput!): UpdateMessagePayload + deleteMessage(filter: MessageFilter!): DeleteMessagePayload + addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload + updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload + deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload + addUser(input: [AddUserInput!]!): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } - diff --git a/graphql/schema/testdata/schemagen/output/interfaces-with-types-and-password.graphql b/graphql/schema/testdata/schemagen/output/interfaces-with-types-and-password.graphql index d274d2470db..8599070e74a 100644 --- a/graphql/schema/testdata/schemagen/output/interfaces-with-types-and-password.graphql +++ b/graphql/schema/testdata/schemagen/output/interfaces-with-types-and-password.graphql @@ -3,43 +3,43 @@ ####################### interface Character @secret(field: "password") { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - appearsIn: [Episode!]! @search - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + appearsIn: [Episode!]! @search + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } type Human implements Character @secret(field: "password") { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - appearsIn: [Episode!]! @search - starships(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - totalCredits: Int - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult - starshipsAggregate(filter: StarshipFilter): StarshipAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + appearsIn: [Episode!]! @search + starships(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + totalCredits: Int + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + starshipsAggregate(filter: StarshipFilter): StarshipAggregateResult } type Droid implements Character @secret(field: "password") { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - appearsIn: [Episode!]! @search - primaryFunction: String - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + appearsIn: [Episode!]! @search + primaryFunction: String + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } enum Episode { - NEWHOPE - EMPIRE - JEDI + NEWHOPE + EMPIRE + JEDI } type Starship { - id: ID! - name: String! @search(by: [term]) - length: Float + id: ID! + name: String! @search(by: [term]) + length: Float } ####################### @@ -58,162 +58,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -225,11 +225,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -238,77 +239,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -316,96 +318,96 @@ input StringHashFilter { ####################### type AddDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + numUids: Int } type AddHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type AddStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + numUids: Int } type CharacterAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - msg: String - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + msg: String + numUids: Int } type DeleteDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - msg: String - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + msg: String + numUids: Int } type DeleteHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - msg: String - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + msg: String + numUids: Int } type DeleteStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - msg: String - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + msg: String + numUids: Int } type DroidAggregateResult { - count: Int - nameMin: String - nameMax: String - primaryFunctionMin: String - primaryFunctionMax: String + count: Int + nameMin: String + nameMax: String + primaryFunctionMin: String + primaryFunctionMax: String } type HumanAggregateResult { - count: Int - nameMin: String - nameMax: String - totalCreditsMin: Int - totalCreditsMax: Int - totalCreditsSum: Int - totalCreditsAvg: Float + count: Int + nameMin: String + nameMax: String + totalCreditsMin: Int + totalCreditsMax: Int + totalCreditsSum: Int + totalCreditsAvg: Float } type StarshipAggregateResult { - count: Int - nameMin: String - nameMax: String - lengthMin: Float - lengthMax: Float - lengthSum: Float - lengthAvg: Float + count: Int + nameMin: String + nameMax: String + lengthMin: Float + lengthMax: Float + lengthSum: Float + lengthAvg: Float } type UpdateCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + numUids: Int } type UpdateDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + numUids: Int } type UpdateHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type UpdateStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + numUids: Int } ####################### @@ -413,48 +415,48 @@ type UpdateStarshipPayload { ####################### enum CharacterHasFilter { - name - friends - appearsIn + name + friends + appearsIn } enum CharacterOrderable { - name + name } enum DroidHasFilter { - name - friends - appearsIn - primaryFunction + name + friends + appearsIn + primaryFunction } enum DroidOrderable { - name - primaryFunction + name + primaryFunction } enum HumanHasFilter { - name - friends - appearsIn - starships - totalCredits + name + friends + appearsIn + starships + totalCredits } enum HumanOrderable { - name - totalCredits + name + totalCredits } enum StarshipHasFilter { - name - length + name + length } enum StarshipOrderable { - name - length + name + length } ####################### @@ -462,175 +464,175 @@ enum StarshipOrderable { ####################### input AddDroidInput { - name: String! - friends: [CharacterRef] - appearsIn: [Episode!]! - primaryFunction: String - password: String! + name: String! + friends: [CharacterRef] + appearsIn: [Episode!]! + primaryFunction: String + password: String! } input AddHumanInput { - name: String! - friends: [CharacterRef] - appearsIn: [Episode!]! - starships: [StarshipRef] - totalCredits: Int - password: String! + name: String! + friends: [CharacterRef] + appearsIn: [Episode!]! + starships: [StarshipRef] + totalCredits: Int + password: String! } input AddStarshipInput { - name: String! - length: Float + name: String! + length: Float } input CharacterFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [CharacterHasFilter] - and: [CharacterFilter] - or: [CharacterFilter] - not: CharacterFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [CharacterHasFilter] + and: [CharacterFilter] + or: [CharacterFilter] + not: CharacterFilter } input CharacterOrder { - asc: CharacterOrderable - desc: CharacterOrderable - then: CharacterOrder + asc: CharacterOrderable + desc: CharacterOrderable + then: CharacterOrder } input CharacterPatch { - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - password: String + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + password: String } input CharacterRef { - id: ID! + id: ID! } input DroidFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [DroidHasFilter] - and: [DroidFilter] - or: [DroidFilter] - not: DroidFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [DroidHasFilter] + and: [DroidFilter] + or: [DroidFilter] + not: DroidFilter } input DroidOrder { - asc: DroidOrderable - desc: DroidOrderable - then: DroidOrder + asc: DroidOrderable + desc: DroidOrderable + then: DroidOrder } input DroidPatch { - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - primaryFunction: String - password: String + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + primaryFunction: String + password: String } input DroidRef { - id: ID - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - primaryFunction: String - password: String + id: ID + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + primaryFunction: String + password: String } input Episode_hash { - eq: Episode - in: [Episode] + eq: Episode + in: [Episode] } input HumanFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [HumanHasFilter] - and: [HumanFilter] - or: [HumanFilter] - not: HumanFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [HumanHasFilter] + and: [HumanFilter] + or: [HumanFilter] + not: HumanFilter } input HumanOrder { - asc: HumanOrderable - desc: HumanOrderable - then: HumanOrder + asc: HumanOrderable + desc: HumanOrderable + then: HumanOrder } input HumanPatch { - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - starships: [StarshipRef] - totalCredits: Int - password: String + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + starships: [StarshipRef] + totalCredits: Int + password: String } input HumanRef { - id: ID - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - starships: [StarshipRef] - totalCredits: Int - password: String + id: ID + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + starships: [StarshipRef] + totalCredits: Int + password: String } input StarshipFilter { - id: [ID!] - name: StringTermFilter - has: [StarshipHasFilter] - and: [StarshipFilter] - or: [StarshipFilter] - not: StarshipFilter + id: [ID!] + name: StringTermFilter + has: [StarshipHasFilter] + and: [StarshipFilter] + or: [StarshipFilter] + not: StarshipFilter } input StarshipOrder { - asc: StarshipOrderable - desc: StarshipOrderable - then: StarshipOrder + asc: StarshipOrderable + desc: StarshipOrderable + then: StarshipOrder } input StarshipPatch { - name: String - length: Float + name: String + length: Float } input StarshipRef { - id: ID - name: String - length: Float + id: ID + name: String + length: Float } input UpdateCharacterInput { - filter: CharacterFilter! - set: CharacterPatch - remove: CharacterPatch + filter: CharacterFilter! + set: CharacterPatch + remove: CharacterPatch } input UpdateDroidInput { - filter: DroidFilter! - set: DroidPatch - remove: DroidPatch + filter: DroidFilter! + set: DroidPatch + remove: DroidPatch } input UpdateHumanInput { - filter: HumanFilter! - set: HumanPatch - remove: HumanPatch + filter: HumanFilter! + set: HumanPatch + remove: HumanPatch } input UpdateStarshipInput { - filter: StarshipFilter! - set: StarshipPatch - remove: StarshipPatch + filter: StarshipFilter! + set: StarshipPatch + remove: StarshipPatch } ####################### @@ -638,21 +640,26 @@ input UpdateStarshipInput { ####################### type Query { - getCharacter(id: ID!): Character - checkCharacterPassword(id: ID!, password: String!): Character - queryCharacter(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult - getHuman(id: ID!): Human - checkHumanPassword(id: ID!, password: String!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult - getDroid(id: ID!): Droid - checkDroidPassword(id: ID!, password: String!): Droid - queryDroid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - aggregateDroid(filter: DroidFilter): DroidAggregateResult - getStarship(id: ID!): Starship - queryStarship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - aggregateStarship(filter: StarshipFilter): StarshipAggregateResult + getCharacter(id: ID!): Character + checkCharacterPassword(id: ID!, password: String!): Character + queryCharacter( + filter: CharacterFilter + order: CharacterOrder + first: Int + offset: Int + ): [Character] + aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult + getHuman(id: ID!): Human + checkHumanPassword(id: ID!, password: String!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult + getDroid(id: ID!): Droid + checkDroidPassword(id: ID!, password: String!): Droid + queryDroid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + aggregateDroid(filter: DroidFilter): DroidAggregateResult + getStarship(id: ID!): Starship + queryStarship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + aggregateStarship(filter: StarshipFilter): StarshipAggregateResult } ####################### @@ -660,16 +667,15 @@ type Query { ####################### type Mutation { - updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload - deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload - addHuman(input: [AddHumanInput!]!): AddHumanPayload - updateHuman(input: UpdateHumanInput!): UpdateHumanPayload - deleteHuman(filter: HumanFilter!): DeleteHumanPayload - addDroid(input: [AddDroidInput!]!): AddDroidPayload - updateDroid(input: UpdateDroidInput!): UpdateDroidPayload - deleteDroid(filter: DroidFilter!): DeleteDroidPayload - addStarship(input: [AddStarshipInput!]!): AddStarshipPayload - updateStarship(input: UpdateStarshipInput!): UpdateStarshipPayload - deleteStarship(filter: StarshipFilter!): DeleteStarshipPayload + updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload + deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload + addHuman(input: [AddHumanInput!]!): AddHumanPayload + updateHuman(input: UpdateHumanInput!): UpdateHumanPayload + deleteHuman(filter: HumanFilter!): DeleteHumanPayload + addDroid(input: [AddDroidInput!]!): AddDroidPayload + updateDroid(input: UpdateDroidInput!): UpdateDroidPayload + deleteDroid(filter: DroidFilter!): DeleteDroidPayload + addStarship(input: [AddStarshipInput!]!): AddStarshipPayload + updateStarship(input: UpdateStarshipInput!): UpdateStarshipPayload + deleteStarship(filter: StarshipFilter!): DeleteStarshipPayload } - diff --git a/graphql/schema/testdata/schemagen/output/interfaces-with-types.graphql b/graphql/schema/testdata/schemagen/output/interfaces-with-types.graphql index 5557ee1e3df..488ed7779b6 100644 --- a/graphql/schema/testdata/schemagen/output/interfaces-with-types.graphql +++ b/graphql/schema/testdata/schemagen/output/interfaces-with-types.graphql @@ -3,43 +3,43 @@ ####################### interface Character { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - appearsIn: [Episode!]! @search - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + appearsIn: [Episode!]! @search + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } type Human implements Character { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - appearsIn: [Episode!]! @search - starships(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - totalCredits: Int - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult - starshipsAggregate(filter: StarshipFilter): StarshipAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + appearsIn: [Episode!]! @search + starships(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + totalCredits: Int + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + starshipsAggregate(filter: StarshipFilter): StarshipAggregateResult } type Droid implements Character { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - appearsIn: [Episode!]! @search - primaryFunction: String - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + appearsIn: [Episode!]! @search + primaryFunction: String + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } enum Episode { - NEWHOPE - EMPIRE - JEDI + NEWHOPE + EMPIRE + JEDI } type Starship { - id: ID! - name: String! @search(by: [term]) - length: Float + id: ID! + name: String! @search(by: [term]) + length: Float } ####################### @@ -58,162 +58,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -225,11 +225,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -238,77 +239,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -316,96 +318,96 @@ input StringHashFilter { ####################### type AddDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + numUids: Int } type AddHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type AddStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + numUids: Int } type CharacterAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - msg: String - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + msg: String + numUids: Int } type DeleteDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - msg: String - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + msg: String + numUids: Int } type DeleteHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - msg: String - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + msg: String + numUids: Int } type DeleteStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - msg: String - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + msg: String + numUids: Int } type DroidAggregateResult { - count: Int - nameMin: String - nameMax: String - primaryFunctionMin: String - primaryFunctionMax: String + count: Int + nameMin: String + nameMax: String + primaryFunctionMin: String + primaryFunctionMax: String } type HumanAggregateResult { - count: Int - nameMin: String - nameMax: String - totalCreditsMin: Int - totalCreditsMax: Int - totalCreditsSum: Int - totalCreditsAvg: Float + count: Int + nameMin: String + nameMax: String + totalCreditsMin: Int + totalCreditsMax: Int + totalCreditsSum: Int + totalCreditsAvg: Float } type StarshipAggregateResult { - count: Int - nameMin: String - nameMax: String - lengthMin: Float - lengthMax: Float - lengthSum: Float - lengthAvg: Float + count: Int + nameMin: String + nameMax: String + lengthMin: Float + lengthMax: Float + lengthSum: Float + lengthAvg: Float } type UpdateCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + numUids: Int } type UpdateDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + numUids: Int } type UpdateHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type UpdateStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + numUids: Int } ####################### @@ -413,48 +415,48 @@ type UpdateStarshipPayload { ####################### enum CharacterHasFilter { - name - friends - appearsIn + name + friends + appearsIn } enum CharacterOrderable { - name + name } enum DroidHasFilter { - name - friends - appearsIn - primaryFunction + name + friends + appearsIn + primaryFunction } enum DroidOrderable { - name - primaryFunction + name + primaryFunction } enum HumanHasFilter { - name - friends - appearsIn - starships - totalCredits + name + friends + appearsIn + starships + totalCredits } enum HumanOrderable { - name - totalCredits + name + totalCredits } enum StarshipHasFilter { - name - length + name + length } enum StarshipOrderable { - name - length + name + length } ####################### @@ -462,168 +464,168 @@ enum StarshipOrderable { ####################### input AddDroidInput { - name: String! - friends: [CharacterRef] - appearsIn: [Episode!]! - primaryFunction: String + name: String! + friends: [CharacterRef] + appearsIn: [Episode!]! + primaryFunction: String } input AddHumanInput { - name: String! - friends: [CharacterRef] - appearsIn: [Episode!]! - starships: [StarshipRef] - totalCredits: Int + name: String! + friends: [CharacterRef] + appearsIn: [Episode!]! + starships: [StarshipRef] + totalCredits: Int } input AddStarshipInput { - name: String! - length: Float + name: String! + length: Float } input CharacterFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [CharacterHasFilter] - and: [CharacterFilter] - or: [CharacterFilter] - not: CharacterFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [CharacterHasFilter] + and: [CharacterFilter] + or: [CharacterFilter] + not: CharacterFilter } input CharacterOrder { - asc: CharacterOrderable - desc: CharacterOrderable - then: CharacterOrder + asc: CharacterOrderable + desc: CharacterOrderable + then: CharacterOrder } input CharacterPatch { - name: String - friends: [CharacterRef] - appearsIn: [Episode!] + name: String + friends: [CharacterRef] + appearsIn: [Episode!] } input CharacterRef { - id: ID! + id: ID! } input DroidFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [DroidHasFilter] - and: [DroidFilter] - or: [DroidFilter] - not: DroidFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [DroidHasFilter] + and: [DroidFilter] + or: [DroidFilter] + not: DroidFilter } input DroidOrder { - asc: DroidOrderable - desc: DroidOrderable - then: DroidOrder + asc: DroidOrderable + desc: DroidOrderable + then: DroidOrder } input DroidPatch { - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - primaryFunction: String + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + primaryFunction: String } input DroidRef { - id: ID - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - primaryFunction: String + id: ID + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + primaryFunction: String } input Episode_hash { - eq: Episode - in: [Episode] + eq: Episode + in: [Episode] } input HumanFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [HumanHasFilter] - and: [HumanFilter] - or: [HumanFilter] - not: HumanFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [HumanHasFilter] + and: [HumanFilter] + or: [HumanFilter] + not: HumanFilter } input HumanOrder { - asc: HumanOrderable - desc: HumanOrderable - then: HumanOrder + asc: HumanOrderable + desc: HumanOrderable + then: HumanOrder } input HumanPatch { - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - starships: [StarshipRef] - totalCredits: Int + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + starships: [StarshipRef] + totalCredits: Int } input HumanRef { - id: ID - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - starships: [StarshipRef] - totalCredits: Int + id: ID + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + starships: [StarshipRef] + totalCredits: Int } input StarshipFilter { - id: [ID!] - name: StringTermFilter - has: [StarshipHasFilter] - and: [StarshipFilter] - or: [StarshipFilter] - not: StarshipFilter + id: [ID!] + name: StringTermFilter + has: [StarshipHasFilter] + and: [StarshipFilter] + or: [StarshipFilter] + not: StarshipFilter } input StarshipOrder { - asc: StarshipOrderable - desc: StarshipOrderable - then: StarshipOrder + asc: StarshipOrderable + desc: StarshipOrderable + then: StarshipOrder } input StarshipPatch { - name: String - length: Float + name: String + length: Float } input StarshipRef { - id: ID - name: String - length: Float + id: ID + name: String + length: Float } input UpdateCharacterInput { - filter: CharacterFilter! - set: CharacterPatch - remove: CharacterPatch + filter: CharacterFilter! + set: CharacterPatch + remove: CharacterPatch } input UpdateDroidInput { - filter: DroidFilter! - set: DroidPatch - remove: DroidPatch + filter: DroidFilter! + set: DroidPatch + remove: DroidPatch } input UpdateHumanInput { - filter: HumanFilter! - set: HumanPatch - remove: HumanPatch + filter: HumanFilter! + set: HumanPatch + remove: HumanPatch } input UpdateStarshipInput { - filter: StarshipFilter! - set: StarshipPatch - remove: StarshipPatch + filter: StarshipFilter! + set: StarshipPatch + remove: StarshipPatch } ####################### @@ -631,18 +633,23 @@ input UpdateStarshipInput { ####################### type Query { - getCharacter(id: ID!): Character - queryCharacter(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult - getHuman(id: ID!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult - getDroid(id: ID!): Droid - queryDroid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - aggregateDroid(filter: DroidFilter): DroidAggregateResult - getStarship(id: ID!): Starship - queryStarship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - aggregateStarship(filter: StarshipFilter): StarshipAggregateResult + getCharacter(id: ID!): Character + queryCharacter( + filter: CharacterFilter + order: CharacterOrder + first: Int + offset: Int + ): [Character] + aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult + getHuman(id: ID!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult + getDroid(id: ID!): Droid + queryDroid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + aggregateDroid(filter: DroidFilter): DroidAggregateResult + getStarship(id: ID!): Starship + queryStarship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + aggregateStarship(filter: StarshipFilter): StarshipAggregateResult } ####################### @@ -650,16 +657,15 @@ type Query { ####################### type Mutation { - updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload - deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload - addHuman(input: [AddHumanInput!]!): AddHumanPayload - updateHuman(input: UpdateHumanInput!): UpdateHumanPayload - deleteHuman(filter: HumanFilter!): DeleteHumanPayload - addDroid(input: [AddDroidInput!]!): AddDroidPayload - updateDroid(input: UpdateDroidInput!): UpdateDroidPayload - deleteDroid(filter: DroidFilter!): DeleteDroidPayload - addStarship(input: [AddStarshipInput!]!): AddStarshipPayload - updateStarship(input: UpdateStarshipInput!): UpdateStarshipPayload - deleteStarship(filter: StarshipFilter!): DeleteStarshipPayload + updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload + deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload + addHuman(input: [AddHumanInput!]!): AddHumanPayload + updateHuman(input: UpdateHumanInput!): UpdateHumanPayload + deleteHuman(filter: HumanFilter!): DeleteHumanPayload + addDroid(input: [AddDroidInput!]!): AddDroidPayload + updateDroid(input: UpdateDroidInput!): UpdateDroidPayload + deleteDroid(filter: DroidFilter!): DeleteDroidPayload + addStarship(input: [AddStarshipInput!]!): AddStarshipPayload + updateStarship(input: UpdateStarshipInput!): UpdateStarshipPayload + deleteStarship(filter: StarshipFilter!): DeleteStarshipPayload } - diff --git a/graphql/schema/testdata/schemagen/output/lambda-directive.graphql b/graphql/schema/testdata/schemagen/output/lambda-directive.graphql index 2b81f7d964e..1f0f4eee988 100644 --- a/graphql/schema/testdata/schemagen/output/lambda-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/lambda-directive.graphql @@ -3,10 +3,10 @@ ####################### type User { - id: ID! - firstName: String! - lastName: String! - fullName: String @lambda + id: ID! + firstName: String! + lastName: String! + fullName: String @lambda } ####################### @@ -25,162 +25,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -192,11 +192,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -205,77 +206,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -283,27 +285,27 @@ input StringHashFilter { ####################### type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - firstNameMin: String - firstNameMax: String - lastNameMin: String - lastNameMax: String + count: Int + firstNameMin: String + firstNameMax: String + lastNameMin: String + lastNameMax: String } ####################### @@ -311,13 +313,13 @@ type UserAggregateResult { ####################### enum UserHasFilter { - firstName - lastName + firstName + lastName } enum UserOrderable { - firstName - lastName + firstName + lastName } ####################### @@ -325,39 +327,39 @@ enum UserOrderable { ####################### input AddUserInput { - firstName: String! - lastName: String! + firstName: String! + lastName: String! } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - id: [ID!] - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + id: [ID!] + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - firstName: String - lastName: String + firstName: String + lastName: String } input UserRef { - id: ID - firstName: String - lastName: String + id: ID + firstName: String + lastName: String } ####################### @@ -365,10 +367,10 @@ input UserRef { ####################### type Query { - queryUserNames(id: [ID!]!): [String] @lambda - getUser(id: ID!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + queryUserNames(id: [ID!]!): [String] @lambda + getUser(id: ID!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -376,9 +378,8 @@ type Query { ####################### type Mutation { - createUser(firstName: String!, lastName: String!): User @lambda - addUser(input: [AddUserInput!]!): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + createUser(firstName: String!, lastName: String!): User @lambda + addUser(input: [AddUserInput!]!): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } - diff --git a/graphql/schema/testdata/schemagen/output/language-tags.graphql b/graphql/schema/testdata/schemagen/output/language-tags.graphql index 174a6cde433..2e21d265153 100644 --- a/graphql/schema/testdata/schemagen/output/language-tags.graphql +++ b/graphql/schema/testdata/schemagen/output/language-tags.graphql @@ -3,23 +3,23 @@ ####################### interface Node { - f1: String + f1: String } type Person implements Node { - f1: String - f1Hi: String @dgraph(pred: "Node.f1@hi") - f2: String @dgraph(pred: "T.f@no") - f3: String @dgraph(pred: "f3@en") - name: String! @id - nameHi: String @dgraph(pred: "Person.name@hi") @search(by: ["term","exact"]) - nameEn: String @dgraph(pred: "Person.name@en") @search(by: [regexp]) - nameHiEn: String @dgraph(pred: "Person.name@hi:en") - nameHi_En_Untag: String @dgraph(pred: "Person.name@hi:en:.") - name_Untag_AnyLang: String @dgraph(pred: "Person.name@.") - address: String @search(by: [fulltext]) - addressHi: String @dgraph(pred: "Person.address@hi") - professionEn: String @dgraph(pred: "Person.profession@en") + f1: String + f1Hi: String @dgraph(pred: "Node.f1@hi") + f2: String @dgraph(pred: "T.f@no") + f3: String @dgraph(pred: "f3@en") + name: String! @id + nameHi: String @dgraph(pred: "Person.name@hi") @search(by: ["term", "exact"]) + nameEn: String @dgraph(pred: "Person.name@en") @search(by: [regexp]) + nameHiEn: String @dgraph(pred: "Person.name@hi:en") + nameHi_En_Untag: String @dgraph(pred: "Person.name@hi:en:.") + name_Untag_AnyLang: String @dgraph(pred: "Person.name@.") + address: String @search(by: [fulltext]) + addressHi: String @dgraph(pred: "Person.address@hi") + professionEn: String @dgraph(pred: "Person.profession@en") } ####################### @@ -38,162 +38,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -205,11 +205,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -218,77 +219,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -296,66 +298,66 @@ input StringHashFilter { ####################### type AddPersonPayload { - person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - numUids: Int + person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + numUids: Int } type DeleteNodePayload { - node(filter: NodeFilter, order: NodeOrder, first: Int, offset: Int): [Node] - msg: String - numUids: Int + node(filter: NodeFilter, order: NodeOrder, first: Int, offset: Int): [Node] + msg: String + numUids: Int } type DeletePersonPayload { - person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - msg: String - numUids: Int + person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + msg: String + numUids: Int } type NodeAggregateResult { - count: Int - f1Min: String - f1Max: String + count: Int + f1Min: String + f1Max: String } type PersonAggregateResult { - count: Int - f1Min: String - f1Max: String - f1HiMin: String - f1HiMax: String - f2Min: String - f2Max: String - f3Min: String - f3Max: String - nameMin: String - nameMax: String - nameHiMin: String - nameHiMax: String - nameEnMin: String - nameEnMax: String - nameHiEnMin: String - nameHiEnMax: String - nameHi_En_UntagMin: String - nameHi_En_UntagMax: String - name_Untag_AnyLangMin: String - name_Untag_AnyLangMax: String - addressMin: String - addressMax: String - addressHiMin: String - addressHiMax: String - professionEnMin: String - professionEnMax: String + count: Int + f1Min: String + f1Max: String + f1HiMin: String + f1HiMax: String + f2Min: String + f2Max: String + f3Min: String + f3Max: String + nameMin: String + nameMax: String + nameHiMin: String + nameHiMax: String + nameEnMin: String + nameEnMax: String + nameHiEnMin: String + nameHiEnMax: String + nameHi_En_UntagMin: String + nameHi_En_UntagMax: String + name_Untag_AnyLangMin: String + name_Untag_AnyLangMax: String + addressMin: String + addressMax: String + addressHiMin: String + addressHiMax: String + professionEnMin: String + professionEnMax: String } type UpdateNodePayload { - node(filter: NodeFilter, order: NodeOrder, first: Int, offset: Int): [Node] - numUids: Int + node(filter: NodeFilter, order: NodeOrder, first: Int, offset: Int): [Node] + numUids: Int } type UpdatePersonPayload { - person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - numUids: Int + person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + numUids: Int } ####################### @@ -363,39 +365,39 @@ type UpdatePersonPayload { ####################### enum NodeHasFilter { - f1 + f1 } enum NodeOrderable { - f1 + f1 } enum PersonHasFilter { - f1 - f1Hi - f2 - f3 - name - nameHi - nameEn - name_Untag_AnyLang - address - addressHi - professionEn + f1 + f1Hi + f2 + f3 + name + nameHi + nameEn + name_Untag_AnyLang + address + addressHi + professionEn } enum PersonOrderable { - f1 - f1Hi - f2 - f3 - name - nameHi - nameEn - name_Untag_AnyLang - address - addressHi - professionEn + f1 + f1Hi + f2 + f3 + name + nameHi + nameEn + name_Untag_AnyLang + address + addressHi + professionEn } ####################### @@ -403,100 +405,100 @@ enum PersonOrderable { ####################### input AddPersonInput { - f1: String - f1Hi: String - f2: String - f3: String - name: String! - nameHi: String - nameEn: String - address: String - addressHi: String - professionEn: String + f1: String + f1Hi: String + f2: String + f3: String + name: String! + nameHi: String + nameEn: String + address: String + addressHi: String + professionEn: String } input NodeFilter { - has: [NodeHasFilter] - and: [NodeFilter] - or: [NodeFilter] - not: NodeFilter + has: [NodeHasFilter] + and: [NodeFilter] + or: [NodeFilter] + not: NodeFilter } input NodeOrder { - asc: NodeOrderable - desc: NodeOrderable - then: NodeOrder + asc: NodeOrderable + desc: NodeOrderable + then: NodeOrder } input NodePatch { - f1: String + f1: String } input PersonFilter { - name: StringHashFilter - nameHi: StringExactFilter_StringTermFilter - nameEn: StringRegExpFilter - address: StringFullTextFilter - has: [PersonHasFilter] - and: [PersonFilter] - or: [PersonFilter] - not: PersonFilter + name: StringHashFilter + nameHi: StringExactFilter_StringTermFilter + nameEn: StringRegExpFilter + address: StringFullTextFilter + has: [PersonHasFilter] + and: [PersonFilter] + or: [PersonFilter] + not: PersonFilter } input PersonOrder { - asc: PersonOrderable - desc: PersonOrderable - then: PersonOrder + asc: PersonOrderable + desc: PersonOrderable + then: PersonOrder } input PersonPatch { - f1: String - f1Hi: String - f2: String - f3: String - name: String - nameHi: String - nameEn: String - address: String - addressHi: String - professionEn: String + f1: String + f1Hi: String + f2: String + f3: String + name: String + nameHi: String + nameEn: String + address: String + addressHi: String + professionEn: String } input PersonRef { - f1: String - f1Hi: String - f2: String - f3: String - name: String - nameHi: String - nameEn: String - address: String - addressHi: String - professionEn: String + f1: String + f1Hi: String + f2: String + f3: String + name: String + nameHi: String + nameEn: String + address: String + addressHi: String + professionEn: String } input StringExactFilter_StringTermFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange - allofterms: String - anyofterms: String + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange + allofterms: String + anyofterms: String } input UpdateNodeInput { - filter: NodeFilter! - set: NodePatch - remove: NodePatch + filter: NodeFilter! + set: NodePatch + remove: NodePatch } input UpdatePersonInput { - filter: PersonFilter! - set: PersonPatch - remove: PersonPatch + filter: PersonFilter! + set: PersonPatch + remove: PersonPatch } ####################### @@ -504,11 +506,11 @@ input UpdatePersonInput { ####################### type Query { - queryNode(filter: NodeFilter, order: NodeOrder, first: Int, offset: Int): [Node] - aggregateNode(filter: NodeFilter): NodeAggregateResult - getPerson(name: String!): Person - queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - aggregatePerson(filter: PersonFilter): PersonAggregateResult + queryNode(filter: NodeFilter, order: NodeOrder, first: Int, offset: Int): [Node] + aggregateNode(filter: NodeFilter): NodeAggregateResult + getPerson(name: String!): Person + queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + aggregatePerson(filter: PersonFilter): PersonAggregateResult } ####################### @@ -516,10 +518,9 @@ type Query { ####################### type Mutation { - updateNode(input: UpdateNodeInput!): UpdateNodePayload - deleteNode(filter: NodeFilter!): DeleteNodePayload - addPerson(input: [AddPersonInput!]!, upsert: Boolean): AddPersonPayload - updatePerson(input: UpdatePersonInput!): UpdatePersonPayload - deletePerson(filter: PersonFilter!): DeletePersonPayload + updateNode(input: UpdateNodeInput!): UpdateNodePayload + deleteNode(filter: NodeFilter!): DeleteNodePayload + addPerson(input: [AddPersonInput!]!, upsert: Boolean): AddPersonPayload + updatePerson(input: UpdatePersonInput!): UpdatePersonPayload + deletePerson(filter: PersonFilter!): DeletePersonPayload } - diff --git a/graphql/schema/testdata/schemagen/output/no-id-field-with-searchables.graphql b/graphql/schema/testdata/schemagen/output/no-id-field-with-searchables.graphql index 66f3178e52c..d2a6d41a48e 100644 --- a/graphql/schema/testdata/schemagen/output/no-id-field-with-searchables.graphql +++ b/graphql/schema/testdata/schemagen/output/no-id-field-with-searchables.graphql @@ -3,7 +3,7 @@ ####################### type Post { - content: String! @search + content: String! @search } ####################### @@ -22,162 +22,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -189,11 +189,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -202,77 +203,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -280,25 +282,25 @@ input StringHashFilter { ####################### type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - contentMin: String - contentMax: String + count: Int + contentMin: String + contentMax: String } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -306,11 +308,11 @@ type UpdatePostPayload { ####################### enum PostHasFilter { - content + content } enum PostOrderable { - content + content } ####################### @@ -318,35 +320,35 @@ enum PostOrderable { ####################### input AddPostInput { - content: String! + content: String! } input PostFilter { - content: StringTermFilter - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + content: StringTermFilter + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - content: String + content: String } input PostRef { - content: String + content: String } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -354,8 +356,8 @@ input UpdatePostInput { ####################### type Query { - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult } ####################### @@ -363,8 +365,7 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload } - diff --git a/graphql/schema/testdata/schemagen/output/no-id-field.graphql b/graphql/schema/testdata/schemagen/output/no-id-field.graphql index 1b45c328a3a..994156cfb62 100644 --- a/graphql/schema/testdata/schemagen/output/no-id-field.graphql +++ b/graphql/schema/testdata/schemagen/output/no-id-field.graphql @@ -3,20 +3,20 @@ ####################### type Post { - content: String! - author(filter: AuthorFilter): Author! - genre(filter: GenreFilter): Genre + content: String! + author(filter: AuthorFilter): Author! + genre(filter: GenreFilter): Genre } type Author { - id: ID - name: String - posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID + name: String + posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + postsAggregate(filter: PostFilter): PostAggregateResult } type Genre { - name: String! + name: String! } ####################### @@ -35,162 +35,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -202,11 +202,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -215,77 +216,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -293,69 +295,69 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + numUids: Int } type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeleteGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - msg: String - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type GenreAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type PostAggregateResult { - count: Int - contentMin: String - contentMax: String + count: Int + contentMin: String + contentMax: String } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdateGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -363,30 +365,30 @@ type UpdatePostPayload { ####################### enum AuthorHasFilter { - name - posts + name + posts } enum AuthorOrderable { - name + name } enum GenreHasFilter { - name + name } enum GenreOrderable { - name + name } enum PostHasFilter { - content - author - genre + content + author + genre } enum PostOrderable { - content + content } ####################### @@ -394,107 +396,107 @@ enum PostOrderable { ####################### input AddAuthorInput { - name: String - posts: [PostRef] + name: String + posts: [PostRef] } input AddGenreInput { - name: String! + name: String! } input AddPostInput { - content: String! - author: AuthorRef! - genre: GenreRef + content: String! + author: AuthorRef! + genre: GenreRef } input AuthorFilter { - id: [ID!] - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - posts: [PostRef] + name: String + posts: [PostRef] } input AuthorRef { - id: ID - name: String - posts: [PostRef] + id: ID + name: String + posts: [PostRef] } input GenreFilter { - has: [GenreHasFilter] - and: [GenreFilter] - or: [GenreFilter] - not: GenreFilter + has: [GenreHasFilter] + and: [GenreFilter] + or: [GenreFilter] + not: GenreFilter } input GenreOrder { - asc: GenreOrderable - desc: GenreOrderable - then: GenreOrder + asc: GenreOrderable + desc: GenreOrderable + then: GenreOrder } input GenrePatch { - name: String + name: String } input GenreRef { - name: String + name: String } input PostFilter { - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - content: String - author: AuthorRef - genre: GenreRef + content: String + author: AuthorRef + genre: GenreRef } input PostRef { - content: String - author: AuthorRef - genre: GenreRef + content: String + author: AuthorRef + genre: GenreRef } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdateGenreInput { - filter: GenreFilter! - set: GenrePatch - remove: GenrePatch + filter: GenreFilter! + set: GenrePatch + remove: GenrePatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -502,13 +504,13 @@ input UpdatePostInput { ####################### type Query { - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - queryGenre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - aggregateGenre(filter: GenreFilter): GenreAggregateResult + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + queryGenre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + aggregateGenre(filter: GenreFilter): GenreAggregateResult } ####################### @@ -516,14 +518,13 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - addGenre(input: [AddGenreInput!]!): AddGenrePayload - updateGenre(input: UpdateGenreInput!): UpdateGenrePayload - deleteGenre(filter: GenreFilter!): DeleteGenrePayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addGenre(input: [AddGenreInput!]!): AddGenrePayload + updateGenre(input: UpdateGenreInput!): UpdateGenrePayload + deleteGenre(filter: GenreFilter!): DeleteGenrePayload } - diff --git a/graphql/schema/testdata/schemagen/output/password-type.graphql b/graphql/schema/testdata/schemagen/output/password-type.graphql index 9b637e1796e..2ac7bb558e9 100644 --- a/graphql/schema/testdata/schemagen/output/password-type.graphql +++ b/graphql/schema/testdata/schemagen/output/password-type.graphql @@ -3,8 +3,8 @@ ####################### type Author @secret(field: "pwd") { - name: String! @id - token: String + name: String! @id + token: String } ####################### @@ -23,162 +23,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -190,11 +190,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -203,77 +204,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -281,27 +283,27 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String - tokenMin: String - tokenMax: String + count: Int + nameMin: String + nameMax: String + tokenMin: String + tokenMax: String } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } ####################### @@ -309,13 +311,13 @@ type UpdateAuthorPayload { ####################### enum AuthorHasFilter { - name - token + name + token } enum AuthorOrderable { - name - token + name + token } ####################### @@ -323,41 +325,41 @@ enum AuthorOrderable { ####################### input AddAuthorInput { - name: String! - token: String - pwd: String! + name: String! + token: String + pwd: String! } input AuthorFilter { - name: StringHashFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + name: StringHashFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - token: String - pwd: String + name: String + token: String + pwd: String } input AuthorRef { - name: String - token: String - pwd: String + name: String + token: String + pwd: String } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } ####################### @@ -365,10 +367,10 @@ input UpdateAuthorInput { ####################### type Query { - getAuthor(name: String!): Author - checkAuthorPassword(name: String!, pwd: String!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getAuthor(name: String!): Author + checkAuthorPassword(name: String!, pwd: String!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult } ####################### @@ -376,8 +378,7 @@ type Query { ####################### type Mutation { - addAuthor(input: [AddAuthorInput!]!, upsert: Boolean): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addAuthor(input: [AddAuthorInput!]!, upsert: Boolean): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload } - diff --git a/graphql/schema/testdata/schemagen/output/random.graphql b/graphql/schema/testdata/schemagen/output/random.graphql index 3d0c9112385..a15b78d4ee0 100644 --- a/graphql/schema/testdata/schemagen/output/random.graphql +++ b/graphql/schema/testdata/schemagen/output/random.graphql @@ -3,26 +3,26 @@ ####################### type Mission { - id: ID! - crew: [Astronaut] - designation: String! - startDate: String - endDate: String + id: ID! + crew: [Astronaut] + designation: String! + startDate: String + endDate: String } type Astronaut @key(fields: "id") @extends { - id: ID! @external - missions: [Mission] + id: ID! @external + missions: [Mission] } type User @remote { - id: ID! - name: String! + id: ID! + name: String! } type Car { - id: ID! - name: String! + id: ID! + name: String! } ####################### @@ -41,162 +41,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -214,68 +214,68 @@ directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJ directive @cacheControl(maxAge: Int!) on QUERY input IntFilter { - eq: Int - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -283,19 +283,19 @@ input StringHashFilter { ####################### type CarAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type MissionAggregateResult { - count: Int - designationMin: String - designationMax: String - startDateMin: String - startDateMax: String - endDateMin: String - endDateMax: String + count: Int + designationMin: String + designationMax: String + startDateMin: String + startDateMax: String + endDateMin: String + endDateMax: String } ####################### @@ -303,24 +303,24 @@ type MissionAggregateResult { ####################### enum CarHasFilter { - name + name } enum CarOrderable { - name + name } enum MissionHasFilter { - crew - designation - startDate - endDate + crew + designation + startDate + endDate } enum MissionOrderable { - designation - startDate - endDate + designation + startDate + endDate } ####################### @@ -328,31 +328,31 @@ enum MissionOrderable { ####################### input CarFilter { - id: [ID!] - has: CarHasFilter - and: [CarFilter] - or: [CarFilter] - not: CarFilter + id: [ID!] + has: CarHasFilter + and: [CarFilter] + or: [CarFilter] + not: CarFilter } input CarOrder { - asc: CarOrderable - desc: CarOrderable - then: CarOrder + asc: CarOrderable + desc: CarOrderable + then: CarOrder } input MissionFilter { - id: [ID!] - has: MissionHasFilter - and: [MissionFilter] - or: [MissionFilter] - not: MissionFilter + id: [ID!] + has: MissionHasFilter + and: [MissionFilter] + or: [MissionFilter] + not: MissionFilter } input MissionOrder { - asc: MissionOrderable - desc: MissionOrderable - then: MissionOrder + asc: MissionOrderable + desc: MissionOrderable + then: MissionOrder } ####################### @@ -360,12 +360,11 @@ input MissionOrder { ####################### type Query { - getMyFavoriteUsers(id: ID!): [User] - getMission(id: ID!): Mission - queryMission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] - aggregateMission(filter: MissionFilter): MissionAggregateResult - getCar(id: ID!): Car - queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - aggregateCar(filter: CarFilter): CarAggregateResult + getMyFavoriteUsers(id: ID!): [User] + getMission(id: ID!): Mission + queryMission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] + aggregateMission(filter: MissionFilter): MissionAggregateResult + getCar(id: ID!): Car + queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + aggregateCar(filter: CarFilter): CarAggregateResult } - diff --git a/graphql/schema/testdata/schemagen/output/searchables-references.graphql b/graphql/schema/testdata/schemagen/output/searchables-references.graphql index 783620de915..7a04645004e 100644 --- a/graphql/schema/testdata/schemagen/output/searchables-references.graphql +++ b/graphql/schema/testdata/schemagen/output/searchables-references.graphql @@ -3,18 +3,18 @@ ####################### type Author { - id: ID! - name: String! @search(by: [hash]) - dob: DateTime - posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID! + name: String! @search(by: [hash]) + dob: DateTime + posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + postsAggregate(filter: PostFilter): PostAggregateResult } type Post { - postID: ID! - title: String! @search(by: ["term","fulltext"]) - text: String @search(by: ["fulltext","term"]) - datePublished: DateTime + postID: ID! + title: String! @search(by: ["term", "fulltext"]) + text: String @search(by: ["fulltext", "term"]) + datePublished: DateTime } ####################### @@ -33,162 +33,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -200,11 +200,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -213,77 +214,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -291,53 +293,53 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String - dobMin: DateTime - dobMax: DateTime + count: Int + nameMin: String + nameMax: String + dobMin: DateTime + dobMax: DateTime } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - titleMin: String - titleMax: String - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + titleMin: String + titleMax: String + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -345,26 +347,26 @@ type UpdatePostPayload { ####################### enum AuthorHasFilter { - name - dob - posts + name + dob + posts } enum AuthorOrderable { - name - dob + name + dob } enum PostHasFilter { - title - text - datePublished + title + text + datePublished } enum PostOrderable { - title - text - datePublished + title + text + datePublished } ####################### @@ -372,91 +374,91 @@ enum PostOrderable { ####################### input AddAuthorInput { - name: String! - dob: DateTime - posts: [PostRef] + name: String! + dob: DateTime + posts: [PostRef] } input AddPostInput { - title: String! - text: String - datePublished: DateTime + title: String! + text: String + datePublished: DateTime } input AuthorFilter { - id: [ID!] - name: StringHashFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + name: StringHashFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - dob: DateTime - posts: [PostRef] + name: String + dob: DateTime + posts: [PostRef] } input AuthorRef { - id: ID - name: String - dob: DateTime - posts: [PostRef] + id: ID + name: String + dob: DateTime + posts: [PostRef] } input PostFilter { - postID: [ID!] - title: StringFullTextFilter_StringTermFilter - text: StringFullTextFilter_StringTermFilter - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + postID: [ID!] + title: StringFullTextFilter_StringTermFilter + text: StringFullTextFilter_StringTermFilter + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - title: String - text: String - datePublished: DateTime + title: String + text: String + datePublished: DateTime } input PostRef { - postID: ID - title: String - text: String - datePublished: DateTime + postID: ID + title: String + text: String + datePublished: DateTime } input StringFullTextFilter_StringTermFilter { - alloftext: String - anyoftext: String - allofterms: String - anyofterms: String + alloftext: String + anyoftext: String + allofterms: String + anyofterms: String } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -464,12 +466,12 @@ input UpdatePostInput { ####################### type Query { - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - getPost(postID: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(postID: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult } ####################### @@ -477,11 +479,10 @@ type Query { ####################### type Mutation { - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload } - diff --git a/graphql/schema/testdata/schemagen/output/searchables.graphql b/graphql/schema/testdata/schemagen/output/searchables.graphql index ac2387bae25..355030a84f5 100644 --- a/graphql/schema/testdata/schemagen/output/searchables.graphql +++ b/graphql/schema/testdata/schemagen/output/searchables.graphql @@ -3,38 +3,38 @@ ####################### type Post { - postID: ID! - title: String! @search(by: [term]) - titleByEverything: String! @search(by: ["term","fulltext","trigram","hash"]) - text: String @search(by: [fulltext]) - tags: [String] @search(by: [trigram]) - tagsHash: [String] @search(by: [hash]) - tagsExact: [String] @search(by: [exact]) - publishByYear: DateTime @search(by: [year]) - publishByMonth: DateTime @search(by: [month]) - publishByDay: DateTime @search(by: [day]) - publishByHour: DateTime @search(by: [hour]) - publishTimestamp: Int64 @search - numViewers: Int64 @search(by: [int64]) - numLikes: Int @search - score: Float @search - isPublished: Boolean @search - postType: PostType @search - postTypeNonNull: PostType! @search - postTypeList: [PostType] @search - postTypeTrigram: PostType @search(by: [trigram]) - postTypeRegexp: PostType @search(by: [regexp]) - postTypeExact: [PostType] @search(by: [exact]) - postTypeHash: PostType @search(by: [hash]) - postTypeRegexpExact: PostType @search(by: ["exact","regexp"]) - postTypeHashRegexp: PostType @search(by: ["hash","regexp"]) - postTypeNone: PostType @search(by: []) + postID: ID! + title: String! @search(by: [term]) + titleByEverything: String! @search(by: ["term", "fulltext", "trigram", "hash"]) + text: String @search(by: [fulltext]) + tags: [String] @search(by: [trigram]) + tagsHash: [String] @search(by: [hash]) + tagsExact: [String] @search(by: [exact]) + publishByYear: DateTime @search(by: [year]) + publishByMonth: DateTime @search(by: [month]) + publishByDay: DateTime @search(by: [day]) + publishByHour: DateTime @search(by: [hour]) + publishTimestamp: Int64 @search + numViewers: Int64 @search(by: [int64]) + numLikes: Int @search + score: Float @search + isPublished: Boolean @search + postType: PostType @search + postTypeNonNull: PostType! @search + postTypeList: [PostType] @search + postTypeTrigram: PostType @search(by: [trigram]) + postTypeRegexp: PostType @search(by: [regexp]) + postTypeExact: [PostType] @search(by: [exact]) + postTypeHash: PostType @search(by: [hash]) + postTypeRegexpExact: PostType @search(by: ["exact", "regexp"]) + postTypeHashRegexp: PostType @search(by: ["hash", "regexp"]) + postTypeNone: PostType @search(by: []) } enum PostType { - Fact - Question - Opinion + Fact + Question + Opinion } ####################### @@ -53,162 +53,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -220,11 +220,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -233,77 +234,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -311,53 +313,53 @@ input StringHashFilter { ####################### type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - titleMin: String - titleMax: String - titleByEverythingMin: String - titleByEverythingMax: String - textMin: String - textMax: String - publishByYearMin: DateTime - publishByYearMax: DateTime - publishByMonthMin: DateTime - publishByMonthMax: DateTime - publishByDayMin: DateTime - publishByDayMax: DateTime - publishByHourMin: DateTime - publishByHourMax: DateTime - publishTimestampMin: Int64 - publishTimestampMax: Int64 - publishTimestampSum: Int64 - publishTimestampAvg: Float - numViewersMin: Int64 - numViewersMax: Int64 - numViewersSum: Int64 - numViewersAvg: Float - numLikesMin: Int - numLikesMax: Int - numLikesSum: Int - numLikesAvg: Float - scoreMin: Float - scoreMax: Float - scoreSum: Float - scoreAvg: Float + count: Int + titleMin: String + titleMax: String + titleByEverythingMin: String + titleByEverythingMax: String + textMin: String + textMax: String + publishByYearMin: DateTime + publishByYearMax: DateTime + publishByMonthMin: DateTime + publishByMonthMax: DateTime + publishByDayMin: DateTime + publishByDayMax: DateTime + publishByHourMin: DateTime + publishByHourMax: DateTime + publishTimestampMin: Int64 + publishTimestampMax: Int64 + publishTimestampSum: Int64 + publishTimestampAvg: Float + numViewersMin: Int64 + numViewersMax: Int64 + numViewersSum: Int64 + numViewersAvg: Float + numLikesMin: Int + numLikesMax: Int + numLikesSum: Int + numLikesAvg: Float + scoreMin: Float + scoreMax: Float + scoreSum: Float + scoreAvg: Float } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -365,45 +367,45 @@ type UpdatePostPayload { ####################### enum PostHasFilter { - title - titleByEverything - text - tags - tagsHash - tagsExact - publishByYear - publishByMonth - publishByDay - publishByHour - publishTimestamp - numViewers - numLikes - score - isPublished - postType - postTypeNonNull - postTypeList - postTypeTrigram - postTypeRegexp - postTypeExact - postTypeHash - postTypeRegexpExact - postTypeHashRegexp - postTypeNone + title + titleByEverything + text + tags + tagsHash + tagsExact + publishByYear + publishByMonth + publishByDay + publishByHour + publishTimestamp + numViewers + numLikes + score + isPublished + postType + postTypeNonNull + postTypeList + postTypeTrigram + postTypeRegexp + postTypeExact + postTypeHash + postTypeRegexpExact + postTypeHashRegexp + postTypeNone } enum PostOrderable { - title - titleByEverything - text - publishByYear - publishByMonth - publishByDay - publishByHour - publishTimestamp - numViewers - numLikes - score + title + titleByEverything + text + publishByYear + publishByMonth + publishByDay + publishByHour + publishTimestamp + numViewers + numLikes + score } ####################### @@ -411,175 +413,175 @@ enum PostOrderable { ####################### input AddPostInput { - title: String! - titleByEverything: String! - text: String - tags: [String] - tagsHash: [String] - tagsExact: [String] - publishByYear: DateTime - publishByMonth: DateTime - publishByDay: DateTime - publishByHour: DateTime - publishTimestamp: Int64 - numViewers: Int64 - numLikes: Int - score: Float - isPublished: Boolean - postType: PostType - postTypeNonNull: PostType! - postTypeList: [PostType] - postTypeTrigram: PostType - postTypeRegexp: PostType - postTypeExact: [PostType] - postTypeHash: PostType - postTypeRegexpExact: PostType - postTypeHashRegexp: PostType - postTypeNone: PostType + title: String! + titleByEverything: String! + text: String + tags: [String] + tagsHash: [String] + tagsExact: [String] + publishByYear: DateTime + publishByMonth: DateTime + publishByDay: DateTime + publishByHour: DateTime + publishTimestamp: Int64 + numViewers: Int64 + numLikes: Int + score: Float + isPublished: Boolean + postType: PostType + postTypeNonNull: PostType! + postTypeList: [PostType] + postTypeTrigram: PostType + postTypeRegexp: PostType + postTypeExact: [PostType] + postTypeHash: PostType + postTypeRegexpExact: PostType + postTypeHashRegexp: PostType + postTypeNone: PostType } input PostFilter { - postID: [ID!] - title: StringTermFilter - titleByEverything: StringFullTextFilter_StringHashFilter_StringTermFilter_StringRegExpFilter - text: StringFullTextFilter - tags: StringRegExpFilter - tagsHash: StringHashFilter - tagsExact: StringExactFilter - publishByYear: DateTimeFilter - publishByMonth: DateTimeFilter - publishByDay: DateTimeFilter - publishByHour: DateTimeFilter - publishTimestamp: Int64Filter - numViewers: Int64Filter - numLikes: IntFilter - score: FloatFilter - isPublished: Boolean - postType: PostType_hash - postTypeNonNull: PostType_hash - postTypeList: PostType_hash - postTypeTrigram: StringRegExpFilter - postTypeRegexp: StringRegExpFilter - postTypeExact: PostType_exact - postTypeHash: PostType_hash - postTypeRegexpExact: PostType_exact_StringRegExpFilter - postTypeHashRegexp: PostType_hash_StringRegExpFilter - postTypeNone: PostType_hash - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + postID: [ID!] + title: StringTermFilter + titleByEverything: StringFullTextFilter_StringHashFilter_StringTermFilter_StringRegExpFilter + text: StringFullTextFilter + tags: StringRegExpFilter + tagsHash: StringHashFilter + tagsExact: StringExactFilter + publishByYear: DateTimeFilter + publishByMonth: DateTimeFilter + publishByDay: DateTimeFilter + publishByHour: DateTimeFilter + publishTimestamp: Int64Filter + numViewers: Int64Filter + numLikes: IntFilter + score: FloatFilter + isPublished: Boolean + postType: PostType_hash + postTypeNonNull: PostType_hash + postTypeList: PostType_hash + postTypeTrigram: StringRegExpFilter + postTypeRegexp: StringRegExpFilter + postTypeExact: PostType_exact + postTypeHash: PostType_hash + postTypeRegexpExact: PostType_exact_StringRegExpFilter + postTypeHashRegexp: PostType_hash_StringRegExpFilter + postTypeNone: PostType_hash + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - title: String - titleByEverything: String - text: String - tags: [String] - tagsHash: [String] - tagsExact: [String] - publishByYear: DateTime - publishByMonth: DateTime - publishByDay: DateTime - publishByHour: DateTime - publishTimestamp: Int64 - numViewers: Int64 - numLikes: Int - score: Float - isPublished: Boolean - postType: PostType - postTypeNonNull: PostType - postTypeList: [PostType] - postTypeTrigram: PostType - postTypeRegexp: PostType - postTypeExact: [PostType] - postTypeHash: PostType - postTypeRegexpExact: PostType - postTypeHashRegexp: PostType - postTypeNone: PostType + title: String + titleByEverything: String + text: String + tags: [String] + tagsHash: [String] + tagsExact: [String] + publishByYear: DateTime + publishByMonth: DateTime + publishByDay: DateTime + publishByHour: DateTime + publishTimestamp: Int64 + numViewers: Int64 + numLikes: Int + score: Float + isPublished: Boolean + postType: PostType + postTypeNonNull: PostType + postTypeList: [PostType] + postTypeTrigram: PostType + postTypeRegexp: PostType + postTypeExact: [PostType] + postTypeHash: PostType + postTypeRegexpExact: PostType + postTypeHashRegexp: PostType + postTypeNone: PostType } input PostRef { - postID: ID - title: String - titleByEverything: String - text: String - tags: [String] - tagsHash: [String] - tagsExact: [String] - publishByYear: DateTime - publishByMonth: DateTime - publishByDay: DateTime - publishByHour: DateTime - publishTimestamp: Int64 - numViewers: Int64 - numLikes: Int - score: Float - isPublished: Boolean - postType: PostType - postTypeNonNull: PostType - postTypeList: [PostType] - postTypeTrigram: PostType - postTypeRegexp: PostType - postTypeExact: [PostType] - postTypeHash: PostType - postTypeRegexpExact: PostType - postTypeHashRegexp: PostType - postTypeNone: PostType + postID: ID + title: String + titleByEverything: String + text: String + tags: [String] + tagsHash: [String] + tagsExact: [String] + publishByYear: DateTime + publishByMonth: DateTime + publishByDay: DateTime + publishByHour: DateTime + publishTimestamp: Int64 + numViewers: Int64 + numLikes: Int + score: Float + isPublished: Boolean + postType: PostType + postTypeNonNull: PostType + postTypeList: [PostType] + postTypeTrigram: PostType + postTypeRegexp: PostType + postTypeExact: [PostType] + postTypeHash: PostType + postTypeRegexpExact: PostType + postTypeHashRegexp: PostType + postTypeNone: PostType } input PostType_exact { - eq: PostType - in: [PostType] - le: PostType - lt: PostType - ge: PostType - gt: PostType - between: PostType + eq: PostType + in: [PostType] + le: PostType + lt: PostType + ge: PostType + gt: PostType + between: PostType } input PostType_exact_StringRegExpFilter { - eq: PostType - in: [PostType] - le: PostType - lt: PostType - ge: PostType - gt: PostType - between: PostType - regexp: String + eq: PostType + in: [PostType] + le: PostType + lt: PostType + ge: PostType + gt: PostType + between: PostType + regexp: String } input PostType_hash { - eq: PostType - in: [PostType] + eq: PostType + in: [PostType] } input PostType_hash_StringRegExpFilter { - eq: PostType - in: [PostType] - regexp: String + eq: PostType + in: [PostType] + regexp: String } input StringFullTextFilter_StringHashFilter_StringTermFilter_StringRegExpFilter { - alloftext: String - anyoftext: String - eq: String - in: [String] - allofterms: String - anyofterms: String - regexp: String + alloftext: String + anyoftext: String + eq: String + in: [String] + allofterms: String + anyofterms: String + regexp: String } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -587,9 +589,9 @@ input UpdatePostInput { ####################### type Query { - getPost(postID: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult + getPost(postID: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult } ####################### @@ -597,8 +599,7 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload } - diff --git a/graphql/schema/testdata/schemagen/output/single-type-with-enum.graphql b/graphql/schema/testdata/schemagen/output/single-type-with-enum.graphql index 0645d3f34ae..5405db1dde2 100644 --- a/graphql/schema/testdata/schemagen/output/single-type-with-enum.graphql +++ b/graphql/schema/testdata/schemagen/output/single-type-with-enum.graphql @@ -3,16 +3,16 @@ ####################### type Post { - id: ID! - title: String! - text: String - postType: PostType! + id: ID! + title: String! + text: String + postType: PostType! } enum PostType { - Statement - Question - Answer + Statement + Question + Answer } ####################### @@ -31,162 +31,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -198,11 +198,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -211,77 +212,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -289,27 +291,27 @@ input StringHashFilter { ####################### type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - titleMin: String - titleMax: String - textMin: String - textMax: String + count: Int + titleMin: String + titleMax: String + textMin: String + textMax: String } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -317,14 +319,14 @@ type UpdatePostPayload { ####################### enum PostHasFilter { - title - text - postType + title + text + postType } enum PostOrderable { - title - text + title + text } ####################### @@ -332,42 +334,42 @@ enum PostOrderable { ####################### input AddPostInput { - title: String! - text: String - postType: PostType! + title: String! + text: String + postType: PostType! } input PostFilter { - id: [ID!] - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - title: String - text: String - postType: PostType + title: String + text: String + postType: PostType } input PostRef { - id: ID - title: String - text: String - postType: PostType + id: ID + title: String + text: String + postType: PostType } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -375,9 +377,9 @@ input UpdatePostInput { ####################### type Query { - getPost(id: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult + getPost(id: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult } ####################### @@ -385,8 +387,7 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload } - diff --git a/graphql/schema/testdata/schemagen/output/single-type.graphql b/graphql/schema/testdata/schemagen/output/single-type.graphql index cd8dcc92926..cf2c87d1bf8 100644 --- a/graphql/schema/testdata/schemagen/output/single-type.graphql +++ b/graphql/schema/testdata/schemagen/output/single-type.graphql @@ -3,11 +3,11 @@ ####################### type Message { - id: ID! - content: String! - author: String - uniqueId: Int64 - datePosted: DateTime + id: ID! + content: String! + author: String + uniqueId: Int64 + datePosted: DateTime } ####################### @@ -26,162 +26,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -193,11 +193,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -206,77 +207,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -284,33 +286,33 @@ input StringHashFilter { ####################### type AddMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + numUids: Int } type DeleteMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - msg: String - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + msg: String + numUids: Int } type MessageAggregateResult { - count: Int - contentMin: String - contentMax: String - authorMin: String - authorMax: String - uniqueIdMin: Int64 - uniqueIdMax: Int64 - uniqueIdSum: Int64 - uniqueIdAvg: Float - datePostedMin: DateTime - datePostedMax: DateTime + count: Int + contentMin: String + contentMax: String + authorMin: String + authorMax: String + uniqueIdMin: Int64 + uniqueIdMax: Int64 + uniqueIdSum: Int64 + uniqueIdAvg: Float + datePostedMin: DateTime + datePostedMax: DateTime } type UpdateMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + numUids: Int } ####################### @@ -318,17 +320,17 @@ type UpdateMessagePayload { ####################### enum MessageHasFilter { - content - author - uniqueId - datePosted + content + author + uniqueId + datePosted } enum MessageOrderable { - content - author - uniqueId - datePosted + content + author + uniqueId + datePosted } ####################### @@ -336,45 +338,45 @@ enum MessageOrderable { ####################### input AddMessageInput { - content: String! - author: String - uniqueId: Int64 - datePosted: DateTime + content: String! + author: String + uniqueId: Int64 + datePosted: DateTime } input MessageFilter { - id: [ID!] - has: [MessageHasFilter] - and: [MessageFilter] - or: [MessageFilter] - not: MessageFilter + id: [ID!] + has: [MessageHasFilter] + and: [MessageFilter] + or: [MessageFilter] + not: MessageFilter } input MessageOrder { - asc: MessageOrderable - desc: MessageOrderable - then: MessageOrder + asc: MessageOrderable + desc: MessageOrderable + then: MessageOrder } input MessagePatch { - content: String - author: String - uniqueId: Int64 - datePosted: DateTime + content: String + author: String + uniqueId: Int64 + datePosted: DateTime } input MessageRef { - id: ID - content: String - author: String - uniqueId: Int64 - datePosted: DateTime + id: ID + content: String + author: String + uniqueId: Int64 + datePosted: DateTime } input UpdateMessageInput { - filter: MessageFilter! - set: MessagePatch - remove: MessagePatch + filter: MessageFilter! + set: MessagePatch + remove: MessagePatch } ####################### @@ -382,9 +384,9 @@ input UpdateMessageInput { ####################### type Query { - getMessage(id: ID!): Message - queryMessage(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - aggregateMessage(filter: MessageFilter): MessageAggregateResult + getMessage(id: ID!): Message + queryMessage(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + aggregateMessage(filter: MessageFilter): MessageAggregateResult } ####################### @@ -392,8 +394,7 @@ type Query { ####################### type Mutation { - addMessage(input: [AddMessageInput!]!): AddMessagePayload - updateMessage(input: UpdateMessageInput!): UpdateMessagePayload - deleteMessage(filter: MessageFilter!): DeleteMessagePayload + addMessage(input: [AddMessageInput!]!): AddMessagePayload + updateMessage(input: UpdateMessageInput!): UpdateMessagePayload + deleteMessage(filter: MessageFilter!): DeleteMessagePayload } - diff --git a/graphql/schema/testdata/schemagen/output/type-implements-multiple-interfaces.graphql b/graphql/schema/testdata/schemagen/output/type-implements-multiple-interfaces.graphql index fb367928dd7..1d5f2c3975c 100644 --- a/graphql/schema/testdata/schemagen/output/type-implements-multiple-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/output/type-implements-multiple-interfaces.graphql @@ -3,25 +3,25 @@ ####################### interface Character { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } interface Employee { - employeeId: String! - title: String! + employeeId: String! + title: String! } type Human implements Character & Employee { - employeeId: String! - title: String! - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - totalCredits: Int - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + employeeId: String! + title: String! + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + totalCredits: Int + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } ####################### @@ -40,162 +40,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -207,11 +207,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -220,77 +221,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -298,69 +300,69 @@ input StringHashFilter { ####################### type AddHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type CharacterAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - msg: String - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + msg: String + numUids: Int } type DeleteEmployeePayload { - employee(filter: EmployeeFilter, order: EmployeeOrder, first: Int, offset: Int): [Employee] - msg: String - numUids: Int + employee(filter: EmployeeFilter, order: EmployeeOrder, first: Int, offset: Int): [Employee] + msg: String + numUids: Int } type DeleteHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - msg: String - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + msg: String + numUids: Int } type EmployeeAggregateResult { - count: Int - employeeIdMin: String - employeeIdMax: String - titleMin: String - titleMax: String + count: Int + employeeIdMin: String + employeeIdMax: String + titleMin: String + titleMax: String } type HumanAggregateResult { - count: Int - employeeIdMin: String - employeeIdMax: String - titleMin: String - titleMax: String - nameMin: String - nameMax: String - totalCreditsMin: Int - totalCreditsMax: Int - totalCreditsSum: Int - totalCreditsAvg: Float + count: Int + employeeIdMin: String + employeeIdMax: String + titleMin: String + titleMax: String + nameMin: String + nameMax: String + totalCreditsMin: Int + totalCreditsMax: Int + totalCreditsSum: Int + totalCreditsAvg: Float } type UpdateCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + numUids: Int } type UpdateEmployeePayload { - employee(filter: EmployeeFilter, order: EmployeeOrder, first: Int, offset: Int): [Employee] - numUids: Int + employee(filter: EmployeeFilter, order: EmployeeOrder, first: Int, offset: Int): [Employee] + numUids: Int } type UpdateHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } ####################### @@ -368,37 +370,37 @@ type UpdateHumanPayload { ####################### enum CharacterHasFilter { - name - friends + name + friends } enum CharacterOrderable { - name + name } enum EmployeeHasFilter { - employeeId - title + employeeId + title } enum EmployeeOrderable { - employeeId - title + employeeId + title } enum HumanHasFilter { - employeeId - title - name - friends - totalCredits + employeeId + title + name + friends + totalCredits } enum HumanOrderable { - employeeId - title - name - totalCredits + employeeId + title + name + totalCredits } ####################### @@ -406,103 +408,103 @@ enum HumanOrderable { ####################### input AddHumanInput { - employeeId: String! - title: String! - name: String! - friends: [CharacterRef] - totalCredits: Int + employeeId: String! + title: String! + name: String! + friends: [CharacterRef] + totalCredits: Int } input CharacterFilter { - id: [ID!] - name: StringExactFilter - has: [CharacterHasFilter] - and: [CharacterFilter] - or: [CharacterFilter] - not: CharacterFilter + id: [ID!] + name: StringExactFilter + has: [CharacterHasFilter] + and: [CharacterFilter] + or: [CharacterFilter] + not: CharacterFilter } input CharacterOrder { - asc: CharacterOrderable - desc: CharacterOrderable - then: CharacterOrder + asc: CharacterOrderable + desc: CharacterOrderable + then: CharacterOrder } input CharacterPatch { - name: String - friends: [CharacterRef] + name: String + friends: [CharacterRef] } input CharacterRef { - id: ID! + id: ID! } input EmployeeFilter { - has: [EmployeeHasFilter] - and: [EmployeeFilter] - or: [EmployeeFilter] - not: EmployeeFilter + has: [EmployeeHasFilter] + and: [EmployeeFilter] + or: [EmployeeFilter] + not: EmployeeFilter } input EmployeeOrder { - asc: EmployeeOrderable - desc: EmployeeOrderable - then: EmployeeOrder + asc: EmployeeOrderable + desc: EmployeeOrderable + then: EmployeeOrder } input EmployeePatch { - employeeId: String - title: String + employeeId: String + title: String } input HumanFilter { - id: [ID!] - name: StringExactFilter - has: [HumanHasFilter] - and: [HumanFilter] - or: [HumanFilter] - not: HumanFilter + id: [ID!] + name: StringExactFilter + has: [HumanHasFilter] + and: [HumanFilter] + or: [HumanFilter] + not: HumanFilter } input HumanOrder { - asc: HumanOrderable - desc: HumanOrderable - then: HumanOrder + asc: HumanOrderable + desc: HumanOrderable + then: HumanOrder } input HumanPatch { - employeeId: String - title: String - name: String - friends: [CharacterRef] - totalCredits: Int + employeeId: String + title: String + name: String + friends: [CharacterRef] + totalCredits: Int } input HumanRef { - id: ID - employeeId: String - title: String - name: String - friends: [CharacterRef] - totalCredits: Int + id: ID + employeeId: String + title: String + name: String + friends: [CharacterRef] + totalCredits: Int } input UpdateCharacterInput { - filter: CharacterFilter! - set: CharacterPatch - remove: CharacterPatch + filter: CharacterFilter! + set: CharacterPatch + remove: CharacterPatch } input UpdateEmployeeInput { - filter: EmployeeFilter! - set: EmployeePatch - remove: EmployeePatch + filter: EmployeeFilter! + set: EmployeePatch + remove: EmployeePatch } input UpdateHumanInput { - filter: HumanFilter! - set: HumanPatch - remove: HumanPatch + filter: HumanFilter! + set: HumanPatch + remove: HumanPatch } ####################### @@ -510,14 +512,19 @@ input UpdateHumanInput { ####################### type Query { - getCharacter(id: ID!): Character - queryCharacter(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult - queryEmployee(filter: EmployeeFilter, order: EmployeeOrder, first: Int, offset: Int): [Employee] - aggregateEmployee(filter: EmployeeFilter): EmployeeAggregateResult - getHuman(id: ID!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult + getCharacter(id: ID!): Character + queryCharacter( + filter: CharacterFilter + order: CharacterOrder + first: Int + offset: Int + ): [Character] + aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult + queryEmployee(filter: EmployeeFilter, order: EmployeeOrder, first: Int, offset: Int): [Employee] + aggregateEmployee(filter: EmployeeFilter): EmployeeAggregateResult + getHuman(id: ID!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult } ####################### @@ -525,12 +532,11 @@ type Query { ####################### type Mutation { - updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload - deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload - updateEmployee(input: UpdateEmployeeInput!): UpdateEmployeePayload - deleteEmployee(filter: EmployeeFilter!): DeleteEmployeePayload - addHuman(input: [AddHumanInput!]!): AddHumanPayload - updateHuman(input: UpdateHumanInput!): UpdateHumanPayload - deleteHuman(filter: HumanFilter!): DeleteHumanPayload + updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload + deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload + updateEmployee(input: UpdateEmployeeInput!): UpdateEmployeePayload + deleteEmployee(filter: EmployeeFilter!): DeleteEmployeePayload + addHuman(input: [AddHumanInput!]!): AddHumanPayload + updateHuman(input: UpdateHumanInput!): UpdateHumanPayload + deleteHuman(filter: HumanFilter!): DeleteHumanPayload } - diff --git a/graphql/schema/testdata/schemagen/output/type-reference.graphql b/graphql/schema/testdata/schemagen/output/type-reference.graphql index 6cd97099546..51b252900dc 100644 --- a/graphql/schema/testdata/schemagen/output/type-reference.graphql +++ b/graphql/schema/testdata/schemagen/output/type-reference.graphql @@ -3,15 +3,15 @@ ####################### type Post { - id: ID! - title: String! - text: String - author(filter: AuthorFilter): Author! + id: ID! + title: String! + text: String + author(filter: AuthorFilter): Author! } type Author { - id: ID! - name: String! + id: ID! + name: String! } ####################### @@ -30,162 +30,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -197,11 +197,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -210,77 +211,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -288,49 +290,49 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - titleMin: String - titleMax: String - textMin: String - textMax: String + count: Int + titleMin: String + titleMax: String + textMin: String + textMax: String } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -338,22 +340,22 @@ type UpdatePostPayload { ####################### enum AuthorHasFilter { - name + name } enum AuthorOrderable { - name + name } enum PostHasFilter { - title - text - author + title + text + author } enum PostOrderable { - title - text + title + text } ####################### @@ -361,75 +363,75 @@ enum PostOrderable { ####################### input AddAuthorInput { - name: String! + name: String! } input AddPostInput { - title: String! - text: String - author: AuthorRef! + title: String! + text: String + author: AuthorRef! } input AuthorFilter { - id: [ID!] - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String + name: String } input AuthorRef { - id: ID - name: String + id: ID + name: String } input PostFilter { - id: [ID!] - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - title: String - text: String - author: AuthorRef + title: String + text: String + author: AuthorRef } input PostRef { - id: ID - title: String - text: String - author: AuthorRef + id: ID + title: String + text: String + author: AuthorRef } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -437,12 +439,12 @@ input UpdatePostInput { ####################### type Query { - getPost(id: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(id: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult } ####################### @@ -450,11 +452,10 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload } - diff --git a/graphql/schema/testdata/schemagen/output/type-with-arguments-on-field.graphql b/graphql/schema/testdata/schemagen/output/type-with-arguments-on-field.graphql index 8e1aebb77bc..a92c589fdcc 100644 --- a/graphql/schema/testdata/schemagen/output/type-with-arguments-on-field.graphql +++ b/graphql/schema/testdata/schemagen/output/type-with-arguments-on-field.graphql @@ -3,16 +3,16 @@ ####################### interface Abstract { - id: ID! - name(random: Int!, size: String): String! + id: ID! + name(random: Int!, size: String): String! } type Message implements Abstract { - id: ID! - name(random: Int!, size: String): String! - content(pick: Int!, name: String): String! - author: String - datePosted: DateTime + id: ID! + name(random: Int!, size: String): String! + content(pick: Int!, name: String): String! + author: String + datePosted: DateTime } ####################### @@ -31,162 +31,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -198,11 +198,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -211,77 +212,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -289,48 +291,48 @@ input StringHashFilter { ####################### type AbstractAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type AddMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + numUids: Int } type DeleteAbstractPayload { - abstract(filter: AbstractFilter, order: AbstractOrder, first: Int, offset: Int): [Abstract] - msg: String - numUids: Int + abstract(filter: AbstractFilter, order: AbstractOrder, first: Int, offset: Int): [Abstract] + msg: String + numUids: Int } type DeleteMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - msg: String - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + msg: String + numUids: Int } type MessageAggregateResult { - count: Int - nameMin: String - nameMax: String - contentMin: String - contentMax: String - authorMin: String - authorMax: String - datePostedMin: DateTime - datePostedMax: DateTime + count: Int + nameMin: String + nameMax: String + contentMin: String + contentMax: String + authorMin: String + authorMax: String + datePostedMin: DateTime + datePostedMax: DateTime } type UpdateAbstractPayload { - abstract(filter: AbstractFilter, order: AbstractOrder, first: Int, offset: Int): [Abstract] - numUids: Int + abstract(filter: AbstractFilter, order: AbstractOrder, first: Int, offset: Int): [Abstract] + numUids: Int } type UpdateMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + numUids: Int } ####################### @@ -338,25 +340,25 @@ type UpdateMessagePayload { ####################### enum AbstractHasFilter { - name + name } enum AbstractOrderable { - name + name } enum MessageHasFilter { - name - content - author - datePosted + name + content + author + datePosted } enum MessageOrderable { - name - content - author - datePosted + name + content + author + datePosted } ####################### @@ -364,73 +366,73 @@ enum MessageOrderable { ####################### input AbstractFilter { - id: [ID!] - has: [AbstractHasFilter] - and: [AbstractFilter] - or: [AbstractFilter] - not: AbstractFilter + id: [ID!] + has: [AbstractHasFilter] + and: [AbstractFilter] + or: [AbstractFilter] + not: AbstractFilter } input AbstractOrder { - asc: AbstractOrderable - desc: AbstractOrderable - then: AbstractOrder + asc: AbstractOrderable + desc: AbstractOrderable + then: AbstractOrder } input AbstractPatch { - name: String + name: String } input AbstractRef { - id: ID! + id: ID! } input AddMessageInput { - name: String! - content: String! - author: String - datePosted: DateTime + name: String! + content: String! + author: String + datePosted: DateTime } input MessageFilter { - id: [ID!] - has: [MessageHasFilter] - and: [MessageFilter] - or: [MessageFilter] - not: MessageFilter + id: [ID!] + has: [MessageHasFilter] + and: [MessageFilter] + or: [MessageFilter] + not: MessageFilter } input MessageOrder { - asc: MessageOrderable - desc: MessageOrderable - then: MessageOrder + asc: MessageOrderable + desc: MessageOrderable + then: MessageOrder } input MessagePatch { - name: String - content: String - author: String - datePosted: DateTime + name: String + content: String + author: String + datePosted: DateTime } input MessageRef { - id: ID - name: String - content: String - author: String - datePosted: DateTime + id: ID + name: String + content: String + author: String + datePosted: DateTime } input UpdateAbstractInput { - filter: AbstractFilter! - set: AbstractPatch - remove: AbstractPatch + filter: AbstractFilter! + set: AbstractPatch + remove: AbstractPatch } input UpdateMessageInput { - filter: MessageFilter! - set: MessagePatch - remove: MessagePatch + filter: MessageFilter! + set: MessagePatch + remove: MessagePatch } ####################### @@ -438,12 +440,12 @@ input UpdateMessageInput { ####################### type Query { - getAbstract(id: ID!): Abstract - queryAbstract(filter: AbstractFilter, order: AbstractOrder, first: Int, offset: Int): [Abstract] - aggregateAbstract(filter: AbstractFilter): AbstractAggregateResult - getMessage(id: ID!): Message - queryMessage(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - aggregateMessage(filter: MessageFilter): MessageAggregateResult + getAbstract(id: ID!): Abstract + queryAbstract(filter: AbstractFilter, order: AbstractOrder, first: Int, offset: Int): [Abstract] + aggregateAbstract(filter: AbstractFilter): AbstractAggregateResult + getMessage(id: ID!): Message + queryMessage(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + aggregateMessage(filter: MessageFilter): MessageAggregateResult } ####################### @@ -451,10 +453,9 @@ type Query { ####################### type Mutation { - updateAbstract(input: UpdateAbstractInput!): UpdateAbstractPayload - deleteAbstract(filter: AbstractFilter!): DeleteAbstractPayload - addMessage(input: [AddMessageInput!]!): AddMessagePayload - updateMessage(input: UpdateMessageInput!): UpdateMessagePayload - deleteMessage(filter: MessageFilter!): DeleteMessagePayload + updateAbstract(input: UpdateAbstractInput!): UpdateAbstractPayload + deleteAbstract(filter: AbstractFilter!): DeleteAbstractPayload + addMessage(input: [AddMessageInput!]!): AddMessagePayload + updateMessage(input: UpdateMessageInput!): UpdateMessagePayload + deleteMessage(filter: MessageFilter!): DeleteMessagePayload } - diff --git a/graphql/schema/testdata/schemagen/output/type-with-custom-field-on-dgraph-type.graphql b/graphql/schema/testdata/schemagen/output/type-with-custom-field-on-dgraph-type.graphql index b530551a062..a0b7f564819 100644 --- a/graphql/schema/testdata/schemagen/output/type-with-custom-field-on-dgraph-type.graphql +++ b/graphql/schema/testdata/schemagen/output/type-with-custom-field-on-dgraph-type.graphql @@ -3,15 +3,16 @@ ####################### type Car { - id: ID! - name: String! + id: ID! + name: String! } type User { - id: ID! - name: String @custom(http: {url:"http://mock:8888/userNames",method:"GET",body:"{uid: $id}"}) - age: Int! @search - cars: [Car] @custom(http: {url:"http://mock:8888/cars",method:"GET",body:"{uid: $id}"}) + id: ID! + name: String + @custom(http: { url: "http://mock:8888/userNames", method: "GET", body: "{uid: $id}" }) + age: Int! @search + cars: [Car] @custom(http: { url: "http://mock:8888/cars", method: "GET", body: "{uid: $id}" }) } ####################### @@ -30,162 +31,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -197,11 +198,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -210,77 +212,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -288,49 +291,49 @@ input StringHashFilter { ####################### type AddCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + numUids: Int } type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type CarAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - msg: String - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + msg: String + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type UpdateCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - ageMin: Int - ageMax: Int - ageSum: Int - ageAvg: Float + count: Int + ageMin: Int + ageMax: Int + ageSum: Int + ageAvg: Float } ####################### @@ -338,19 +341,19 @@ type UserAggregateResult { ####################### enum CarHasFilter { - name + name } enum CarOrderable { - name + name } enum UserHasFilter { - age + age } enum UserOrderable { - age + age } ####################### @@ -358,70 +361,70 @@ enum UserOrderable { ####################### input AddCarInput { - name: String! + name: String! } input AddUserInput { - age: Int! + age: Int! } input CarFilter { - id: [ID!] - has: [CarHasFilter] - and: [CarFilter] - or: [CarFilter] - not: CarFilter + id: [ID!] + has: [CarHasFilter] + and: [CarFilter] + or: [CarFilter] + not: CarFilter } input CarOrder { - asc: CarOrderable - desc: CarOrderable - then: CarOrder + asc: CarOrderable + desc: CarOrderable + then: CarOrder } input CarPatch { - name: String + name: String } input CarRef { - id: ID - name: String + id: ID + name: String } input UpdateCarInput { - filter: CarFilter! - set: CarPatch - remove: CarPatch + filter: CarFilter! + set: CarPatch + remove: CarPatch } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - id: [ID!] - age: IntFilter - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + id: [ID!] + age: IntFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - age: Int + age: Int } input UserRef { - id: ID - age: Int + id: ID + age: Int } ####################### @@ -429,12 +432,12 @@ input UserRef { ####################### type Query { - getCar(id: ID!): Car - queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - aggregateCar(filter: CarFilter): CarAggregateResult - getUser(id: ID!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getCar(id: ID!): Car + queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + aggregateCar(filter: CarFilter): CarAggregateResult + getUser(id: ID!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -442,11 +445,10 @@ type Query { ####################### type Mutation { - addCar(input: [AddCarInput!]!): AddCarPayload - updateCar(input: UpdateCarInput!): UpdateCarPayload - deleteCar(filter: CarFilter!): DeleteCarPayload - addUser(input: [AddUserInput!]!): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addCar(input: [AddCarInput!]!): AddCarPayload + updateCar(input: UpdateCarInput!): UpdateCarPayload + deleteCar(filter: CarFilter!): DeleteCarPayload + addUser(input: [AddUserInput!]!): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } - diff --git a/graphql/schema/testdata/schemagen/output/type-with-custom-fields-on-remote-type.graphql b/graphql/schema/testdata/schemagen/output/type-with-custom-fields-on-remote-type.graphql index e2f05334889..b3607aaeec1 100644 --- a/graphql/schema/testdata/schemagen/output/type-with-custom-fields-on-remote-type.graphql +++ b/graphql/schema/testdata/schemagen/output/type-with-custom-fields-on-remote-type.graphql @@ -3,15 +3,16 @@ ####################### type Car @remote { - id: ID! - name: String! + id: ID! + name: String! } type User { - id: ID! - name: String @custom(http: {url:"http://mock:8888/userNames",method:"GET",body:"{uid: $id}"}) - age: Int! @search - cars: [Car] @custom(http: {url:"http://mock:8888/cars",method:"GET",body:"{uid: $id}"}) + id: ID! + name: String + @custom(http: { url: "http://mock:8888/userNames", method: "GET", body: "{uid: $id}" }) + age: Int! @search + cars: [Car] @custom(http: { url: "http://mock:8888/cars", method: "GET", body: "{uid: $id}" }) } ####################### @@ -30,162 +31,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -197,11 +198,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -210,77 +212,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -288,27 +291,27 @@ input StringHashFilter { ####################### type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - ageMin: Int - ageMax: Int - ageSum: Int - ageAvg: Float + count: Int + ageMin: Int + ageMax: Int + ageSum: Int + ageAvg: Float } ####################### @@ -316,11 +319,11 @@ type UserAggregateResult { ####################### enum UserHasFilter { - age + age } enum UserOrderable { - age + age } ####################### @@ -328,37 +331,37 @@ enum UserOrderable { ####################### input AddUserInput { - age: Int! + age: Int! } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - id: [ID!] - age: IntFilter - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + id: [ID!] + age: IntFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - age: Int + age: Int } input UserRef { - id: ID - age: Int + id: ID + age: Int } ####################### @@ -366,9 +369,9 @@ input UserRef { ####################### type Query { - getUser(id: ID!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getUser(id: ID!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -376,8 +379,7 @@ type Query { ####################### type Mutation { - addUser(input: [AddUserInput!]!): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addUser(input: [AddUserInput!]!): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } - diff --git a/graphql/schema/testdata/schemagen/output/type-without-orderables.graphql b/graphql/schema/testdata/schemagen/output/type-without-orderables.graphql index 7dc66b26104..281b3651bae 100644 --- a/graphql/schema/testdata/schemagen/output/type-without-orderables.graphql +++ b/graphql/schema/testdata/schemagen/output/type-without-orderables.graphql @@ -3,10 +3,10 @@ ####################### type Data { - id: ID! - intList: [Int] - stringList: [String] - metaData(filter: DataFilter): Data + id: ID! + intList: [Int] + stringList: [String] + metaData(filter: DataFilter): Data } ####################### @@ -25,162 +25,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -192,11 +192,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -205,77 +206,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -283,23 +285,23 @@ input StringHashFilter { ####################### type AddDataPayload { - data(filter: DataFilter, first: Int, offset: Int): [Data] - numUids: Int + data(filter: DataFilter, first: Int, offset: Int): [Data] + numUids: Int } type DataAggregateResult { - count: Int + count: Int } type DeleteDataPayload { - data(filter: DataFilter, first: Int, offset: Int): [Data] - msg: String - numUids: Int + data(filter: DataFilter, first: Int, offset: Int): [Data] + msg: String + numUids: Int } type UpdateDataPayload { - data(filter: DataFilter, first: Int, offset: Int): [Data] - numUids: Int + data(filter: DataFilter, first: Int, offset: Int): [Data] + numUids: Int } ####################### @@ -307,9 +309,9 @@ type UpdateDataPayload { ####################### enum DataHasFilter { - intList - stringList - metaData + intList + stringList + metaData } ####################### @@ -317,36 +319,36 @@ enum DataHasFilter { ####################### input AddDataInput { - intList: [Int] - stringList: [String] - metaData: DataRef + intList: [Int] + stringList: [String] + metaData: DataRef } input DataFilter { - id: [ID!] - has: [DataHasFilter] - and: [DataFilter] - or: [DataFilter] - not: DataFilter + id: [ID!] + has: [DataHasFilter] + and: [DataFilter] + or: [DataFilter] + not: DataFilter } input DataPatch { - intList: [Int] - stringList: [String] - metaData: DataRef + intList: [Int] + stringList: [String] + metaData: DataRef } input DataRef { - id: ID - intList: [Int] - stringList: [String] - metaData: DataRef + id: ID + intList: [Int] + stringList: [String] + metaData: DataRef } input UpdateDataInput { - filter: DataFilter! - set: DataPatch - remove: DataPatch + filter: DataFilter! + set: DataPatch + remove: DataPatch } ####################### @@ -354,9 +356,9 @@ input UpdateDataInput { ####################### type Query { - getData(id: ID!): Data - queryData(filter: DataFilter, first: Int, offset: Int): [Data] - aggregateData(filter: DataFilter): DataAggregateResult + getData(id: ID!): Data + queryData(filter: DataFilter, first: Int, offset: Int): [Data] + aggregateData(filter: DataFilter): DataAggregateResult } ####################### @@ -364,8 +366,7 @@ type Query { ####################### type Mutation { - addData(input: [AddDataInput!]!): AddDataPayload - updateData(input: UpdateDataInput!): UpdateDataPayload - deleteData(filter: DataFilter!): DeleteDataPayload + addData(input: [AddDataInput!]!): AddDataPayload + updateData(input: UpdateDataInput!): UpdateDataPayload + deleteData(filter: DataFilter!): DeleteDataPayload } - diff --git a/graphql/schema/testdata/schemagen/output/union.graphql b/graphql/schema/testdata/schemagen/output/union.graphql index a9fcb67dcae..d0d9664120f 100644 --- a/graphql/schema/testdata/schemagen/output/union.graphql +++ b/graphql/schema/testdata/schemagen/output/union.graphql @@ -3,46 +3,46 @@ ####################### interface Character { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - enemyOf(filter: ResidentFilter): Resident - appearsIn: [Episode!]! @search - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + enemyOf(filter: ResidentFilter): Resident + appearsIn: [Episode!]! @search + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } type Human implements Character { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - enemyOf(filter: ResidentFilter): Resident - appearsIn: [Episode!]! @search - starships(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - totalCredits: Int - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult - starshipsAggregate(filter: StarshipFilter): StarshipAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + enemyOf(filter: ResidentFilter): Resident + appearsIn: [Episode!]! @search + starships(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + totalCredits: Int + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + starshipsAggregate(filter: StarshipFilter): StarshipAggregateResult } type Droid implements Character { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - enemyOf(filter: ResidentFilter): Resident - appearsIn: [Episode!]! @search - primaryFunction: String - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + enemyOf(filter: ResidentFilter): Resident + appearsIn: [Episode!]! @search + primaryFunction: String + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } enum Episode { - NEWHOPE - EMPIRE - JEDI + NEWHOPE + EMPIRE + JEDI } type Starship { - id: ID! - name: String! @search(by: [term]) - length: Float + id: ID! + name: String! @search(by: [term]) + length: Float } union Resident = Human | Droid | Starship @@ -50,10 +50,10 @@ union Resident = Human | Droid | Starship union Tool @remote = Droid | Starship type Planet { - id: ID! - name: String! - residents(filter: ResidentFilter, first: Int, offset: Int): [Resident!] @dgraph(pred: "residents") - bestTool: Tool @custom(http: {url:"http://mock:8888/tool/$id",method:"GET"}) + id: ID! + name: String! + residents(filter: ResidentFilter, first: Int, offset: Int): [Resident!] @dgraph(pred: "residents") + bestTool: Tool @custom(http: { url: "http://mock:8888/tool/$id", method: "GET" }) } ####################### @@ -72,162 +72,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -239,11 +239,12 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule, - add: AuthRule, - update: AuthRule, - delete: AuthRule) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule + add: AuthRule + update: AuthRule + delete: AuthRule +) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -252,77 +253,78 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams, - mutation: GenerateMutationParams, - subscription: Boolean) on OBJECT | INTERFACE + query: GenerateQueryParams + mutation: GenerateMutationParams + subscription: Boolean +) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -330,118 +332,118 @@ input StringHashFilter { ####################### type AddDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + numUids: Int } type AddHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type AddPlanetPayload { - planet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] - numUids: Int + planet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] + numUids: Int } type AddStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + numUids: Int } type CharacterAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - msg: String - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + msg: String + numUids: Int } type DeleteDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - msg: String - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + msg: String + numUids: Int } type DeleteHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - msg: String - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + msg: String + numUids: Int } type DeletePlanetPayload { - planet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] - msg: String - numUids: Int + planet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] + msg: String + numUids: Int } type DeleteStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - msg: String - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + msg: String + numUids: Int } type DroidAggregateResult { - count: Int - nameMin: String - nameMax: String - primaryFunctionMin: String - primaryFunctionMax: String + count: Int + nameMin: String + nameMax: String + primaryFunctionMin: String + primaryFunctionMax: String } type HumanAggregateResult { - count: Int - nameMin: String - nameMax: String - totalCreditsMin: Int - totalCreditsMax: Int - totalCreditsSum: Int - totalCreditsAvg: Float + count: Int + nameMin: String + nameMax: String + totalCreditsMin: Int + totalCreditsMax: Int + totalCreditsSum: Int + totalCreditsAvg: Float } type PlanetAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type StarshipAggregateResult { - count: Int - nameMin: String - nameMax: String - lengthMin: Float - lengthMax: Float - lengthSum: Float - lengthAvg: Float + count: Int + nameMin: String + nameMax: String + lengthMin: Float + lengthMax: Float + lengthSum: Float + lengthAvg: Float } type UpdateCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + numUids: Int } type UpdateDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + numUids: Int } type UpdateHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type UpdatePlanetPayload { - planet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] - numUids: Int + planet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] + numUids: Int } type UpdateStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + numUids: Int } ####################### @@ -449,66 +451,66 @@ type UpdateStarshipPayload { ####################### enum CharacterHasFilter { - name - friends - enemyOf - appearsIn + name + friends + enemyOf + appearsIn } enum CharacterOrderable { - name + name } enum DroidHasFilter { - name - friends - enemyOf - appearsIn - primaryFunction + name + friends + enemyOf + appearsIn + primaryFunction } enum DroidOrderable { - name - primaryFunction + name + primaryFunction } enum HumanHasFilter { - name - friends - enemyOf - appearsIn - starships - totalCredits + name + friends + enemyOf + appearsIn + starships + totalCredits } enum HumanOrderable { - name - totalCredits + name + totalCredits } enum PlanetHasFilter { - name - residents + name + residents } enum PlanetOrderable { - name + name } enum ResidentType { - Human - Droid - Starship + Human + Droid + Starship } enum StarshipHasFilter { - name - length + name + length } enum StarshipOrderable { - name - length + name + length } ####################### @@ -516,224 +518,224 @@ enum StarshipOrderable { ####################### input AddDroidInput { - name: String! - friends: [CharacterRef] - enemyOf: ResidentRef - appearsIn: [Episode!]! - primaryFunction: String + name: String! + friends: [CharacterRef] + enemyOf: ResidentRef + appearsIn: [Episode!]! + primaryFunction: String } input AddHumanInput { - name: String! - friends: [CharacterRef] - enemyOf: ResidentRef - appearsIn: [Episode!]! - starships: [StarshipRef] - totalCredits: Int + name: String! + friends: [CharacterRef] + enemyOf: ResidentRef + appearsIn: [Episode!]! + starships: [StarshipRef] + totalCredits: Int } input AddPlanetInput { - name: String! - residents: [ResidentRef!] + name: String! + residents: [ResidentRef!] } input AddStarshipInput { - name: String! - length: Float + name: String! + length: Float } input CharacterFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [CharacterHasFilter] - and: [CharacterFilter] - or: [CharacterFilter] - not: CharacterFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [CharacterHasFilter] + and: [CharacterFilter] + or: [CharacterFilter] + not: CharacterFilter } input CharacterOrder { - asc: CharacterOrderable - desc: CharacterOrderable - then: CharacterOrder + asc: CharacterOrderable + desc: CharacterOrderable + then: CharacterOrder } input CharacterPatch { - name: String - friends: [CharacterRef] - enemyOf: ResidentRef - appearsIn: [Episode!] + name: String + friends: [CharacterRef] + enemyOf: ResidentRef + appearsIn: [Episode!] } input CharacterRef { - id: ID! + id: ID! } input DroidFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [DroidHasFilter] - and: [DroidFilter] - or: [DroidFilter] - not: DroidFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [DroidHasFilter] + and: [DroidFilter] + or: [DroidFilter] + not: DroidFilter } input DroidOrder { - asc: DroidOrderable - desc: DroidOrderable - then: DroidOrder + asc: DroidOrderable + desc: DroidOrderable + then: DroidOrder } input DroidPatch { - name: String - friends: [CharacterRef] - enemyOf: ResidentRef - appearsIn: [Episode!] - primaryFunction: String + name: String + friends: [CharacterRef] + enemyOf: ResidentRef + appearsIn: [Episode!] + primaryFunction: String } input DroidRef { - id: ID - name: String - friends: [CharacterRef] - enemyOf: ResidentRef - appearsIn: [Episode!] - primaryFunction: String + id: ID + name: String + friends: [CharacterRef] + enemyOf: ResidentRef + appearsIn: [Episode!] + primaryFunction: String } input Episode_hash { - eq: Episode - in: [Episode] + eq: Episode + in: [Episode] } input HumanFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [HumanHasFilter] - and: [HumanFilter] - or: [HumanFilter] - not: HumanFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [HumanHasFilter] + and: [HumanFilter] + or: [HumanFilter] + not: HumanFilter } input HumanOrder { - asc: HumanOrderable - desc: HumanOrderable - then: HumanOrder + asc: HumanOrderable + desc: HumanOrderable + then: HumanOrder } input HumanPatch { - name: String - friends: [CharacterRef] - enemyOf: ResidentRef - appearsIn: [Episode!] - starships: [StarshipRef] - totalCredits: Int + name: String + friends: [CharacterRef] + enemyOf: ResidentRef + appearsIn: [Episode!] + starships: [StarshipRef] + totalCredits: Int } input HumanRef { - id: ID - name: String - friends: [CharacterRef] - enemyOf: ResidentRef - appearsIn: [Episode!] - starships: [StarshipRef] - totalCredits: Int + id: ID + name: String + friends: [CharacterRef] + enemyOf: ResidentRef + appearsIn: [Episode!] + starships: [StarshipRef] + totalCredits: Int } input PlanetFilter { - id: [ID!] - has: [PlanetHasFilter] - and: [PlanetFilter] - or: [PlanetFilter] - not: PlanetFilter + id: [ID!] + has: [PlanetHasFilter] + and: [PlanetFilter] + or: [PlanetFilter] + not: PlanetFilter } input PlanetOrder { - asc: PlanetOrderable - desc: PlanetOrderable - then: PlanetOrder + asc: PlanetOrderable + desc: PlanetOrderable + then: PlanetOrder } input PlanetPatch { - name: String - residents: [ResidentRef!] + name: String + residents: [ResidentRef!] } input PlanetRef { - id: ID - name: String - residents: [ResidentRef!] + id: ID + name: String + residents: [ResidentRef!] } input ResidentFilter { - memberTypes: [ResidentType!] - humanFilter: HumanFilter - droidFilter: DroidFilter - starshipFilter: StarshipFilter + memberTypes: [ResidentType!] + humanFilter: HumanFilter + droidFilter: DroidFilter + starshipFilter: StarshipFilter } input ResidentRef { - humanRef: HumanRef - droidRef: DroidRef - starshipRef: StarshipRef + humanRef: HumanRef + droidRef: DroidRef + starshipRef: StarshipRef } input StarshipFilter { - id: [ID!] - name: StringTermFilter - has: [StarshipHasFilter] - and: [StarshipFilter] - or: [StarshipFilter] - not: StarshipFilter + id: [ID!] + name: StringTermFilter + has: [StarshipHasFilter] + and: [StarshipFilter] + or: [StarshipFilter] + not: StarshipFilter } input StarshipOrder { - asc: StarshipOrderable - desc: StarshipOrderable - then: StarshipOrder + asc: StarshipOrderable + desc: StarshipOrderable + then: StarshipOrder } input StarshipPatch { - name: String - length: Float + name: String + length: Float } input StarshipRef { - id: ID - name: String - length: Float + id: ID + name: String + length: Float } input UpdateCharacterInput { - filter: CharacterFilter! - set: CharacterPatch - remove: CharacterPatch + filter: CharacterFilter! + set: CharacterPatch + remove: CharacterPatch } input UpdateDroidInput { - filter: DroidFilter! - set: DroidPatch - remove: DroidPatch + filter: DroidFilter! + set: DroidPatch + remove: DroidPatch } input UpdateHumanInput { - filter: HumanFilter! - set: HumanPatch - remove: HumanPatch + filter: HumanFilter! + set: HumanPatch + remove: HumanPatch } input UpdatePlanetInput { - filter: PlanetFilter! - set: PlanetPatch - remove: PlanetPatch + filter: PlanetFilter! + set: PlanetPatch + remove: PlanetPatch } input UpdateStarshipInput { - filter: StarshipFilter! - set: StarshipPatch - remove: StarshipPatch + filter: StarshipFilter! + set: StarshipPatch + remove: StarshipPatch } ####################### @@ -741,21 +743,26 @@ input UpdateStarshipInput { ####################### type Query { - getCharacter(id: ID!): Character - queryCharacter(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult - getHuman(id: ID!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult - getDroid(id: ID!): Droid - queryDroid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - aggregateDroid(filter: DroidFilter): DroidAggregateResult - getStarship(id: ID!): Starship - queryStarship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - aggregateStarship(filter: StarshipFilter): StarshipAggregateResult - getPlanet(id: ID!): Planet - queryPlanet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] - aggregatePlanet(filter: PlanetFilter): PlanetAggregateResult + getCharacter(id: ID!): Character + queryCharacter( + filter: CharacterFilter + order: CharacterOrder + first: Int + offset: Int + ): [Character] + aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult + getHuman(id: ID!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult + getDroid(id: ID!): Droid + queryDroid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + aggregateDroid(filter: DroidFilter): DroidAggregateResult + getStarship(id: ID!): Starship + queryStarship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + aggregateStarship(filter: StarshipFilter): StarshipAggregateResult + getPlanet(id: ID!): Planet + queryPlanet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] + aggregatePlanet(filter: PlanetFilter): PlanetAggregateResult } ####################### @@ -763,19 +770,18 @@ type Query { ####################### type Mutation { - updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload - deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload - addHuman(input: [AddHumanInput!]!): AddHumanPayload - updateHuman(input: UpdateHumanInput!): UpdateHumanPayload - deleteHuman(filter: HumanFilter!): DeleteHumanPayload - addDroid(input: [AddDroidInput!]!): AddDroidPayload - updateDroid(input: UpdateDroidInput!): UpdateDroidPayload - deleteDroid(filter: DroidFilter!): DeleteDroidPayload - addStarship(input: [AddStarshipInput!]!): AddStarshipPayload - updateStarship(input: UpdateStarshipInput!): UpdateStarshipPayload - deleteStarship(filter: StarshipFilter!): DeleteStarshipPayload - addPlanet(input: [AddPlanetInput!]!): AddPlanetPayload - updatePlanet(input: UpdatePlanetInput!): UpdatePlanetPayload - deletePlanet(filter: PlanetFilter!): DeletePlanetPayload + updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload + deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload + addHuman(input: [AddHumanInput!]!): AddHumanPayload + updateHuman(input: UpdateHumanInput!): UpdateHumanPayload + deleteHuman(filter: HumanFilter!): DeleteHumanPayload + addDroid(input: [AddDroidInput!]!): AddDroidPayload + updateDroid(input: UpdateDroidInput!): UpdateDroidPayload + deleteDroid(filter: DroidFilter!): DeleteDroidPayload + addStarship(input: [AddStarshipInput!]!): AddStarshipPayload + updateStarship(input: UpdateStarshipInput!): UpdateStarshipPayload + deleteStarship(filter: StarshipFilter!): DeleteStarshipPayload + addPlanet(input: [AddPlanetInput!]!): AddPlanetPayload + updatePlanet(input: UpdatePlanetInput!): UpdatePlanetPayload + deletePlanet(filter: PlanetFilter!): DeletePlanetPayload } - diff --git a/graphql/testdata/custom_bench/README.md b/graphql/testdata/custom_bench/README.md index 4ae04cf7c2f..f8941e7a000 100644 --- a/graphql/testdata/custom_bench/README.md +++ b/graphql/testdata/custom_bench/README.md @@ -1,52 +1,56 @@ # README -### About +## About + This directory contains some scripts and resources which were used to perform benchmarking and profiling of normal and `@custom` HTTP queries. `@custom` HTTP queries were benchmarked for both -SINGLE and BATCH mode over REST. Please have a look at the [discuss post](https://discuss.dgraph.io/t/graphql-query-mutation-benchmarking-result/8604/5) -to find out more about the results. +SINGLE and BATCH mode over REST. Please have a look at the +[discuss post](https://discuss.dgraph.io/t/graphql-query-mutation-benchmarking-result/8604/5) to +find out more about the results. + +## Usage -### Usage -* First, generate some data for the Restaurant schema provided with [datagen](../datagen). Follow -the datagen README on how to do that. At the end of that, you will have a `~/__data` directory -, that is all we need to get started. -* Find out the `maxTxnTs` for that data, by starting zero and alpha in that directory and sending -a GET request to `/state` endpoint of alpha. Search for `maxTxnTs` in the HTTP response, and you -will get the value. Copy that value. Set `maxTxnTs` const in [graphql_profiler.go](profiling/graphql_profiler.go) -to that value. Now, stop the alpha and zero. -* Copy that data directory `~/__data` inside [profiling](profiling) directory as `__data`. -* Copy `schema.graphql` from [datagen](../datagen) inside [profiling/__data](profiling/__data). -* Now, make sure no other dgraph instance is running on your host machine or in docker. These -scripts use the default ports, so they may conflict. Also, be sure that your system has enough -RAM, otherwise, some queries may lead to OOM and killing of alpha processes on host machine and -docker. -* Also make sure that `localhost:9000` is available, as the `dgraph_api_server` uses that port. -* Now, checkout dgraph to `abhimanyu/benchmarking` branch & do a `make install`. We will use - dgraph binary built from that branch, as it exposes a header to measure GraphQL layer time. -* Change your current working directory to the directory containing this README file. -* `$ go build dgraph_api_server.go` -* `$ nohup ./dgraph_api_server > dgraph_api_server.out &` - nohup is useful if you are on ssh. -* `$ cd profiling` -* `$ go build graphql_profiler.go` -* `$ nohup ./graphql_profiler > graphql_profiler.out &` +- First, generate some data for the Restaurant schema provided with [datagen](../datagen). Follow + the datagen README on how to do that. At the end of that, you will have a `~/__data` directory , + that is all we need to get started. +- Find out the `maxTxnTs` for that data, by starting zero and alpha in that directory and sending a + GET request to `/state` endpoint of alpha. Search for `maxTxnTs` in the HTTP response, and you + will get the value. Copy that value. Set `maxTxnTs` const in + [graphql_profiler.go](profiling/graphql_profiler.go) to that value. Now, stop the alpha and zero. +- Copy that data directory `~/__data` inside [profiling](profiling) directory as `__data`. +- Copy `schema.graphql` from [datagen](../datagen) inside [profiling/\_\_data](profiling/__data). +- Now, make sure no other dgraph instance is running on your host machine or in docker. These + scripts use the default ports, so they may conflict. Also, be sure that your system has enough + RAM, otherwise, some queries may lead to OOM and killing of alpha processes on host machine and + docker. +- Also make sure that `localhost:9000` is available, as the `dgraph_api_server` uses that port. +- Now, checkout dgraph to `abhimanyu/benchmarking` branch & do a `make install`. We will use dgraph + binary built from that branch, as it exposes a header to measure GraphQL layer time. +- Change your current working directory to the directory containing this README file. +- `$ go build dgraph_api_server.go` +- `$ nohup ./dgraph_api_server > dgraph_api_server.out &` - nohup is useful if you are on ssh. +- `$ cd profiling` +- `$ go build graphql_profiler.go` +- `$ nohup ./graphql_profiler > graphql_profiler.out &` -The last step should start the profiler. It will keep collecting all the benchmarking and -profiling information for you. If you are on ssh, you can exit now and come back later to find -the results inside [profiling/results](profiling/results) directory. For each benchmark schema and -its corresponding queries, you will get the results inside respective sub-directories inside the -results directory. The profiler also writes a log file named `graphql_profiler.log`. You can look -at that, `graphql_profiler.out`, or `dgraph_api_server.out` to find out more about any errors that -may happen during the run. +The last step should start the profiler. It will keep collecting all the benchmarking and profiling +information for you. If you are on ssh, you can exit now and come back later to find the results +inside [profiling/results](profiling/results) directory. For each benchmark schema and its +corresponding queries, you will get the results inside respective sub-directories inside the results +directory. The profiler also writes a log file named `graphql_profiler.log`. You can look at that, +`graphql_profiler.out`, or `dgraph_api_server.out` to find out more about any errors that may happen +during the run. + +## How does it work -### How does it work There are many directories inside [profiling/benchmarks](profiling/benchmarks) directory. Each -directory contains a `schema.graphql` file and another `queries` directory, which in-turn -contains some `.query` files. Each `.query` file contains a query which is run against the -corresponding schema. +directory contains a `schema.graphql` file and another `queries` directory, which in-turn contains +some `.query` files. Each `.query` file contains a query which is run against the corresponding +schema. -The schema file in [0-th benchmark](profiling/benchmarks/0) is a simple schema. It does not have -any custom directives. So, when queries are run against this schema, it would just collect -benchmark data for pure GraphQL layer. +The schema file in [0-th benchmark](profiling/benchmarks/0) is a simple schema. It does not have any +custom directives. So, when queries are run against this schema, it would just collect benchmark +data for pure GraphQL layer. The rest of i-th benchmark directories contain schemas with `@custom` directive, varying over SINGLE and BATCH mode and also where the `@custom` is applied. @@ -54,19 +58,19 @@ and BATCH mode and also where the `@custom` is applied. The profiler first starts dgraph zero and alpha in docker with the simple schema contained in the `__data` directory. The docker instance serves as the final API server for `@custom` HTTP calls. Then, for each benchmarking schema it starts a dgraph instance on host, applying that schema and -performing all the queries for that schema against the host dgraph instance. The -`dgraph_api_server` acts as the necessary middleware between the host dgraph instance and the -docker dgraph instance. +performing all the queries for that schema against the host dgraph instance. The `dgraph_api_server` +acts as the necessary middleware between the host dgraph instance and the docker dgraph instance. For each schema, the collected benchmarking and profiling results are saved inside a sub-directory of results directory. This is done for each query for that schema. The main files to look for are: -* `_Stats.txt`: This contains the overall average results for all queries for a schema. -* `_Durations.txt`: This contains the actual and average results for each query. -* `*_tracing.txt`: These files contain the Errors and Extensions reported by the GraphQL layer - for that query. -* `*heap*.prof`: Files named like this are heap profiles. There are 3 kinds of heap profiles - saved for each query. Pre, during and post. There may be many `during` profiles as a query may - take a long time to complete. -* `*profile.prof`: Files named like this are CPU profiles for that query. -You will need to use `go tool pprof` to analyze these CPU and heap profiles. \ No newline at end of file +- `_Stats.txt`: This contains the overall average results for all queries for a schema. +- `_Durations.txt`: This contains the actual and average results for each query. +- `*_tracing.txt`: These files contain the Errors and Extensions reported by the GraphQL layer for + that query. +- `*heap*.prof`: Files named like this are heap profiles. There are 3 kinds of heap profiles saved + for each query. Pre, during and post. There may be many `during` profiles as a query may take a + long time to complete. +- `*profile.prof`: Files named like this are CPU profiles for that query. + +You will need to use `go tool pprof` to analyze these CPU and heap profiles. diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/0/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/0/schema.graphql index 1c65e7e21bc..6af200b0c80 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/0/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/0/schema.graphql @@ -1,60 +1,60 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! - pic: String - addr: RestaurantAddress! - rating: Float - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + pic: String + addr: RestaurantAddress! + rating: Float + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @id - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! @id + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! - pic: String - price: Float! - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + pic: String + price: Float! + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/1_batch/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/1_batch/schema.graphql index 96b564bdf46..d7aa86ffd17 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/1_batch/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/1_batch/schema.graphql @@ -1,65 +1,68 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! @custom(http: { - url: "http://localhost:9000/getBatchType?field=name&type=Restaurant" - method: POST - mode: BATCH - body: "{id: $id}" - }) - pic: String - addr: RestaurantAddress! - rating: Float - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=name&type=Restaurant" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + pic: String + addr: RestaurantAddress! + rating: Float + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @id - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! @id + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! - pic: String - price: Float! - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + pic: String + price: Float! + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/1_single/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/1_single/schema.graphql index 2f0474cf274..450b56f8dfc 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/1_single/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/1_single/schema.graphql @@ -1,65 +1,68 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=name&type=Restaurant" - method: GET - mode: SINGLE - skipIntrospection: true - }) - pic: String - addr: RestaurantAddress! - rating: Float - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=name&type=Restaurant" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + pic: String + addr: RestaurantAddress! + rating: Float + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @id - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! @id + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! - pic: String - price: Float! - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + pic: String + price: Float! + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/2_batch/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/2_batch/schema.graphql index 9dd9b705264..94a6d453242 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/2_batch/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/2_batch/schema.graphql @@ -1,70 +1,76 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! @custom(http: { - url: "http://localhost:9000/getBatchType?field=name&type=Restaurant" - method: POST - mode: BATCH - body: "{id: $id}" - }) - pic: String - addr: RestaurantAddress! - rating: Float @custom(http: { - url: "http://localhost:9000/getBatchType?field=rating&type=Restaurant" - method: POST - mode: BATCH - body: "{id: $id}" - }) - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=name&type=Restaurant" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + pic: String + addr: RestaurantAddress! + rating: Float + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=rating&type=Restaurant" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @id - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! @id + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! - pic: String - price: Float! - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + pic: String + price: Float! + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/2_single/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/2_single/schema.graphql index 8ac89e8539e..b2836a7ecc0 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/2_single/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/2_single/schema.graphql @@ -1,70 +1,76 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=name&type=Restaurant" - method: GET - mode: SINGLE - skipIntrospection: true - }) - pic: String - addr: RestaurantAddress! - rating: Float @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=rating&type=Restaurant" - method: GET - mode: SINGLE - skipIntrospection: true - }) - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=name&type=Restaurant" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + pic: String + addr: RestaurantAddress! + rating: Float + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=rating&type=Restaurant" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @id - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! @id + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! - pic: String - price: Float! - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + pic: String + price: Float! + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/3_batch/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/3_batch/schema.graphql index 0f2065e3638..50b72b1e063 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/3_batch/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/3_batch/schema.graphql @@ -1,65 +1,68 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! - pic: String - addr: RestaurantAddress! - rating: Float - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + pic: String + addr: RestaurantAddress! + rating: Float + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @id - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! @id + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! @custom(http: { - url: "http://localhost:9000/getBatchType?field=name&type=Dish" - method: POST - mode: BATCH - body: "{id: $id}" - }) - pic: String - price: Float! - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=name&type=Dish" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + pic: String + price: Float! + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/3_single/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/3_single/schema.graphql index a3a4896f5c0..c47e4740640 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/3_single/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/3_single/schema.graphql @@ -1,65 +1,68 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! - pic: String - addr: RestaurantAddress! - rating: Float - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + pic: String + addr: RestaurantAddress! + rating: Float + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @id - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! @id + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=name&type=Dish" - method: GET - mode: SINGLE - skipIntrospection: true - }) - pic: String - price: Float! - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=name&type=Dish" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + pic: String + price: Float! + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/4_batch/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/4_batch/schema.graphql index 0c3f031c077..0d9ce1f447d 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/4_batch/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/4_batch/schema.graphql @@ -1,70 +1,76 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! - pic: String - addr: RestaurantAddress! - rating: Float - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + pic: String + addr: RestaurantAddress! + rating: Float + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @id - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! @id + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! @custom(http: { - url: "http://localhost:9000/getBatchType?field=name&type=Dish" - method: POST - mode: BATCH - body: "{id: $id}" - }) - pic: String - price: Float! @custom(http: { - url: "http://localhost:9000/getBatchType?field=price&type=Dish" - method: POST - mode: BATCH - body: "{id: $id}" - }) - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=name&type=Dish" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + pic: String + price: Float! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=price&type=Dish" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/4_single/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/4_single/schema.graphql index a6d3dd809cb..72ca216707c 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/4_single/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/4_single/schema.graphql @@ -1,70 +1,76 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! - pic: String - addr: RestaurantAddress! - rating: Float - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + pic: String + addr: RestaurantAddress! + rating: Float + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @id - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! @id + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=name&type=Dish" - method: GET - mode: SINGLE - skipIntrospection: true - }) - pic: String - price: Float! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=price&type=Dish" - method: GET - mode: SINGLE - skipIntrospection: true - }) - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=name&type=Dish" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + pic: String + price: Float! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=price&type=Dish" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/5_batch/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/5_batch/schema.graphql index be76055c5a4..08294eb8bda 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/5_batch/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/5_batch/schema.graphql @@ -1,65 +1,68 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! - pic: String - addr: RestaurantAddress! - rating: Float - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + pic: String + addr: RestaurantAddress! + rating: Float + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @custom(http: { - url: "http://localhost:9000/getBatchType?field=name&type=Cuisine" - method: POST - mode: BATCH - body: "{id: $id}" - }) - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=name&type=Cuisine" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! - pic: String - price: Float! - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + pic: String + price: Float! + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/5_single/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/5_single/schema.graphql index bd4e8224745..7c6451c6bcd 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/5_single/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/5_single/schema.graphql @@ -1,65 +1,68 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! - pic: String - addr: RestaurantAddress! - rating: Float - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + pic: String + addr: RestaurantAddress! + rating: Float + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=name&type=Cuisine" - method: GET - mode: SINGLE - skipIntrospection: true - }) - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=name&type=Cuisine" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! - pic: String - price: Float! - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + pic: String + price: Float! + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/6_batch/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/6_batch/schema.graphql index d90a766c971..d16311e0b5d 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/6_batch/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/6_batch/schema.graphql @@ -1,70 +1,76 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! @custom(http: { - url: "http://localhost:9000/getBatchType?field=name&type=Restaurant" - method: POST - mode: BATCH - body: "{id: $id}" - }) - pic: String - addr: RestaurantAddress! - rating: Float - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=name&type=Restaurant" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + pic: String + addr: RestaurantAddress! + rating: Float + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @id - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! @id + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! @custom(http: { - url: "http://localhost:9000/getBatchType?field=name&type=Dish" - method: POST - mode: BATCH - body: "{id: $id}" - }) - pic: String - price: Float! - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=name&type=Dish" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + pic: String + price: Float! + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/6_single/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/6_single/schema.graphql index 7ce3ad73188..5fb6d2f0072 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/6_single/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/6_single/schema.graphql @@ -1,70 +1,76 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=name&type=Restaurant" - method: GET - mode: SINGLE - skipIntrospection: true - }) - pic: String - addr: RestaurantAddress! - rating: Float - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=name&type=Restaurant" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + pic: String + addr: RestaurantAddress! + rating: Float + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @id - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! @id + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=name&type=Dish" - method: GET - mode: SINGLE - skipIntrospection: true - }) - pic: String - price: Float! - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=name&type=Dish" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + pic: String + price: Float! + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/7_batch/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/7_batch/schema.graphql index 06587fd51f9..8d91b9074db 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/7_batch/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/7_batch/schema.graphql @@ -1,80 +1,92 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! @custom(http: { - url: "http://localhost:9000/getBatchType?field=name&type=Restaurant" - method: POST - mode: BATCH - body: "{id: $id}" - }) - pic: String - addr: RestaurantAddress! - rating: Float @custom(http: { - url: "http://localhost:9000/getBatchType?field=rating&type=Restaurant" - method: POST - mode: BATCH - body: "{id: $id}" - }) - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=name&type=Restaurant" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + pic: String + addr: RestaurantAddress! + rating: Float + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=rating&type=Restaurant" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @id - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! @id + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! @custom(http: { - url: "http://localhost:9000/getBatchType?field=name&type=Dish" - method: POST - mode: BATCH - body: "{id: $id}" - }) - pic: String - price: Float! @custom(http: { - url: "http://localhost:9000/getBatchType?field=price&type=Dish" - method: POST - mode: BATCH - body: "{id: $id}" - }) - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=name&type=Dish" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + pic: String + price: Float! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=price&type=Dish" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/7_single/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/7_single/schema.graphql index 5d93e9a1e36..fd97bb6f45b 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/7_single/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/7_single/schema.graphql @@ -1,80 +1,92 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=name&type=Restaurant" - method: GET - mode: SINGLE - skipIntrospection: true - }) - pic: String - addr: RestaurantAddress! - rating: Float @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=rating&type=Restaurant" - method: GET - mode: SINGLE - skipIntrospection: true - }) - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=name&type=Restaurant" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + pic: String + addr: RestaurantAddress! + rating: Float + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=rating&type=Restaurant" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @id - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! @id + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=name&type=Dish" - method: GET - mode: SINGLE - skipIntrospection: true - }) - pic: String - price: Float! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=price&type=Dish" - method: GET - mode: SINGLE - skipIntrospection: true - }) - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=name&type=Dish" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + pic: String + price: Float! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=price&type=Dish" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/8_batch/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/8_batch/schema.graphql index 0120e194d95..6803d06d733 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/8_batch/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/8_batch/schema.graphql @@ -1,85 +1,100 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! @custom(http: { - url: "http://localhost:9000/getBatchType?field=name&type=Restaurant" - method: POST - mode: BATCH - body: "{id: $id}" - }) - pic: String - addr: RestaurantAddress! - rating: Float @custom(http: { - url: "http://localhost:9000/getBatchType?field=rating&type=Restaurant" - method: POST - mode: BATCH - body: "{id: $id}" - }) - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=name&type=Restaurant" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + pic: String + addr: RestaurantAddress! + rating: Float + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=rating&type=Restaurant" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @custom(http: { - url: "http://localhost:9000/getBatchType?field=name&type=Cuisine" - method: POST - mode: BATCH - body: "{id: $id}" - }) - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=name&type=Cuisine" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! @custom(http: { - url: "http://localhost:9000/getBatchType?field=name&type=Dish" - method: POST - mode: BATCH - body: "{id: $id}" - }) - pic: String - price: Float! @custom(http: { - url: "http://localhost:9000/getBatchType?field=price&type=Dish" - method: POST - mode: BATCH - body: "{id: $id}" - }) - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=name&type=Dish" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + pic: String + price: Float! + @custom( + http: { + url: "http://localhost:9000/getBatchType?field=price&type=Dish" + method: POST + mode: BATCH + body: "{id: $id}" + } + ) + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/custom_bench/profiling/benchmarks/8_single/schema.graphql b/graphql/testdata/custom_bench/profiling/benchmarks/8_single/schema.graphql index b78a0052aa1..df1f2c8e9d1 100644 --- a/graphql/testdata/custom_bench/profiling/benchmarks/8_single/schema.graphql +++ b/graphql/testdata/custom_bench/profiling/benchmarks/8_single/schema.graphql @@ -1,85 +1,100 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=name&type=Restaurant" - method: GET - mode: SINGLE - skipIntrospection: true - }) - pic: String - addr: RestaurantAddress! - rating: Float @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=rating&type=Restaurant" - method: GET - mode: SINGLE - skipIntrospection: true - }) - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=name&type=Restaurant" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + pic: String + addr: RestaurantAddress! + rating: Float + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=rating&type=Restaurant" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=name&type=Cuisine" - method: GET - mode: SINGLE - skipIntrospection: true - }) - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=name&type=Cuisine" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=name&type=Dish" - method: GET - mode: SINGLE - skipIntrospection: true - }) - pic: String - price: Float! @custom(http: { - url: "http://localhost:9000/getType?id=$id&field=price&type=Dish" - method: GET - mode: SINGLE - skipIntrospection: true - }) - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! + id: ID! + name: String! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=name&type=Dish" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + pic: String + price: Float! + @custom( + http: { + url: "http://localhost:9000/getType?id=$id&field=price&type=Dish" + method: GET + mode: SINGLE + skipIntrospection: true + } + ) + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! } diff --git a/graphql/testdata/datagen/README.md b/graphql/testdata/datagen/README.md index 4c206e322c8..4db3edcde17 100644 --- a/graphql/testdata/datagen/README.md +++ b/graphql/testdata/datagen/README.md @@ -1,40 +1,44 @@ # README -### About -This is `datagen`. A command line tool to generate data using Dgraph's GraphQL API. At present -, it is written for a [specific schema](schema.graphql), and so generates data only for that - schema. It uses an existing [dataset](data/zomato-restaurants-data.zip) which contains data - about Restaurants, while it generates Dish data at random. +## About + +This is `datagen`. A command line tool to generate data using Dgraph's GraphQL API. At present , it +is written for a [specific schema](schema.graphql), and so generates data only for that schema. It +uses an existing [dataset](data/zomato-restaurants-data.zip) which contains data about Restaurants, +while it generates Dish data at random. + +## Usage -### Usage It needs a running dgraph instance to work. So, let's start a dgraph instance first. Follow these - steps: -* `$ mkdir ~/__data && cd ~/__data` - we will start dgraph zero and alpha in this directory, so - that the data is stored here, and can be reused later whenever required. -* `$ dgraph zero` -* `$ dgraph alpha` - -Now, change your working directory to the directory containing this README file, and run - following commands: +steps: + +- `$ mkdir ~/__data && cd ~/__data` - we will start dgraph zero and alpha in this directory, so that + the data is stored here, and can be reused later whenever required. +- `$ dgraph zero` +- `$ dgraph alpha` + +Now, change your working directory to the directory containing this README file, and run following +commands: + 1. `$ go build` 2. `$ curl -X POST localhost:8080/admin/schema --data-binary '@schema.graphql'` 3. `$ unzip data/zomato-restaurants-data.zip -d data` -4. The above command will output some JSON files in the data directory. Out of them `file1.json -` is corrupt, rest will work. +4. The above command will output some JSON files in the data directory. Out of them `file1.json` is + corrupt, rest will work. 5. Edit the `conf.yaml`: - * set `restaurantDataFilePath` to `data/file2.json` - i.e., we are importing the data in `file2 - .json` to dgraph. - * set `maxErrorsInRestaurantAddition` to `1000000`. Basically, a very high value, as some of - the restaurants are duplicates in and across the data files. - * set `maxDishes4AnyRestaurant` to `1000` - i.e., every restaurant will have at max 1000 Dishes. - * `authorizationHeader` and `jwt` in configuration refer to the header and JWT values for - `@auth` directive, if you have any in your schema. In the schema given with this, there is - no `@auth` directive, so no need to pay any attention to them. + - set `restaurantDataFilePath` to `data/file2.json` - i.e., we are importing the data in + `file2 .json` to dgraph. + - set `maxErrorsInRestaurantAddition` to `1000000`. Basically, a very high value, as some of the + restaurants are duplicates in and across the data files. + - set `maxDishes4AnyRestaurant` to `1000` - i.e., every restaurant will have at max 1000 Dishes. + - `authorizationHeader` and `jwt` in configuration refer to the header and JWT values for `@auth` + directive, if you have any in your schema. In the schema given with this, there is no `@auth` + directive, so no need to pay any attention to them. 6. `$ ./datagen --config conf.yaml` - this will start the data generator using the configuration - file. Once it finishes, all the data in `data/file2.json` would have been imported into dgraph. + file. Once it finishes, all the data in `data/file2.json` would have been imported into dgraph. 7. Repeat steps 5 & 6 with different data files. i.e., keep setting `restaurantDataFilePath` to - other data files and importing them. -8. This is all that is required to import the data in dgraph. Now you can stop alpha and zero -, and keep the `~/__data` directory safe to reuse it later. - - You can always look for help with `$ ./datagen --help` \ No newline at end of file + other data files and importing them. +8. This is all that is required to import the data in dgraph. Now you can stop alpha and zero , and + keep the `~/__data` directory safe to reuse it later. + +You can always look for help with `$ ./datagen --help` diff --git a/graphql/testdata/datagen/schema.graphql b/graphql/testdata/datagen/schema.graphql index 10fbc16fffc..6af200b0c80 100644 --- a/graphql/testdata/datagen/schema.graphql +++ b/graphql/testdata/datagen/schema.graphql @@ -1,60 +1,60 @@ type Country { - cid: ID! - id: String! @id - name: String! - cities: [City] + cid: ID! + id: String! @id + name: String! + cities: [City] } type City { - cid: ID! - id: String! @id - name: String! - country: Country! @hasInverse(field: cities) - restaurants: [RestaurantAddress] @hasInverse(field: city) + cid: ID! + id: String! @id + name: String! + country: Country! @hasInverse(field: cities) + restaurants: [RestaurantAddress] @hasInverse(field: city) } interface Location { - id: ID! - lat: Float! - long: Float! - address: String! - locality: String! - city: City! - zipcode: Int + id: ID! + lat: Float! + long: Float! + address: String! + locality: String! + city: City! + zipcode: Int } type RestaurantAddress implements Location { - restaurant: Restaurant! @hasInverse(field: addr) + restaurant: Restaurant! @hasInverse(field: addr) } type Restaurant { - id: ID! - xid: String! @id - name: String! - pic: String - addr: RestaurantAddress! - rating: Float - costFor2: Float - currency: String - cuisines: [Cuisine] - dishes: [Dish] @hasInverse(field: servedBy) - createdAt: DateTime! + id: ID! + xid: String! @id + name: String! + pic: String + addr: RestaurantAddress! + rating: Float + costFor2: Float + currency: String + cuisines: [Cuisine] + dishes: [Dish] @hasInverse(field: servedBy) + createdAt: DateTime! } type Cuisine { - id: ID! - name: String! @id - restaurants: [Restaurant] @hasInverse(field: cuisines) - dishes: [Dish] @hasInverse(field: cuisine) + id: ID! + name: String! @id + restaurants: [Restaurant] @hasInverse(field: cuisines) + dishes: [Dish] @hasInverse(field: cuisine) } type Dish { - id: ID! - name: String! - pic: String - price: Float! - description: String - isVeg: Boolean! - cuisine: Cuisine - servedBy: Restaurant! -} \ No newline at end of file + id: ID! + name: String! + pic: String + price: Float! + description: String + isVeg: Boolean! + cuisine: Cuisine + servedBy: Restaurant! +} diff --git a/logo-dark.png b/logo-dark.png index 3620c4f3b87f3723f0953c2c603fd1872e7477fc..e7bffaeb4d7368816615f6cbbbaed8d5b5c6127e 100644 GIT binary patch literal 6102 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 literal 13481 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 JPQ)PS{{utNN&o-= diff --git a/logo.png b/logo.png index 67b556d84c94e94467d8112f63ffb44140638592..e4a1b4b41ca64a4229c1e1bb11510b8635644d02 100644 GIT binary patch literal 5747 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 Yhi)!XeUq^38WccV6L{qR0df?_C;$Ke diff --git a/ocagent/ocagent-config.yaml b/ocagent/ocagent-config.yaml index a1207d0b279..2e4d34a97fe 100644 --- a/ocagent/ocagent-config.yaml +++ b/ocagent/ocagent-config.yaml @@ -4,6 +4,6 @@ receivers: exporters: datadog: - namespace: "oc_pool" - trace_addr: "datadog:8126" - enable_tracing: true \ No newline at end of file + namespace: oc_pool + trace_addr: datadog:8126 + enable_tracing: true diff --git a/paper/architecture.png b/paper/architecture.png index b475f861e676db4bbba9fcb659392e2631bae83e..cc49ef668356b6ce0f3ff4c00a7c05f55845f96c 100644 GIT binary patch literal 31993 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 literal 47000 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⪻>%0ND40i*X~(XH#HvX6DTl{~ zx-^FcRVtk|o@%d)x{34E6++66G_rFNDn3U#K4}^77OP<)(C{l1k5u3H7KPrKq*XYN zq@uu>-yOf^J>M=yAw!+rh`!#ToWZjv#Fy+F*afwgE3m{*haxp%IRH}5;MahZ*SY&sA2pOJ0t9Lk&f@@;PkJu1)RjN z>(XtCe~HHjAfJhzk4$N_buAghw%|JK5AOUeMzc;0o{B z7$Dab`OkW)?Sp6VO_-iC<)}FWpPvn9*BnwN3Ybs4suw5h_hM_~3*q2(Po*HnnJCEF zJy|(xzYkxVm)<9ooRN%<=x)`3X#2MCJ) zZ=c$G_@b$(*`ZQTo@OHg@h64pjugFUg^cgi+5x{u`0m+g(#=sHNp4UH@n7e}#{nsN z0h?hdVIOv@>$)#BGFk#~+AZS1+4g53MB9mz}dAXRe^n#R&ddIs>} z^~qkOs>ejllR38%(cG8sB#V9BTuJ^eDx#Ign+P{5ybY1>YKUWNp^YNwl61=gg&C~E z)cNDUA;#H09!Z^K?R2rAVtfCmo>4@e#@q3JT94``kcW9Bi1HWCXytg16EA68vze#a za{5@>O|PY{VvyOE5-xRjk-&l;SJq+8Fste?`u1S52dQ{>2n+k47@Gdnt>;S;qe#WH zSc7M@n_{UbD1zG7z}B%nZTp4OBKCPc(gT(9qg8U5_ujOhR}OLK9nYJjK9oAG=`jPE zBA{NdU|c=#L}C)D__)Z&19cfhdqWCD{^D&%OJia`+gwhr=Iy14TW*9<2hDzliK*3# z)}J6iR~8M>9bM*H!*gkx3)9%HEDOQ;>@Xs>Yp%rA>t8J62DT#_VHxWqRt!P=`Hgcw z@0Dmnx~o0(TToA&{Y3o5Or_sLs+zH)IPp2c9lqOiXWD9G9=qptyA8D25e;7a?rr#} z8A%@*!aXP&RY6mDxMeRrhLn5EqPDRJeYP^U-Eix-5z!eg@diz1+ipn{)@vNrH`nEi zHTKMETs;5P+QG6vW*S(!+17hwiA$#+TGQ%Y#k#7!tK8-+OVtByX_XCll_0(u?$i>E z(sbs8@-L|2L+_dxBDhnl4YaJ}q42b5nS{BjJvz$rGSzOaA30%D$|x<$*Tc4V9vfP?=BA z>{BT{t}dGS@RYfBIXy|6$q`qvdmeQboj(HF3}d4cTlzkr-1|CtI!E|vNQ!lYz6*7N z;3yHCd*?O}1g&i3Vi{nP8rCCKxOA{`#VXZg(o;t4l;1k`wTuAUvZun?2&KiDtZ9IK zabV15ae32*sR~ctv$I6cO<9VCRr!!(n;(u$1(`gQw)7G<}P7bi|3Z(>gvHvBt?Q5ZsIAb_2`CkwZcj zMasDXBRu~EEPCH#Jj~^-d@Rv_ACBnZmRW>~K8p978)ft140OuNUR$BPh0n zMe)HbEn($b44X`fAsuUBRgXuPuvIDNN(sx~^1Nuti^un4tTTz?*}qF}`YbeOVfm_5 zDl6=1%&gAd*h);b?g^CjA%h9><;FYgfC$6dp{U-C>m?_<@_E?*_1CeV=_k%$i!5VF^-2CQo~ zROOR3Nff(0TC=EMt45|hI^M#|a7Rt2iwv-f--h^Uq|)9?lk)>Kb-|dwyhk}~=n9dDdgz23k&dxmV6_>abtzEa4 z@JKhIlwk}UxP23>Dni~Ki8x~%V1x4N&pP|zz~B# z8^gi-r(|%ow@;y6o8;Op{Wpxf(oZ$ zyL&^U$pe&P#T9&nv>u9pkS6WdJX8u9gbwhZ1i57h*e2JfP+s-X=RC;dg4jW%T@2Fu z@9P3=GjhdAgC6G|_uhU0S#(&nx*oA}T#ebS<1#=OMrB!q*m8_exgPTgPknSv+2LEV zFP@r)3a@j0OH*G>odi9NWo2k?`-@w0phu^Ut2<;;ZCn{Ynw&6pZAHc!-*Tr1$5&BA z1GJCm5nEDQW7q z)D`!r_9v|E4HOE!Ik|$cOi!)16Uf-J$Z?C=>>xI7l7Fq8o7yRzx%R>jTs|u{=u933 zaJ@R~kS)3oyIHUt#e;BF-ZbuI3m2O}O=TA(aU>wQOy~HX0)KI~1 zaq>Cp;hb-e&8f`6gdP8J+x1G@+{3`PO;#dNo9-z-wDAPpEolN0!6aLA^ZES9U(ZK` zJm=rYRH9C!&xZb&;aK^0p5w9I)?)?|{U~`Q-$8ffUA=HhNLSz~JvrRAa!+s;>MtzY z_gJA%tdPZL{B|KB*`7;*g;DW_&cW@( z$f_Y^@V4Otn6_Cn^6YP2DkRrrPbS~7X98@R`(S^SdeUi)bqLHM5WJf&e`@a#{$o1m=sKdIJ+MlYW-Bf4yzvF1-a_{-TtLL*%Oq6JBvW7G2hmaPo zG0&p|uns&R`g!W|K+R#`fSOlP`Tp)|{P+LF#O*?`QYknV&eHZ6*YsRl*c^j4{ z>)f2dze$Fbj*G0iwkC~h&Y!k1{=i0;clB{)fGL>XdElDmBa7?S2?FH4e~{gAjihM$ z_qQ(Cr_zE$DHQX?yC?c>Wod9ESKD-)zo7b4FcS{E_Je6r)|`v9t6vGU__t)^$o8m8 zR0L@c0zcJ{EOj$HXF%_&X#(7qF&|p4uTVuk z-;!m$`WOC?0jGLVL3W*N4Vzcgf1xu2^>+$+0xs?#%5@8D*M4OZj!BQfT%?e5BedVc z*RXv+w6@6AD~foBEoBzlQe6(K)D=Iigrmo?0n=HY?@5oCa8>pnS_H`Xktr5`uYle@ zvHAqJV=il$(i-km_T76I9=^IJwdM{kkTf`a?2rQM9@hj{8fYOuegNecjd9w6XcB?Q*CLUQDaI2@P>{ziPT=tVx+C{cgp_#rkOxvF<9KGN$@? zDB6!4G~C<%9w!hr9@^9AID1Q>r}e?ZMfj@Z01y%s6pB^Vcpvmr2c_v+Vk!p zC9xUKY4}`*HPL9}UHL4!P@glt06!Rw1?L7$rcE^W{q;dL7>|r6-KT`A5%$wm8yxwp zk4@U9nS1JQlYX-s9BI&{W#@6Fvct-%kmj)UJ za}3D%xY}nTD)Gn--=96m^&BBXYjCN{le_-T&)WILK0Nml-rJC{#nZ_;{!RVl!K3BX zij36tU9hH|Fle5@vi-<~qNthWA1uB6d!#@5Gorc+S^sNTyV~ogRaRV@5YkEId=7Zfkxt>0cdYvP9Xcd-d zDhKs`9dsMDXRx5@J(kw?U6OrqZ#vZKv{g~MNGF`4j7pD=&UnM~*>@X!D{K$W!d2?i zt5$}y7n2>)(Ug5_*}nv*u2sSiz+rI_Yx`uE#2M@h9fnoI2kiO2TCrp%b@cyopAYex zDVhA2A7$n2V5YE~K(xelza7Z?nYO9vE>6etIHfsq@AZ9txFVIZx8rCzgoDG1N0bYK zB4DrN+7YD0HWM|z+DpS>Z0-75lU}LO1A|Z=ZA;K_c7Dj02#v2{K426a{STvNHN z{`N01MA+t%P@=dUuS*Tl@=fe&?&v&pN^~bhF3=c% zJ+SC`OBbP%g^>NzMg_@>>AwEmYpa2kBZ8>*%=vXP%LXUZB7M5aHBK4;E&jB*=qV25!$EY z<+`kYNq&J&T&j(dEq+Ao-)uWPqq9UJ9%;_#Glr+SbXf*QG8hdky6<7_}411gueXK1*3el0Ey7KzfEGMYK}Oscm% z=c{KGhIp*FJ#!1>1A@I58o++WS*{1Zvpx+ya$YmZDZ#7sseZSbg_dAGwivs6bF8tN ztXZ&ZiYD7CWV#;f%Tk; Ftc_ddkCdN^hw-4)?yNYc9gRaLzR%FR#kX`Ox2SQw zP}oEAS=shWos9EUe}VeOkH0iI6^ySs6IJ;Y3JC%aXYOdXc|^7tWsDU{dnD7C*z*N_ z{F>(@#O`6HJsw&?+{z4S1mwYG<$k*QdA&?lz*gl7)YX)L~HupNx7rqJn12X*n zkDh7Ru7S@RJJxSL_8`#D02}e*<#GwyCnp?hn_qw=zk0DA6kNx|&e3UkZH7LO2nAB8 zyQ9I>-*_1iRWN9ASN)rg#~^>vc{lWF8Nq_hgB+(xbrs}kW3r5O+3&Rna#;ZYZHPXH z!6TfXUYN1VF-uAC{|xK`*W$9^G_tKaA3AKf1tg1l+N8~4bA(SOlQwP?#RmNWk{LHU zI~M#8GnlFC#7Q3gPs8f4SYDuVkmOTFAmg=Gum&98vV9hKy4aXquFvtCGvv&^7|1dA z_h@m4Cs`FI_H09G%G&o1nmwTego{I9kHuzexq=vN>DvN!S$;koH~#6rw~;A4%ly@|S~Y)TlNuH6YUo(W zGH9qnV;=qHu5$S`Q4Y@aWeZDjqPzkEP5M_=#D@q{oOEi=-2b*eFcq+UsQ;$>=Uyo| zH8<{%2gkX+k14#A6Ax=Hf@H`8ZIF0fxvI|G!Zvldo1Iyh^1UDEg4%(+Z*$l&@q=2) z>i}`2^0?!N9G@-jaMaRds(ogTiNke6pWjwNElX;8M-eN|8-Y_7$d{oXS*L*1E6+Mv z{^wyI_H=oIMJ>$BCicDcAIaB9xWoI3{~7Hw(Qxyrf~Jh1l}?gsqT7>vT#ul_75P=r0JST%B!R!iVmJNJ4?@!ii=`!G( zfxP9dE?U2#U_K#>sNYah-w9-qfQZ~u0lcaVYSH{z;WwZSQz>41L2&fw*;ziZDMsws zTe;1Y-Tu)DbB}BPA;{hwK2Grvy;&KvbL_w)=b`K=`nBf4rN|`IkSA->(43)BzWd;IR7V(vaQwJ@N|u5B3n|`W^5C~ z_A68^ZoA#7t_I|KT|{j|g6*_J8qu-q}6KF-d5{QCSH)JJf;dJuzmug_`! z3Z`~)$}^6*d1-zG^hUXp?#3EBSq^Q$JEQE%x~)EY&G46xi9BK5%yn=3bYZ>GbYW9x!- z+mt9e)B}_?UQ!*PI=7o=QvQ~ED`}ulL)3~se*moS(h#!3OY?KZ#;RZ<;Ca+dXzwO73Pyud@)U>K^%A`g8NP?U|c9U!ij64+1Fl? zQM%hRS)LI^fZH&T=k<)(XVMIS20VZBrHZt$9ne(9pw|tFRwuws)b6WV7B#>nP12Pz zD0xUc2JFc9rTIaB+`1P~2(#syVQKQQOerD=u)ue3ZcAWl z1MJ5UNFJx#?R2{P4rfd`_2ARN>e1Rz8!!`N>yy&*@|BoP4|pveDF$e+f6!C0VrSpP zv_n`iVHJC+DZgdz-i|fBD1eyWsjpshf!E`aHkY*_lxEHZjPe>`-1N>y$AMV!*fJIf z3xR%H(11lN6c>g)8t1U)KyeBKE*lANDTSz2H6vBQhmK%=%1SU_ZwfH~)t8ERvX*Yc z4$A~E-X3jV!g3m3T;o-7fxn;}!tQSMNiaQjEXcDdNs?xGSx~|_tWATiB1Jw+otQ83 zTb{XTB^lU55C_EkI_|d1Rm0ty)j8}&mKfrQ1$p(J`b82Aw~g(j?KgaMfWX=3)x}}( z7Q3`hHv|8Xt{XQD=LYCfGE4F!n2~W~6UGHOg0yuL;T-IZgHU@6j~2Pv%6zI10N6C` z!vxW9y&0*5I^z*v!5Sdl1pJ1$(|N@aNuS@TMX6DG*1IC5#z_F$D;2~MG$t7(i$k|e zqE5yauu!yItkP)5bKl;18ET^e3eC3qhK1E1Gn>9+gy$Y`F3O(3pE-!S*EM@?gG%}p zU7X>{%Z>WETtF#}zbm0FjXAzeui3JO*g`spjQx~dZF^TSiKZ)9zDvb}Fz=AU%c^h7 zVJb}%@kN{qs2Y7t8>g-m zF&3-ShY8w9AZ7@3+*cKg%vA0oLNnV%HS+phT^ra8Er1FjUki4&eeYP#R2|e$>28-c zz0;0$sF{q#S*%uFiUrMlAYjUVAHETJnR}d-lJt*(i0wR!2da+{`Cxi(!FkIwyTr+d zfEk;LH@IIljMP*0?gQ&X!Fb7bWPl(KMn;X%Do@t`Lo5jN9m=Pbd^bqC34Wyu8Qh3$ zBf|+J6RCpVloRjUyiUD;%@GtrM{+5tDeZxC6>i0>yiH2Y<8^UE`EPk}R*So&Kssrf zgefH;?f$>Am#y+2&nrz4@`>HbXnMTzMikF#Gjkl^LO^LB^Rvtf&!4WCtbsY8b69yU zJ|_uWiMX1n?5^y4pc>LaPFstEJn7c%A6ykG2+Z+lBcE<_`xKX=a|tezZp#`!ROy@F zn>q}k<`+|QAniShFh#*PTnS#G#C~91e0_w%Z+%=2NX$tb`bBhIuK-XuujT8pIKJ&$37*H8uxUJY1k>>*g+2j8{wZs8$S0eJzaC_4dhHfL1ZtAzDi8 z2dDSV{wu;`1zV6E>g*kuVOgI5zV|tgKrKd?ZVGXO3=dsWT(IT=ovry+YKKzl86U z^p~R8Dc>$^g38BJVRcInjTPk3F^3hGKY-@YR#s)^g`5gh)vl0Y$Kj=CcG1)cI2`XQA9P> z3_8AGHERNm{tW<~S?(3`W&Bia(c zen_Uwp&Bt@9beLW^2%fqOW<_mH>F;SVs#34ds3wQ{+ji~z5mPp@c*CbYuOyrTo<`Z z(3e(6(zfhGVrK;l3{8k$@x3h1-U_z-&zCVOvWU-id+D_x|E-K%_ETzx7bNN90Lh%5 zgp=VkKLEy{hlMsDS%L<(OTW*6Pi+MjfMz+rZ}N`@%GrPy&u^hSOdu4%cI@;Murr+2 zzTDStR3E9!vjFJZ2Z=*AbKE2=q(?g-H+qL?h`1 za-tyfat@~xZ)f=SisvO}5l_(Nh2o)h@ZJBxG-6JoPp$-g3&0AJ2-e3e7Z3qtoYmQJ zL$thrncULs)dPfsQ5lSL{5W@sR&W#H!@r?zU@$D~nagj$3u?C+bO3lu#kf1eFD^G8 zAOhrI7!X?Z07)&N-{OByiTb5#{m%XPAK|p%_*!vb;{iInJnsF@6OMaIWV4iIm_pbCf zsTsr_?i2n2`u@vsW4_n6Z$Z28dc{4TLjB`=ec9O~<0bWbqCx3dEfx>RK+~CD7S9@k z-m?caice!L&mGh?PTLlYRDJi`gv5FVD-HR0V>GJITQp(@Jsti6Bs_$66S4I$`xsH< zC;59CJL6+Km$3=nX=o+!q`ZySFG$rU5LLxl4-h{6$T?-ev^*th+4O9qBTJjNI3M?( zs1l@@Ue0h8Y+HA>3&eu~ zYJkM`J~zL}*E$g|-BW0;=G{)aM=I|gE`Bd(aAC-}Gif5>so#PrV*c~xI2O&w;`FFS zg(A1!FHUePLo{(QD4G<218doTn@>t@pHb_|QI5P5Uz)VgoAG08-mt8K+A7U+)+C4G zKTd=Y;o6ftux1-7^<(;if%IJ&^n+9SCi0snR=8L+LU4N&+ABa+y|MpxD2Y6P6Q+RT z`qms@9&G>OQW2dgfUsNv_1yYBTsXewtT-N`51oCqIvIUsfXkS=E@~L2;w8Y6mg;!F zhU-7NXB5%paV>VF?(o_CEZX>rRd3W6#eCyN_;8lMM#ntV?Rjp}9I$+EI1ZgtM!s=$ zpq!3jeBncE21ZXN)Xl_;-HqXJ6vKV5XNbouw!tg2 zrZ7)w`lp^bS=xqFCa0LQdtCr1rwYAc;(~mL5Po5)y9;_( zlsYMk6RiKC;PGAZ%GvXsQetev2Zix~Dk&3iNR(zl+qVJ3=E`-_cLZbyR7Sls8HiPA zX#{W~4{zuT3?O5fUi8i8MF77F;veM9h%>nIs>UBe&6%!ne9Vk!-N@1oGCYvCAtb0U z3nyhn^9e$1)XCN1v9EvwE9elJ@^)A|h{Bo##+N4Jw0L4;u5cuP;m)zPAt<_~{Agj{ z_2XBq*yN4B0vr*rp+wo{A7#=vCy{LghGl2Ccu~;oicc~`zw-j_0r!4v252g!2QtO} zp`XY1CyaPquO&%S4m;%slsl-~(J>SmS&2im9$Mt)?SZ5JDw>fT0ME8qH)f&ul#i^0 z3}1IR5Jf6g?%oK40Ts9&V#VdAfD4$uM*yVlUZBAeT6>IZ_4u3h=f!MnVeq&$>3lEa zvMb#1k)q$Q=hy+TKb}gcffl>$rPT!yPi%F9ameL4c6&h*t4>8xVJmSker{s)3Lt+H zX*EF6$4k~bc;pJe;Bf7Qi`P?-KI`0h8u=Z)ybDvT}hrU1%9y1F~9^hj-{scUP3-Fy^@LbeHo4IW1!Y zgcFM#opN&ISAX#r!-Nba<~yq-MEEcDh#^A8s0#-}bWDmzc{za#F#Tfr@=m{1j2m?? zbu!xdE%)R)wmm(_AE(Q=7HLSUkPln@U(CH{SX0mUFNzfvK?Es601Lee3M5pOCLQS| zfYLjJ0HK2oqy_0Mh;-@FLk&s^9RcZ`5JK<0o{it{Ilp^f+~@pndG0y9GTXgp)?Tyr z%vx(cpEU{kqd(+q7H#I60O3?;d68bFhprh>~4GotG7s$eDiIqwu>t+)HKqOFRRV~^9`8GLAH_jNs1QMpk`l9}tkCiZP_JFT38}Ue8pO26vp?T`3AFQr?lphTWu`auEXJv_@2$81HX%2kci! z`>zw+E!}q_Dni=bcVp*!m*lGV=;Y#1U|Xa7D#6S+JwmJSMfH`9+h!lebX8PsRe>!y zyD1c^*X^CC$|yVH9HK_c6Hze1!p7x{vzJRAndUHfPJm}9UMNlDi|0~+$^fYTUWd z?8e+&ij4a>P)N(FT}Oas}&!fd6+@*lpvZgf%QoF*?&UJcP`aWQW)G&AR% ze^Tub#wxI5fAD6G?JYNrcEm@;r0T-R*pgC!+Rw4E=RyK(L=icp1+AC3%Ti`zuXwO7 z`mBi}V=>`r_A}hZA8jt&2=@B}7ao}!MJ{0U8>wnx7k*e~HXY!4F)6$dyztPX-@Yd{ z0QAs6?0j4csl-7(rAte$)EWg>E@@T8a};6Bjy2em2R;BP;qRj0Zv(kw~O?ZHL)Rwnz9WFZ1dZy~K ze-ATbd&*%-kVnJQj_fSH$Q&h?F|LI4D6wZ23ct*{Ki-V|20}mrr@{EQ`tF59(@$?= zVVjwQ?b0B`m4}c*amhy5$cZQq^G)QHgRGA@v=Sc$Y@Fxg9QZX$QK$waX+^H>b9DQ@yaTqL&&C20Q=bC0~> z#cfyT&?0>4GsfUG%I_(CnnA$MV2~3?_ybPj9h*29SQn`qV9Pf@-~j*OQp0jpI<8NM zD>9??C>`dhh?Vh)^_w_Zm6|)YT{1T>b${iiJiRcSETiWp@4Vg`Z7ar$&?Ph5{Tb9T z%SETB%{#728E4#fM3vGp`Rl>)$xCkI#XeC0k6m`$m36WoL{$ldCVe>Y@$HYs7O1~6W8dj@WvPc)yJa^-lgj@b@GL%d)tq!(ITL7+5IYx(HD-~<((S9Gs=4dSS? z!Am3vCn)DU19ovy+YQ1yv?if0H9UuY#j}~$>Z*{N^&>O80I66WufNXlI@8amak!NS zne<6whTJ+@SB|4H3{c#a8U}(U)SBv<4bWG+()S+0jWsf4i1{-IzTZHwEqDv3OZqkh z_o%LOh?JGgI#eo@ery4)=|{!S)hjF3z4`$Z2d*zvvd^x#G0+4|@ju?xA>o|7i0Eg* zwMR2oww3E>B~}?=p1^Lr%$^aJs{HPAlN1x9bhi_QWh7UpvAoyjkNm!Y9ym%{zD737 z83cIuZ*56*50NC^69>zV7Xvd2s?k<}*P=E`#wWASY~$eLWd2;_-_9I@a$ z$57J}uQ{k(hEV-<md{KJ6FBY66OgcyI`h}pyxHt33*%Ezbmca;js8_w zSosNmI}TJCfkTe{`oo(|=Au+uXR1;kX`>(pQ%97LCD=l84jLdRi!PXgjY`;ENL zMiJ~})v@TBIxWV_R{TNO^3LEUI$wm0=*^|f{I)I==jWQOHU+K9q3Ymb1-wh@fww5O zYFTp(U~_Y5Bv`iDvNwCJVaf%u97SxIFgr7uOrL0+9q0C?#jq^@n5pRs_RB<_GBF0Q zlAV?E9_dYq@KM_^3|3X2z%tbZOZE!*<%Z2c+I7u|8MvY*i-0|}oL#AHp7b9*s{qex zQYo*~SjYABdZo-=qBoqmV!^g3{2TM=4k>HB1Y(yp#rh;1HMY(U1~pAKXQ1HwR5Fv) zbk-72t7h;zLh|q_h$hLRC%^L19pD2;J_yO(nbk(62fLZGGsIjX{nWejhr4WZ0;o08 z)S6CAYo<7WUPbn2VY3~uBdOp4z*8GO`aY;SfUT+kh#qE)45DectHAVdS9<1g;0z?z zuRWQ8&7$owO6U#^H_B3eZ5mDZavzadIs$7udg%FfJ*A>z7TncBvnm|S@EYb*k)VtW z@s47gYe?J;1_9IA~4NjEY}AYp8JH#W7q?Q;V8Z|uR${- zQRx%}EDyIc`pqG5CFg<_VNbKYVC^|M)EKjSCUlWtko&Fpux5R+)?d9o#5JuYO{CJG z``%Mt*oA1*U)_lexc7d_oU|O+81T9*6{jf z`Kt9u$9eEn<@y5JeK)_08_c^U#&^^^Kbsg+DgZ<%(>F|SMs>VzqrLXq&J~)0n&4Hu zjrFO(wTR!V77K}^9<{q=T6*o=)8_9`YmS%gIL{r_x1+51CZ%W$?a%tJAxWBH6H*{H z>_V==*Q~Yl{)*q%v%sTVfI9lt;~dI-?dAFu$ig~%AD-E`i+Mu-dw z8!x;0-skGY_*%(?e1GR^L&d%A8m-%;{$+6VBP-J^SdPQkfqXawv|n3Z3kthb;!s(} zsjwolT4uUw0TfWwpLra&qfW!F=W`_`LQyT~X#5u}Wf|@Lp}`1`Zuixz66=N?(Kugk zpVgSVf8K}bXuM4HB8^4@U?Ep$#aT&@mK+p+Z~m;EZ8C!v1@lHO7ue+(Pj*vdb26Pr z?a7DpKsx#uyQBCz*Y3S_Ozpc54dd-EDVY3p&2EX~f-d?0esYTm@~&ZYak=Cn`(}kv zfyidp-k@I99lVNS9{ZhEm~)n?DWekttEK%-Ju3vc-N`%LkNokl{?Cm|_4F2Z9|@14 zM4y{oGFQH4wORrLF%XQAdR0xwqTO~0c1vFvEbYm`g|vt9u$UzgN8C6OexdIK$W*Ue zON3VfQ+Yj$#f+)&o3>H;H0`dwe7AdNr*r7NvW9H1inNJ-^5dnIG%;puTktr0mG$d6 zFHsd}<=6as%KcMiIynl-k0m5T$YO$M0#AO-0f^$tCeB>XJhAH5U;H65FZ#dtO(#rzLW@_R zxif`;cCHRAjsYwsq{qlR8*S>x->t$}YJ}I6%8$&6>BFNR&det#=CinkN`;H@0RiKN za&ZV}PMQ8sWR`D()I8F3-O>CX44it^U{p<4pGI zO!qjhltGM>yo1FMO_9g}(p+(6H=k#Zgi7(qEY2GpEpLM?U*RIJuYpeyC%J;+t+1Sj zRkJ{hTCOUoyjD*z46SRg1onQ{gY&*e;@^olHL+WE#|@4Y&OxbOZ@oimC~otL+EWZG zG9ZFmPVI8{c7B}V>eKT7IOR>kTsXb1S~l{KYS?VG!+L7aVz_sg{HJNFH|d80i#LrX zXiCmm+dQY(ge}uW^MW{4UP%waeI zddnxhguC2?w_&ZR=R9HfkHwC!!zd?UQ@`ec^y?q__9>I-$s~cUN|h|v$UIzX{T1XQ zP#%%~HE3Tv_nKpHor=Qdu>20--Z!j(tHoZnJcG*B2oN=JrsE>d2Ke8x9KAG@surzZ zXD4b9eh{{}?oQcwqb1 z(iSD|WXG!bcMP{B6EO4F z(_`-FA4{FQ!@Z$N1@l5`tR}FZ@MuZDQ&;<^y*ooriQ0WUy{Fq`G^1a5ojwx8H0Zy^ z9e*rwYF*DA{D}M2rbZ6_2`N;GG;=5qMPaYu&^tv_e!<-P`|B8VqrBf?ir8GG-b%QzmQ|47KzCt!Rqz1`04 zUhKw_b6=_@{mu!ogg1>0Z5=1Yt0RVHQtY;YR>)&|>`%t`&QQahE#<zu~3xa$=(v9z1F&2e%>N3 zzn>@kdCIY-U;^lNZVc2exioYxs!ljF=lJS(R$xR(p|^#5vioIJg0`f>=GVbwd*okm zoaN>MbvN4Zdl%heFkO8M*)f~G@p1>b!QuwbjTTrre~(y*gEj_XhIjYn*Ij7+)LJ&fj|IZ8d-nmt5s#?Bny4aTj+ zXnGQUM7;sUwNosv`}v+6b%f`LzR)P?tn)iRzz?1Kwif;}9UkTn2|<#nSOMrJdV`2mJn**RA{OHhzHNd;}C z99VIupHZ>&InKwN9h(*oAGG&0*4E|w6GvFSe|U4#~U z#?-etFuhr7O?QOdkZo>nvz7d+ZuQZ37j+<*xqkNJPHS*f4#}jccGbU&Z2C?bU_Syy zMR?n{mft_{@W}pzrqBt5vLlcCJ*T4UZfz6iXq|l){$2Hu_0$u7Dn~7d@lr@~IXJOe z{}9??yv^npA936f?2pD`5QYm==TC85{W2V7YcuGFi)MKfju?Bl@h|P?D+*OSG@f5^ zXHO?-eRt1gCB-<0UE~IjyCi)Rjt;wS;{&PM1EgANH17=WYyLvaU&qE2$~I{lW@QAg z;1rkpGA(b7w|=93`VufazW)2Bq!vQMeA?G!xE<$2B}Oqj0%N68l^DK$gWF!ujc0kMa2ta@U7<(xVo!6L>1{ zAdO(9wlUQkpjKhHpektX`x6*9Af?CIZ4|^+SudCkm+P*&bgS*%8Cq8sx2OCrmVs@u z>Kx`R6ho7EUA3u01PumH&n0h zJl^*SDAzM1Ggs8lItWms&XG+$R!~dy9+R8 zI&WlGq7Y^qFVr!_%=~L{_l^{7oC$M&)}KGKfG@Txf0~24QLVt7|>9O)}U5!v$+3B_9Jl zy$ldjI?G|uh1-Dy`JKsLzvT;Qo_7ghJfS4hX4$xm*&PwRhxF_r^@q7%%boWsO73_4 z<{Y_y39&}4^w`2Oy_}yMTlK_7{2Xm0eBReyeE!Gvp?Kz@p(m42Q}gcLNnR0n@{?Zp zn5&!w_B4leLI?|4zO7GQ=r!S-ig6o{n1W#z)4U)s1|z7Eif`S z@TAVY)gKRzH47*Jph|}+gO?)`aj4)Zi5yn?m@H#xy5ea0rKC@`t!*6DvL*cI*06Dy z!mnrDABztZ9m!87cB>ax|G4MlDw^r*( z4)Z%e&5e{~7vj*!0HJq1-;o~olEc(EEEum&pBFF*Y-m7Mj6uW*8LbEnnDff#(R&=X z;R$CBp_n2lwEWqpEQ9-QRjn}WDnWSShNPk1>#{S5989ba){REFu$`OB@VMT70Qt&W z1TZN+YrnrS36mU1Sr{_*Gqfugn?_?!dpeBQ9zYRg52FicjtqU|8evX47TC-n4OoHc zu$jq?PU=KOFFKkYt4{mc2H5N>JeMtFEp(l)RD9~>q4C7|={goLkSRyZIlK{hg|U=Q z2h>hqUbDo6`GPQp^5Z2-)TU@h# z32?~}xiz2WFzLXIR`+{-iFn_g^Aam7HZw*8mfil4GBw^q0qQ8I6kB+S<<=^{TwMdK z<=GQe<5<7yt#h8}2a*8eq-|>7!buexx~05xuF6$;!sW2AK_p~*Ij%O{PiUfd0z?2! zytxX5uV-v)3)ooEE#p?IU|UX?Tt2OIU0y<=OdJ`V~=`#73_)85aN;cYlrcUlsBe#6=~pUw1QxqVmPg0 z1SU@+#xR%h?_e&`DjhD4+n>w>U}@%`!gOjNgIEGkA$-SzgU3e^{}CQM2voB09TOxs zvrX8|uG%^+pl|K^yrnx<*We@PSF^rggoGmlrn;P!Eyfslh#gXSY1k^`i&Fv)g$nT5 zR6S)`6lir{tintX&{jp-3+*B)(n#{;-ApUTUI0&O-AdUAkql zlXe`n3w=w}*{CY42c+C5Av)96F&zFn}8^bI=z2f3sG?tZF z^AolYfoyl2L)L7D7$(|)(jF~`yk-*-N-aLkJ3RwxvL8;xPr1*7O?|Uk?t;nQa9M`= z;=LG}VFiO3BYfQ?t=>bos2~rd^H|4+V3PMA<)rASAlOPgy7$cz-(gKGfNprhS6yChap+Zq+eu7%o!1{B z#p#H;zwg~r$GRJ7lA~&>8ivPG8LFB{r`ekCB}}dI4FyNSvV}d0jiq@~?<$QMzOK6;b+$1imTxihyr6+z?3-d{^{NMfzrdTw*(Y2^n(eh4=kOoG$C zDjk5?+<`9H9@IXf+K;r?b9^C0lfbf2*P+S&C~R z{aNX1AQa>Z55^M!ac(>Vbh?l&&EcBMt@tn|Rk!0rZKg61-~ z3BZ^0ikYA-OL27gl|G1y40&?gRa!>B;Oq4%7A!OGknn1RFxms)1 zBaN2wE7Dv~0?SpK?p3u*@;_Gz^`dWXdrh?mhN(h|y~xlca{Xf^o&n+c-46@A;rbTe z&rihcF<%mRC54eG`$DXf&9Hqv1ibN6zNm`*5p1a2Q> zAUvd}5a)w%xr06RisKvzAhEAb_c{6V5|-8S#tHi*D;)^iF-Fzd-eR!`rT`i|n zDg2T-&>)R>P<(axy`p=FZZXB0k+p;!fq>jM_;SnJ%PAQ-h>L}_;3au@yC3v3M3nTK zhiiGO)CS_#1~sduU|tsd4ma@G%W|I24e(DE8bRr}1oK5pDfay;@`k%*?^vDZ6GimR ztWQ3xFdK+_O|4WSG*Gnk>&wp0Ygg)jDD;vgpH%CJpP`jz;R^FTbu@`r&M+xnMoo2p zUu4ZDpe|_Q6ecGc6RHMX=bYUCas>%jNkAM~1(E)vuHVEOw@3yQtnWKAJ$@9J2%Z1Q zMz@}YmZYX)GiVJJ`MNCwo#xK%Gd@4w>{-v^@f|Tx9wn!->>pLWw(DH|SyTXvabI6x zL>^a_PPh<0jU#rZx~Hr-q8EexAkotdh42Pg4p-+yN2>ilhW&mG-NLx1>sZ(t^qMWg z@@Nc==rO!U!}6Y(mzb46I7(^&+1hgRaNylg8sZqftEJ>Lb(i1R3E@zwtTdM(|CXF{h_EF%2f%Yn=ma6h3gt5%Z8C6b;Pp+hMN8_Y>w=ksG z&O?L;sg$Z7OEAPdsNnn~xf@bJ7`N3J8nV;Lq;UV3Kq@ftg|}YRnYEJvw0}(fnrW1H zygnUMcj0>hTIjzMY5QJeeeE+YpPImg)cLlXF-G2wB(Vp`#lHCpiT7ekFpIk4T>7ce z;5@NA`aIz)<8d%&jeMq6@W`Y6sUjixTJ-3_VUKHNv@yP3aEWUfv*huTzdyy4L&)KX zJ67RrTT(A=Wjx6)pW@_%K%)w6xu%rWT&WJZ@@8lQalh51`e4m!DF3G>>5(v^PhMyh zGR^b761pIXL(ZA}>6SIZ+!gw?m93Qjc5_}b^V)tFi$QhzqP}x^@21D0&kUQs6Ngd)~I}r^3`Nnw-lMqbQoH zgg@fjwrpQ>sIh!j)NDT5hVLK-J|)vpL(3`p-7J?8_=WGhg!$reurV@f_A7?9DakjT zsfM?VKl<>Shw6Y&=|=3Dl`qu+eB4Uj!)ToJv!d2C;J{&iUv~nnV0%Ymb+0_w4s%n$ z3r8FatmDvA=RF~bLw<+WzIidaNg%c)u&aZvu{#TIw)Ij)%iuLOz=2q<2mIpD1#1jW zNDwi(f<8Qbvx|%k-ROu_TTwi9G;W*}!iMp*-ugOo64F&m|8m4TmGs`0^6@;;H2tg- z)Rd2N#4R>SWC&F?zJJ3v3#a0@L~nbZMRRowB)m2!w7svq4C2A!+x_P4Pfvewzc;1`{m@+piPcUf&h@A)i~<#{$AeGDU0=?Qe4_St8}bSq>HQK z*vzi6R;&5l!&KvSCY&AOD|c4Gk@BrV)L~3)FC97NEywl2pyFfXnV{kfL9)g#9SASg z*Os@& za#x5XzMyPCweg*_5jO!EhD|$-JCBL{J)=?p^!aR17wk`nth)XKKux~eOT~2(Y2Pi< zo3d-V3FP-K9*eHn%ZFVia*9s`etc%_C^12?r~o*FHB~7=G9wx9uW#3G5sCRfJA1EV z<$jGn_%AN>FJ~vU3HK;=fAlgH0PQCa2yi|Dpj`j+zp2o)%4KMN(kXktBX zaRqj?bX+f+1)A+EVWA>w@S-5yEjvv4w zntTp$O=W*0MG1qzC6p+yA(7!nfDjwl02*SEkELq+qiH30S7HDruWlB{!P~a^1pt^P ze4Imfh`ldv%hc_p{so}VJG}H@iX``GWPwC(?L{`T-Rty&kvrZ5w9kwk$Q%{8k8qf| zO!WNs$5}AFo|k~<&#$xS!eX~actx4Mz>Ka00xA0d=~BAu!LILUUqNg1!30HyohiV`;DxF1{ zy6<1Csd8I4G(0Po?SgE{13{bu1s|XjA{KMq$QrN%V4ss;_1>h<-sUSu-irJFNpKQ_ zO^g^huw1c;ni4~9)+0mK$2NfU_`4^N?sPE!wFave+tA$PFCVMNO)H)Zs{h6lCthD) z0_$nif$jkJy*DX~QH8C&hzfdLNiY3fC8AV?-UbNBck#wuSAZMr~&&BID^We z8G?;!E#6D^(3Cu7Fz|72$5K`nZSw{6p|#1!ROjiet^m6L{$F1I@wmqpXc})SC15Ho zZ}Vr*nV@IVDKDW~l6U#Ls0S-Q0H!{ET%9Ij+dcNm^3U+q;t_TC-V8QRG_?qN^k}-F zz2+`cfjVG+KLCO%{(_*2^IY8-w5oRb?beN~x1{`Z_kuZmHJ~ExFFo~xQpk~WZjUn@M2m>Y5R`0-jP{9kO)e)azJ;kM(tMI(%+qJQP|%?0p`rl{+Q4l zaM{q*50m+#IOX>Jo)^54Md3;w>=0mXIk5Xv_;f@x(`Wsw=(I^9-xIWHW68rb`KJbV z4*9jj`!35!gHc4qD%YK|wSv`lgIV!Gk^6hT+QV>nkr61tk?!deG* zWFlk$ZPA;gQ-YtLTzXZ7lBz1ix?r5qPEV<{v8$r1bM$U`M4rIZAOoTk#!d$Cw%!D_ z02?Al8Ot#rW}5_u1rk9+^i$C6o0_X2i^qZ9=%qjdfR$t9IsEm{*_I)|fSLZPi;SYY z5uK>Z`YF=vv|NC?(qlD2O|9*50q57-Y4v7$1{QHB?`txEC2`tQG*Dw#8Bmdn#k{QZQwr}1yFa+VKaPUS&Yr}Rtz2W+&lMOxusqOuauAZ0Y<(e!>w2K76R;Y`wKsoe5OkQtRT8g zZ(_!@2>?6b#{J^hp#Xe5z%7_0;U9)IUY`a&TSu8h*HG{U>OZ}0o`v1f@ZH5z(z71a zu88AN7T}JVRB)l6D-`(GTH6Y^f&rKndtQ=#R}u)&1X}$s{fT`RI!+562?0J22_y{L zTWywL3K%?hq(^`6$^Z$Y?oybcJG_A1iB1-iA=3bZ|*#A*q*2kzAz{Run# zhZuqAL$)Yffcct+|2qle9srpD5PTP$n})!D=m`G>_5zD3;xFf7_9txf-=;s}jxLsd zqUp68So0zzu=F-e$P;5-0fGe}r4yn_d-|_$0Nn7or5!$?9s?{ps_Ej2OU!SjfPKRQ z_M;=Q&41`7aTg@|2DwPrKNsWnm?HzIz8A@_dLiizNTGnW5yM?zq(mPd&9?v3=j3Ns zm8E~XZ@NG=0;~|n3km-vl9(_#UDpDT)PxBBU3#FEdjNFeUrx#YiHY%l@#-;ug^rmcw{MFs16p9?7cETB1Z+bh zxEDqhaN(|`ch!H!?fm7G{FkiY|MgA&*Sdi=5Yq#|>JChK>_)3kFEkK7J0P(QSsMVZ z`3tkD#a(c3z)IhEFVx@^|J?AeJv@0={rBs7d)XC0K@#~lUR|QNcsTIpAC?Q_A*1}R z2%uMpK&=038hFnVjQMQD5K?g0p3yg9-ZSA~K$v9uuP`@a=Z;)hfkU?jKU>_vD7mrL zyhL9;a*DKmpzDMpLw@*jb7zLR|M?HGW?1tBq$!U-@IKf}D|0uIAs0AvH1RtLlo{QP zSgdH_N;jBnn)ly_8CTKIASp0VgU^kB8yJT9AOMEc{-fW4QA$^SZmD52O@6c;0t#Gv z@$C*H1co&rH6R<&yzq|&_)WK#qJ-( z*q9-|RTtkK`jeHGTD>P`t6HehP|kk zYC@hL6_M~i?@QeQi}=#S{24ah+WH5oyMzt9jZ<8jN!hIW!sOrzg<22gmX4UD6nkXb!S1Y?tB9*WXp?%SSqln)O*0Jg0wZ%mBpFv$fMg@0dW6XOccNzr??n$%M zuaJh^)|B0q|Ir5PbuV~f>*G5(D zsp_OroUtPxV>JU8i1-raKjYTR5Vss0<%c*usLbDgRWuO1!5n5p3L2S1hrkMTJE|08 zJ{uJY500nlpN@)%*P+T6+JbHyTXrUU|B9NJ`G|!tCSJ zxf2cx>~dG~^MLC0*+U)m&$PH+#vm2vU$c9P_pLGJm$!7f+hLW$xV|1AegI)#{QlP< zHL>Oavu4BzgLFCCe-cZrS$Z|~bah7Nz}fuE(g@UOzfNASy|VHBE0S`+!9Jf?4-jCo zm#qI-TpGA=fPP=4q-lu$v5c0Sc3iZ_<@YUne;TNLk0<_CPL1@d+|zOkg>Z;Xu~v8s0EeLg z45ED9`;;fZ5tsj6^Y3{U7-<;jQtm50;#g+cOzYLC_ViV0E1(LIgxdga215H(om_0=JWPmGs zA2^YN)0O{3`NwkhFPNo9PtFh$p!3;&8NbrZ5pSGEAB}K!7xVOb$)>aI&%rLmDuq(3i9t?4uumR#OR3#XwS+F7d zZ*S2#0|g^21l^wApJ29H1g$Ahg*R+DpIJfL5UEi=NJ?J-n?L#C;_>OQphiAAl+~45eY3e(`fGh7ZbdHb$ z37PznPdt)Cjjy1!A&w!qvT|NL>l6uaOiG1{{JZ}Q(kNq23H8&UhVmo%Xt2%$>#(h~>$dGa_uA!os&xJeKoK++)dSh{NWl}g*Z8rm!8bdfIBQp4R!2u>WLucGn zNtJ306u*$3#A<)M*F5q^8}clADG4>GaGZ@$w%A-B{~l$y`+dI>A{+mwWmVZWsBSin zNSE!O58njbz0edH5~wsU56@eICyEqz-ev2m)p=*dhB|X;k=CSJ)=PO^(9-;QfocF& za-B2jb)W~aR%*_`40y5Zkyhh_|176UuC!z3;mdNYL-^vO+NUBbSHr|w)r{TtW%^nev?Tx?ML31CK1CqoCF@mZRmaU9jT&9ShMaeo)gDCzMYccMFXC$-iH@0Yi`x z8`o_Tl&zP#d!E;&-=V%@FN1wEwZQR382hW*&~>s8Sk~H$KfHLjRBDG>X){ z{~%&MO+MSjp8NO657;{|bQz7RCqNmG<_ISzzB{AnmIoGNc2Dc2kc#%}3;(48yO+cz#8E{UYn zc`e2}#6;A8{VxeRerkSkp!N;-KTimlKq61vpA-G~>&9)gL9cM_2-y^1Pp2}f|dF!7yjN)IRUOhaYkCA{C}Ed9v%HcwBhv6 zgVMa5dVMs+8=!xFGCP!Vr;`zHJiGY$zoCQp|FMgT0>YWKhCJY$Fd)o$T{~)d;RG`_ z{~s<$VCw*;!dofcOS&w-p)c32>3)D-{-N-#>f<=ckLy)e-^4tJ->jl}L+X69f%Dxw zg)?6R-5iC#*5xjiIU|3;Ru-bXtBH!Obwsvb6p6HNK8yR}b!qTH955DEybt#;=fC)$ zH5^7f7s-0|$kVCzG49b2reE38NHvsxbKT{@bj(9et>~uXtG`aZt=NM&v!N$>SXoiV z*tTTQ5Od?y1a&EyoQ2JkO;el*tNgxu+^-LS-66+CYv1~AE`7gr^?ib3A5IIove{84 zH?d2xN=xvD()%iQ`+mZyNZsaQ-Y={T!tEqeEX_skmN7O6V>?-jbN$EMYjJ)0A#)jM zCx$rfAreDIzlZKO92ddX)wTGETlM?^U$bNPa@&CpoNNk~ZSmbBRuxSl<}d6vULGSh zWt?PN!kzw;Qon zzB31C!LWo&Ci0I>6uw(w1US*jaw7lRrqYu8Ow-eL39mS=on`S7yqK)EJPlsafonKiFa*q z@R@BqtWCiMT#rB5>)-(w)>zgf^Jlm%I%n+NO|d?QOOIHF9PdB?59DEOGETpAba1i@ z)@!)!Y76NO7O5q1Tm|#{&#mY^PKA*Tw4Zp)Y=+QY8jlc1+Rj$&aDO9jwioRNAw+qD zaV40>YP}e}`@!o#;TZU`HE18d7PJXKUCYuR?Pt|i;mkhNA8PsC_gdz3b$fv_ANkT1 z`F5lIL`EOks4HT70uuvukbtgYgK?vCA*rPzUoG?rS=osu-do$t^j{lcFn-d_Tm=@U zxuI#w)AAqpCAO902EA~Fy?N4W3{rF^c60cdbbgI$286i%XH$D=j%2UZn%b1cl|bC> z#}krBlLc+>3be7S6H@+Yc<7k!lTir1hOFue_?8NaMO2^*S&!cUbhN|%b zPrd!007djzpDHJQSFJQ+mrG96P#=RSr&%U?6soMWM#nW5UMXger567*Y#8!qt!)+E zdFz!?YQIF$yb@|SLI0{w*py!8$N2eg(WLioJN_CIRpBm6fA*;Lj%EvS|0??X)9|7B z6px(z8wMwYog*VC@Zd)V9#za3elKk~cymyD}mxff3i4LYy=-a2&J zah=Nm&NU>;yq)&OopN##CP3qcOF^=E(QPlgpbEe~_9BetH=>o1id_VQgmy7{CF+%+ zw+V;-5QDBfN>%+Y85I!C(6{t=+{U5gf8e*22A;e%H6QHdwoAcvzGk}+^;nd5z-Y3i zqC=71@OXqIfu|WUR4AAblYIu(yXtaSE+_6liTe~TcmKV42(EjGTg_0X$ac1geF1M0 zvHPRK@Q)EaooE4+Nhhi^5bM_o(y&c;7e|$v7o)UxvfAH1zRPdH&4_rv>d2z@u-r!Ao!xeP`=R=ulZg8RK zYb>rw!9`(P;qAu;w8D+(Fr-F{yrzv;lGUZxgo)6|D8IdcE2<@qj@`U8yF?Ro)M00P zIZf_I{ep&Tve*HO7Y`f@2l#k;*u&6}-5A@*XnOsUUHJ`fe_Yw7;p_`-rdsLqCMRev zX5ni~eyhW4axpF>rJv16mKMqS;IrxBTLRaYXj$$rGX=%^M(7FD?e?UVmt^75^vAeD zTA*kUi)@;xZcvfnVb>yfi1hgZ&@kO@hk#)f~E@8k48ikkdvo?@oAsM=SBhVhX z9P?Ox_j8DT4&_`fPJL+1C~fRp3U9A272B1#2F7{xc)hS~ai@***MWGP%lNiX{s*tE zOGtyWK5qe1ETnaZ^``%GAP5~5G1rVvw=dRV5I*jxl@&fW3@wPsD+&NgVbFuJ+iXj5 zsMV|(hZ!qW$8Uoz=TYwR<+_dQ)8G)S>vp36;3kpe%X ziXx@6*yQsB4jd{+;@UmJol(8^->(-@-%GR68+Mhb#6e>Nrf-%#lUzZwu03rN!ZyRW z!c{@{Ngs#-V({hgVDDe6I@$<1%N=f@Ac$S@sygt?!b!7vTT4&S(n6Gxb!p)-dQKqm z-F4Y-nTL$nAR2jdHO;8|id6ZKLY|f8*G9>giEQnhQIp@X^IC=-*^Fq;HQ9d>O?n)usMP`1;{9q{J1<= z*s`jiAzpv}w_j_no)}ydl*L24o8g88RylY%lDXq3XF#G= z^OBl}Kh7Zs8%FATrd3;bbrJ0{F4jX!UOf#yf5}VE`Yv`}6vU>(OyL(A(wb{P!z-d< z5#TUM9RiElU3p%DXecB$D*aFod-j?qG_Dn)Nn{gj`RX=gv z31x+fmQs;s$X8G4c4>n-ztM7Vq}^Y-N2H63$5n(u^o(!6;I(f?Lk@3W=IKI!Rp#2Y0qaqy7}g#Uxm*txpnL8vHVoU%3Vo3Gq48%(6tM#w z3Xj6+4>fbo*(4!93BksR?^;>cPrzm`#W;T1yVao`6?(Q&Gr7+R#Hl~|v4XsJP%&_! zx)m9LdxTJD(S-?Q|GIS^;MO#Aw-{2+f8r`f&!T%C{OSjx>s9frQQUS=Kq2@`7B`u-O`RJ7*r{pNB;t=771pxWokLdP8@mt zt`qp#!z(AYcyoplP}@cJVheHf%gDhSMe)`8p|Z!%B?lF(mik|-2f3iWM2_BxS-j(C z5n?hNo<+|WVPh~1?d;4beH*SRnxaz!5>81Fx$a4}nJ3#}ZQz%*d`TbQiZTjumAd$% zw@Hyv@bX=@5$}@hL%vU<8I$f6>DB{L9HH*I-xJvA-{ZdF%nIy%kFo{d&rRicG=MEV zZS3j&RV-v3mV1P1sg|A@0}s0vK*w1J9-v?l1ApSa~DCAR*Izs3Hz}+LLJ& z#dYS>^N<{Hrf^)kbXYxsB3dJ^@Pt-M8jkPtHu+HdC|cv&Sc@AFGxHO;)iE~!fn0V` z_h*Cuft8GEfA$`LGM%VIAwlmWLld&^RuR&C#B~s!r>=b&6M**hgy%8A zI%Ui@*J;`-S`}jr3oW8zekzVj<7JRZ6bX+NaStUg+ys#8I688ms=KsfV||o%1Y8lL z=|R7bb7RC!%hycCa?ev?1s)FmR=uCj+%souhk+$i=KK(8<8nQka*e3xMs}q2bA23) z@6|1>1PK%lB`48{C9ILliTE^oNqQ(sc{b9Yh8?Tbjb$CNLs($=aGmsD;&=x(2Gu6~-&pPm~2v#>K> z{mIoHdeOpegCP=Ah@x%&9DcOacuCbUeMMMjzfmq?^vBQi+wYvmVcXx4rMj)P#Torp zT2+dYK5L-2kKQk$~|wS zyf%E6(9ok8y&AZ4#9{eszI3Dh>bkNXUgPZDrGfOK8pVLH3Qv6huxs2S`z)fQy}a88 zoX>Wuu4`ZBc1$F`v~f`;F{-kI1sM_JC{_3S7Rf_OD_)P9agq&}N#3|JH{s!$-}1+2fK61aHwP2m$>N_C(^S}VN+D-Ds)!NIbXySDL%rOA*VXg7nHFqJ$ zc*V&5l>v%=s}S6!pW7GL-vZYKfa_`dASdHm+fzz_dOEg+tTKz&(#9n4%x3EOk%QmO zMctt$FWK-k6kicBD3Zav^~=Ai<;cM8(m!Z6i8Z6Rt+j zaz|l`d#ph7>xn?~#Q#5p!~aj?>|)WlXPY!DA1gjQ`)bYT#er8ik=|!ki(BcgYugQ7 z8R!j=LNT2`ZfX1w>D>}lA{uvFRG+N~xhMMHsC&+-b09PYkvX0~OfRxq}yfsQoZc6KujkR1SZ-egw zp>dy-q&nb+0=?Lt{?NGip7>*POL*jU%oIJSCf2!f@YZ6^;aK|h90SoaVF2`ws^hKL zbAOe~lk{%cI4bD8SP6(}Q`I>+)l|*ia^VP>AnJRdy0iWjJ|UkQhc@V6b*^4|n%{A0 z9(6@ydb{|TGT$OHA?Q@Y;Q<80SvzmWAR^@MH$;3sF|^;=1t9`{t|~i<8u+scLZ^Md zamCXZ*C$oANp0JKlu%Nc^WLRRy>1=w9);FkQ0_t$nMar%At*Pm^Kx;vfS@s>`xD4j z*n9o}B&cL)wOG)94k~ z8(5;@h{Y*}k-Kxhm;lQFB!3k@0pj@S%kOvZd;SJ_&C(`Kww4h#!C71x& z(qT-+_p3|UlDPtX2>k{r!I9S7*T<40#^~iHH-@fZrc!F$V9~C4{H8o6I2U3KtpSk! z36HxSJ|w6iTX{uka5eBrpEUAD9!~{k2QRwJ)yMk-pc*-|1R9IFs^7LHdM z7Zqnw_1kDaMnRkHT$NaSS3c>9%jAP28cL<|+@T|P zr9TUTT=^v!MNF#zH3#G8E4zRShA!-I3my6Tg}~B&I)@EMQlfs0(BNzg@b}62 z;sX=ORS2-PyEJ{fA2%A?`Wwxuk@eymE2zp?v&05uXgN3GqkI22S1MkaG~6-3 zXxHu_o;;s_e)K4_gK(}sly1!O=C;^yC?`FPs9Nm$Ms(ME^OjP z1Lr(RO(_ZI!bE#m3+w47oYhPt{1>VX{!IQENgaRGc+n%FrWK}VDO`!{7KJUA1UbX% z&GI2G#Ozm1s7TWWmwEKQ4A*iE5VT9S_$r$qaX3p+YIvJ;I~957@MRx7vX5ETsB9WjwV*(mHVZCI@7 zb%q9)J)#s~R2O!OG1M=Q@OuWYc8adWFNR@mTX`l79~oqaHz8Cd(xMj zy{c!WJn=FtIDO$k)zlV`vp5o4;Y#Z0CPEkgC;- z&@L*A>-y>RUc|;J>ad)@V~j1xMs4Xol5^;TpWfwHuAcSga91}vW^A2BCPU)iwTBJcwgUb!ib!_9aElb=0phy>QXWegl zS~0Aocze~OKbm==tzip_Gs38B8zLY$#T5nmjE&70nwcJjQVS1qt7q_WRa16l zfbd-sqcz>fAh_T54DXaINX``gOR*cKMU27b|A6StiaB?j$b?66cMaC|*GWmtp)?I1 zP4vAf;7Jt5jmmes$_+LYRUW*?-EThzEfRY*Vcz^2<_8X*#wk=f-DCIkQTITL)`xIJ zW%5?y#8kMpo22-sgqlbzL+nzawy@ORPuI@F81dssN9W1g-h>lP2`qC2?iOgS+i~S< z^quxXfhOWFHoOB*(ZkaHwKY@KJ&ZxCqke*QAihMwm|zd8`Jgr*bgsn2EuIHCr)+t^ ziMA4|T%L7_+Es%Y;l@XzKNs*cxm6hr$ZB?o>|-pPp|O1$rOyHeDL zo@!%Uhbq%sfNSGr!SKj_+W}^Ohg7-y2E4fx-`rrim2nnUye8%rHp%nTbj%uNDWg->(Eyz^YYf0u7$;J85ki$_?M@{caRClK5*#DS4z!6s^eQA%(d z`(2CkNR}nkJ7y5+B1B>vwFg`>sRQ(z-wu8Xrq{$hYW@3Bco zYD_Gw!7~!^T`=Z&yqeLPxl7R1oT~n3-sXG_o?qdfPNbQmr*Ny{J5>T3-y(U&Yg&ev z&T6kCIhlcybLe;lIgWVstVeaBzt2rWP;MBxOLbx4*tf2R@(<}c5qz;6Wg?0T(OyBD zB?g!nB}Kn|ya4B>G3;6R{E<#&aXd3PbRO1SNs`bJQCeKQnO< zqqDlb)-TVH8Wo>eR!8w%yJ+>mU_x=;(8RjN0^kiFrdeRVFdfw0=J~i-Z3@sdfUu+( ze$&+N1|6i?2_CZWS6weOY7Ps!H@xb->wiAP$hznWfJ!QRYsOqvId=!!n_8{D0fwW`lo~pwdl^E;bP=~`d}GVS|_}iDy+WyseSom9X7rb zK3reA07;N8y^@VSUf~2+@bn!$@)9g_0v5mxOt)k1vMYvBULoL>53t6%!rnE=yDrAiWCJ=8|Xx5J2`M@ z+G56#Yo^h~`tN1;rrbA9WS3O&5+pkz@MIqaruqqKjRLm$sMOdy zhR^PuAR7DNc=BD-SKq`O@%Lzg zb0$?E4hbQP$5%eN8Jv<^1+E+=-=e~>?G2e9A&^W$dQGb-$ms4S*%dM#2@EenC|o+8 zJO0z9suar%qDbj0;geOL6sVjI;0c+oVlpW)%k=Xlv5nxf5Cq6`bcJCNmFRxxg#0+VimHkkYKE?T zaDDoEvcEH(hMiN%!>k+dtQgQ{MLznG@O!f!8J*3h_Yzq0uG z*!N|~Bp$SAbKeEDhJZ-~TCl!V%2=q1(HI|!2@ij3oS?;!ijVQYEh=qDJTX4ikVfkr z&`G`EXr-FYbvo41txLd&K|AT`IfmELE|z2=rwkJ6@BEhJ)MBq9BfHIZcWdxQW+>IC zz-4%2S1saI!5U};P&TO-pC##0Zw=yea!$o+&BuD><`BtZ5u3eD`6aZyU`&1?js5H7 zRfG$uK|P}W9e$iYzu-em_>IQ3jjFG2ohPkN_eU6VYnC1JFdZLMTANpwYn)_PtAG{w zHs9qdg6HEGYhJ!%y`b)xJ7L+n989P|C=UpMm~MrSSO&DwmY9*Q%Yga1zv8skOtG2R za+wzC8#+Y}#?hjBzXk`GI5z6k%imz&iqE>Rz3*;89EJ!GFW*UC$6XQJP#yaE8<3WxwpPpbB&hgS&OL_&?a(CZTA{&Kt3*~HvWbQt|hz=JHzJs5F8|%JyG&Pi2J2Kd+uQqI@ zYwO(A)0|M5(&xSmTm=!%$<@#|Wt9c(pGU%p2E`BPF1qX^xhc(v_C+F-!NAV_YFB(r z@cMkYw6;y3teB_C`#!`4t{w0eq?ZI@`_|XeB6^X2~;zG z;(C(+5qVdsy%E=`$#p}AYd^DeyX6Fh*)~FM$1f;0%E!E>#@AO(Q1WSp^I)euez0Rw z?36@}X24Io7DBqpQ-;WIxNXBUT(PLbu26MFagmVj2*T^aUFxGxT6 z^2=aNx4LHURl!W1f$YCovQ;dK5W$RD^LP~#jBUvV`vaos`D5{;y8V-ekM%Az^&7E( z`s{la0NOCIAsY|H{+7tI>wdsIU%kp9ln$a5cOCHRm9%py#l+u zOg_X$p8dSOf&{6$RCP3RLwh&sTOHY0{x%GwWkX>zGvWmrDax{=v#J&K)nO3(bs4E~ zoDo9;Vws|$PZ4+1laP(A{W$hfUawTT*{u>dxV}?_H2FmBzu}6xw;v&>28ih{Bv9?I zQFAt2(Ui%kg9oNs2{K84+z=TZF}0JmL@ys&QOdDu*!v7gm-Fn<$P%!jG-`gKITlsY zu}$x)%s{WW(IGAjfpn%Ul7oE;k#o;fl9au=ow^PIb^F(}7%8Tsu!A8cc0Wd2m9}Ri zeIJv5%fu5~_dbO?_h7+9GMZP_td!W9KNFKjsbc7SI#y@Ff7!@(=yqq)yp`j-GX@5o z#9@Y+rAq13`n?c(u^15^f^K+dcBI|-@XYx2g8bbm2(r2BF8HdPhcTvOivx=3IOO!K zkKqy>v$Cpbs}(sn@_oyD%@1s$CqR8I_Ut7+RimQhIIPpS8lxh+zB^usR~|R{_QO!x zzwqE;(iOSq&>W=?jpF-H z*4$%qNNr9pRV7%4bw=L5Gv0PLRY?!jiBAfRRN>MosmB?iM)Hex_gf*SqEczc3>-|8eRU(;I$od}i{uWh zle&Q@GqlRv1T20k+AFX@DSNmtt2A@wX_KRM422NS0}d?gU9xWTH)qO7=yh&%Oe|4i z@b0E~2FIdnG?(I=&P9btyc~k#qv*6EV-u?02n*q$W%CE6CCWx z>Z0-Jcz=mdyq&J(X$DndkLzURLv^2y)~BpPB~=ZBF}&tedN?L}bvJ!veq&t!0PAMi zK@^!%ti|E@tDL~HV;vy|j)8Q|=BAuiXBK&O%El~`16%h_@%*)R=xs-*Z4`fMpav{qq-g<9M|@kxzxA@K3{(iG_S!RGMqAR zye#q2^ZWGvQ>n7Xvt>A@c33Nw&cAhRPw{cNN@k@QLlXID3~gSe1)m!`Gj z+*RF@Sp<97f^8nXiA(6-IrU7;Vc%=@dICXD!+tirVtAd*^Dam7M-iJ9cl|9RiO&l` z(c%yXeO5Cp)hT7qkEC(_J1Upm`&1jyVj|36IN`)uh(&nD{Yyy$fLNU<>_ErINgao=eu2E@go)0;a7dItQ1ZZ?WZ**H}O5FD1-m}JD{D~=as z%wte#KL#+5Vblw)pUm9Lo;g`9c%K3AZTx7GQYv-vJ0!iJq4e35En8d#eP?a&hBk(G zvG9?OQbZ@r8M5FJ4vr*OTfI|$Lvn=Ww`e~glHmLz3n?HM!KDR@#DK_bZoE;kRhAGD zt*mFk-E_$8LJ@A&T!A;gh|%Q9)ytjwQuwTs(avLh4f0D~(`tIas4yVVFB>JkC@W{iQHreTaOUP)}^EWw%RJlHrROHJ^AqCl}BT{ z3C6Ze3KKG~IbV6%=UB4Fs^+qZVjC#>QaOH9dN_AfBSV@@U>1VOreun?tww@)l}9#f zf$s$pzYM;FnN-`HOE_Y&+~cF0*e8$GQ!{ULx6*|tpN3@-+LXugx}v?IV-J{&$M4wk z1wJ?yJLYCPGUW7+Lh7dEApUQ2Gf=f9e{YaZU_rF>gDF9aB!u2)nuhD3KB$4;y2kOFVa5a_qV zw{;(ESr(^qOEPH z^=Kt$g?YQ)nWvt3`g!he@C`C#(wDueF{p1Q{SUX2RRuTw=mZ)8O7p@wGj~}qIiAbG zrk8JKQ{^_MQ5xdFTzhz_O0?OtEz~inI%(puugmgrP6Km11asbTPAqA0{kkJ)|7;eb zU=yE^q%ggCX?H!c&>xyz3`;Bab8Sd%zu_EQb$-h&gnsHk-DwiYUqs?OReKZ{SCVQo z$^G%&QRoj2`u)IP+Sx79E(&)#J6xuCYgtvI=1-lkA-(*ZlB?~$O*C5hnq|PNol`jQ z-``9j6Vx_(G#GNbR?eQccwQz9CYY5kOp#M}z$Y8O!LiqGZC^Loyj;2WHflx@&gTr< z52wuKo%uOS`vn{8G%5KFzHN5W$aS8{zt-vHRI}Lg9s(Qk*r=A|pZ1P_WicCVpXlQb zog5w$Nfds#c>%*lUu}NO`j7BXYY+P?zqB25(_~n+%Xpf9&|@`zM?%p0)yp`<5UkVs znHFKqcai@1bJLXnU-_*5PmOf{#(zAg zUxrWBvfl8yh%2YxyUJ_CKz1deJaG9PBFe00u>K!6=dW~c#K3h`1p_1J%p`%ULF1OMetfxLntikx)2)>ukkymZun|1oUm@FT~3Fn?U4`N>7+oc54&U;4yN2H z5J!>+12&?+63>Ei2W|Jn0aGtlT$ZhAKV{r{BrK#b+I&r+Xk&yM5KQKeVDA@DM)@NE zTYnSZ2#S=PhG%G1;{qP!CZG;a9H?922dHzD*onc(Z17H!clBPmtFc|`7sX1w0 zMReG{?lhV5x67EDb$pDB|Mu@f zs|isLHqb4MD-gBsxw!@mIx_?CaNpdK$kXn!+ufD6_8g%hYu{FtXHnwhzx~?3(iu1_ zaM#tgG66=rR`>)lt<9&nHP)=sVLieH0uINQN1XnUEqU{)aT&FmwoZg_ezJ}qwN4;S zoEAyk<}MT5f2VPtU<&pW#6MIhRi;jQ zj@v*?-VTM5s%c(1%_X>BH2y43Ib@WRtrlW*%l-hBWGaI6?7G`JWuq~}(^W}-;ZepT zWxvt@KhX_Y^a#@tpoQHZnYT*{sV$rqvK~3@aer#CyFzM*1 z@nT7Dz^9$JDPnF{_h=QbCkay}`(aQ*T@ z4XP9jp%hs)i%Hh~(4R+ARYJBw01|b^+S+)C4RtTjjy`n;V|>^Yq&O57=%~wk;I#vf zr+BJc<>|?19ExbTttDqt;-Vl#=s%$YUjq2zTV1$6Nxd@S%gvU_;k3>a0=GCtmt||j zVZ*f|#5!`Y*oG4zn<^qaG;nl&yTp2qU969DwEd6}&5{*W_jIWszGf2J8}OCOr$VI4 zrKimIwe5ArnEK&CZ9wPpZeGA}=?gs9NHu?qS%XKk? zmlq7HEViQ`>wP3^L*yDOmR>IC6O$?t7%GUYj{Lx~kQk9iqh<55`d$osXPpo_ZOtXw zE9af3UZ1E)we)k(HF`X8UVYfcmhInT{iB`DCNx=+MVUKSrAijfTsV8~YG+$jCzUY>uX_8^gq&L*=&T`s>%cPp;iHNpiEY1et$FTQDS9PHP>o1r#^;(gN|t^sa-3$tzZ)^ zxRMnV`*rfIyr7>f;(R>*sO_E1MCn22YkiBMkRgw-ZH74%{_lXKDh(3ZRmX}czZDOi z*PIx>&C!mPHBrnhD^Pc-M2dsCfTv}W@xt@*Hf$YtKIzwc3e4(ry$`KaurjJ&a#tuQ+(}d z7mN2x0|I2Yl|JEBQ~h;}WYC}G3fr&V8^gUd(!{YVdB4Yt|G0iMaP7-I&S18jl@$oAnd{-K_7W$ddyX7@qczC6Qq6#i6pyvu)Z z9mU;;itj~v=3wA8JWd%oQ{&TO&)Qd5-*{ZPT0G2?5os`Sa~5^w_Ma1~3D(c;wQ4>* zEw-p6HpEA%U|8w-@e2RSJe@g07>L&XT`=>JzRIILabn>#$9mNlqwKmD1PjE;O^hhD zM{t(`wV5=2JS=>{Z2bk^4WPUJIj&mLlwu^+dlW;H%TKayKezI(DacVwEJFwnb@$ap z;CIFlgeW{Z(Kv@B=Nhv%9cK*^cu4`?ZAcjRctyxS4l`RP2_xDU?i_dG}ZspJyO>RUlSAPLvKFbR2| zkhbfdju|z^Azrs{)p<4!mSDp1eDHsbd^m5d3{slhZ;4R(sZOXWeb=h+1=SFleSp92 z^t??SZt+G0zV*VVvrj-sW%xFu00vNUs)P)Y6VgC8)MYq1n1epI*3ubpmA;y?4>y(m zrb{5k?tF*u-~Xd80jiD3N$^3g8njc-IkQkEUMnMyyKI%q`O50{_i1}ZOg@z&bsauT zNN6Cmp`fAY%X{I2CauD3v~m#d@24MYb4LvzBtTtNQqMjqvq(ffWaLAi``o&zm{5x6 z4XOXW2kV+Yw4+5##(cQ-=!#QKa?dAX;& zAVj0T(}f5#jT;DW>RTEG=`I=vV9^VLnS-jBcRLaIiioWfA7r%JYKSn7Vk{(4A^)b5 zaR+Hp9gUqBE|$homh?q_bi;T-@Dwr>{eV?AwcSs(MRCV-f~u-nqY3(2Z-N>>n&#b5 zFR!2mLL~oL^N=-^+NH>&MyM6lQLV$Bjz)&uwFWoFRr75jXobn61+@(9(V!QFRRkVd zO!dLj=5}{+?|g|*zF@WsA>a<1?7!Cz9)(9^TXd(sD6Wqa)1q<|Qqrb--~$<5Z&&Ad zw&g}P7NJGgszhw-qA{XGO4?&QEJtR!`#?FZgIt1oz191S*J-lx&yEoeTs}ig>BJH& z3kZ`_x>ed{QFgDB9idYlWqz=twTyc#0>n_RvlSsV8rv6g_%X8A$<-2{67@51+VmUe znd^Q&us}4xRnsqEB;WpNcb%#>Lv8nNJ05rq37t!nr zQ8P|P5B^g_YNAri*l>+~*6G4cWMRddEBjm_q4N-;)Za2~K_fm&ZPwh%Qm78CS_-5% z^v{vl&c#_?Pn6%l$`jm zq4cMW|6w%c|Aw3C|IhKC|1TwW2H-uYi=}(CzoU8OwrtXX#JK0&DgW!kA!vUE`1UpF z|1kUIe;nHTt>4nP@*gk^8UVw1H!AO~Bwcd)r!^!>&OTxQ9?8^JhKVn2P1)^()87bj ziD|gCG3(GFj61(5IO9P;95$1{d_ zx5e#7Rv`BXa0P}k0#6B1rb=MFRQVa#`;?eAy*SqRB1E{6 zbyHJUG;4>Vqbon}E}=7{NIr_$c0hDELf+aR|5s2uOt8Yl5bMXvyv5JIT!nqWiOjsK zRCtVilrEWX^8yN@lS2<1q?=hnRikv<1Br&T4|vDwlnGQq5ti_ z9juGwzSU-d2G!KX8wb%vuoZdco6_)!gBzDd)U5^-06#qP%g*aNdBRXtW_~3jmaba0R==G1DSRQ8|U@&@FBp~(nCRA&xy_0wM_2N9x1l}JUcv??E6+0T>V zHV8?)Vfc=-yYR4y5|=#wl%>x}FF)6)jbp?WdgqzxcOAph55gj0AqKT#4cuscj!3($ znEeSq*`}8N&<(obIdd{D^P*{29)?smh92NeN5(wc-jH@J$cl5t3h1g2<}(uvifIQw z`RUNZsnu6^q)QP4OFGFs1(j}1M>^-7{>~&d1`dN`OO?uii_pyZ*87e3Q?^#Ih%)E0 z{C?8)3{A>xd1j>17QoW^Hv@*j ziW}_ein?X`F@wTLt*9@Ft`C)GCeNeZ_^XRn?R0gmNVFo@%%?r46TU)@r1b>|NdMwC zbs;;8^}~CgIwqThi>Xycif2Lkz@&1tt1p_G8d`UjkLnBnPl#_LZY?(N{sZ8M#yb}# z;^9H#ovwYnkz(V*9QuVO1CMWp6-l1D21|Zz6ZQBeA&W@9`*rO8)b;-$9sq6;(ygOa zZ(1khhC!o4R<&88`N9Eds4s|WE+)&&q#FpX6cct9Lb5|hFZ^AW%tL*3b<;9Kocv3g zf=dHGz}i|)rg`k_onHQ`+#W-+jzW6uZrPnbP=)tC$3C z_iJIU6|jW|gNX(3K##B3vaac(g}|tKT4gcKt8FBuuKKE$?};611qbnc{0hxq`L9 zs}oH_Ip-U2QP=KpAv6`HBiO#m)h6Eg7z8#v>}9{ZFvj_{hL42MYdG>tEdYs+80qRF>S1!PIpM= zf~7A-LR(xlVKzsp#ls*apx<9NBgN_1H9YPMa>BhM-1 z1BXGYViOqYUa zyWbWbVz&@<#DJ)_jqFIob9sGKj`+{q9H-FhSHL4O)Xhl6%Iby#R*WBM*6naQZ9&_F z8p*50jvW9dO=qX2i4K_?`a0`7+R*PrvOBw3;US@S z3d_`n3u1zZ)`c;d);T?Eiq^J1tcYN?`lsoCx4@ljBuk?bRP%$)5UhCW!GndiAuE@( z#QvpegXaePvQgZT+a)^r-o;(spW>ADoRU#lV#OxOWt&lH7XX~a9|%!dvR@&hgDvM$ z774xh&3g0*kgrNuwyhX2uq^|_8Ok1ex3dirV~I64a8D>bpJzGVJvf6+ZT zVqpFFWRT66#dl}x;jvSr%+M~O6br{>+gM5~W%FNp0>bZ~JD+w;GxS9hAs%kNlA`N@ zZ3%+ikzhEqh zd(HDmc`X^Yb}vxwRo9%}w+2oyefly9&ZLWmtJYvlioj_W7}zNP1u`>WKwpRs|51P| zlSOWtu3znnV-hx<(iP{1S0vPn@lI? z^)!7#6!YJHx9Mnvli_fvU{)ySnQlgIbA~GkCg$_?yR6|?y8%3xKgU1%kGJsH==sa% zB7i`rS;&E1z+T%KkcjT!FEl2{31D9OAOHEKz(h62zkq;DVV}-VPgw&P=Yv0Bn)t3s zJ*snmp6WIuVS$sKoYoy%z2{#3V*{CGQM0riP`|cG^83Z%T?9$nd5QSncavEbJ>72< z=NKRV*4Z~BgQ~y=T<~+M|2&QVUq~nXpJ}L3f`D?(;9k}98>}c1qI3KYpEL8nK6EXj zbTH@d+5JDmV%#5tJ4#I0Bf{PE4f)h1_L%8u^~(kJ5h{q&avxX9ANT$kGPWLITqDBw z(orX6Bcs?TJoI$aerE;po&SPsaDrE~IZ;~qce3e)AvF?reoHWrpD&P$aSUI-w7p7I zuybv>;*BgO1^ewlp4jMd2UCm2!W0>$4sbwNr4hKSX44&0^-koehpeGOS?4TXM~;GY z3yrLo@*$j!e0zk%zi_7cdVabO-q+hPB+cS6>22Xhm~v-p>laHdd4`Gv0@V&-`(E$B z5qB@1GucEUy>{KB<(V`p;!K$pjz`+4Nw=ZMRf;Fsdf+iV&Q3VU`?BK_q_1W7I}YUx zgn?|BFvxG*pZqQ^3iWt|7bxZETwgUW1)xd*q6IZVhUr0wf!9fMIUC|cTqk3F>1=5? zZY9dymGa+rft|fyMs#Y5GjQ0XT6u2H!~+zXWy%iiPRUF!Gtd>L?-QaWW4{zV9dTX^ z2s*m33kkR@BAdfV@$6cVM|oo-a9RC_+VV4=tSw?+91L()rWMk;~oE~u+X=tbZDWs3-=i2T%_c^dONTgVDjJu~s)J|H*S#iS|R%nH+HMr+8_(pM2 zs8UdD`(5enMA5qf^?Td1)-DQ^gxMdv+TBONHy?J_E&Dt0oHLa?#+XqUsRqS-i0N|c z_#Rf>{OIjD4=+q`4bN`vV8vIViLk@|byTIGYA^Ub{@x2=F=)^2L;-alMyRzYSf#6r zUr8moaPLE?N%VB;#X>73F>t^0td>IYU9;kPNkNt@?VH*7unFwYJX{PsZ2Dq3w&m5q zmyrPmOye!b4anh&uBx9wNRnX60Q|WxO)nk06X-pFok*a48mVk9b)4`6qO>;i0L-%TSy6M*B8kw?=E5s0 zweC7?w2j?em2sKOL#>{N3%i|HcJwdym8^v}BS_>-mY?Y!cy<$iQa$l_qr_UOcQ-bH zfnaMB?`N@rV%o@KYG%wZ4$@)|Z31mKqn4_q9Z+T!(k0E8HH^!3eI0SLg7n<*NrNqb z(!v*kAB}<@+j_IC?S720d+?L+==gDU_XBQzKyQrUMT#R_%+iXgRfM9{`Fa=GpGm%V zx$pAKrEi9#EvjuGEnlm2AU|eAh3&)vS6Uuio+xPUI}8n(KX0}dLy@X47tQ|_=G%{` ztDwldN1p4Ka;H#DfXjJ-Q5-@nJ~)S|TItN*<)Wp}O`KUwoP(M*r5MkTo18wZhWO8p z&O@rMK;0xG{OC5`Rm{)Ngde_ru&tjFD00SG9)%!rwt=Yxo7nn3v}%_r^khfh3Xkfn z+!(@LX89$~kn4JAu^>6Y&!k9l*T$Dx>MML)gJ=495W1oNtMxU^stJZZss}&LD}t10 z(XWtv7=J*X)@>!-&!9uo1PRw_mTxw-KAn)Y8w`L(_X}`eaH&uzJe&FyLXWsiv!Nyi z?QX2fagD&o=n7e0gF6pB{^0|(Ms_8>r2$f${drI@JRv{IR^)vgzpXy=EH8j2@~#fC zwGYrYQOfNH>DaFOW34LoLh^}mB?NlRp!hNhebvZ*V{qj~LLb_6O4gLKQ#Z789l|?Y z%loLFgM2!W%qjUaJB}MKixGvkyQlx)1-i#4(r-8D$*YvRrukwxJ$~C;SG3F)I@dy% zDbWdd(L_~>)x?#=_TV8!vmGd_+mp|Wel_^Y>Af!M9}zP_=x~&734f>Cf<_T#ttk&i zo$J?dp@rwK!~r;X%Z5qT?aQVxfY<=cifSja!nhy<1k6+NtZv$Hu50|MA>o6Y`lbD_w$W=c{SK4(mF~^tf$G44$5__Hq_i#6v}!J4kc9g-kkvwZ@CMto|Ug- z0NF%>q&DCKmhPrBn|lAW0%DKWx55yvkny1RSaCtp!9tIYUUStrMbH4fTHl<5Y_3zkqw zy%TYV^=ju2^X{{1~kc5T{ zaqb23UCe5CVWeho5%}fe6>QN`XEt;;_jsFAbr%yX8RYmAmGW@5LjIA6^bfd*fw62OWDZ`lP9vWB9`odJM(rUyA}QID zq8^${J88a_qiqto#rIEBKVWJ@rNx@uOrO~76U>(MgOV=~?9I!_XNz%hNI3Uw(| z-pDVR*QH{q!?F3iKaHyA>|uwk`F!n&YMvML2GQej+Vk zC&cR=YR2N-hVig8^Is@c_P)sze@twwo>~9Oa+7;-A8Ix+Z0aLBUwC|Hol&UfqH7Ab zUm&@^@uEV+fXdy%KweuC(eq($SF2oZAc8+nT5DVzoxCCeDPM-yk=X3F58+fIJSLY; zY3Q%wH!eyoUOnrjmXGb(LHQO8YsF)%B}<*uy*;QOPlz>*h?RV*Wlxy$bG2yT-=dry z@#x1_N*Cq(>0Rzgo;m=#yIzkxUBZ@+#fMC!J1>60sIZ4n_ss9G#3Y^fWJGK;E`7wr z8g+f35XtJ~@R*b|@iB|jx@rsW{Q0GAzf9Sl{b5{PR<1=l#i6c>hma4i(z@ZX*N5U4 zM*ycK;+>4gFkX4aMU9XR7OGdb@)9$vUm+aQETyl#0jf~yGUsT;m zUxc3?6}A1$oQ309gV3Q6#(gyaaz)j&zeB9PxUZO+V4SW&(7%-&y*G4gbNadfgku)| z@qwyWvZHfNf0{Ygb{TQIVye*(K@|N{6$8NwL1c9mzMY}%8i;<;ZT~C z4%)TbTPW2Z(UK+h@84jvi{F?^efyLQjqSX~WxY7Om*@Gp^PAN9-;z(`CyVoJtfx^m z3}%h5pu2YU@5%rB3wuzD;>f}x|CPTp$ZA+qb&`}s|+sBQ&U zr(dr%99*Q$7ngl9dClxBD?XLN!JL6fWwqbwj3sJCT#yc3Bx&ny4n?51_1$vGpA%G^ zlAH_TQ$JvR8Xi7Al^M3yfcwosKX6LO+(yG55KnHih<|@7;2nfXVe4VZnIG!JO3cjA zkN{awwSw@6*aS$qJ>RY^U*$H|Nfe;Sdune>w4S@mieNf$;Omtl+$(*R8&GFx^v&_0I4-?+ZNqb?hjZK|*@ySuRQeg|ZCY*v$0K zQCy%xPDCt4nb}Ml|Nd<~u{|yC-7Edn- zR%cysXUNqOnAGY&ajX1sb6aGf0Z~8PRX1RaRs0o#q1xvzK*$yLY@g+yOKoI)NvKpT zU>bW<-?hCcfS029y1zlFXJWp$_rfE!na~9Mw>!dp%d5Ruyit<-^vNbF^QLQV^Di@l zi&o*aXM6G26*j$Cm*5@)E1J`{$Oz3X6#lUIPY#)+&C@%{t1zl-q%+qeQB3y`3++(l!x$p}dL&Xt&8d|#AfKkar_^xUX3H;hu zI###WF~Mmc@p*b%bbfSd>A4&s{&n;5a?j^$rGCY?XZ=`tBW?&DM~B3iTUt$9&^JG+ z)h=iqanb3s5t9*%#3YEF6x03u+;5S$C37yi zDGOU6!1VguO~-c}3Rt{i%2>^iP#Tw+5QlzWn8AaDsi)F?CU>7r?;lo0gScwS{iIKf z41G$Zp>j5MKTo*Rly4S29@?lXn24=2*)l(Mjqi1KSoLam93*GFz8VB`F=t2<%j{k*#|3*T*Q#vf^<6hv6CM!k#{x5+aT`VZi;MAPZ9Bqi&L| zXwdb*6Xq*=+SJrEs4=v_?z1?=Xe$CW_Br0O(IPZmF?3ma*u zZ2W3rh4CJ+P0iYgpn)s@i@djvYAgEM2BAhNR=ikfixqEi2~@D+#T{C_NFcaFOABq0 zP~0gF!8KTrA}L-ZSb_!*?#`sY_IZma__q5?0fD$`|N%8v!4?g zKN-1y&;3q3Wo*=7eEs0e&d8|)gyCNHgs2btfl$TDiXlPQk0x)*WCH+8OL!S`DRD;I z%eciF@y!T;D975+*eAOtpmBB*Z?S7b17niv2LdQVF?&IANq@8H3fOT+JI>;XyS~0- zv3|>|wC1HJs2X1hZITlhCQyj7zlZzkgD4t+5dmY)|UbJk?|d2-b24|Eh`X^vjr8ve#c=8ldxIJ8)C= z2zVL-u{~el9$hm~<7~2B^4%A&zpu}^_zC7swW=@Vy%CZz7>e_l!bhg}#H9M{sXt4? z4{8ev?{^$px!)m1!i0TvO0~LQ*j272L?=XlGU6L?JPUhTIR%K9(yf)@SHNz{e_!~Z zOaD4!La%@P)N=hrVt-Li1-p|cjVG35=kA#wJxhAi*?{+MDRNolu+y{J~LNIRlmq`9XATn>tV3ly`IrVt&F|6SFMTPpc_5 zmgz0L(6g4uMe(|srDLc1QT^klghfX&$#fb82hRIW!(SDI>lg3aJm4W|@UWhJ*S!5Fq_^+26=)nlDwtzdjw|jk)aa!84Is ztWWB6C#=4%b_|;5~h`+)UJN?mQF8Di5>l>$1>-989NF>RsLna2r^BTI@FKi^Y@D+D2&s1hij1Z?=Z1loMM-8&)W;U0SZi16A z(H#MXt zfCFF8)I`BwzY#h%!LI*Fv7THDMmaO2{pJh6vxf4hU(Lq!gZS#*p+ccL$n=v1)t>i@ zaQV6R@7mEN-47X8=e&%!Y@D*US%RhTRUe#)eGYZ#>UE{0_A#<{nc=H_D-Q%|l8DdN zASXtJ>j?(mhdVTR=EW-mZrXT`u3gb<;S<2UG7lGa>cMqHc+D?zELTvVeeTvV!fMbEmP;xut5zdO3{ zMqtKM4(4K)A5Y&-4^->W)*!2jEaxn1>vg_Uay_Y8#UJQ5MQSH)FK)W9eBA)o3pPnq zl0`B$Fi;=<*zsOZdKG~zj5ilW^wHkTcWg@+Q_xOD8o zvqVQ{`M%x89;zfrJxVnsdi|oi5BN)dh7ZQx1MnoDL=h+)iM33Qq7FgDo|ZNw_nt%5 zx-lQc8lRb@sp>N>r%2yrhMdRQ8tfW=QyN*m9TsCbzaF&!3@Trl5NLznSWlHqEhn4& z?$=-2(CTm%DBbb7M&r{_PfJ7*Mb*250VsVK+ba2@$BpmGdPnaAToI~IJ3sp{9Hj>bkOpO2u~> zl|r6q5vdx_aV2T>u~TxtfIh`FerZR*OS9+NBJF!k=N4)Q7Xp+zCWWZY9sP&;TWvAcxXeK!q9`WXM!+pYw+ zwEMNGZNhfGV*vRfRmir-Yp6z-4BeHR7_J1*C)BUb-l}Q>w_sUTMWWJGvhI`K$=b05 zzySj>@1n*gen7dH_ohpl$=%S82Prj;&yLGi$h(qN=GwtAQNqnmMcvtzIt$ddmn@gp zyFptII@~VPZXks)2;S0I%UaQ6++J2yzAO>IlTrrekcUS1sm8CctOK{eTZlKaf=`|i z70oVyTc~*@P1UCEBQbezR*0B(#o``obI*^VgE-OmFYbm~6)?B;iWDPrP+93HjaoTN zr=MDau5)D=jz_+Cyx4L_dK51}S-=HwM4Th2kK|X!)<;U)q*MGp@}!HHrQ0--zNy0F z+BT%$=;B*0}s&vdmZ>;YwwdB`nt{jk|v(i!)BJSuh?FiBH+pJ+Z(JoHU zNHE}W0iJsR!#dv*(XU~b1^B^aRJTZcpp(4BZ*68jbU#0fLJ(T0ExrsNQ}bAGNg9@I zzXH4a#E&R#KXT|c!P>uinO9|T-=Q=Jaj9RO|^KWzvCbAnB%y0?^r;=M57dP0tF|`^z?6XNNc9 zW`%Vpwc5Gjt~pY=r%FX8RO9WwesDO=H=%OKaif2mEa{VZM@t$#mN_Iqxj$Z{eZXjG z#e7`%%UBB>WD8T$ZfZD=lrF@1FCCY^FI9t-;D@dKRYLD6Uo0aoO{;4c*tTE16}CDE zkW_Kpu%{KQKc`8*2=5ecH=w!0uM`FoHr+M+B@8s_5_$dkd9SG&pNRJaytPD+ippd5 zzO9>2QwT>(&w^!=I7Y@;r*1oOyyXSi0;_--Iq#ezF+HE-acB z6KmmCba+JaJY#Ubj^E}&F`xRK=y=g^j~&%`@Aop1CzlEDD)}-h#cZA?w_%G-MMrn# zS!~{oD(9D@oVJy32d4SQ9eBiqN?7`)no(&h^44m+D03b39@0I|Ur-F=ZZt`%?-eTG z{$$s^hbt+lIh!G$6U~>kwkZ1Qv-QkZu1eR(s{QN%JWfMO;$9z&ah@%1rUJ)L&a1%R z^k7=9(X}12!Xh=m2Uw$8c2o4VsM5xK7$5k4D#;2xm?647%E57QYZLO$HM>R;dLA>o zwOhm5(?hye*=QXv(k@?Q?;m zY1|3o^3V~#ZUF7p#3h^64&Tpo?l*ZSxSxf)+F#x2eVsSE9DRnMf!3fU!cIaAy4mU!+%1 zz(GvIvG1F~)LOfAb0e#j)t-AU>QnA-2JJWB-kJBIE`YAW|3svVFXQI|#eA{bGX}+? z6M**yq->~WoNV=gd_=|8+OF5j^@S}nW3OQ{IdrllVF8nf53*u86v9`sm#CDuHJaO>*-!2DPc>}ZKh)nf zkpfgH)uLWGJxeI$zBEPL=mojz2}SaTTN}Bs+`!>ag0`@+F&=z9r#7?tw69m zb*#6+O>}wh?UBgba#_)(nC>&{B=e|kG%jSfgrxitHs8@o@wX3CuW-$0O5*1DwJ}qC zVb|zz*=C(|q1C1ihxJT~v8jy($5!Cv=k}?7t1ZsjD%W5?S9ifM8Lf;tjM$k@=&K_! zrzixnZ0xS9Y6(f$bQ22Y?88!v+TCn_l^+T^5zMy@jke?{>qdJgwF=!MUCL$%>*L-@ zIBPni3)}jDrE%{;U-)^loI!|0QvjT6@Wdzr@pMDTaLW$v&FyG3g8-8k;r-cyynBBeK0aQ8694?Y@7;)@=CI zM0n}6hSXd`_Qunq1$X3O0Gw{9WtOmFneo`)wqY&;9WK4SUEWuA=5{G>mO1d-g??VD zIBsanmlxWAl1P}bQMDdNiM22W7LfgkEhT9AXE9A5`o^FTY~Rfm@=Pj-QyC&)0+aLk zO~S_*l({s*qFS>Ab}=mFVISbKyu^B%HczJ(hSGrBc|U!lUKe#_cVaDNIhToZyOE{$w{m7bJIVE`7PT zT-47HAcBi5^N|cZhnSjn%PT~jhzT;~Wj#S|gd@5da9mgR&i7nY2lsriw*4nN&=dGA zsfo~mrc~AzL16n@8NFAk9u-eJTClH_fL||-T+{(fxfT!|LCe-Z&|*X%>62<;*Eg_$ zQTu7t9E$^K*-q zD3L62eejB)MJ>2XfqZ2r()u)h)VwujTVmxRQI}Xa;$6|_e}B=}tGFlGE|_`+omZM` zSOQO@QT>&)G_Ak}T|pdyQf>CDt7w;O=qN31j4 z41;P~QrlqbHT(94ru=oc1Np7hdad;zG31<$1L(}DKZ`fkxGDKOvE&iZlEibPOnEnd zA~8z*detee;wzy9_g14DLbJ2sUXqkSUaHI5P?&jg*eYz_4I>%)4REq)<*2TR>z7HDTPn@1ewfO7T(GRxIPIoMWMYK z0f3=d(XOt=h|>`BiqwS*;D;{~qC7SRh^|R7pXB!BCfBk74N6pn2yMVhI7UAaefv+; z24^!pCfSCiaNNlZ@(JJ4hyH4Iy4LTgQsDp8(u=ZNIW?8gL4H)w-7LUh3m7A2AcF*( z$GN`O-u(97sZ71zCsMJ#vB8{mqqD0NQ2e z&+g42f}3`#5@Ocv@@uF4;+vATCt9ZDUP25D={ym{7XSpkJRFzS{_Wr)F@itSQRan4 zGt;0VG%T}NPw>3ZRdZmX`6)MrdRj*(GGl@r;+D+l`8{VE{WlbTc)%@#9kJkYky(v( z1qLU)^f_AXXcU$*)#Aj$V1?`hLW&5G|GTJJYLp?t#8k+Xc#imaDMc0YluQKEbnxEU zU>hd=Hbe_`XSJK1IP%lryn@sg?!Fhs>G{cZhlBVbQ20@x6M3e#XdzDbzKuaTdkw#n zh6R%?C`b($GGSmD=Pf@?msjCTkB^2^z0m5iSXv%+A zs%0KL#QS`{W)3{~5#fJmSEAg|KHq+#0V&$zDh%)=DY;H>GxXkvR}l$f)dCAygAw?C zPyQDr5&kD-B~rDW;#d3^kC_8M2~gy3&kj0yKk$81N9lXW|6_39HD$f4`DhKVWk)RN zCN5>70H16i*lM!!w8$_pb;_Q}xMZg@5U)O40l89Q1c;B+%zkxbXCReR+1HNI9rcYS zkY$Il;IWxtP=_Gu9PH{kujtb?zq9nnJm^d-#KGx>-;RB3yDB`l*4q!Yh#d$u1v#%J z%jiz&r8WPc_Dq4@bjxaD?^W?bdNKY!zfc6^+XAA5ASJhB;bNigl6p-g-p$HUKaq_Vg4$Ou3ExK73_ z`#@&8lm;XiVFbSND1InMLU2>Cx>W11(<7)Ear%z=bvWL&E)4*lMYJUJE;G82YbS%%Bq)Xf#L4LOES4|sL4&v z!%Ux^UY>DBm29KJhEi{pIq-Uj%Py%xeQhp!xJMZll&FV&S+@Lg z+_nH6Sd_m}hnUp4cU{;~TAqm5ymfLY+;Vc{6^I_wGR#jTo0%@vvbcAjBZYet8hBC^ z@WWh9qrpXL3;i->Yhv+KPa65|6^i7y(xw+f^H?E;8}2w~R{t8PeJTq?`2K&(HDY znT@`k)%kwgi_%Rn7dQlCNZQ&29lPpXqzZ~J&Ep_vn#vaLv)>cRUt7!?Z->`;w8E>u>>5c1${s4g^mOCm4{J$dT8lCd8GYj<{ zNE4sok1^nwqY0FRjc|7V4v%6=Xd=40Q z=&C0oqWno<_8nMT)Bfd_m&s*$8~^~h`6r!fd{}w|=8~Thg`m+5VNv6BNr`V(=U=8= zyb#pX`2Ga_Z9&CCuA0`4zui=%FvHaE&Avm~Ufpg(It7WMaFv0&0In#6;6Y0S?OV2{ zshu=N9}-`{vB@s_TiTgdjBmNC=_=z=+daM$m!7Y^GWdqOJUBZQ`dXW<)JN}w5wt~D zN5iY$-Ob;a{LZfNdv{R}{~ z9D#IcbG zRhulSP{D8W+PcNiovf`lCkw&py9@C8o9AV}dTMC?83gr2xaNp~cSALKQM-op<&>?qn5ktO<_|<5I&@UhlOoAw z|Dg@i1<-;4!>bkpEtylnl5Ui7!v-^oPDz64M%rKitfiI;TI^EpdB7>+vNP_L+BDKz zkB7Xlwn@nZ!2~2T1jNmK^xDX6z%TZe|;k#gF`4rr)l-JT$rV8r#$L=HIQu z)bDr%eWqH2U(P&MFKmIe$OP9}%n1TGT8JwE0eu*?TTkH8*=G22&;NX(tQqlMeLGR4 z+8viZjEIQqdruWLkNeO08ym#k#~G*Z8T$T4{-|7MHj=V4JZ zWy>Jhx*`S24yA?Me4Qk#<6;QsTFDr@Ip~X?TS>~}c0~8hl6e`w_raAwTAX1-BnCYI zLS!Fd_KwzNzso~T?m;BS8DP{ud}2I^53f*2(` z={(r(@zhrh0S0^TY4G_$sW02zdCtQ|Z4V^AGqS?7?EAz1!Tz#KD z77LaXq#PAadehQipz{?6BV^Xjn<>fwV!(FlX@b3#jK_7H0LcW@`eMDds}4c%udCk| zb*M)W3sSLGN!&_kGg`#`%5(Uubcd6SE zaxQl&zn7#Q*46CyABxp4f*do4mDs&dPzH%dj#34ErX2)1@G&zY-FYL2TSWgXX{1GZ>cT~f4?i~9WP5m`F~!Ehp8Cg> zWM|OgscFBO*?G%NzvYnk$BmB93ocAOT#oaBpxE@e7uuw0K4X}TF=;SU4fyCh}o{NNBS>sTuqI=rh3-uC;5UINcsoF zBwk=D)d!9aD9RiL$r274vyRQNQ?p-k%jz7h zIBId&ez||vj8}1-V%jEFx9}bkW)}FQHNX_pNtQoBD%BE5QXk?Fc`ra@qv`WLfMYt7 zHj>x)Hp+3s!saH`g6jb{-bFsn+RLo-9&wABtcq^ROGYh%^*Gyk9}7o35*q6ssFp8u zhsM~YhB9k^-lo1tA>j`g!+6N+rxH0+r5mWP(a7lWk1>3QCUZ%i^B+%xnkE&bK+VBb zhKW}~3~(F&2W#G(wM+JdT8bdeY0%AoW0y6f2#PeiTh(dJ9hv}Cvw8!H%mZ;ksPqbq zkx-}A!yLD#HO}yFD+A6Kzk(y*S;^@+|K#u=!wd{YqVAT{q!*$%U&OxB(e+(Go{rR( zzO1}1LrC$Z+5}A31@Ffmr5UbRq>=u<{ZDZV^h%iO1z%(yoDan6z5WcUc&>(=+|ZHJ ze&pxrq5nH~RHF2;>`MjLMt82GAF5H8Smd|QnU8SFH8Q*`(5LJGAbE2hb2w^Uv93Z| zPWp|}01L+s_>!%=5;9Cnt%IjNkH5y|VGl`X1hVU|>lrwE;*kXSTOSele;{@Qqm4u3 z=9%Ls!by_@#Dd2O^m_&F& zi89X7O*{M;R)Y1Ix-51?)>s&TU2ke1&MU)!OFDrONHRBka~HGVo$|}+uO9xE7&euy zl(E?XJFXpNv4&L3tz1khGnq3ks{hYC_+gr+c#o$(c_zBJU=Jwj8%ndKdUWHr>u_@! zb8}fslH=?V;^ykTo(VrQL80u7!nHIaKA87M&kSs26$l}kO=eeXya}~WH?yyLr(Q+Z zSTbfvzEXWuj_AB0bbcMK>K>?JJviba_+nqU;nbc-{k^E?dh%N%vQy;7dsLdOK5uQ7 zv6ts6^u4M^NsCFzVSrLq_w;c>5_CX0!%P{mW*yY{&)ni4MjFu#Cx^z)i)U8{9_ixM zJCk_}q|4PX&7}3+v%6d|br-t&Vck-_Z98-B9e>xF9y_l4b z6+=4tx$!*9T`Jr`2xoVvs}gAW2s~I@O+F6Z#QOuc4Du1(f5S~g<`Px=oZ=_N3!23j z1iG?-3w!i;YMDfxZKqoSb1!=zdd^G)uCM_(MBUR5#pbDC7x#q%LIU1+kwkuQ0!)NF zsmp#*;U79sAMAOQFxNNZ75zG>@m2-_o*#vdqA^_3*Yuv_%VhRCMb@B7F!c4N8|xmZ zhU-^VPf!0*gG@xmcLKP?X`tTbo%k;Ze^s?BX`jZ-P$s|J^VpK7qoe+?74|)*-MVej zO>|qBt8=Z{)q{2joMDcyZ3Q1M0~guoIq5nqSh6g=-Rs<1w_--zSat83LblIua1^OF z>nOJ$_h6&9BRYjC)`tj$cNv{zm4G*2c&BGuJgcy(ll?y(W5C`P#%gO$FYZ9 zTBWm%j%qp!@sjuItg_qu;Cv729;f6b%#h>}>Oa8wHH~pWqQ}n+O5c_{aLRvh$Ale;NKnMaKueI^S z@p(H24{y%oqBdh5jEA?w7l0b9#bwNK7x9?YvP^MS2(NX7b)C)YPvxrW|F9jQ~mFxCTuEIodpx~91%X-TZW zlXa5|U@L6j6Hlm1(sK-&c+EK59va=tBB^!KMFxI={rX=iEzY1u=)ilKZdvp*J+Zpkp)7@PM z*=1I}tsR}F2zTbrHnVs8J@2V1tP@vQmb4Rx=)c|sA^TN0&A5Fo>x`wfVPnTHtW4q0 z1gXEG_PoZGK6`ay9=@YcP5p8wy7N%X>J~H%cTyU z<-eA9#gJ1lL*vQQyhY-Px_b9!$(W@N_!1|YSBFLJMv4)tOS-aYxG?Lw*#3j=T#~)s z>F{Vnde%>4NwS2of!QlAJb|z5YO*)G&2iNt;5^p>X*0So39CJo6=mN!d5auCo7d&k zTbAmnZw33l+uEa*4|k?^Utquy%t4z_Isk#m^` zuZ*J}c!ev|>EiD<(D%to!H1xi`~4!LJ&-1knx50%LOIgRqFOJ;9F@Pbrx=jW%UAHk zd)g-0O1Mos=%rnFlYThL71QHS#Dm_dSvrcxTFu0|bz>Y9w4{909LoOp&+6R*JRH1v zS3XUDGg$P!O82@m>|GK6mfD*LVwQD!O^4|cjUBPZ^oiTN6=z?gxLK9{cFF_L3nlTa z44r@*i;lA?4dv2=*%wXgG->N)NI6MidcM?AX=n-LF z-ZDBJ=KGU*8phS?&}<{lm*wb*7zsnH`0)?cr;M^#| z_!^sScewRpn(Q9>V*iv!{>OY(`n{f@I&q)u8a)|(5TSVa?5_LEl;XH8a}6JMt8K>n z$92}@5&J)$(LjPBEPq8t$6Za=wlYDC{CWV2llRi+e~iygt;M*C?A1^3raXgiJB?X6 zPC(bg%qxr9^8y7#-l)low4IRIBR?Q=mSm|gOx#RQY8=Spr5j-|n+71mF za)h{!yVcGTxO|rVXD@tJmxr*?VI?f)pPiAaaoEma{SpQ>uT+uDfrkECgge&tK_1Qp zo1}qiG=DLEr15X!no3*lH7vTcm~)uZyx&5n*DBf(0*7?H^J}?m$RU);Tw#d_!pn%8 z00Pc`Q*403z=zv$M8e>kZ}OeE^3!6T{flzqhU2XbQj2Z^{*AtMXUPSyTAB(!$+8dH zGDE|t%^vhW=0{!ci`r71yI7$>W(KF=kz3-D79%IBF(tpJg$etEm-9tz9Y*tw$fZVf z3l&Cq5IR_e&#btZWD{Bn`Y7rIpnd? z+wDK(D#<9}S`lFLLtxxiP-kAb1}Yn{mU}_}rnpz{DV9$>W|KR+Ttq~tBy{FYv=yLU z3&VXV(1$b!%D~3kXt(^FYt(1ao~>8M!;cdBtAL4RpBrvrkW8p zo2e~&si6k?+xbs#3SR_>ROt=qo9qLbxi-Bw@h09b|vEu&GvxDq>(Lm4u zMOh!GiN4oEt>iM zr%b1zQEzh1H|<~N3)Q#+KK4dF7R?5qFU3U5GgwWPfMT=}v8(KOi>t+Zi(LCKt6bm( zXhQBmYubC0OYg{ZTJ{%8|MBho#QdeTk-~$u0qIiaBdvRqT9!4|*bOKYYxgTVX;pkk)^?zc5gOYyUbxk>j6`{cSr&dvcWfB!^xE`anITh*if(;SC^?!ejR7rYCOzpW`Qn>c_* zoD^=(wLH?`$AuAixZV0g3Lq)opR~jOKQ2TQ;V5T_{!jh;oj>%Cv@M%9Mu1}!81FU1 z|MJ4U|6`ou0L|fSE}Q}PZU9_xHDj)$$@#bp0fDP8g7T*s%YVL)xkKTi&-FW=S#a;g zBpWE~{BSTaC(B`bestSQ_QV4BnVX}Qhb^9&PMu!s2wSx<$pp<>w}V0^7iO}fw1Hbi zjNAB9W{*BS9}M+MEjM|EQgPxeyy17Za{9n^>p6TSzS}D`vO5Jpd38Sn3-$z!oc`zq z4xY~jNC&Na-&`&!@mljj>m4@J7@R2k)gt`Im(@hO(MB#a!%Sp5RbMf11LP7l3}MZy;7XnpvR*zm#(X7`g#j*lIu ztPrEP??Z*{^P4=#l5l_(+}$~_%=+XN zw^U?BoO96NVV%>SMhcoxb;XPEg8UW)tEoOyb|6MQ@tNGR9HHQg)+;pPQFp5_(;B>m zM@r#?j`GX9)`VzLi;oif{&^RFWY6LS>6c7s*n+f0Q*v>(fBFjS)Gg3WKd=NOCrKmc ze<=7RKw5NujQPZjP^xsl<0)CNw(99+4QInPm8l}{xq*%!cB#2X*K)W}u+$}9zU*c} zSj9Q1)WP_bA(hE_NwK(PH|A_!mkMK2GN7MiOy9l+u)M;PJ#~Ye54ZC;zCY}@jcDZ2 zjnm%x(zkTtRz)^ms#4TJ0Bs9Yo&(#x$+a@CA5sOefm>#@bTMjYp5SGK4tsSsJ^nJp zwRk#82GYCveK=cK#Zb=M<&~D5al_mLLqZMd8BFDn>R}$d%R`*SXA+|nDDn{%7J+z~ zbqgSRu4u#b6tH5K<;*2*u)=l?MhMD6>{EN~CEfIlEdXA|1}B~w@flq|;`4wdhkoUk zn`HQ$`@4XADO+lfx8NdnSqKsD0Ph;k0zdhH=+ASmA+?3?Lo2s7$3u0l;hhUze3prAk~vh>#`S^1 zDtOwnqI_g8QC`n94r`zs2iB;JUs0U}?QNBsSAEeCHf@-EF|T)sXM7ceFmW`oD*e=7 zCMwF>i?J)4$vY>=TWWneemc=h5Z$h)$gp^v7hlU4^TW@)@R!caVAo=;t`ectmiaM+ z^E6_4aHzyn}%-U1V1bCqhJl>L;|;o`=`0xpjPx}LbzFFf5z*mqp_!&Yq5 zj`1NKFz)WAM;E5p&Hz)b?3UiiE8H0IEp-uh;%z8^=sncxL+qV#%=(W_4Q9hvO@piH-|uTB9|I*v)0YVOEhx_ zkD^1X`@U{#HRA9}r)$ivrDUf!aZa8Vw-Bn$nphhRIOwT;(3*V{<{pi%cG;fcS59&$ zZsoa4-@3r>ld6oy0HM8XLpaI^9E|hP{Q5JFfoF|rS#ds9Q@@j&@X{C>>>nG2DrH8C zO`4bF=xPMg>W(}}BJ}VJHCcR{A?xaj+p-NwP;<&8b!q$TpmpE)*TFBb=4J*IV2A4f#e@)I-qD(2K}0yBE*9f4?5n9Ch8@5LC?R;u;N z3UBnslLH5&hA1!(KU;*kQ+>vo<(|zq+us}*J{lWrMtq%Fyj5@=HAT;x`^|Lntmaq6P9lV~O$xT~ z3DG9~l^r4oSRr!X+2mRP`%B%Uy*OgP`|`*;)m}do2-^D?$LA6_68QRv!YdUvp!-{s z3j>sAW4f67daG3_s~dwWK9JB5L;*y9JwD$Q#k=3God1#RiDO+A;s%7Mwv5nD^UCQA zg5zPieZM*uup=gg&;i^D{_lQO?D~r(3^b@<(5Vb&8~!K0W}TI#&>KUo3eKZAW}V^# zUYJr3Z{n*U9P7r^9lG5*9%DI=YjS+u|GfWz0gle-UA4zY^r4tmnEg2X5$A)SHanjX z5o3du2spH4n5cD64EcRVhhkv5f9BRg4wBpDvkC554j^Au;7B|&_NvARkZ<&IBZLk} zDt(hb4RnO4*Sjsu8TkFa6YHKwP$*E1-gWrS%2ve|v9{yYS+En6bhvB`f)L_5)}$3L zJlV260MT;s2xS%Y#FM_+jmZJWZRz0Pfa0DH!(-CH93ie1rQ*xrhWm}woIuheMImp- zV=>Q~$Me9l!8V;5iZ3X*S|E=5BpRW(kNNbBPm|}y`IyAJ z&nt1(KEGI=4}Ohn;iztSl1!N^VGIm${gf@reEM(bQ*hKPt^^x3O&6e2R3zSjSE^7u z5GJ+dA^YAgsmGMxn2yg)QyGF+{)dfb0&`IQ+GLe#`FxcZDgsn1sM1Mb>A890-sHyR zkV~^K_Ra=RiptV6E7HH+5fY<~nplrE)L3MgX(TSoth+?u-&Mp>!>odRWDvQOuXgIr zau92F#?elGMxgTwZE`=*>0x zejWQ0m*vuisi!{2=JsF{iJO}xEjsqOEo+duVZ1*yLkd99(-CW)?oay2lC`E*Rv8YP0?oz0=g>tpG6hU> z4QEaF0%}E*$mXyXQhbeL*kqG6nML++tP9T9Y}b zv-<2}qu2wk9MGcBaBba(rX6D9iQ|GJWa3FY!L{}eE}!xb_-Tn^!`*Pv5S1BQ#3q>_ zj!Ea+P=9a|2w__b^6tZ^tWG^`wC39G9BynvPv-k{_f%-4Igj+aPyE~$vVjv|sX|g) zMKTt_kJGB>HjdwoM2SD3_Uts)uZe%#%ndf69eZG7l$;y<&HP9XNJ`PE_m!U4T+dZR z3M5=%)i$>MIH%C2CPj5W5}`ha50>Fm3S5cgVu9dr{_%9UN^HK%;FM@DG&AdkK}k z2J=?>@U@a25qdGQek+T1mOdbd?28(29I+P@0%*IsOZCK!^pHP=;VTuL=K8O;jh;@w z1)*a_r|}a{??d*F@9`zCH|TgVgnzA(FTV6|Nv(LgDHt*AmKn&$ki9##`rdBJ7t{UY zW21~Bc{Gc2;*SaeN(v`IEJ9k7RI~_PC;3VL_LIxZBr@?vuat6xL`+$Ca;~G5!`LtN zmv1~v_lLSWE*8d(@qyAE7`15Cali36m+h4ciKR>0Rt|D#&c2-nqIpSV5R{;Xh&73t~k!$nh_KK-|+Eiq?OA{%fx8>x|{b>*9Ab0M@^*{}(QD z52ed&^u=Tl-i`l+d-r9u6;E5Lb)nC4RE$60{dY}Q@hFhTDeg8=0{-j29fXs_8DEDg zx>)rlDv8PdCs)xiq50LYcF!q=F%9e-^(QjD`K6*TdSP%JoP6EdH81>6wEu@gp#Mu` zDEUYf)huxflVcF`AF**53bi878R|+O-=;I0nPP<} z6=H!P=kvK9d4|^cN1;|L9t$M-s(YatdD6OPgy)YhlUD-&NzJJ1Bwl#kGK7(6p^3?G zC@EeZK^?Xpx~C7dv~l_#`i-p)_B_Yq#N}fClQl=CAiFqcR=@@m47qkLuD?BY{0 z&%zSC*Z;c*&F$Z%HJQiWsRBYPZ@lYMf0>4qixx4P34gc!c31H!EoiGl5aLA!<2|NrjcFpIkalrCXmo zI*-B;$V{sO=&;wdp2#es=-X$4eCS!E?>W9(<|X`cyQHmH@C~V7yi= z=;9frc>P$2Eg%U@YZQ@zbK_{wXS$a1RK{bUW$f%FI?)Q-V`Rc6WPl^rYd0;S2_XCnTlkJN zGHsVviok-QG-G^|{<&pC1bIJ8NvvK~S@Mg#r4N}llj0iUJ(wFLY z8?#@mISRvf#F=;b%##;(kS=HB^5&VgASYFcP0RkBO7(~boP0Jk9v?FB|4!*whlX&q z;bI%qA2J7F78{|a=@;U4)cKMo&TStJda@XZTUv`rL%#_5L5@B`i=6|cuqXX2*p7FcB68^7Q-J#=DGp1ha z!C{gnYm{pBrhe34*FYzK$|=d=Q`avm_9^s{S5tEJ3K*1+n*J8)Ykou&i%ZvI@D-pnN*Z>ae_&2dQnCN_NfBMd=zxplpohg+Flb( zX1Trw9CWfGW;F*M)cIXHU1yl)vG?o$+k#dPvNrb^skJEl2jFQeMV+~8opD&39m686=n#5|qrGdn`!UC5gwHY(B2 z1cAvqi~9ppw>NMU6SN$s@M?9!z3H>ubg#GYRm|Bm=iaWn=k)H+T%{@-bJ}~Jyg7?p zdYHk-UeBm3;N;Ys$`=3pLsolp=37@VLlW_$mDi)%EA#8_G$jZ8W$Z6jt7SL7RC6S5 zzb@aJ;zbv<3#*LJSD$`#YmvsQRkyxbRLdn6?m1oX+Av$wX#%Y5Td{o$@EW1D#hb1@ zHL~B}9qy@PRvLR-eR;)Q)!W-|$C(|ot{hVRcX777!~QEFb9cPH zIHxZaxD!^BWzMrzYEpjw>@4q@AlWG8tCerz*idvf|M z3{M2Vb2$XOrY!3I@@MQB&HvWVPRKZD^Y@yOC+7C$~;#p6QskD*9nqX06%n3iXWycn1eH{Ds)?)C(14Y}5TUo&TqLg?p2%Zh2!b|+@Ko#*_{QQmO*>bBB=eOteNf3jr@ zm)vsm#1(H|#FkxOZP&XgP)Dy6;xCnTamN2#K3Qz-`k%$ydO`JDZ1Jwxx%;$Dzy5v} zenHR4b)991vB{Z@l54A9>K%UCartmr@j1R*TBWAvfTN^&V&9+UDR94p)^fmQ;{Em$ zZTzlJ77M>D-F$mynQYjEXHp@r!#3>mS$aV-Va2PcZvL;ILw4sL-~B7pvGjB5kCc}= zf7hxB&e+ejzFyDx?3Q1zb{}^&|9kG)(mDM5|2TKs9exkoJ_cz7+%^a9`n?qN*!$=BtzR1E>1>KR=T@dy@0MP&u0Afe`{Ohz$$iaI(XVfQ zQhw}n<*|I-PxFP$fCyp z)2G3yVK#Bv)rS4Xyj^!q-=Dt2)4XTb!{|bNo%6=I6TeqHFLr*F8uW3^bN841J;s(V z3$-@2G6Zu@f+l3Y)z`mUtbb=RL+e)gy}dlAzKAE8a7X_VU0nKYW@~CoV1M+T%SkVj zwcYhCE=R4@$~r6bUbXDj_hXN4IBBQb=IzS)bScihLJU$$RNi{rBk1$%d=8J%n+?71 zpKUA9i#goA`qKWZ>mJ7Zef|1r)$VK0=B(A(A=4bO-db=@rDgm5_zKH9TGlHQ!K{Nnd|McHXz@3d~&<$ho1>-@DZFC|XR+WDi(ST8i>o@8X<{Uz3B ze1%baR&AZ;qnH2PLWC{8sVD+l3pyMcT#q_dMLLY!})e%TX@@35lPwU(bDA`dT^M zu1fa6W2o=euLwUYQ=h`Rx@L8!@Pk^o==Qr3g+k9~y~u8{=Y`nyr>$yrdpqB~BtJgX+?e_8 z!lU1Q+nm4I!B!^&b(!Z^z1ux@77th+ltUHY|7fvn$3gW*NHPZQB6<7ewm)wH8(c%0 zYvIeTHaXKD29QiSxQ=N=o$Vp2t3&65B!`jB=e8H46A?;Xwm z4P2MQ!0`Uj_P;#9#d;$dDER(k{8<=x+^y6k0vHaeC9V-ADTyViR>?)FK#IZ0z|d0H z&`8(VFvP&X%D}|Rz(^a!Fj(du{SQS$ZhlH;S|x4`*QFjifkN8T)z4*}Q$iB}U>FjN diff --git a/paper/integerstorage.png b/paper/integerstorage.png index 47333cacb5a0df7177b6300e90dfc06859bb7b55..43c9c5a45408f47b1f43f45769bf9ec104cf3d69 100644 GIT binary patch literal 23460 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 literal 29689 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 diff --git a/paper/maxassigned-derivation.png b/paper/maxassigned-derivation.png index 34f283e876cb2769e18c37d6c1f72265123d101d..3d25f3ce91771cbe697c27e2330560873aef64cf 100644 GIT binary patch literal 16790 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 literal 21503 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 MGsGB_qOV2#6WNDVnE(I) diff --git a/paper/maxassigned.png b/paper/maxassigned.png index 02efb11be03c82aad3b62f8cdebcfa99bcd44e1a..8ce409706c65ffd428e6d8eb94bdefbb55d8d9b3 100644 GIT binary patch literal 15250 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 Q{EtaRS+GpKlzG_y0{hlgfdBvi literal 20423 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 C0aWe) diff --git a/paper/mvcc.png b/paper/mvcc.png index 9313c3d3a0f18eb128aab9554142211e1ddc8916..4fb241480e8ad561a6fc6b6fa95030b9ee5d2509 100644 GIT binary patch literal 28549 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 PfBk|oO44PLCU5=^buEus literal 35526 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 We_w&F)R6+HfCrU_$(6{Mz5ibtbx~6Q diff --git a/paper/posting.png b/paper/posting.png index 3523d306d6f41068264549eabb941e10d2a79b1b..5ea4e7e67b79c1847590e58bf38c2a37f90bfaea 100644 GIT binary patch literal 49960 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 literal 65722 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%0A+Hqb2r)Nc+}Yq&&may+DvX`G!1k;%6&nTIhC# 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 diff --git a/posting/size_test.sh b/posting/size_test.sh index d02db47329c..66a655093d4 100755 --- a/posting/size_test.sh +++ b/posting/size_test.sh @@ -2,10 +2,16 @@ TEST_FAIL=0 # get the p directory GCS_URL=https://storage.googleapis.com/dgraph-datasets/21million_test_p/p.tar.gz -wget --quiet $GCS_URL || { echo "ERROR: Download from '$GCS_URL' failed." >&2; exit 2; } +wget --quiet "${GCS_URL}" || { + echo "ERROR: Download from '${GCS_URL}' failed." >&2 + exit 2 +} #untar it -[[ -f p.tar.gz ]] || { echo "ERROR: File 'p.tar.gz' does not exist. Exiting" >&2; exit 2; } +[[ -f p.tar.gz ]] || { + echo "ERROR: File 'p.tar.gz' does not exist. Exiting" >&2 + exit 2 +} tar -xf p.tar.gz # get the profiling and size @@ -23,8 +29,8 @@ rm -rf p rm -f p.tar.gz # report to calling script that test passed or failed -if [[ $TEST_FAIL -ne 0 ]]; then - exit 1 +if [[ ${TEST_FAIL} -ne 0 ]]; then + exit 1 else - exit 0 + exit 0 fi diff --git a/protos/depcheck.sh b/protos/depcheck.sh index 7858b4a600e..c16fc30953c 100755 --- a/protos/depcheck.sh +++ b/protos/depcheck.sh @@ -19,9 +19,12 @@ set -e readonly PROTOCMINVER="3.6.1" -which protoc &>/dev/null || (echo "Error: protoc not found" >&2; exit 1) +which protoc &>/dev/null || ( + echo "Error: protoc not found" >&2 + exit 1 +) -PROTOCVER=`protoc --version | awk '{printf $2}'` +PROTOCVER=$(protoc --version | awk '{printf $2}') # CompareSemVer compares the minimum version minver against another version curver. # If the version is below our min it will exit with non-zero to trigger error in make. @@ -32,11 +35,11 @@ function CompareSemVer() { echo -n "Checking protoc for semantic version $1 or newer... " for i in 0 1 2; do - if [ ${minver[$i]} -gt ${curver[$i]} ]; then + if [[ ${minver[${i}]} -gt ${curver[${i}]} ]]; then echo "FAIL" >&2 echo "Error: version $2 is lower than the required version $1" >&2 exit 1 - elif [ ${curver[$i]} -gt ${minver[$i]} ]; then + elif [[ ${curver[${i}]} -gt ${minver[${i}]} ]]; then break fi done @@ -44,18 +47,18 @@ function CompareSemVer() { function CheckProtobufIncludes() { echo -n "Checking for directory /usr/include/google/protobuf or /usr/local/include/google/protobuf... " - if !([ -d /usr/include/google/protobuf ] || [ -d /usr/local/include/google/protobuf ]) ; then + if !([[ -d /usr/include/google/protobuf ]] || [[ -d /usr/local/include/google/protobuf ]]); then echo "FAIL" >&2 echo "Missing protobuf headers in /usr/include/google/protobuf or /usr/local/include/google/protobuf:" \ - "directory not found." >&2 + "directory not found." >&2 echo "Download and install protoc and the protobuf headers by installing protoc via a package manager" \ - "or downloading it from the protobuf releases page:" >&2 + "or downloading it from the protobuf releases page:" >&2 echo "https://github.com/protocolbuffers/protobuf/releases/" >&2 exit 1 fi } -CompareSemVer $PROTOCMINVER $PROTOCVER +CompareSemVer "${PROTOCMINVER}" "${PROTOCVER}" echo "OK" CheckProtobufIncludes diff --git a/protos/patch_pb.sh b/protos/patch_pb.sh index 73b3163a6a9..21a5431f78a 100755 --- a/protos/patch_pb.sh +++ b/protos/patch_pb.sh @@ -1,18 +1,18 @@ -# !/bin/bash +#!/bin/bash # This script modifies the pb.pb.go file to replace certain fields and methods -# to use the custom data type `Sensitive`. -# -# We are doing this because google.golang.org/protobuf does not support custom data types, +# to use the custom data type `Sensitive`. +# +# We are doing this because google.golang.org/protobuf does not support custom data types, # and we have sensitive data that we do not want to expose in logs. # To address this, we defined a `Sensitive` data type to handle such cases. -# +# # This patch script applies the necessary changes to pb.pb.go. PB_GEN_FILE="./pb/pb.pb.go" -sed -i 's/SessionToken string/SessionToken Sensitive/' "$PB_GEN_FILE" -sed -i 's/SecretKey string/SecretKey Sensitive/' "$PB_GEN_FILE" +sed -i 's/SessionToken string/SessionToken Sensitive/' "${PB_GEN_FILE}" +sed -i 's/SecretKey string/SecretKey Sensitive/' "${PB_GEN_FILE}" -sed -i 's/GetSessionToken() string {/GetSessionToken() Sensitive {/' "$PB_GEN_FILE" -sed -i 's/GetSecretKey() string/GetSecretKey() Sensitive/' "$PB_GEN_FILE" +sed -i 's/GetSessionToken() string {/GetSessionToken() Sensitive {/' "${PB_GEN_FILE}" +sed -i 's/GetSecretKey() string/GetSecretKey() Sensitive/' "${PB_GEN_FILE}" echo "Patches applied successfully." diff --git a/protos/pb/pb.pb.go b/protos/pb/pb.pb.go index 865c17ff27a..513d4084f0c 100644 --- a/protos/pb/pb.pb.go +++ b/protos/pb/pb.pb.go @@ -2577,10 +2577,10 @@ type RestoreRequest struct { Location string `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"` BackupId string `protobuf:"bytes,4,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` // Credentials when using a minio or S3 bucket as the backup location. - AccessKey string `protobuf:"bytes,5,opt,name=access_key,json=accessKey,proto3" json:"access_key,omitempty"` + AccessKey string `protobuf:"bytes,5,opt,name=access_key,json=accessKey,proto3" json:"access_key,omitempty"` SecretKey Sensitive `protobuf:"bytes,6,opt,name=secret_key,json=secretKey,proto3" json:"secret_key,omitempty"` SessionToken Sensitive `protobuf:"bytes,7,opt,name=session_token,json=sessionToken,proto3" json:"session_token,omitempty"` - Anonymous bool `protobuf:"varint,8,opt,name=anonymous,proto3" json:"anonymous,omitempty"` + Anonymous bool `protobuf:"varint,8,opt,name=anonymous,proto3" json:"anonymous,omitempty"` // Info needed to process encrypted backups. EncryptionKeyFile string `protobuf:"bytes,9,opt,name=encryption_key_file,json=encryptionKeyFile,proto3" json:"encryption_key_file,omitempty"` // Vault options @@ -5286,12 +5286,12 @@ type BackupRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ReadTs uint64 `protobuf:"varint,1,opt,name=read_ts,json=readTs,proto3" json:"read_ts,omitempty"` - SinceTs uint64 `protobuf:"varint,2,opt,name=since_ts,json=sinceTs,proto3" json:"since_ts,omitempty"` - GroupId uint32 `protobuf:"varint,3,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - UnixTs string `protobuf:"bytes,4,opt,name=unix_ts,json=unixTs,proto3" json:"unix_ts,omitempty"` - Destination string `protobuf:"bytes,5,opt,name=destination,proto3" json:"destination,omitempty"` - AccessKey string `protobuf:"bytes,6,opt,name=access_key,json=accessKey,proto3" json:"access_key,omitempty"` + ReadTs uint64 `protobuf:"varint,1,opt,name=read_ts,json=readTs,proto3" json:"read_ts,omitempty"` + SinceTs uint64 `protobuf:"varint,2,opt,name=since_ts,json=sinceTs,proto3" json:"since_ts,omitempty"` + GroupId uint32 `protobuf:"varint,3,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + UnixTs string `protobuf:"bytes,4,opt,name=unix_ts,json=unixTs,proto3" json:"unix_ts,omitempty"` + Destination string `protobuf:"bytes,5,opt,name=destination,proto3" json:"destination,omitempty"` + AccessKey string `protobuf:"bytes,6,opt,name=access_key,json=accessKey,proto3" json:"access_key,omitempty"` SecretKey Sensitive `protobuf:"bytes,7,opt,name=secret_key,json=secretKey,proto3" json:"secret_key,omitempty"` SessionToken Sensitive `protobuf:"bytes,8,opt,name=session_token,json=sessionToken,proto3" json:"session_token,omitempty"` // True if no credentials should be used to access the S3 or minio bucket. @@ -5527,11 +5527,11 @@ type ExportRequest struct { Format string `protobuf:"bytes,4,opt,name=format,proto3" json:"format,omitempty"` Destination string `protobuf:"bytes,5,opt,name=destination,proto3" json:"destination,omitempty"` // These credentials are used to access the S3 or minio bucket. - AccessKey string `protobuf:"bytes,6,opt,name=access_key,json=accessKey,proto3" json:"access_key,omitempty"` + AccessKey string `protobuf:"bytes,6,opt,name=access_key,json=accessKey,proto3" json:"access_key,omitempty"` SecretKey Sensitive `protobuf:"bytes,7,opt,name=secret_key,json=secretKey,proto3" json:"secret_key,omitempty"` SessionToken Sensitive `protobuf:"bytes,8,opt,name=session_token,json=sessionToken,proto3" json:"session_token,omitempty"` - Anonymous bool `protobuf:"varint,9,opt,name=anonymous,proto3" json:"anonymous,omitempty"` - Namespace uint64 `protobuf:"varint,10,opt,name=namespace,proto3" json:"namespace,omitempty"` + Anonymous bool `protobuf:"varint,9,opt,name=anonymous,proto3" json:"anonymous,omitempty"` + Namespace uint64 `protobuf:"varint,10,opt,name=namespace,proto3" json:"namespace,omitempty"` } func (x *ExportRequest) Reset() { diff --git a/query/benchmark/README.md b/query/benchmark/README.md index 308c22cbd81..19d29f32797 100644 --- a/query/benchmark/README.md +++ b/query/benchmark/README.md @@ -12,23 +12,23 @@ rm -Rf dumpsg NUMS="10 56 300" for NUM in $NUMS; do - curl localhost:8912/query -XPOST -d "{ - me(_xid_:m.08624h) { - type.object.name.en - film.actor.film(first: $NUM) { - film.performance.film { - type.object.name.en - } - } - } - }" 2>/dev/null | python -m json.tool | wc -l + curl localhost:8912/query -XPOST -d "{ + me(_xid_:m.08624h) { + type.object.name.en + film.actor.film(first: $NUM) { + film.performance.film { + type.object.name.en + } + } + } + }" 2>/dev/null | python -m json.tool | wc -l done n=0 for S in dumpsg/*.gob; do echo $S - cp -f $S /tmp/actor.${n}.gob - n=$(($n+1)) + cp -f $S /tmp/actor.${n}.gob + n=$(($n+1)) done ``` @@ -42,7 +42,7 @@ rm -Rf dumpsg NUMS="10 31 100" for NUM in $NUMS; do - curl localhost:8912/query -XPOST -d "{ + curl localhost:8912/query -XPOST -d "{ me(_xid_:m.05dxl_) { type.object.name.en film.director.film(first: $NUM) { @@ -51,14 +51,14 @@ for NUM in $NUMS; do } } } - }" 2>/dev/null | python -m json.tool | wc -l + }" 2>/dev/null | python -m json.tool | wc -l done n=0 for S in dumpsg/*.gob; do echo $S - cp -f $S /tmp/director.${n}.gob - n=$(($n+1)) + cp -f $S /tmp/director.${n}.gob + n=$(($n+1)) done ``` @@ -68,10 +68,11 @@ done cp -vf /tmp/*.gob ./ ``` -Just run `run.sh` to regenerate these gob files. These gob files are just -serialized SubGraph objects. +Just run `run.sh` to regenerate these gob files. These gob files are just serialized SubGraph +objects. Just two things to note before running `run.sh`: 1. Run it in this directory so that it generates the files here. -1. Remember to specify `DATADIR`. This is the location of your posting list data after running `dgraph-live-loader`. +1. Remember to specify `DATADIR`. This is the location of your posting list data after running + `dgraph-live-loader`. diff --git a/query/benchmark/run.sh b/query/benchmark/run.sh index e613f26c80d..edbcb4095e2 100755 --- a/query/benchmark/run.sh +++ b/query/benchmark/run.sh @@ -1,8 +1,8 @@ set -e # Where you store posting list and other data. It's where you start dgraph in. -DATADIR=$HOME/dgraph -THISDIR=`pwd` +DATADIR=${HOME}/dgraph +THISDIR=$(pwd) # These actors have 10, 1000, 1007 results respectively. ACTORS="m.03c7p9t m.0148x0 m.08624h" @@ -10,7 +10,7 @@ ACTORS="m.03c7p9t m.0148x0 m.08624h" # These directors have 10, 100, 992 results respectively. DIRECTORS="m.0bysn41 m.03k5gd m.05dxl_" -pushd $DATADIR &> /dev/null +pushd "${DATADIR}" &>/dev/null rm -Rf dumpsg @@ -18,8 +18,8 @@ dgraph -dumpsg dumpsg -port 8912 & sleep 2 -for ACTOR in $ACTORS; do - curl localhost:8912/query -XPOST -d " +for ACTOR in ${ACTORS}; do + curl localhost:8912/query -XPOST -d " { me(_xid_:${ACTOR}) { type.object.name.en @@ -34,15 +34,15 @@ done n=0 for S in dumpsg/*.gob; do - echo $S - cp -vf $S $THISDIR/actor.${n}.gob - n=$(($n+1)) + echo "${S}" + cp -vf "${S}" "${THISDIR}"/actor."${n}".gob + n=$((n + 1)) done rm -f dumpsg/* -for DIRECTOR in $DIRECTORS; do - curl localhost:8912/query -XPOST -d " +for DIRECTOR in ${DIRECTORS}; do + curl localhost:8912/query -XPOST -d " { me(_xid_:${DIRECTOR}) { type.object.name.en @@ -57,13 +57,13 @@ done n=0 for S in dumpsg/*.gob; do - echo $S - cp -vf $S $THISDIR/director.${n}.gob - n=$(($n+1)) + echo "${S}" + cp -vf "${S}" "${THISDIR}"/director."${n}".gob + n=$((n + 1)) done rm -Rf dumpsg killall dgraph -popd &> /dev/null +popd &>/dev/null diff --git a/query/thoughts.md b/query/thoughts.md index 4e9ee1607bb..14dadc5badd 100644 --- a/query/thoughts.md +++ b/query/thoughts.md @@ -1,32 +1,41 @@ How to generate a unique list of uids by querying list of posting lists? Sol 1: + - Say there're k posting lists involved. - One way to do so is to have a heap of k elements. - At each iteration, we pop() an element from the heap (log k) - Advance the pointer of that posting list, and retrieve another element (involves mutex read lock) - Push() that element into the heap (log k) -- This would give us O(N*log k), with mutex lock acquired N times. -- With N=1000 and k=5, this gives us 1000 * ln(5) ~ 1600 +- This would give us O(N\*log k), with mutex lock acquired N times. +- With N=1000 and k=5, this gives us 1000 \* ln(5) ~ 1600 Performance Improvements (memory tradeoff) [Sol1a]: -- We can alleviate the need for mutex locks by copying over all the posting list uids in separate vectors. + +- We can alleviate the need for mutex locks by copying over all the posting list uids in separate + vectors. - This would avoid N lock acquisitions, only requiring the best-case scenario of k locks. - But this also means all the posting list uids would be stored in memory. Performance with Memory [Sol1b]: + - Use k channels, with each channel only maintaining a buffer of say 1000 uids. -- In fact, keep the read lock acquired during this process, to avoid the posting list from changing during a query. -- So, basically have a way for a posting list to stream uids to a blocking channel, after having acquired a read lock. -- Overall this process of merging uids shouldn't take that long anyways; so this won't starve writes, only delay them. +- In fact, keep the read lock acquired during this process, to avoid the posting list from changing + during a query. +- So, basically have a way for a posting list to stream uids to a blocking channel, after having + acquired a read lock. +- Overall this process of merging uids shouldn't take that long anyways; so this won't starve + writes, only delay them. Another way [Sol2]: + - Pick a posting list, copy all it's uids in one go (one mutex lock) - Use a binary tree to store uids. Eliminate duplicates. -- Iterate over each element in the uids vector, and insert into binary tree. [O(log N) max per insert] +- Iterate over each element in the uids vector, and insert into binary tree. [O(log N) max per + insert] - Repeat with other posting lists. - This would give us O(N log N) complexity, with mutex lock acquired k times. -- With N=1000 and k=5, this gives us 1000 * ln(1000) ~ 7000 +- With N=1000 and k=5, this gives us 1000 \* ln(1000) ~ 7000 - Not choosing this path. Solution: Sol1b diff --git a/systest/1million/test-reindex.sh b/systest/1million/test-reindex.sh index 46d3a779965..1ad9f36d75d 100755 --- a/systest/1million/test-reindex.sh +++ b/systest/1million/test-reindex.sh @@ -1,31 +1,31 @@ #!/bin/bash set -e -readonly SRCDIR=$(dirname $0) +readonly SRCDIR=$(dirname "$0") BENCHMARKS_REPO="$(pwd)/benchmarks" -NO_INDEX_SCHEMA_FILE="$BENCHMARKS_REPO/data/1million-noindex.schema" -SCHEMA_FILE="$BENCHMARKS_REPO/data/1million.schema" -DATA_FILE="$BENCHMARKS_REPO/data/1million.rdf.gz" +NO_INDEX_SCHEMA_FILE="${BENCHMARKS_REPO}/data/1million-noindex.schema" +SCHEMA_FILE="${BENCHMARKS_REPO}/data/1million.schema" +DATA_FILE="${BENCHMARKS_REPO}/data/1million.rdf.gz" function Info { - echo -e "INFO: $*" + echo -e "INFO: $*" } function DockerCompose { - docker compose -p dgraph "$@" + docker compose -p dgraph "$@" } Info "cloning benchmarks repo" BENCHMARKS_URL=https://github.com/dgraph-io/benchmarks/blob/master/data -rm -rf $BENCHMARKS_REPO -mkdir -p $BENCHMARKS_REPO/data -wget -O $NO_INDEX_SCHEMA_FILE $BENCHMARKS_URL/1million-noindex.schema?raw=true -wget -O $SCHEMA_FILE $BENCHMARKS_URL/1million.schema?raw=true -wget -O $DATA_FILE $BENCHMARKS_URL/1million.rdf.gz?raw=true +rm -rf "${BENCHMARKS_REPO}" +mkdir -p "${BENCHMARKS_REPO}"/data +wget -O "${NO_INDEX_SCHEMA_FILE}" "${BENCHMARKS_URL}"/1million-noindex.schema?raw=true +wget -O "${SCHEMA_FILE}" "${BENCHMARKS_URL}"/1million.schema?raw=true +wget -O "${DATA_FILE}" "${BENCHMARKS_URL}"/1million.rdf.gz?raw=true -Info "entering directory $SRCDIR" -cd $SRCDIR +Info "entering directory ${SRCDIR}" +cd "${SRCDIR}" Info "bringing down zero and alpha and data volumes" DockerCompose down -v --remove-orphans @@ -37,12 +37,12 @@ Info "waiting for zero to become leader" DockerCompose logs -f zero1 | grep -q -m1 "I've become the leader" Info "bulk loading data set" -DockerCompose run --rm -v $BENCHMARKS_REPO:$BENCHMARKS_REPO --name bulk_load zero1 \ - bash -s <] [--cleanup=] [--savedir=path] [--mode=] +if [[ -n ${HELP} ]]; then + cat <] [--cleanup=] [--savedir=path] [--mode=] options: @@ -59,41 +74,41 @@ options: --mode normal = run dgraph in normal mode none = run dgraph in normal mode EOF - exit 0 + exit 0 fi -if [[ $LOADER != bulk && $LOADER != live && $LOADER != none ]]; then - echo >&2 "$ME: loader must be 'bulk' or 'live' or 'none' -- $LOADER" - exit 1 +if [[ ${LOADER} != bulk && ${LOADER} != live && ${LOADER} != none ]]; then + echo >&2 "${ME}: loader must be 'bulk' or 'live' or 'none' -- ${LOADER}" + exit 1 fi # default to leaving the data around for another run # if already re-using it from a previous run -if [[ $LOADER == none && -z $CLEANUP ]]; then - CLEANUP=servers +if [[ ${LOADER} == none && -z ${CLEANUP} ]]; then + CLEANUP=servers fi # default to cleaning up both services and volume -if [[ -z $CLEANUP ]]; then - CLEANUP=all -elif [[ $CLEANUP != all && $CLEANUP != servers && $CLEANUP != none ]]; then - echo >&2 "$ME: cleanup must be 'all' or 'servers' or 'none' -- $LOADER" - exit 1 +if [[ -z ${CLEANUP} ]]; then + CLEANUP=all +elif [[ ${CLEANUP} != all && ${CLEANUP} != servers && ${CLEANUP} != none ]]; then + echo >&2 "${ME}: cleanup must be 'all' or 'servers' or 'none' -- ${LOADER}" + exit 1 fi # default to quiet mode if diffs are being saved in a directory -if [[ -n $SAVEDIR ]]; then - QUIET=yes +if [[ -n ${SAVEDIR} ]]; then + QUIET=yes fi -Info "entering directory $SRCDIR" -cd $SRCDIR +Info "entering directory ${SRCDIR}" +cd "${SRCDIR}" -if [[ $LOADER != none ]]; then - Info "removing old data (if any)" - DockerCompose down -v --remove-orphans +if [[ ${LOADER} != none ]]; then + Info "removing old data (if any)" + DockerCompose down -v --remove-orphans else - Info "using previously loaded data" + Info "using previously loaded data" fi Info "bringing up zero container" @@ -102,14 +117,14 @@ DockerCompose up -d --remove-orphans --force-recreate zero1 Info "waiting for zero to become leader" DockerCompose logs -f zero1 | grep -q -m1 "I've become the leader" -if [[ $LOADER == bulk ]]; then - Info "bulk loading data set" - DockerCompose run --rm -v $BENCHMARKS_REPO:$BENCHMARKS_REPO --name bulk_load zero1 \ - bash -s <&1 & /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha7_backup_clust_non_ha:7080 --zero=zero7_backup_clust_non_ha:5080 --logtostderr -v=2 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - -#non HA restore cluster + #non HA restore cluster zero8_restore_clust_non_ha: image: dgraph-nfs-client:local working_dir: /data/zero8 depends_on: - alpha1_backup_clust_ha links: - - "nfs:nfs" + - nfs:nfs labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero8_restore_clust_non_ha:5080 --replicas=1 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero8_restore_clust_non_ha:5080 --replicas=1 --logtostderr -v=2 --bindall alpha8_restore_clust_non_ha: image: dgraph-nfs-client:local @@ -314,18 +342,18 @@ services: depends_on: - alpha1_backup_clust_ha links: - - "nfs:nfs" + - nfs:nfs privileged: true labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true command: - /bin/sh - -c diff --git a/systest/bgindex/test-bgindex.sh b/systest/bgindex/test-bgindex.sh index e90bdb359a7..4965558e558 100755 --- a/systest/bgindex/test-bgindex.sh +++ b/systest/bgindex/test-bgindex.sh @@ -1,18 +1,18 @@ #!/bin/bash set -e -readonly SRCDIR=$(dirname $0) +readonly SRCDIR=$(dirname "$0") function Info { - echo -e "INFO: $*" + echo -e "INFO: $*" } function DockerCompose { - docker-compose -p dgraph "$@" + docker-compose -p dgraph "$@" } -Info "entering directory $SRCDIR" -cd $SRCDIR +Info "entering directory ${SRCDIR}" +cd "${SRCDIR}" Info "bringing down dgraph cluster and data volumes" DockerCompose down -v --remove-orphans @@ -23,9 +23,9 @@ DockerCompose up -d --remove-orphans Info "waiting for zero to become leader" DockerCompose logs -f alpha1 | grep -q -m1 "Successfully upserted groot account" -if [[ ! -z "$TEAMCITY_VERSION" ]]; then - # Make TeamCity aware of Go tests - export GOFLAGS="-json" +if [[ -n ${TEAMCITY_VERSION} ]]; then + # Make TeamCity aware of Go tests + export GOFLAGS="-json" fi Info "running background indexing test" @@ -34,10 +34,10 @@ go test -v -tags systest || FOUND_DIFFS=1 Info "bringing down dgraph cluster and data volumes" DockerCompose down -v --remove-orphans -if [[ $FOUND_DIFFS -eq 0 ]]; then - Info "test passed" +if [[ ${FOUND_DIFFS} -eq 0 ]]; then + Info "test passed" else - Info "test failed" + Info "test failed" fi -exit $FOUND_DIFFS +exit "${FOUND_DIFFS}" diff --git a/systest/group-delete/README.md b/systest/group-delete/README.md index d9e05c1f097..16d1144556f 100644 --- a/systest/group-delete/README.md +++ b/systest/group-delete/README.md @@ -1,7 +1,7 @@ # Group Delete Test -This test runs a scenario where nodes are removed from groups to make zero delete those -groups. At every stage we check the zero state to make sure the nodes and groups are deleted. +This test runs a scenario where nodes are removed from groups to make zero delete those groups. At +every stage we check the zero state to make sure the nodes and groups are deleted. Process: diff --git a/systest/ldbc/test_cases.yaml b/systest/ldbc/test_cases.yaml index 6fffb2519fe..6d6953fe25c 100644 --- a/systest/ldbc/test_cases.yaml +++ b/systest/ldbc/test_cases.yaml @@ -1,58 +1,60 @@ q1: query: '{q(func: eq(fqid, "person_4398046514948")) { - firstName - lastName - birthday - locationIP - browserUsed - gender - creationDate - isLocatedIn{ - id - name - } - }}' - tag: "IS01" - resp: '{ - "q":[ - { - "firstName":"Abhishek", - "lastName":"Roy", - "birthday":"1985-09-06T00:00:00Z", - "locationIP":"27.54.166.12", - "browserUsed":"Internet Explorer", - "gender":"male", - "creationDate":"2010-06-06T23:43:29.643Z", - "isLocatedIn":[ - { - "id":231, - "name":"Thanjavur" - } - ] - } - ] - }' -q2: - query: '{ - q(func: eq(fqid, "person_933")) { - ~hasCreator( orderdesc: creationDate, orderdesc: id, first:10){ - id - content - creationDate - dgraph.type - replyOf{ - id - hasCreator{ - id - firstName - lastName - } - } - } - } + firstName + lastName + birthday + locationIP + browserUsed + gender + creationDate + isLocatedIn{ + id + name + } + }}' + tag: IS01 + resp: + '{ + "q":[ + { + "firstName":"Abhishek", + "lastName":"Roy", + "birthday":"1985-09-06T00:00:00Z", + "locationIP":"27.54.166.12", + "browserUsed":"Internet Explorer", + "gender":"male", + "creationDate":"2010-06-06T23:43:29.643Z", + "isLocatedIn":[ + { + "id":231, + "name":"Thanjavur" + } + ] + } + ] }' - tag: 'IS02' +q2: + query: + '{ + q(func: eq(fqid, "person_933")) { + ~hasCreator( orderdesc: creationDate, orderdesc: id, first:10){ + id + content + creationDate + dgraph.type + replyOf{ + id + hasCreator{ + id + firstName + lastName + } + } + } + } + }' + tag: IS02 resp: '{ "q": [ { @@ -162,7 +164,7 @@ q2: ] }' q3: - tag: "IS03" + tag: IS03 query: '{ q(func: eq(fqid, "person_933")) { knows @facets( orderdesc: creationDate, orderdesc: id){ @@ -200,7 +202,7 @@ q3: ] }' q4: - tag: 'IS04' + tag: IS04 query: '{ q(func: eq(fqid, "post_3")) { creationDate @@ -218,7 +220,7 @@ q4: ] }' q5: - tag: 'IS05' + tag: IS05 query: '{ q(func: eq(fqid, "post_3")) { hasCreator{ @@ -243,7 +245,7 @@ q5: ] }' q6: - tag: 'IS06' + tag: IS06 query: '{ q(func: eq(fqid, "post_3")) { ~containerOf{ @@ -278,7 +280,7 @@ q6: ] }' q7: - tag: 'IS07' + tag: IS07 query: '{ mid as var(func: eq(fqid, "post_549755864897")){ c as hasCreator @@ -437,7 +439,7 @@ q7: ] }' q8: - tag: "IC01" + tag: IC01 query: '{ pid as var(func: type(person)) @filter(eq(id, "4398046514948" )) nid as var(func: eq(firstName, "Deepak")) @@ -1342,7 +1344,7 @@ q8: ] }' q9: - tag: "IC02" + tag: IC02 query: '{ var(func: type(person))@filter(eq(id, "4398046514948")){ knows{ @@ -1609,7 +1611,7 @@ q9: ] }' q10: - tag: "IC04" + tag: IC04 query: '{ var(func: type(person))@filter(eq(id, "933")) { knows { @@ -1655,8 +1657,8 @@ q10: } ] }' -q10: - tag: "IC05" +q11: + tag: IC05 query: '{ pid as var(func: type(person))@filter(eq(id, "102")) @@ -1711,8 +1713,8 @@ q10: } ] }' -q11: - tag: "IC06" +q12: + tag: IC06 query: '{ pid as var(func: type(person))@filter(eq(id, "102")) var(func: uid(pid)){ @@ -1787,8 +1789,8 @@ q11: } ] }' -q12: - tag: "IC07" +q13: + tag: IC07 query: '{ pid as var(func: type(person))@filter(eq(id, "102")) var(func: uid(pid))@cascade { @@ -2069,8 +2071,8 @@ q12: } ] }' -q13: - tag: "IC08" +q14: + tag: IC08 query: '{ var(func: type(person))@filter(eq(id, "4398046514948"))@cascade{ ~hasCreator{ @@ -2333,8 +2335,8 @@ q13: } ] }' -q14: - tag: "IC09" +q15: + tag: IC09 query: '{ pid as var(func: type(person))@filter(eq(id, "4398046514948")) var(func: uid(pid)){ @@ -2607,8 +2609,8 @@ q14: } ] }' -q15: - tag: "IC10" +q16: + tag: IC10 query: '{ pid as var(func: type(person))@filter(eq(id, "933")) var(func: uid(pid)){ @@ -2792,8 +2794,8 @@ q15: } ] }' -q16: - tag: "IC11" +q17: + tag: IC11 query: '{ pid as var(func: type(person))@filter(eq(id, "4398046514948")) var(func: uid(pid)){ @@ -2919,8 +2921,8 @@ q16: } ] }' -q17: - tag: "IC12" +q18: + tag: IC12 query: '{ mainTagClass as var(func: eq(name, "Artist")) @recurse{ subClasses as ~isSubclassOf @@ -3074,8 +3076,8 @@ q17: } ] }' -q18: - tag: "IC13" +q19: + tag: IC13 query: '{ A as var(func: eq(fqid, "398046514948")) M as var(func: eq(fqid, "28587302326035")) diff --git a/systest/loader-benchmark/loader-benchmark.sh b/systest/loader-benchmark/loader-benchmark.sh index dfb39057c9c..89017f02e67 100755 --- a/systest/loader-benchmark/loader-benchmark.sh +++ b/systest/loader-benchmark/loader-benchmark.sh @@ -2,39 +2,39 @@ set -e readonly ME=${0##*/} -readonly SRCDIR=$(dirname $0) +readonly SRCDIR=$(dirname "$0") BENCHMARKS_REPO="https://github.com/dgraph-io/benchmarks" BENCHMARK_SIZE=${BENCHMARK_SIZE:=big} -SCHEMA_URL="$BENCHMARKS_REPO/blob/master/data/21million.schema?raw=true" +SCHEMA_URL="${BENCHMARKS_REPO}/blob/master/data/21million.schema?raw=true" DGRAPH_LOADER=${DGRAPH_LOADER:=bulk} function Info { - echo -e "INFO: $*" + echo -e "INFO: $*" } function DockerCompose { - docker compose -p dgraph "$@" + docker compose -p dgraph "$@" } -if [[ $BENCHMARK_SIZE != small && $BENCHMARK_SIZE != big ]]; then - echo >&2 "$ME: loader must be 'small' or 'big' -- $BENCHMARK_SIZE" - exit 1 +if [[ ${BENCHMARK_SIZE} != small && ${BENCHMARK_SIZE} != big ]]; then + echo >&2 "${ME}: loader must be 'small' or 'big' -- ${BENCHMARK_SIZE}" + exit 1 fi -if [[ $BENCHMARK_SIZE == small ]]; then - DATA_URL="$BENCHMARKS_REPO/blob/master/data/1million.rdf.gz?raw=true" +if [[ ${BENCHMARK_SIZE} == small ]]; then + DATA_URL="${BENCHMARKS_REPO}/blob/master/data/1million.rdf.gz?raw=true" else - DATA_URL="$BENCHMARKS_REPO/blob/master/data/21million.rdf.gz?raw=true" + DATA_URL="${BENCHMARKS_REPO}/blob/master/data/21million.rdf.gz?raw=true" fi -if [[ $DGRAPH_LOADER != bulk && $DGRAPH_LOADER != live ]]; then - echo >&2 "$ME: loader must be 'bulk' or 'live' -- $DGRAPH_LOADER" - exit 1 +if [[ ${DGRAPH_LOADER} != bulk && ${DGRAPH_LOADER} != live ]]; then + echo >&2 "${ME}: loader must be 'bulk' or 'live' -- ${DGRAPH_LOADER}" + exit 1 fi -Info "entering directory $SRCDIR" -cd $SRCDIR +Info "entering directory ${SRCDIR}" +cd "${SRCDIR}" Info "removing old data" DockerCompose down -v --remove-orphans @@ -45,11 +45,11 @@ DockerCompose up -d --remove-orphans zero1 Info "waiting for zero to become leader" DockerCompose logs -f zero1 | grep -q -m1 "I've become the leader" -if [[ $DGRAPH_LOADER == bulk ]]; then - Info "bulk loading 21million data set" - DockerCompose run --rm dg1 \ - bash -s <> $FAILED_TESTS + TEST_FAILED=1 + [[ -n ${CURRENT_TEST} ]] && echo "${CURRENT_TEST}" >>"${FAILED_TESTS}" } function ListFailedTests { - echo -en "\e[1;31m" - sed 's/^/ /' $FAILED_TESTS - echo -en "\e[0m" + echo -en "\e[1;31m" + sed 's/^/ /' "${FAILED_TESTS}" + echo -en "\e[0m" } function FindCustomClusterTests { - # look for directories containing a docker compose and *_test.go files - touch $CUSTOM_CLUSTER_TESTS - for FILE in $(find -type f -name docker-compose.yml); do - DIR=$(dirname $FILE) - if grep -q $DIR $MATCHING_TESTS && ls $DIR | grep -q "_test.go$"; then - echo "${DIR:1}\$" >> $CUSTOM_CLUSTER_TESTS - fi - done + # look for directories containing a docker compose and *_test.go files + touch "${CUSTOM_CLUSTER_TESTS}" + for FILE in $(find -type f -name docker-compose.yml); do + DIR=$(dirname "${FILE}") + if grep -q "${DIR}" "${MATCHING_TESTS}" && ls "${DIR}" | grep -q "_test.go$"; then + echo "${DIR:1}\$" >>"${CUSTOM_CLUSTER_TESTS}" + fi + done } function FindDefaultClusterTests { - touch $DEFAULT_CLUSTER_TESTS - for PKG in $(grep -v -f $CUSTOM_CLUSTER_TESTS $MATCHING_TESTS); do - echo $PKG >> $DEFAULT_CLUSTER_TESTS - done + touch "${DEFAULT_CLUSTER_TESTS}" + for PKG in $(grep -v -f "${CUSTOM_CLUSTER_TESTS}" "${MATCHING_TESTS}"); do + echo "${PKG}" >>"${DEFAULT_CLUSTER_TESTS}" + done } function Run { - set -o pipefail - echo -en "...\r" - if IsCi; then - go test -json -v ${GO_TEST_OPTS[*]} $@ - return - fi - go test ${GO_TEST_OPTS[*]} $@ \ - | GREP_COLORS='ne:mt=01;32' egrep --line-buffered --color=always '^ok\ .*|$' \ - | GREP_COLORS='ne:mt=00;38;5;226' egrep --line-buffered --color=always '^\?\ .*|$' \ - | GREP_COLORS='ne:mt=01;31' egrep --line-buffered --color=always '.*FAIL.*|$' + set -o pipefail + echo -en "...\r" + if IsCi; then + go test -json -v "${GO_TEST_OPTS[*]}" $@ + return + fi + go test "${GO_TEST_OPTS[*]}" $@ | + GREP_COLORS='ne:mt=01;32' egrep --line-buffered --color=always '^ok\ .*|$' | + GREP_COLORS='ne:mt=00;38;5;226' egrep --line-buffered --color=always '^\?\ .*|$' | + GREP_COLORS='ne:mt=01;31' egrep --line-buffered --color=always '.*FAIL.*|$' } function RunCmd { - CURRENT_TEST=$1 - IsCi && echo "##teamcity[testStarted name='$1' captureStandardOutput='true']" - if eval "$@"; then - echo -e "\e[1;32mok $1\e[0m" - IsCi && echo "##teamcity[testFinished name='$1']" - return 0 - else - echo -e "\e[1;31mfail $1\e[0m" - IsCi && echo "##teamcity[testFailed name='$1']" - return 1 - fi + CURRENT_TEST=$1 + IsCi && echo "##teamcity[testStarted name='$1' captureStandardOutput='true']" + if eval "$@"; then + echo -e "\e[1;32mok $1\e[0m" + IsCi && echo "##teamcity[testFinished name='$1']" + return 0 + else + echo -e "\e[1;31mfail $1\e[0m" + IsCi && echo "##teamcity[testFailed name='$1']" + return 1 + fi } function RunDefaultClusterTests { - while read -r PKG; do - Info "Running test for $PKG" - CURRENT_TEST=$PKG - Run $PKG || TestFailed - done < $DEFAULT_CLUSTER_TESTS - CURRENT_TEST= - return $TEST_FAILED + while read -r PKG; do + Info "Running test for ${PKG}" + CURRENT_TEST=${PKG} + Run "${PKG}" || TestFailed + done <"${DEFAULT_CLUSTER_TESTS}" + CURRENT_TEST= + return "${TEST_FAILED}" } function RunCustomClusterTests { - while read -r LINE; do - DIR="${LINE:1:-1}" - CFG="$DIR/docker-compose.yml" - Info "Running tests in directory $DIR" - restartCluster $DIR/docker-compose.yml - pushd $DIR >/dev/null - CURRENT_TEST=$DIR - Run || TestFailed - popd >/dev/null - done < $CUSTOM_CLUSTER_TESTS - CURRENT_TEST= - return $TEST_FAILED + while read -r LINE; do + DIR="${LINE:1:-1}" + CFG="${DIR}/docker-compose.yml" + Info "Running tests in directory ${DIR}" + restartCluster "${DIR}"/docker-compose.yml + pushd "${DIR}" >/dev/null + CURRENT_TEST=${DIR} + Run || TestFailed + popd >/dev/null + done <"${CUSTOM_CLUSTER_TESTS}" + CURRENT_TEST= + return "${TEST_FAILED}" } # @@ -163,61 +163,67 @@ function RunCustomClusterTests { echo "test.sh is DEPRECATED. Please use the Go script in t directory instead." -ARGS=$(getopt -n$ME -o"hucCfFvn" \ - -l"help,unit,cluster,cluster-only,full,systest-only,oss,verbose,no-cache,short,timeout:" -- "$@") \ - || exit 1 -eval set -- "$ARGS" +ARGS=$(getopt -n"${ME}" -o"hucCfFvn" \ + -l"help,unit,cluster,cluster-only,full,systest-only,oss,verbose,no-cache,short,timeout:" -- "$@") || + exit 1 +eval set -- "${ARGS}" while true; do - case "$1" in - -h|--help) Usage; exit 0 ;; - -u|--unit) TEST_SET="unit" ;; - -c|--cluster) TEST_SET="unit:cluster" ;; - -C|--cluster-only) TEST_SET="cluster" ;; - -f|--full) TEST_SET="unit:cluster:systest" ;; - -F|--systest-only) TEST_SET="systest" ;; - -v|--verbose) GO_TEST_OPTS+=( "-v" ) ;; - -n|--no-cache) GO_TEST_OPTS+=( "-count=1" ) ;; - --oss) GO_TEST_OPTS+=( "-tags=oss" ) ;; - --short) GO_TEST_OPTS+=( "-short=true" ) ;; - -t|--timeout) GO_TEST_OPTS+=( "-timeout=$2" ) ;; - --) shift; break ;; - esac - shift + case "$1" in + -h | --help) + Usage + exit 0 + ;; + -u | --unit) TEST_SET="unit" ;; + -c | --cluster) TEST_SET="unit:cluster" ;; + -C | --cluster-only) TEST_SET="cluster" ;; + -f | --full) TEST_SET="unit:cluster:systest" ;; + -F | --systest-only) TEST_SET="systest" ;; + -v | --verbose) GO_TEST_OPTS+=("-v") ;; + -n | --no-cache) GO_TEST_OPTS+=("-count=1") ;; + --oss) GO_TEST_OPTS+=("-tags=oss") ;; + --short) GO_TEST_OPTS+=("-short=true") ;; + -t | --timeout) GO_TEST_OPTS+=("-timeout=$2") ;; + --) + shift + break + ;; + esac + shift done -cd $DGRAPH_ROOT +cd "${DGRAPH_ROOT}" # tests should put temp files under this directory for easier cleanup -export TMPDIR=$(mktemp --tmpdir --directory $ME.tmp-XXXXXX) -trap "rm -rf $TMPDIR" EXIT +export TMPDIR=$(mktemp --tmpdir --directory "${ME}".tmp-XXXXXX) +trap "rm -rf ${TMPDIR}" EXIT # docker-compose files may use this to run as user instead of as root export UID -MATCHING_TESTS=$TMPDIR/tests -CUSTOM_CLUSTER_TESTS=$TMPDIR/custom -DEFAULT_CLUSTER_TESTS=$TMPDIR/default -FAILED_TESTS=$TMPDIR/failures +MATCHING_TESTS=${TMPDIR}/tests +CUSTOM_CLUSTER_TESTS=${TMPDIR}/custom +DEFAULT_CLUSTER_TESTS=${TMPDIR}/default +FAILED_TESTS=${TMPDIR}/failures if [[ $# -eq 0 ]]; then - go list ./... > $MATCHING_TESTS - if [[ $TEST_SET == unit ]]; then - Info "Running only unit tests" - fi + go list ./... >"${MATCHING_TESTS}" + if [[ ${TEST_SET} == unit ]]; then + Info "Running only unit tests" + fi elif [[ $# -eq 1 || $# -eq 2 ]]; then - # Remove the trailing slash from pkg_regex. - # This is helpful when autocomplete returns something like `dirname/`. - REGEX=${1%/} - go list ./... | grep $REGEX > $MATCHING_TESTS - Info "Running only tests matching '$REGEX'" - RUN_ALL= - - if [ $# -eq 2 ]; then - GO_TEST_OPTS+=( "-v" "-run=$2" ) - fi + # Remove the trailing slash from pkg_regex. + # This is helpful when autocomplete returns something like `dirname/`. + REGEX=${1%/} + go list ./... | grep "${REGEX}" >"${MATCHING_TESTS}" + Info "Running only tests matching '${REGEX}'" + RUN_ALL= + + if [[ $# -eq 2 ]]; then + GO_TEST_OPTS+=("-v" "-run=$2") + fi else - echo >&2 "usage: $ME [pkg_regex [test_regex]]" - exit 1 + echo >&2 "usage: ${ME} [pkg_regex [test_regex]]" + exit 1 fi # assemble list of tests before executing any @@ -230,63 +236,63 @@ trap "echo >&2 SIGINT ; exit 2" SIGINT START_TIME=$(date +%s) if [[ :${TEST_SET}: == *:unit:* ]]; then - if [[ -s $DEFAULT_CLUSTER_TESTS ]]; then - Info "Running tests using the default cluster" - restartCluster - RunDefaultClusterTests || TestFailed - else - Info "Skipping default cluster tests because none match" - fi + if [[ -s ${DEFAULT_CLUSTER_TESTS} ]]; then + Info "Running tests using the default cluster" + restartCluster + RunDefaultClusterTests || TestFailed + else + Info "Skipping default cluster tests because none match" + fi fi if [[ :${TEST_SET}: == *:cluster:* ]]; then - if [[ -s $CUSTOM_CLUSTER_TESTS ]]; then - Info "Running tests using custom clusters" - RunCustomClusterTests || TestFailed - else - Info "Skipping custom cluster tests because none match" - fi + if [[ -s ${CUSTOM_CLUSTER_TESTS} ]]; then + Info "Running tests using custom clusters" + RunCustomClusterTests || TestFailed + else + Info "Skipping custom cluster tests because none match" + fi fi if [[ :${TEST_SET}: == *:systest:* ]]; then - # TODO: Fix this test. The fix consists of updating the test script to - # download a p directory that's compatible with the badger WAL changes. - # This test is not that useful so it's ok to temporarily disable it. - # Info "Running posting size calculation" - # cd posting - # RunCmd ./size_test.sh || TestFailed - # cd .. + # TODO: Fix this test. The fix consists of updating the test script to + # download a p directory that's compatible with the badger WAL changes. + # This test is not that useful so it's ok to temporarily disable it. + # Info "Running posting size calculation" + # cd posting + # RunCmd ./size_test.sh || TestFailed + # cd .. - Info "Running small load test" - RunCmd ./contrib/scripts/load-test.sh || TestFailed + Info "Running small load test" + RunCmd ./contrib/scripts/load-test.sh || TestFailed - Info "Running custom test scripts" - RunCmd ./dgraph/cmd/bulk/systest/test-bulk-schema.sh || TestFailed + Info "Running custom test scripts" + RunCmd ./dgraph/cmd/bulk/systest/test-bulk-schema.sh || TestFailed - Info "Running large bulk load test" - RunCmd ./systest/21million/test-21million.sh || TestFailed + Info "Running large bulk load test" + RunCmd ./systest/21million/test-21million.sh || TestFailed - # Info "Running large live load test" - # RunCmd ./systest/21million/test-21million.sh --loader live || TestFailed + # Info "Running large live load test" + # RunCmd ./systest/21million/test-21million.sh --loader live || TestFailed - Info "Running rebuilding index test" - RunCmd ./systest/1million/test-reindex.sh || TestFailed + Info "Running rebuilding index test" + RunCmd ./systest/1million/test-reindex.sh || TestFailed - Info "Running background index test" - RunCmd ./systest/bgindex/test-bgindex.sh || TestFailed + Info "Running background index test" + RunCmd ./systest/bgindex/test-bgindex.sh || TestFailed fi Info "Stopping cluster" stopCluster END_TIME=$(date +%s) -Info "Tests completed in" $( FmtTime $((END_TIME - START_TIME)) ) +Info "Tests completed in" $(FmtTime $((END_TIME - START_TIME))) -if [[ $TEST_FAILED -eq 0 ]]; then - Info "\e[1;32mAll tests passed!" +if [[ ${TEST_FAILED} -eq 0 ]]; then + Info "\e[1;32mAll tests passed!" else - Info "\e[1;31m*** One or more tests failed! ***" - ListFailedTests + Info "\e[1;31m*** One or more tests failed! ***" + ListFailedTests fi -exit $TEST_FAILED +exit "${TEST_FAILED}" diff --git a/testutil/README.md b/testutil/README.md index 03aa116e6dd..fcccae5dafd 100644 --- a/testutil/README.md +++ b/testutil/README.md @@ -1,4 +1,4 @@ ## package z -This package is for code that is only used in tests (i.e. "*_test.go" files). It should not be +This package is for code that is only used in tests (i.e. "\*\_test.go" files). It should not be used in non-test code because error handling is usually minimal and usually fatal. diff --git a/tok/options/README.md b/tok/options/README.md index 6f87db3f094..27e4a225ef7 100644 --- a/tok/options/README.md +++ b/tok/options/README.md @@ -1,41 +1,31 @@ -In Dgraph, we have the abiltity to specify an @index directive for the type -vfloat. Here, we want to expand that capability to allow us to specify something -like: +In Dgraph, we have the abiltity to specify an @index directive for the type vfloat. Here, we want to +expand that capability to allow us to specify something like: myAttribute @index("hnsw-euclidean","maxNeighbors":"5","maxLevels":"5","exponent":"6") -Roughly, this should be read as: -I want to specify an HNSW-type vector index using euclidean distance as a metric -with maxNeighbors, maxLevels, and exponent being declared as written, and with -all other parameters taking on default values. (In the case of specifying an -exponent, this should affect the defaults for the other options, but that is -something that can be decided by the factory for the hnsw index)! - -But this leads to some natural questions: How do I know what option types are -allowed? And how do I interpret their types? For example, how do I know that I -should interpret "5" as an integer rather than a string? - -The solution will be to allow each factory to specify a set of "allowed option -types". Hence, we get the AllowedOptions class, which specifies a set of -named options and corresponding parsers for the given name. - -Now, if we want to populate an Options instance based on the content of -myAttribute @index(hnsw(metric:"euclidean",exponent:"6")), - -we collect the key-value pairs: - "metric":"euclidean" - "exponent":"6" - -And we can now invoke: -allowedOpts := hnswFactory.AllowedOpts() -myAttributeIndexOpts := NewOptions() - -val, err := allowedOpts.GetParsedOption("exponent", "6") -if err != nil { - return ErrBadOptionNoBiscuit -} -myAttributeIndexOpts.SetOpt("exponent", val) - -The final resolution of the "puzzle" in fact is to invoke -allowedOpts.PopulateOptions(pairs, myAttributeIndexOpts) -based on pairs being built from the collection of key-value pairs. +Roughly, this should be read as: I want to specify an HNSW-type vector index using euclidean +distance as a metric with maxNeighbors, maxLevels, and exponent being declared as written, and with +all other parameters taking on default values. (In the case of specifying an exponent, this should +affect the defaults for the other options, but that is something that can be decided by the factory +for the hnsw index)! + +But this leads to some natural questions: How do I know what option types are allowed? And how do I +interpret their types? For example, how do I know that I should interpret "5" as an integer rather +than a string? + +The solution will be to allow each factory to specify a set of "allowed option types". Hence, we get +the AllowedOptions class, which specifies a set of named options and corresponding parsers for the +given name. + +Now, if we want to populate an Options instance based on the content of myAttribute +@index(hnsw(metric:"euclidean",exponent:"6")), + +we collect the key-value pairs: "metric":"euclidean" "exponent":"6" + +And we can now invoke: allowedOpts := hnswFactory.AllowedOpts() myAttributeIndexOpts := NewOptions() + +val, err := allowedOpts.GetParsedOption("exponent", "6") if err != nil { return +ErrBadOptionNoBiscuit } myAttributeIndexOpts.SetOpt("exponent", val) + +The final resolution of the "puzzle" in fact is to invoke allowedOpts.PopulateOptions(pairs, +myAttributeIndexOpts) based on pairs being built from the collection of key-value pairs. diff --git a/types/testdata/aruba.json b/types/testdata/aruba.json index 62c0024e727..20bdfc812bf 100644 --- a/types/testdata/aruba.json +++ b/types/testdata/aruba.json @@ -1 +1,103 @@ -{ "type": "Feature", "properties": { "scalerank": 3, "featurecla": "Admin-0 country", "LABELRANK": 5.0, "SOVEREIGNT": "Netherlands", "SOV_A3": "NL1", "ADM0_DIF": 1.0, "LEVEL": 2.0, "TYPE": "Country", "ADMIN": "Aruba", "ADM0_A3": "ABW", "GEOU_DIF": 0.0, "GEOUNIT": "Aruba", "GU_A3": "ABW", "SU_DIF": 0.0, "SUBUNIT": "Aruba", "SU_A3": "ABW", "BRK_DIFF": 0.0, "NAME": "Aruba", "NAME_LONG": "Aruba", "BRK_A3": "ABW", "BRK_NAME": "Aruba", "BRK_GROUP": null, "ABBREV": "Aruba", "POSTAL": "AW", "FORMAL_EN": "Aruba", "FORMAL_FR": null, "NOTE_ADM0": "Neth.", "NOTE_BRK": null, "NAME_SORT": "Aruba", "NAME_ALT": null, "MAPCOLOR7": 4.0, "MAPCOLOR8": 2.0, "MAPCOLOR9": 2.0, "MAPCOLOR13": 9.0, "POP_EST": 103065.0, "GDP_MD_EST": 2258.0, "POP_YEAR": -99.0, "LASTCENSUS": 2010.0, "GDP_YEAR": -99.0, "ECONOMY": "6. Developing region", "INCOME_GRP": "2. High income: nonOECD", "WIKIPEDIA": -99.0, "FIPS_10_": "AA", "ISO_A2": "AW", "ISO_A3": "ABW", "ISO_N3": "533", "UN_A3": "533", "WB_A2": "AW", "WB_A3": "ABW", "WOE_ID": 23424736.0, "WOE_ID_EH": 23424736.0, "WOE_NOTE": "Exact WOE match as country", "ADM0_A3_IS": "ABW", "ADM0_A3_US": "ABW", "ADM0_A3_UN": -99.0, "ADM0_A3_WB": -99.0, "CONTINENT": "North America", "REGION_UN": "Americas", "SUBREGION": "Caribbean", "REGION_WB": "Latin America & Caribbean", "NAME_LEN": 5.0, "LONG_LEN": 5.0, "ABBREV_LEN": 5.0, "TINY": 4.0, "HOMEPART": -99.0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -69.996937628999916, 12.577582098000036 ], [ -69.936390753999945, 12.531724351000051 ], [ -69.924672003999945, 12.519232489000046 ], [ -69.915760870999918, 12.497015692000076 ], [ -69.880197719999842, 12.453558661000045 ], [ -69.876820441999939, 12.427394924000097 ], [ -69.888091600999928, 12.417669989000046 ], [ -69.908802863999938, 12.417792059000107 ], [ -69.930531378999888, 12.425970770000035 ], [ -69.945139126999919, 12.44037506700009 ], [ -69.924672003999945, 12.44037506700009 ], [ -69.924672003999945, 12.447211005000014 ], [ -69.958566860999923, 12.463202216000099 ], [ -70.027658657999922, 12.522935289000088 ], [ -70.048085089999887, 12.531154690000079 ], [ -70.058094855999883, 12.537176825000088 ], [ -70.062408006999874, 12.546820380000057 ], [ -70.060373501999948, 12.556952216000113 ], [ -70.051096157999893, 12.574042059000064 ], [ -70.048736131999931, 12.583726304000024 ], [ -70.052642381999931, 12.600002346000053 ], [ -70.059641079999921, 12.614243882000054 ], [ -70.061105923999975, 12.625392971000068 ], [ -70.048736131999931, 12.632147528000104 ], [ -70.00715084499987, 12.5855166690001 ], [ -69.996937628999916, 12.577582098000036 ] ] ] } } +{ + "type": "Feature", + "properties": { + "scalerank": 3, + "featurecla": "Admin-0 country", + "LABELRANK": 5.0, + "SOVEREIGNT": "Netherlands", + "SOV_A3": "NL1", + "ADM0_DIF": 1.0, + "LEVEL": 2.0, + "TYPE": "Country", + "ADMIN": "Aruba", + "ADM0_A3": "ABW", + "GEOU_DIF": 0.0, + "GEOUNIT": "Aruba", + "GU_A3": "ABW", + "SU_DIF": 0.0, + "SUBUNIT": "Aruba", + "SU_A3": "ABW", + "BRK_DIFF": 0.0, + "NAME": "Aruba", + "NAME_LONG": "Aruba", + "BRK_A3": "ABW", + "BRK_NAME": "Aruba", + "BRK_GROUP": null, + "ABBREV": "Aruba", + "POSTAL": "AW", + "FORMAL_EN": "Aruba", + "FORMAL_FR": null, + "NOTE_ADM0": "Neth.", + "NOTE_BRK": null, + "NAME_SORT": "Aruba", + "NAME_ALT": null, + "MAPCOLOR7": 4.0, + "MAPCOLOR8": 2.0, + "MAPCOLOR9": 2.0, + "MAPCOLOR13": 9.0, + "POP_EST": 103065.0, + "GDP_MD_EST": 2258.0, + "POP_YEAR": -99.0, + "LASTCENSUS": 2010.0, + "GDP_YEAR": -99.0, + "ECONOMY": "6. Developing region", + "INCOME_GRP": "2. High income: nonOECD", + "WIKIPEDIA": -99.0, + "FIPS_10_": "AA", + "ISO_A2": "AW", + "ISO_A3": "ABW", + "ISO_N3": "533", + "UN_A3": "533", + "WB_A2": "AW", + "WB_A3": "ABW", + "WOE_ID": 23424736.0, + "WOE_ID_EH": 23424736.0, + "WOE_NOTE": "Exact WOE match as country", + "ADM0_A3_IS": "ABW", + "ADM0_A3_US": "ABW", + "ADM0_A3_UN": -99.0, + "ADM0_A3_WB": -99.0, + "CONTINENT": "North America", + "REGION_UN": "Americas", + "SUBREGION": "Caribbean", + "REGION_WB": "Latin America & Caribbean", + "NAME_LEN": 5.0, + "LONG_LEN": 5.0, + "ABBREV_LEN": 5.0, + "TINY": 4.0, + "HOMEPART": -99.0 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [-69.996937628999916, 12.577582098000036], + [-69.936390753999945, 12.531724351000051], + [-69.924672003999945, 12.519232489000046], + [-69.915760870999918, 12.497015692000076], + [-69.880197719999842, 12.453558661000045], + [-69.876820441999939, 12.427394924000097], + [-69.888091600999928, 12.417669989000046], + [-69.908802863999938, 12.417792059000107], + [-69.930531378999888, 12.425970770000035], + [-69.945139126999919, 12.44037506700009], + [-69.924672003999945, 12.44037506700009], + [-69.924672003999945, 12.447211005000014], + [-69.958566860999923, 12.463202216000099], + [-70.027658657999922, 12.522935289000088], + [-70.048085089999887, 12.531154690000079], + [-70.058094855999883, 12.537176825000088], + [-70.062408006999874, 12.546820380000057], + [-70.060373501999948, 12.556952216000113], + [-70.051096157999893, 12.574042059000064], + [-70.048736131999931, 12.583726304000024], + [-70.052642381999931, 12.600002346000053], + [-70.059641079999921, 12.614243882000054], + [-70.061105923999975, 12.625392971000068], + [-70.048736131999931, 12.632147528000104], + [-70.00715084499987, 12.5855166690001], + [-69.996937628999916, 12.577582098000036] + ] + ] + } +} diff --git a/types/testdata/sudan.json b/types/testdata/sudan.json index 773d0c7de50..fc390d23214 100644 --- a/types/testdata/sudan.json +++ b/types/testdata/sudan.json @@ -1 +1,165 @@ -{"type":"Feature","properties":{"scalerank":1,"featurecla":"Admin-0 country","LABELRANK":3,"SOVEREIGNT":"Sudan","SOV_A3":"SDN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","ADMIN":"Sudan","ADM0_A3":"SDN","GEOU_DIF":0,"GEOUNIT":"Sudan","GU_A3":"SDN","SU_DIF":0,"SUBUNIT":"Sudan","SU_A3":"SDN","BRK_DIFF":0,"NAME":"Sudan","NAME_LONG":"Sudan","BRK_A3":"SDN","BRK_NAME":"Sudan","BRK_GROUP":null,"ABBREV":"Sudan","POSTAL":"SD","FORMAL_EN":"Republic of the Sudan","FORMAL_FR":null,"NAME_CIAWF":"Sudan","NOTE_ADM0":null,"NOTE_BRK":null,"NAME_SORT":"Sudan","NAME_ALT":null,"MAPCOLOR7":2,"MAPCOLOR8":6,"MAPCOLOR9":4,"MAPCOLOR13":1,"POP_EST":37345935,"POP_RANK":15,"GDP_MD_EST":176300,"POP_YEAR":2017,"LASTCENSUS":2008,"GDP_YEAR":2016,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","WIKIPEDIA":-99,"FIPS_10_":"SU","ISO_A2":"SD","ISO_A3":"SDN","ISO_A3_EH":"SDN","ISO_N3":"729","UN_A3":"729","WB_A2":"SD","WB_A3":"SDN","WOE_ID":-90,"WOE_ID_EH":23424952,"WOE_NOTE":"Almost all FLickr photos are in the north.","ADM0_A3_IS":"SDN","ADM0_A3_US":"SDN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Northern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8},"bbox":[21.93681,8.229188,38.41009,22],"geometry":{"type":"Polygon","coordinates":[[[24.567369,8.229188],[23.805813,8.666319],[23.459013,8.954286],[23.394779,9.265068],[23.55725,9.681218],[23.554304,10.089255],[22.977544,10.714463],[22.864165,11.142395],[22.87622,11.38461],[22.50869,11.67936],[22.49762,12.26024],[22.28801,12.64605],[21.93681,12.58818],[22.03759,12.95546],[22.29658,13.37232],[22.18329,13.78648],[22.51202,14.09318],[22.30351,14.32682],[22.56795,14.94429],[23.02459,15.68072],[23.88689,15.61084],[23.83766,19.58047],[23.85,20],[25,20.00304],[25,22],[29.02,22],[32.9,22],[36.86623,22],[37.18872,21.01885],[36.96941,20.83744],[37.1147,19.80796],[37.48179,18.61409],[37.86276,18.36786],[38.41009,17.998307],[37.904,17.42754],[37.16747,17.26314],[36.85253,16.95655],[36.75389,16.29186],[36.32322,14.82249],[36.42951,14.42211],[36.27022,13.56333],[35.86363,12.57828],[35.26049,12.08286],[34.83163,11.31896],[34.73115,10.91017],[34.25745,10.63009],[33.96162,9.58358],[33.97498,8.68456],[33.963393,9.464285],[33.824963,9.484061],[33.842131,9.981915],[33.721959,10.325262],[33.206938,10.720112],[33.086766,11.441141],[33.206938,12.179338],[32.743419,12.248008],[32.67475,12.024832],[32.073892,11.97333],[32.314235,11.681484],[32.400072,11.080626],[31.850716,10.531271],[31.352862,9.810241],[30.837841,9.707237],[29.996639,10.290927],[29.618957,10.084919],[29.515953,9.793074],[29.000932,9.604232],[28.966597,9.398224],[27.97089,9.398224],[27.833551,9.604232],[27.112521,9.638567],[26.752006,9.466893],[26.477328,9.55273],[25.962307,10.136421],[25.790633,10.411099],[25.069604,10.27376],[24.794926,9.810241],[24.537415,8.917538],[24.194068,8.728696],[23.88698,8.61973],[24.567369,8.229188]]]}} +{ + "type": "Feature", + "properties": { + "scalerank": 1, + "featurecla": "Admin-0 country", + "LABELRANK": 3, + "SOVEREIGNT": "Sudan", + "SOV_A3": "SDN", + "ADM0_DIF": 0, + "LEVEL": 2, + "TYPE": "Sovereign country", + "ADMIN": "Sudan", + "ADM0_A3": "SDN", + "GEOU_DIF": 0, + "GEOUNIT": "Sudan", + "GU_A3": "SDN", + "SU_DIF": 0, + "SUBUNIT": "Sudan", + "SU_A3": "SDN", + "BRK_DIFF": 0, + "NAME": "Sudan", + "NAME_LONG": "Sudan", + "BRK_A3": "SDN", + "BRK_NAME": "Sudan", + "BRK_GROUP": null, + "ABBREV": "Sudan", + "POSTAL": "SD", + "FORMAL_EN": "Republic of the Sudan", + "FORMAL_FR": null, + "NAME_CIAWF": "Sudan", + "NOTE_ADM0": null, + "NOTE_BRK": null, + "NAME_SORT": "Sudan", + "NAME_ALT": null, + "MAPCOLOR7": 2, + "MAPCOLOR8": 6, + "MAPCOLOR9": 4, + "MAPCOLOR13": 1, + "POP_EST": 37345935, + "POP_RANK": 15, + "GDP_MD_EST": 176300, + "POP_YEAR": 2017, + "LASTCENSUS": 2008, + "GDP_YEAR": 2016, + "ECONOMY": "6. Developing region", + "INCOME_GRP": "4. Lower middle income", + "WIKIPEDIA": -99, + "FIPS_10_": "SU", + "ISO_A2": "SD", + "ISO_A3": "SDN", + "ISO_A3_EH": "SDN", + "ISO_N3": "729", + "UN_A3": "729", + "WB_A2": "SD", + "WB_A3": "SDN", + "WOE_ID": -90, + "WOE_ID_EH": 23424952, + "WOE_NOTE": "Almost all FLickr photos are in the north.", + "ADM0_A3_IS": "SDN", + "ADM0_A3_US": "SDN", + "ADM0_A3_UN": -99, + "ADM0_A3_WB": -99, + "CONTINENT": "Africa", + "REGION_UN": "Africa", + "SUBREGION": "Northern Africa", + "REGION_WB": "Sub-Saharan Africa", + "NAME_LEN": 5, + "LONG_LEN": 5, + "ABBREV_LEN": 5, + "TINY": -99, + "HOMEPART": 1, + "MIN_ZOOM": 0, + "MIN_LABEL": 3, + "MAX_LABEL": 8 + }, + "bbox": [21.93681, 8.229188, 38.41009, 22], + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [24.567369, 8.229188], + [23.805813, 8.666319], + [23.459013, 8.954286], + [23.394779, 9.265068], + [23.55725, 9.681218], + [23.554304, 10.089255], + [22.977544, 10.714463], + [22.864165, 11.142395], + [22.87622, 11.38461], + [22.50869, 11.67936], + [22.49762, 12.26024], + [22.28801, 12.64605], + [21.93681, 12.58818], + [22.03759, 12.95546], + [22.29658, 13.37232], + [22.18329, 13.78648], + [22.51202, 14.09318], + [22.30351, 14.32682], + [22.56795, 14.94429], + [23.02459, 15.68072], + [23.88689, 15.61084], + [23.83766, 19.58047], + [23.85, 20], + [25, 20.00304], + [25, 22], + [29.02, 22], + [32.9, 22], + [36.86623, 22], + [37.18872, 21.01885], + [36.96941, 20.83744], + [37.1147, 19.80796], + [37.48179, 18.61409], + [37.86276, 18.36786], + [38.41009, 17.998307], + [37.904, 17.42754], + [37.16747, 17.26314], + [36.85253, 16.95655], + [36.75389, 16.29186], + [36.32322, 14.82249], + [36.42951, 14.42211], + [36.27022, 13.56333], + [35.86363, 12.57828], + [35.26049, 12.08286], + [34.83163, 11.31896], + [34.73115, 10.91017], + [34.25745, 10.63009], + [33.96162, 9.58358], + [33.97498, 8.68456], + [33.963393, 9.464285], + [33.824963, 9.484061], + [33.842131, 9.981915], + [33.721959, 10.325262], + [33.206938, 10.720112], + [33.086766, 11.441141], + [33.206938, 12.179338], + [32.743419, 12.248008], + [32.67475, 12.024832], + [32.073892, 11.97333], + [32.314235, 11.681484], + [32.400072, 11.080626], + [31.850716, 10.531271], + [31.352862, 9.810241], + [30.837841, 9.707237], + [29.996639, 10.290927], + [29.618957, 10.084919], + [29.515953, 9.793074], + [29.000932, 9.604232], + [28.966597, 9.398224], + [27.97089, 9.398224], + [27.833551, 9.604232], + [27.112521, 9.638567], + [26.752006, 9.466893], + [26.477328, 9.55273], + [25.962307, 10.136421], + [25.790633, 10.411099], + [25.069604, 10.27376], + [24.794926, 9.810241], + [24.537415, 8.917538], + [24.194068, 8.728696], + [23.88698, 8.61973], + [24.567369, 8.229188] + ] + ] + } +} diff --git a/types/testdata/us.json b/types/testdata/us.json index 296728d1b3f..12b0988ebb7 100644 --- a/types/testdata/us.json +++ b/types/testdata/us.json @@ -1 +1,37513 @@ -{ "type": "Feature", "properties": { "scalerank": 0, "featurecla": "Admin-0 country", "LABELRANK": 2.0, "SOVEREIGNT": "United States of America", "SOV_A3": "US1", "ADM0_DIF": 1.0, "LEVEL": 2.0, "TYPE": "Country", "ADMIN": "United States of America", "ADM0_A3": "USA", "GEOU_DIF": 0.0, "GEOUNIT": "United States of America", "GU_A3": "USA", "SU_DIF": 0.0, "SUBUNIT": "United States of America", "SU_A3": "USA", "BRK_DIFF": 0.0, "NAME": "United States", "NAME_LONG": "United States", "BRK_A3": "USA", "BRK_NAME": "United States", "BRK_GROUP": null, "ABBREV": "U.S.A.", "POSTAL": "US", "FORMAL_EN": "United States of America", "FORMAL_FR": null, "NOTE_ADM0": null, "NOTE_BRK": null, "NAME_SORT": "United States of America", "NAME_ALT": null, "MAPCOLOR7": 4.0, "MAPCOLOR8": 5.0, "MAPCOLOR9": 1.0, "MAPCOLOR13": 1.0, "POP_EST": 313973000.0, "GDP_MD_EST": 15094000.0, "POP_YEAR": 0.0, "LASTCENSUS": 2010.0, "GDP_YEAR": 0.0, "ECONOMY": "1. Developed region: G7", "INCOME_GRP": "1. High income: OECD", "WIKIPEDIA": 0.0, "FIPS_10_": "US", "ISO_A2": "US", "ISO_A3": "USA", "ISO_N3": "840", "UN_A3": "840", "WB_A2": "US", "WB_A3": "USA", "WOE_ID": 23424977.0, "WOE_ID_EH": 23424977.0, "WOE_NOTE": "Exact WOE match as country", "ADM0_A3_IS": "USA", "ADM0_A3_US": "USA", "ADM0_A3_UN": -99.0, "ADM0_A3_WB": -99.0, "CONTINENT": "North America", "REGION_UN": "Americas", "SUBREGION": "Northern America", "REGION_WB": "North America", "NAME_LEN": 13.0, "LONG_LEN": 13.0, "ABBREV_LEN": 6.0, "TINY": -99.0, "HOMEPART": 1.0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -155.606518969999911, 20.137955566000144 ], [ -155.58636330899995, 20.122935923000156 ], [ -155.5630978639999, 20.128402875000134 ], [ -155.527193996999898, 20.126268986000142 ], [ -155.491078253999945, 20.113023179000109 ], [ -155.420714617999948, 20.09018548900012 ], [ -155.332312778999892, 20.046721443000123 ], [ -155.215105930999869, 19.975645397000065 ], [ -155.168042733999897, 19.946827215000113 ], [ -155.115853354999899, 19.896732304000025 ], [ -155.087141188999908, 19.860379834000028 ], [ -155.086399261999929, 19.821029192000125 ], [ -155.088061501999846, 19.768645245000144 ], [ -155.085370905999923, 19.727409311000045 ], [ -155.057492899999886, 19.72853043200017 ], [ -155.018544074999909, 19.745835679 ], [ -154.989923380999869, 19.726707451000053 ], [ -154.976671733999865, 19.705757273000089 ], [ -154.980043767999916, 19.662806468 ], [ -154.966970126999911, 19.636251923000046 ], [ -154.949905960999956, 19.611445574000143 ], [ -154.8996216029999, 19.567016293000123 ], [ -154.84662324899989, 19.544937986 ], [ -154.825310519999874, 19.527487875000176 ], [ -154.81406356599993, 19.506579211000158 ], [ -154.817209438999896, 19.479722398000078 ], [ -154.829904751999948, 19.464056708 ], [ -154.874736234999943, 19.4128841550001 ], [ -154.918932218999913, 19.397311606000088 ], [ -154.982300512999927, 19.339243956000146 ], [ -155.02509518099987, 19.327582098000093 ], [ -155.026663070999945, 19.316170953000054 ], [ -155.062612970999936, 19.307820063000108 ], [ -155.093031421999939, 19.286209597000109 ], [ -155.153041030999873, 19.26920424000015 ], [ -155.202957571999889, 19.255579602000026 ], [ -155.245059364999861, 19.265539102000119 ], [ -155.269281371999909, 19.26618159300007 ], [ -155.291127433999947, 19.259523502000107 ], [ -155.314444617999925, 19.245659319000154 ], [ -155.345686887999875, 19.224804655000113 ], [ -155.364136047999921, 19.203574675000155 ], [ -155.384658475999856, 19.200530529 ], [ -155.400149347999957, 19.19368608200007 ], [ -155.422596808999913, 19.180121161 ], [ -155.436838344999899, 19.169867255000085 ], [ -155.487782355999911, 19.142523505000028 ], [ -155.502797003999945, 19.13768138200011 ], [ -155.546131964999915, 19.098211981000148 ], [ -155.553737211999874, 19.081960805000151 ], [ -155.552259915999855, 19.045618945000129 ], [ -155.570637916999914, 19.02677103000012 ], [ -155.602060390999952, 18.997379625000079 ], [ -155.61852255699992, 18.955543680000162 ], [ -155.632968807999902, 18.940203114000084 ], [ -155.651241571999947, 18.926103771000115 ], [ -155.674755623999943, 18.906117143000117 ], [ -155.683543926999846, 18.911156771 ], [ -155.682932379999869, 18.932886390000149 ], [ -155.704166702999885, 18.949084649000056 ], [ -155.744414438999883, 18.969342794000127 ], [ -155.792170759999919, 18.996975708000051 ], [ -155.817253255999844, 19.013230752000041 ], [ -155.859133089999887, 19.023812411 ], [ -155.87812988099995, 19.029072187000068 ], [ -155.884047255999917, 19.047294619000027 ], [ -155.891048647999924, 19.06565446400019 ], [ -155.903906071999899, 19.069459068000029 ], [ -155.91213327199992, 19.096188743000184 ], [ -155.919930468999894, 19.138600656000065 ], [ -155.908385596999892, 19.188985774000017 ], [ -155.885530453999877, 19.334156958000065 ], [ -155.887373984999897, 19.359568177000128 ], [ -155.900889060999845, 19.382749774000061 ], [ -155.912958579999895, 19.414314596000153 ], [ -155.929490948999899, 19.461815958000059 ], [ -155.936577713999895, 19.481310354000087 ], [ -155.946447877999901, 19.493611062000113 ], [ -155.956388101999892, 19.51423606200008 ], [ -155.953968878999916, 19.536078192000119 ], [ -155.965635829999883, 19.556630668000039 ], [ -155.971365300999935, 19.57969801300014 ], [ -155.982197194999912, 19.607674731000159 ], [ -155.999524396999846, 19.632179407000152 ], [ -156.014784079999913, 19.643355435 ], [ -156.036255144999899, 19.667935486000104 ], [ -156.060163927999895, 19.731220553000085 ], [ -156.05016028599988, 19.759507554000109 ], [ -156.03880774599989, 19.783148505000057 ], [ -156.017445441999939, 19.801092841000084 ], [ -155.996774868999921, 19.814439195000105 ], [ -155.987497524999952, 19.824367580000015 ], [ -155.982045050999915, 19.843329169000029 ], [ -155.967966274999867, 19.854234117000104 ], [ -155.92601477799991, 19.868801174000126 ], [ -155.905832485999952, 19.902044989000117 ], [ -155.89586341099988, 19.913478908000101 ], [ -155.873401878999914, 19.951321249000088 ], [ -155.85090084499987, 19.975287177 ], [ -155.835457617999907, 19.975703442000068 ], [ -155.828320051999924, 20.006960726000031 ], [ -155.824083278999922, 20.020092445000117 ], [ -155.831068615999953, 20.039371950000046 ], [ -155.847709867999924, 20.054519035000013 ], [ -155.882555982999889, 20.104942986000182 ], [ -155.896980431999907, 20.148846149000079 ], [ -155.899362758999956, 20.184068101000079 ], [ -155.899270492999847, 20.216690077000138 ], [ -155.880482550999943, 20.25202057500006 ], [ -155.867242161999883, 20.263132036000158 ], [ -155.831129243999897, 20.263429107000135 ], [ -155.766061977999925, 20.249172268 ], [ -155.737985805999898, 20.243801174000126 ], [ -155.732614712999947, 20.238836981000091 ], [ -155.729196743999921, 20.231350002000127 ], [ -155.728016730999911, 20.22162506700009 ], [ -155.711669388999951, 20.196149105000089 ], [ -155.67334951599986, 20.18166990800016 ], [ -155.648130541999933, 20.168006393 ], [ -155.630653579999915, 20.14821166600008 ], [ -155.606518969999911, 20.137955566000144 ] ] ], [ [ [ -156.534128410999955, 20.53178747600019 ], [ -156.544555061999887, 20.513216689 ], [ -156.572918640999859, 20.512983613000173 ], [ -156.599510728999917, 20.517403037000079 ], [ -156.61886799899986, 20.51380849100012 ], [ -156.646498516999884, 20.508083848000027 ], [ -156.679261302999862, 20.504712932000089 ], [ -156.700561823999863, 20.525426565000132 ], [ -156.688457904999893, 20.54010440800009 ], [ -156.667159065999954, 20.557717171000135 ], [ -156.639149542999945, 20.575140692000062 ], [ -156.608814535999926, 20.591045980000061 ], [ -156.582621411999924, 20.599956701000067 ], [ -156.561774064999952, 20.598007555 ], [ -156.536569935999921, 20.570942072000136 ], [ -156.549767511999846, 20.541472931000058 ], [ -156.534128410999955, 20.53178747600019 ] ] ], [ [ [ -156.913737526999853, 20.734724091000047 ], [ -156.962280102999955, 20.732387730000184 ], [ -156.982386144999879, 20.759414015000075 ], [ -156.987078693999933, 20.782873410000022 ], [ -156.988352016999954, 20.801459052 ], [ -156.988596157999893, 20.824937242000047 ], [ -156.992136196999866, 20.846340236000017 ], [ -157.009224163999932, 20.855880059000114 ], [ -157.050809620999928, 20.871405682000116 ], [ -157.063136057999941, 20.890386641000148 ], [ -157.055213601999895, 20.911371030000012 ], [ -157.031550960999937, 20.922717910000145 ], [ -156.990414204999951, 20.92750878700015 ], [ -156.89271962499987, 20.914141356000172 ], [ -156.848378058999913, 20.876817124000141 ], [ -156.848337368999921, 20.876776434000149 ], [ -156.832672234999905, 20.860743402000153 ], [ -156.816338432999885, 20.841704170000028 ], [ -156.8057973089999, 20.825107881000136 ], [ -156.803539098999948, 20.812564416000143 ], [ -156.809731330999909, 20.795479580000162 ], [ -156.83125712899988, 20.76380716600012 ], [ -156.876774734999913, 20.744265284000065 ], [ -156.913737526999853, 20.734724091000047 ] ] ], [ [ [ -156.589599704999898, 21.027738813000113 ], [ -156.581385911999945, 21.018149872000137 ], [ -156.571413356999926, 21.016456133000148 ], [ -156.555665538999904, 21.008334336000146 ], [ -156.542367725999895, 21.003389588000019 ], [ -156.537524827999846, 20.990651662000076 ], [ -156.525888580999862, 20.987321553000143 ], [ -156.52287490899991, 20.974045307000083 ], [ -156.523047218999864, 20.962198095000119 ], [ -156.509140973999877, 20.950296330000086 ], [ -156.500189100999876, 20.937583783000107 ], [ -156.492992870999899, 20.921798275000171 ], [ -156.481671551999909, 20.904397075000034 ], [ -156.464070830999901, 20.905623498000082 ], [ -156.452921117999892, 20.917917610000146 ], [ -156.433705206999889, 20.917710679 ], [ -156.418812628999945, 20.92011139500012 ], [ -156.389637824999909, 20.921535549000012 ], [ -156.378488735999895, 20.923976955000128 ], [ -156.346424933999913, 20.945868231000148 ], [ -156.330677863999938, 20.951239325000031 ], [ -156.31541907499988, 20.952948309000035 ], [ -156.298329230999911, 20.952704169000086 ], [ -156.281931118999921, 20.95026276200015 ], [ -156.268625454999892, 20.945054429000052 ], [ -156.264393683999884, 20.944525458000086 ], [ -156.260975714999859, 20.943670966000084 ], [ -156.258127407999922, 20.941595770000063 ], [ -156.255563930999926, 20.937648830000072 ], [ -156.242909308999856, 20.941555080000072 ], [ -156.226877407999865, 20.931952216000084 ], [ -156.221844745999931, 20.920337186000054 ], [ -156.215281409999903, 20.914727596000191 ], [ -156.207224087999919, 20.906887111000103 ], [ -156.197255011999914, 20.895005601000051 ], [ -156.179191861999897, 20.883483182000035 ], [ -156.1660884019999, 20.871480968000142 ], [ -156.164760244999911, 20.862786357000076 ], [ -156.152989630999855, 20.861794009000121 ], [ -156.14793578899986, 20.861703227000177 ], [ -156.144423141999937, 20.867117877000098 ], [ -156.13126936199987, 20.857453126000152 ], [ -156.125729208999957, 20.84404131200013 ], [ -156.119281017999867, 20.83607094500006 ], [ -156.084989178999933, 20.831451060000163 ], [ -156.051008649999886, 20.815863260000143 ], [ -156.001698370999861, 20.800441799000126 ], [ -155.979552909999882, 20.75737428000015 ], [ -155.984695868999864, 20.717591061000164 ], [ -156.003133538999862, 20.685897726000107 ], [ -156.027740499999879, 20.679366243000132 ], [ -156.048422998999911, 20.650887888000071 ], [ -156.075403890999894, 20.650671537000122 ], [ -156.12950442099995, 20.624472917000119 ], [ -156.165437790999903, 20.625236032000103 ], [ -156.185422842999856, 20.627220377000171 ], [ -156.203829812999913, 20.626042974000185 ], [ -156.2536937, 20.604422509000088 ], [ -156.284892660999901, 20.588638968000126 ], [ -156.302593803999912, 20.581179336 ], [ -156.326714843999952, 20.58717147800003 ], [ -156.335889766999856, 20.588152080000086 ], [ -156.352513052999853, 20.592428506000047 ], [ -156.36546790299991, 20.588771877000013 ], [ -156.407653194999853, 20.587206654000013 ], [ -156.435488373999931, 20.611975966000145 ], [ -156.438582194999924, 20.622197897000191 ], [ -156.45166446099995, 20.63573788500004 ], [ -156.44314285199988, 20.642601544000129 ], [ -156.442749980999906, 20.660569389000088 ], [ -156.450481583999846, 20.726380496000061 ], [ -156.458440859999911, 20.744517032000104 ], [ -156.457991816999879, 20.764835405000113 ], [ -156.464319399999937, 20.781383147000085 ], [ -156.468426993999884, 20.784587664000085 ], [ -156.475331183999856, 20.790838934000064 ], [ -156.48572697499992, 20.796661417000152 ], [ -156.501631099999884, 20.796191426000078 ], [ -156.515880216999903, 20.790087373000134 ], [ -156.521301216999916, 20.776241299000063 ], [ -156.533898525999945, 20.77413896000003 ], [ -156.548633959999847, 20.782110580000122 ], [ -156.562725989999933, 20.791837343000154 ], [ -156.584482440999921, 20.795452386000036 ], [ -156.605975747999878, 20.808377251000152 ], [ -156.620234271999948, 20.807088095000083 ], [ -156.633256048999925, 20.823737830000127 ], [ -156.657052765999879, 20.847660821000133 ], [ -156.684906683999884, 20.88188777800012 ], [ -156.686133176999931, 20.903822015000159 ], [ -156.696009196999853, 20.915801977000072 ], [ -156.692260118999911, 20.936102735000034 ], [ -156.685879267999894, 20.964236004000057 ], [ -156.676838444999873, 20.987970972000042 ], [ -156.666469010999862, 21.003438187000043 ], [ -156.653849596999862, 21.004755317000118 ], [ -156.645375128999916, 21.013373114000146 ], [ -156.64484615799995, 21.021185614000146 ], [ -156.635790343999929, 21.027124270000073 ], [ -156.626581046999888, 21.026161960000124 ], [ -156.615679591999879, 21.025149976000066 ], [ -156.607255330999863, 21.02734320500015 ], [ -156.603819954999949, 21.031992488000085 ], [ -156.597929313999884, 21.032653273000122 ], [ -156.589599704999898, 21.027738813000113 ] ] ], [ [ [ -157.248843164999926, 21.221710607000105 ], [ -157.232926490999859, 21.219116956 ], [ -157.2094130669999, 21.22032303800016 ], [ -157.196897893999932, 21.217014816000173 ], [ -157.188684346999878, 21.20514185200004 ], [ -157.173573370999861, 21.205145575000145 ], [ -157.079084047999913, 21.191713201000042 ], [ -157.028079491999847, 21.184613902000095 ], [ -156.989735480999911, 21.182847398000135 ], [ -156.981808229999928, 21.194046789000041 ], [ -156.980788881999899, 21.203420475000158 ], [ -156.975614608999877, 21.21114839600007 ], [ -156.965769008999956, 21.213324286000088 ], [ -156.952410299999883, 21.196706858000042 ], [ -156.947757517999861, 21.17784986000008 ], [ -156.925233108999947, 21.171244980000083 ], [ -156.89704547199986, 21.165191023000105 ], [ -156.846679642999902, 21.166728943000081 ], [ -156.824658437999858, 21.169547648000062 ], [ -156.810635460999947, 21.173875442000124 ], [ -156.80031220099994, 21.177676245 ], [ -156.791791609999905, 21.176027903000048 ], [ -156.773519175999866, 21.177205020000102 ], [ -156.759496045999924, 21.173010679000143 ], [ -156.749012824999909, 21.170965887000179 ], [ -156.739006025999913, 21.172761014000017 ], [ -156.733208431999913, 21.16875073700011 ], [ -156.735920610999898, 21.164081597000134 ], [ -156.729149649999925, 21.16086442700005 ], [ -156.713176278999896, 21.161368156 ], [ -156.705724935999939, 21.156542963000064 ], [ -156.72484290299991, 21.123724677000112 ], [ -156.755604620999918, 21.095526434000035 ], [ -156.793405727999954, 21.075873114000089 ], [ -156.831003383999928, 21.061102606000091 ], [ -156.869577602999925, 21.053371486000103 ], [ -156.908558722999885, 21.057033596000124 ], [ -156.947405225999944, 21.064542367000129 ], [ -157.024916865999927, 21.083778732000056 ], [ -157.072373810999892, 21.099381265000048 ], [ -157.140320033999899, 21.094190171000051 ], [ -157.187270329999876, 21.091781320000152 ], [ -157.222571560999938, 21.086839234000152 ], [ -157.250965949999852, 21.088446356000176 ], [ -157.273060675999943, 21.087347723000121 ], [ -157.292591925999943, 21.09471263200011 ], [ -157.303944464999915, 21.109564520000092 ], [ -157.304269985999923, 21.128241278000147 ], [ -157.296457485999952, 21.14394765800013 ], [ -157.28538977799991, 21.156073309000035 ], [ -157.267391019999877, 21.162541775000093 ], [ -157.251163319999876, 21.180283960000125 ], [ -157.246633546999874, 21.199756865000083 ], [ -157.259036219999871, 21.214829310000155 ], [ -157.259759042999917, 21.221879885000092 ], [ -157.248843164999926, 21.221710607000105 ] ] ], [ [ [ -157.893763636999893, 21.598381702000111 ], [ -157.887502817999859, 21.580882287000023 ], [ -157.8767276989999, 21.575407705000103 ], [ -157.87392491499989, 21.569342261000159 ], [ -157.871180993999872, 21.557916087000038 ], [ -157.863579475999927, 21.559794776000061 ], [ -157.853500213999894, 21.556339744000084 ], [ -157.845936652999882, 21.548041083000115 ], [ -157.836448876999924, 21.53404933700007 ], [ -157.836312919999955, 21.518645190000157 ], [ -157.836392059999923, 21.511270328000037 ], [ -157.844373935999897, 21.51135989400008 ], [ -157.849524954999879, 21.505384343000017 ], [ -157.847560490999939, 21.488600903000034 ], [ -157.845518362999911, 21.477849332000133 ], [ -157.842127355999907, 21.461048946000133 ], [ -157.832765058999939, 21.458257287 ], [ -157.820518990999915, 21.453415894000088 ], [ -157.811268269999857, 21.441904753000031 ], [ -157.80351289399988, 21.429072422 ], [ -157.788365913999939, 21.424186643000056 ], [ -157.786323534999894, 21.416788890000092 ], [ -157.776227494999944, 21.413305523000091 ], [ -157.769619047999925, 21.420603638000088 ], [ -157.760049922999883, 21.433234324000026 ], [ -157.775117431999945, 21.442812471000096 ], [ -157.773524499999951, 21.454198992000116 ], [ -157.762618224999926, 21.458764241000111 ], [ -157.738055252999914, 21.45578118900012 ], [ -157.72570752699994, 21.458985098000184 ], [ -157.722920860999949, 21.451569411000079 ], [ -157.737619594999956, 21.437689520000148 ], [ -157.740549282999865, 21.419582424000126 ], [ -157.738704306999892, 21.40545104600001 ], [ -157.722177991999956, 21.395840616000115 ], [ -157.709304202999874, 21.383587533000068 ], [ -157.705799933999913, 21.374904690000093 ], [ -157.71030534399992, 21.363460849000106 ], [ -157.706824458999847, 21.351995194 ], [ -157.696146006999868, 21.336397484000045 ], [ -157.674483334999934, 21.322944104000058 ], [ -157.653598656999861, 21.312566109000088 ], [ -157.647167394999855, 21.306431478 ], [ -157.658884096999941, 21.293833358000185 ], [ -157.683706717999883, 21.272686860000036 ], [ -157.693211650999899, 21.262742044 ], [ -157.704076096999927, 21.259530437000123 ], [ -157.707598873999899, 21.265616065000032 ], [ -157.706762332999858, 21.27500557600014 ], [ -157.715345583999948, 21.281838803000099 ], [ -157.742101039999909, 21.275470596000062 ], [ -157.763814023999942, 21.273104395000033 ], [ -157.78188350399995, 21.264573042000066 ], [ -157.794965259999913, 21.254663326000113 ], [ -157.810817888999907, 21.254189924000016 ], [ -157.817979243999929, 21.257634826000029 ], [ -157.822921819999863, 21.266425639000047 ], [ -157.830713682999942, 21.27725756700012 ], [ -157.86367396299994, 21.290393167 ], [ -157.880136489999927, 21.297962188000113 ], [ -157.890759655999886, 21.31284138700012 ], [ -157.894967138999931, 21.322282812000154 ], [ -157.894876352999859, 21.331684863000035 ], [ -157.902086011999899, 21.328389783000162 ], [ -157.915179937999881, 21.316466487000028 ], [ -157.905238561999909, 21.305631189000124 ], [ -157.947003495999894, 21.30274280100015 ], [ -157.946228910999935, 21.307427894000014 ], [ -157.9404350289999, 21.310716966000129 ], [ -157.948274310999892, 21.316833192 ], [ -157.964106813999905, 21.316334539000039 ], [ -157.964709173999893, 21.326398306000058 ], [ -157.967492611999916, 21.334473519000127 ], [ -157.965258281999866, 21.341151686000146 ], [ -157.968061973999852, 21.347886951000177 ], [ -157.95720876099989, 21.352459097000022 ], [ -157.947086244999923, 21.357040236000088 ], [ -157.936216743999921, 21.362954478000049 ], [ -157.931845390999911, 21.371662369000134 ], [ -157.943951419999877, 21.38048656800008 ], [ -157.953961267999887, 21.384601207000074 ], [ -157.960926886999857, 21.388820705000157 ], [ -157.965475139999853, 21.384727590000139 ], [ -157.969209955999901, 21.372021640000114 ], [ -157.977792062999868, 21.376131111000049 ], [ -157.985625744999936, 21.384953133000167 ], [ -157.991332032999935, 21.39107259500004 ], [ -157.990729212999895, 21.37761230800011 ], [ -157.984431374999872, 21.362129081000049 ], [ -157.989506271999943, 21.358831482000042 ], [ -158.011612180999862, 21.376504880000041 ], [ -158.020173553999939, 21.383313164000086 ], [ -158.013149132999956, 21.367118178000013 ], [ -157.996796136999876, 21.350871245000079 ], [ -157.984677303999888, 21.341359223000083 ], [ -157.975413062999849, 21.333886618000136 ], [ -157.980626998999867, 21.318520933000016 ], [ -157.998691711999925, 21.311337541000128 ], [ -158.022468927999853, 21.307561571000079 ], [ -158.059234222999919, 21.299886721000107 ], [ -158.077952006999908, 21.298060788 ], [ -158.094309048999889, 21.293605861000103 ], [ -158.098866339999944, 21.295396226 ], [ -158.103382941999882, 21.299261786 ], [ -158.115267988999875, 21.305121421000152 ], [ -158.124236235999945, 21.338739434000118 ], [ -158.134718801999952, 21.36565543100015 ], [ -158.148232849999886, 21.381164271 ], [ -158.157435777999922, 21.394653557000041 ], [ -158.176052257999885, 21.403530111000137 ], [ -158.1808024689999, 21.430369488000125 ], [ -158.187120011999923, 21.444498301000138 ], [ -158.204953963999884, 21.458727823000018 ], [ -158.215677356999947, 21.465522252000156 ], [ -158.227600322999876, 21.483046969000114 ], [ -158.228121012999878, 21.50379942300016 ], [ -158.229322190999881, 21.53260499000011 ], [ -158.235951300999915, 21.541571356000119 ], [ -158.278933013999904, 21.575264710000098 ], [ -158.272419104999955, 21.57855903700009 ], [ -158.236338243999853, 21.584940710000083 ], [ -158.193816321999918, 21.587236919000091 ], [ -158.165737446999884, 21.585642587000066 ], [ -158.14916452499989, 21.586158946000168 ], [ -158.136586066999911, 21.589300848000065 ], [ -158.121072463999894, 21.585894982000084 ], [ -158.117624477999897, 21.598089911000116 ], [ -158.112946383999883, 21.603906081000147 ], [ -158.09481973799987, 21.613784087000155 ], [ -158.073783918999936, 21.62895772200001 ], [ -158.065785516999938, 21.635574412 ], [ -158.067209438999868, 21.641424872000087 ], [ -158.060047980999911, 21.652492580000128 ], [ -158.050607876999891, 21.671291408000101 ], [ -158.035349087999919, 21.683417059000178 ], [ -158.014445109999883, 21.70149857600002 ], [ -157.982645686999945, 21.709850429000042 ], [ -157.969655295999871, 21.709060736000183 ], [ -157.962432519999936, 21.705012456000148 ], [ -157.956732423999938, 21.698922024000083 ], [ -157.950184699999852, 21.690619208000115 ], [ -157.933912246999853, 21.677897515 ], [ -157.933326564999902, 21.667164656000139 ], [ -157.924685511999911, 21.663071172000016 ], [ -157.924091749999889, 21.654339816000018 ], [ -157.915533919999859, 21.645539785000139 ], [ -157.920181110999891, 21.627451070000134 ], [ -157.907325614999905, 21.61059113600011 ], [ -157.893763636999893, 21.598381702000111 ] ] ], [ [ [ -160.198240305999917, 21.783883779000107 ], [ -160.211284889999916, 21.78020946300002 ], [ -160.224359186999891, 21.789242828000127 ], [ -160.235466121999877, 21.792821383 ], [ -160.248036261999857, 21.828029690000037 ], [ -160.245462605999933, 21.850839125000093 ], [ -160.234423523999936, 21.874455639000033 ], [ -160.195382829999915, 21.912044980000147 ], [ -160.164025669999887, 21.934468024000026 ], [ -160.123619671999847, 21.956295877000159 ], [ -160.117264423999927, 21.969641516000095 ], [ -160.11273897399991, 21.981737514000045 ], [ -160.113758917999945, 22.000230210000055 ], [ -160.113758917999945, 22.00027090100015 ], [ -160.095862493999874, 22.007756812000125 ], [ -160.078892262999886, 22.007177039000013 ], [ -160.059963620999923, 22.000562970000161 ], [ -160.051436351999939, 21.983050251000023 ], [ -160.059878505999905, 21.97397199300012 ], [ -160.072230355999949, 21.959452650000131 ], [ -160.079538540999863, 21.937892971000096 ], [ -160.072214321999951, 21.910834052000055 ], [ -160.085246090999874, 21.893535615000175 ], [ -160.102534178999889, 21.886283768000013 ], [ -160.117486213999882, 21.87839775500008 ], [ -160.136340664999921, 21.872917581000152 ], [ -160.158662361999916, 21.859563610000052 ], [ -160.171677269999861, 21.848648381000103 ], [ -160.179460910999865, 21.833515584000068 ], [ -160.191029425999886, 21.804673570000105 ], [ -160.198240305999917, 21.783883779000107 ] ] ], [ [ [ -159.388184518999935, 22.2287890140001 ], [ -159.373755318999855, 22.222087383000101 ], [ -159.357865854999943, 22.222729077000068 ], [ -159.338734503999888, 22.213039455000015 ], [ -159.331224785999922, 22.197941195000013 ], [ -159.31867428299995, 22.185777085000112 ], [ -159.311811986999885, 22.184503118000137 ], [ -159.30757581499995, 22.17109365400016 ], [ -159.304657829999911, 22.161103188000155 ], [ -159.301340298999861, 22.151068427000055 ], [ -159.301258917999888, 22.151027736000074 ], [ -159.292795376999948, 22.146429755000113 ], [ -159.292591925999886, 22.135565497000144 ], [ -159.294704342999864, 22.107627229000101 ], [ -159.304141016999893, 22.095614122000157 ], [ -159.318694269999924, 22.057559847000149 ], [ -159.333175557999851, 22.049568974000053 ], [ -159.33466549399995, 22.021551825000031 ], [ -159.331654425999943, 22.004055080000072 ], [ -159.330637173999889, 21.984767971000124 ], [ -159.331735805999926, 21.966131903000147 ], [ -159.334127588999934, 21.958057444000147 ], [ -159.347893624999926, 21.95810694800015 ], [ -159.359122422999889, 21.952900339000124 ], [ -159.351615386999953, 21.945454166000061 ], [ -159.347862319999933, 21.936710490000124 ], [ -159.353642884999942, 21.930043921 ], [ -159.365409772999897, 21.930833024000108 ], [ -159.3824924729999, 21.917418699000066 ], [ -159.389718519999946, 21.905410184000075 ], [ -159.3983722239999, 21.898077845000117 ], [ -159.414961759999926, 21.888098166000034 ], [ -159.416411069999953, 21.880747968000108 ], [ -159.427226720999897, 21.879446927000018 ], [ -159.433716849999911, 21.87411696 ], [ -159.43731532299995, 21.868769246000014 ], [ -159.481922113999872, 21.883546646000028 ], [ -159.50926553599993, 21.886252262000156 ], [ -159.529617550999887, 21.885651034000162 ], [ -159.567554553999884, 21.893029933000079 ], [ -159.581948628999896, 21.894351836000013 ], [ -159.590574904999897, 21.901714646000116 ], [ -159.5948922769999, 21.900387702 ], [ -159.596341230999883, 21.893698927000102 ], [ -159.604978693999897, 21.891702540000111 ], [ -159.61000958199989, 21.899719360000134 ], [ -159.622967927999923, 21.905057252000105 ], [ -159.634482387999924, 21.913747819 ], [ -159.641664641999881, 21.923107138000162 ], [ -159.645972054999845, 21.931796147000128 ], [ -159.65029136499993, 21.939807816000084 ], [ -159.661816388999853, 21.942477516000068 ], [ -159.666124503999896, 21.950496926000042 ], [ -159.6762085579999, 21.955170900000056 ], [ -159.696115688999896, 21.958156643 ], [ -159.711511123999912, 21.96384981000007 ], [ -159.723757585999948, 21.969859699000111 ], [ -159.743212762999917, 21.97319534400016 ], [ -159.759793731999878, 21.978533373000133 ], [ -159.768449357999913, 21.995229786000138 ], [ -159.771332899999948, 22.0052480720001 ], [ -159.779989753999871, 22.009253388000147 ], [ -159.7872110859999, 22.019270121000162 ], [ -159.787219742999923, 22.033298974000061 ], [ -159.785784239999884, 22.044656149000062 ], [ -159.785066017999895, 22.057349453000043 ], [ -159.786515071999872, 22.066034131 ], [ -159.776560024999867, 22.069525458000115 ], [ -159.749748113999857, 22.098106817000186 ], [ -159.73568048599995, 22.115245853000104 ], [ -159.734323696999951, 22.12498607000019 ], [ -159.734201626999891, 22.133734442000062 ], [ -159.732614712999947, 22.140773830000128 ], [ -159.725900844999899, 22.143622137000179 ], [ -159.723459438999896, 22.146551825000088 ], [ -159.716533729999895, 22.157514047000021 ], [ -159.694177645999957, 22.16351792600004 ], [ -159.668188417999886, 22.169478142000159 ], [ -159.639374563999922, 22.185559234000138 ], [ -159.621348842999907, 22.200291386000131 ], [ -159.598234300999934, 22.210864550000011 ], [ -159.58958210399993, 22.2209538070001 ], [ -159.576593508999906, 22.225661440000138 ], [ -159.565767587999915, 22.225647018000089 ], [ -159.558543195999903, 22.232995262000045 ], [ -159.548441455999949, 22.230979673 ], [ -159.541232374999879, 22.224953730000109 ], [ -159.537633569999912, 22.218260623 ], [ -159.529696293999905, 22.217584970000146 ], [ -159.516712448999954, 22.213565231000089 ], [ -159.508063142999902, 22.208204068000057 ], [ -159.499407760999901, 22.208847302 ], [ -159.50227644499995, 22.216221266000119 ], [ -159.499376235999875, 22.223574334000105 ], [ -159.481321495999936, 22.230235325000038 ], [ -159.462577537999891, 22.227500218000145 ], [ -159.440178166999942, 22.227518404000037 ], [ -159.428653457999928, 22.22080093600006 ], [ -159.419259125999957, 22.22213539600007 ], [ -159.407682976999865, 22.228815741000105 ], [ -159.399719859999948, 22.235494671000183 ], [ -159.388184518999935, 22.2287890140001 ] ] ], [ [ [ -161.945179816999911, 23.039862372000172 ], [ -161.947865363999881, 23.038031317 ], [ -161.946359829999949, 23.041449286 ], [ -161.946034308999913, 23.044582424000069 ], [ -161.94477291599992, 23.04621002800009 ], [ -161.940419074999909, 23.045599677000141 ], [ -161.940907355999911, 23.041978257 ], [ -161.942697719999899, 23.040676174000069 ], [ -161.945179816999911, 23.039862372000172 ] ] ], [ [ [ -164.704335089999887, 23.579331773000106 ], [ -164.699086066999882, 23.570542710000055 ], [ -164.70726477799991, 23.572577216000084 ], [ -164.708485480999911, 23.574530341000028 ], [ -164.706369594999899, 23.576605536000059 ], [ -164.704335089999887, 23.579331773000106 ] ] ], [ [ [ -82.118804490999935, 24.553615627000156 ], [ -82.128773566999939, 24.550848700000088 ], [ -82.128285285999937, 24.553697007000139 ], [ -82.118397589999915, 24.556463934000092 ], [ -82.113758917999917, 24.557318427 ], [ -82.118804490999935, 24.553615627000156 ] ] ], [ [ [ -81.740874803999901, 24.573187567000119 ], [ -81.73668372299997, 24.569525458000058 ], [ -81.73371334499987, 24.564154364000032 ], [ -81.732004360999952, 24.556219794000143 ], [ -81.737660285999937, 24.557806708000086 ], [ -81.741322394999884, 24.560695705000015 ], [ -81.743804490999906, 24.564642645 ], [ -81.746245897999955, 24.569891669000086 ], [ -81.747222459999932, 24.567572333000115 ], [ -81.747303839999915, 24.564439195000048 ], [ -81.748402472999942, 24.564113674000041 ], [ -81.752512173999918, 24.569891669000086 ], [ -81.755726691999968, 24.562445380000028 ], [ -81.759917772999898, 24.556219794000143 ], [ -81.769398566999911, 24.55019765800013 ], [ -81.784413214999915, 24.546128648 ], [ -81.814564581999946, 24.542547919000114 ], [ -81.810292120999918, 24.558172919000086 ], [ -81.801869269999884, 24.560288804000109 ], [ -81.791249152999939, 24.557074286000059 ], [ -81.780384894999941, 24.556219794000143 ], [ -81.772938605999883, 24.559719143000123 ], [ -81.752512173999918, 24.576117255000142 ], [ -81.746245897999955, 24.576117255000142 ], [ -81.740874803999901, 24.573187567000119 ] ] ], [ [ [ -81.65461178299995, 24.593207098000093 ], [ -81.650054490999906, 24.576117255000142 ], [ -81.725738084999904, 24.556219794000143 ], [ -81.721587693999965, 24.55951569200009 ], [ -81.711496548999889, 24.569891669000086 ], [ -81.711496548999889, 24.576117255000142 ], [ -81.716949022999927, 24.581040757000025 ], [ -81.718332485999923, 24.586249091000084 ], [ -81.716297980999883, 24.591742255000113 ], [ -81.711496548999889, 24.597805080000043 ], [ -81.705311652999939, 24.597805080000043 ], [ -81.695790167999917, 24.590643622000087 ], [ -81.683908657999979, 24.591131903000147 ], [ -81.656849738999938, 24.597805080000043 ], [ -81.65461178299995, 24.593207098000093 ] ] ], [ [ [ -82.11937415299991, 24.594671942000147 ], [ -82.109608527999882, 24.58612702000012 ], [ -82.107736782999893, 24.575262762000037 ], [ -82.110463019999969, 24.565497137000094 ], [ -82.11156165299991, 24.570949611000131 ], [ -82.119618292999945, 24.585109768000066 ], [ -82.127919074999937, 24.589260158000016 ], [ -82.134755011999943, 24.592962958000143 ], [ -82.139963344999842, 24.593329169000143 ], [ -82.145741339999915, 24.592718817 ], [ -82.142933722999942, 24.595851955000072 ], [ -82.131743943999936, 24.598089911000059 ], [ -82.11937415299991, 24.594671942000147 ] ] ], [ [ [ -81.410633917999917, 24.655422268000095 ], [ -81.414784308999856, 24.647691148 ], [ -81.421742316999939, 24.65176015800013 ], [ -81.42446855399993, 24.654974677 ], [ -81.417591925999915, 24.659409898000078 ], [ -81.410633917999917, 24.655422268000095 ] ] ], [ [ [ -81.266346808999913, 24.66038646000014 ], [ -81.276031053999873, 24.655585028000147 ], [ -81.277495897999927, 24.657619533000073 ], [ -81.26520748599998, 24.671291408000016 ], [ -81.260243292999917, 24.671698309000035 ], [ -81.258371548999946, 24.667629299000069 ], [ -81.266346808999913, 24.66038646000014 ] ] ], [ [ [ -81.439320441999882, 24.66038646000014 ], [ -81.441395636999914, 24.650539455000015 ], [ -81.446848110999952, 24.650783596000068 ], [ -81.449086066999911, 24.655218817000119 ], [ -81.460682745999947, 24.664374091000028 ], [ -81.461984829999949, 24.670965887000094 ], [ -81.455433722999942, 24.676092841000113 ], [ -81.453846808999913, 24.677679755000142 ], [ -81.457386847999913, 24.677923895000092 ], [ -81.455433722999942, 24.681341864 ], [ -81.448068813999868, 24.68056875200007 ], [ -81.442209438999924, 24.671535549000069 ], [ -81.439320441999882, 24.66038646000014 ] ] ], [ [ [ -81.555002407999922, 24.688177802000112 ], [ -81.553212042999917, 24.686957098 ], [ -81.550200975999928, 24.687160549000126 ], [ -81.546986456999974, 24.685939846000124 ], [ -81.540109829999949, 24.675238348 ], [ -81.506011522999955, 24.638820705000128 ], [ -81.506011522999955, 24.631333726000079 ], [ -81.530832485999895, 24.61522044500019 ], [ -81.565052863999881, 24.602240302 ], [ -81.636463995999861, 24.583563544000029 ], [ -81.636463995999861, 24.590318101000051 ], [ -81.61693274599989, 24.605454820000048 ], [ -81.605539516999926, 24.60956452 ], [ -81.595448370999861, 24.603989976 ], [ -81.573597785999908, 24.613714911000145 ], [ -81.567494269999912, 24.617661851000136 ], [ -81.564930792999917, 24.621161200000031 ], [ -81.561675584999875, 24.622748114000061 ], [ -81.554514126999919, 24.631333726000079 ], [ -81.569243943999908, 24.64004140800013 ], [ -81.575347459999904, 24.644924221000039 ], [ -81.581166144999941, 24.651800848000121 ], [ -81.551665818999879, 24.644354559000149 ], [ -81.538685675999886, 24.636460679 ], [ -81.533355272999927, 24.624497789000046 ], [ -81.527170376999948, 24.624497789000046 ], [ -81.522450324999852, 24.63792552300005 ], [ -81.525705532999893, 24.647894598000121 ], [ -81.536488410999908, 24.653021552000055 ], [ -81.554514126999919, 24.651800848000121 ], [ -81.554514126999919, 24.659247137000094 ], [ -81.548980272999898, 24.664943752000099 ], [ -81.550526495999947, 24.668768622000087 ], [ -81.55724036399991, 24.67112864800005 ], [ -81.567494269999912, 24.672308661000088 ], [ -81.560658331999917, 24.693426825000088 ], [ -81.554514126999919, 24.693426825000088 ], [ -81.555002407999922, 24.688177802000112 ] ] ], [ [ [ -81.479725714999944, 24.672512111000131 ], [ -81.478423631999931, 24.654120184000092 ], [ -81.481312628999973, 24.649847723000093 ], [ -81.485422329999921, 24.656968492000132 ], [ -81.491118943999908, 24.662258205000015 ], [ -81.497385219999842, 24.66396719 ], [ -81.502430792999888, 24.662665106000119 ], [ -81.506459113999938, 24.660101630000028 ], [ -81.511138475999871, 24.661322333000115 ], [ -81.513742641999869, 24.663275458000086 ], [ -81.516102667999917, 24.665472723000065 ], [ -81.520171678999873, 24.674058335000083 ], [ -81.51903235599994, 24.687323309000092 ], [ -81.515004035999965, 24.697739976 ], [ -81.511626756999959, 24.698431708000143 ], [ -81.506988084999932, 24.695868231000034 ], [ -81.500884568999936, 24.695257880000085 ], [ -81.493153449999937, 24.692124742000189 ], [ -81.485747850999928, 24.686509507 ], [ -81.482411261999914, 24.683254299000154 ], [ -81.479725714999944, 24.672512111000131 ] ] ], [ [ [ -81.315541144999941, 24.67963288 ], [ -81.3177791009999, 24.674953518000066 ], [ -81.325510219999927, 24.684271552000112 ], [ -81.334706183999884, 24.689846096000124 ], [ -81.337880011999857, 24.693304755000113 ], [ -81.340891079999949, 24.700100002000156 ], [ -81.33690344999988, 24.703802802 ], [ -81.329457160999908, 24.70331452 ], [ -81.320668097999942, 24.694484768000152 ], [ -81.315541144999941, 24.67963288 ] ] ], [ [ [ -81.08250891799986, 24.69944896 ], [ -81.087717251999948, 24.685939846000124 ], [ -81.09276282499988, 24.700873114000061 ], [ -81.103911912999905, 24.706773179000109 ], [ -81.136097785999965, 24.707017320000048 ], [ -81.115589972999913, 24.715725002000127 ], [ -81.061431443999936, 24.731350002000013 ], [ -81.039906378999916, 24.734361070000105 ], [ -81.040638800999943, 24.727362372000059 ], [ -81.043690558999941, 24.724310614000146 ], [ -81.067128058999913, 24.715887762000094 ], [ -81.076161261999914, 24.709051825000174 ], [ -81.08250891799986, 24.69944896 ] ] ], [ [ [ -81.340565558999941, 24.646714585000026 ], [ -81.362660285999937, 24.631333726000079 ], [ -81.364247199999852, 24.66120026200015 ], [ -81.430287238999881, 24.75482819200009 ], [ -81.427479620999918, 24.751369533000073 ], [ -81.424631313999896, 24.749823309000035 ], [ -81.41730709499987, 24.748683986000017 ], [ -81.387684699999937, 24.727484442000033 ], [ -81.355458136999886, 24.686183986000074 ], [ -81.340565558999941, 24.646714585000026 ] ] ], [ [ [ -80.958892381999874, 24.749335028000147 ], [ -81.033070441999911, 24.720689195000162 ], [ -80.955555792999945, 24.768744208000058 ], [ -80.923817511999886, 24.775336005000142 ], [ -80.923817511999886, 24.769110419000086 ], [ -80.927886522999927, 24.765692450000174 ], [ -80.93211829299986, 24.763739325000031 ], [ -80.944325324999937, 24.76166413 ], [ -80.958892381999874, 24.749335028000147 ] ] ], [ [ [ -80.802316860999895, 24.826890367000104 ], [ -80.799712693999908, 24.825262762000179 ], [ -80.793527798999946, 24.830552476000051 ], [ -80.787342902999882, 24.830552476000051 ], [ -80.787098761999914, 24.825995184000121 ], [ -80.788441535999908, 24.822943427000112 ], [ -80.793527798999946, 24.816880601000108 ], [ -80.802154100999928, 24.809881903000061 ], [ -80.818470831999946, 24.805812893000095 ], [ -80.854969855999911, 24.803290106000148 ], [ -80.845041469999927, 24.814357815 ], [ -80.800363735999952, 24.843573309000064 ], [ -80.802154100999928, 24.833685614000117 ], [ -80.802316860999895, 24.826890367000104 ] ] ], [ [ [ -80.718251105999855, 24.859442450000174 ], [ -80.733550584999904, 24.850327867000161 ], [ -80.738352016999897, 24.850734768000095 ], [ -80.735991990999935, 24.857367255000057 ], [ -80.729725714999915, 24.862779039000102 ], [ -80.721058722999913, 24.866685289000102 ], [ -80.700835740999878, 24.881008205000072 ], [ -80.699330206999946, 24.876288153000175 ], [ -80.710845506999874, 24.864325262000037 ], [ -80.718251105999855, 24.859442450000174 ] ] ], [ [ [ -80.64696204299986, 24.904730536 ], [ -80.657134568999908, 24.901109117000132 ], [ -80.625477667999917, 24.936224677000027 ], [ -80.618519660999937, 24.941555080000072 ], [ -80.617502407999979, 24.93813711100016 ], [ -80.617746548999918, 24.936021226000051 ], [ -80.626210089999859, 24.924139716000113 ], [ -80.64696204299986, 24.904730536 ] ] ], [ [ [ -167.996164516999869, 25.004339911000145 ], [ -167.996774868999921, 25.001125393000095 ], [ -168.002797003999945, 25.014797268000123 ], [ -167.999867316999911, 25.016424872000144 ], [ -167.99555416599992, 25.011664130000057 ], [ -167.995065883999928, 25.007757880000057 ], [ -167.996164516999869, 25.004339911000145 ] ] ], [ [ [ -81.05174719999988, 25.278306382000139 ], [ -81.058745897999955, 25.273993231000034 ], [ -81.066883917999888, 25.276760158000101 ], [ -81.074615037999877, 25.288723049000126 ], [ -81.07835852799991, 25.301703192000119 ], [ -81.072865363999881, 25.310044664000188 ], [ -81.059803839999915, 25.31171295800003 ], [ -81.047474738999966, 25.309393622000144 ], [ -81.042795376999948, 25.307440497000087 ], [ -81.039784308999856, 25.296698309000178 ], [ -81.048491990999935, 25.284979559000092 ], [ -81.05174719999988, 25.278306382000139 ] ] ], [ [ [ -81.112700975999871, 25.338202216000084 ], [ -81.108713344999899, 25.337632554000109 ], [ -81.097279425999943, 25.340073960000055 ], [ -81.089019334999961, 25.33885325700011 ], [ -81.086293097999885, 25.331244208 ], [ -81.085682745999918, 25.326890367000189 ], [ -81.088124152999853, 25.322414455000128 ], [ -81.090728318999965, 25.312811591000141 ], [ -81.100331183999941, 25.318182684000121 ], [ -81.108631964999915, 25.323960679000081 ], [ -81.122222459999875, 25.33657461100016 ], [ -81.116525844999899, 25.341945705000015 ], [ -81.110422329999892, 25.340318101 ], [ -81.112700975999871, 25.338202216000084 ] ] ], [ [ [ -80.361480272999927, 25.159491278000033 ], [ -80.4427791009999, 25.086411851000051 ], [ -80.453602667999917, 25.081000067 ], [ -80.464507615999878, 25.083807684000149 ], [ -80.471262173999918, 25.072984117000047 ], [ -80.480336066999911, 25.04979075700011 ], [ -80.488148566999911, 25.039455471000011 ], [ -80.519154425999943, 25.014878648000106 ], [ -80.555978969999899, 24.970933335000083 ], [ -80.578602667999888, 24.95026276200015 ], [ -80.598011847999885, 24.950100002000099 ], [ -80.603505011999914, 24.961127020000148 ], [ -80.59398352799991, 24.966620184000149 ], [ -80.578846808999913, 24.969875393000038 ], [ -80.567616339999915, 24.973944403000175 ], [ -80.55565344999988, 25.00901927300005 ], [ -80.550160285999965, 25.014878648000106 ], [ -80.534087693999879, 25.01658763200011 ], [ -80.526478644999941, 25.02167389500012 ], [ -80.51231848899991, 25.042873440000122 ], [ -80.487619594999842, 25.06659577000012 ], [ -80.480865037999905, 25.078436591000084 ], [ -80.484445766999869, 25.091253973000121 ], [ -80.463042772999927, 25.09398021 ], [ -80.452381964999887, 25.099188544000086 ], [ -80.443430141999869, 25.111151434000035 ], [ -80.448231574999852, 25.118557033000016 ], [ -80.448597785999965, 25.122137762000179 ], [ -80.44481360599994, 25.122056382 ], [ -80.43724524599989, 25.118597723 ], [ -80.433461066999968, 25.130275783000101 ], [ -80.43903561099998, 25.139797268 ], [ -80.450428839999944, 25.14354075700011 ], [ -80.464507615999878, 25.138413804000109 ], [ -80.458566860999952, 25.15619538 ], [ -80.413400844999899, 25.147406317000119 ], [ -80.394276495999918, 25.190904039000159 ], [ -80.357329881999874, 25.22736237200003 ], [ -80.347808397999898, 25.248277085 ], [ -80.35024980399993, 25.262844143000038 ], [ -80.35765540299991, 25.269354559000121 ], [ -80.365345831999917, 25.27480703300013 ], [ -80.368967251999891, 25.286118882000139 ], [ -80.362660285999937, 25.292181708000115 ], [ -80.330637173999946, 25.299546617000132 ], [ -80.317453579999921, 25.306952216000113 ], [ -80.290598110999923, 25.34275950700011 ], [ -80.273426886999914, 25.352606512000037 ], [ -80.251616990999935, 25.344468492000132 ], [ -80.254872199999909, 25.339016018000095 ], [ -80.25812740799995, 25.335150458 ], [ -80.261708136999914, 25.332424221000011 ], [ -80.265939907999922, 25.330226955000043 ], [ -80.272694464999887, 25.323675848000121 ], [ -80.279367641999926, 25.312241929 ], [ -80.284413214999859, 25.300441799000012 ], [ -80.286447719999899, 25.292669989000117 ], [ -80.29133053299995, 25.28261953300013 ], [ -80.32054602799991, 25.248277085 ], [ -80.353342251999919, 25.205552476 ], [ -80.36583411399991, 25.181219794000114 ], [ -80.361480272999927, 25.165716864 ], [ -80.361480272999927, 25.159491278000033 ] ] ], [ [ [ -80.216908331999974, 25.415472723 ], [ -80.231190558999884, 25.403387762000094 ], [ -80.232533331999946, 25.404730536000088 ], [ -80.235096808999884, 25.404852606000148 ], [ -80.23802649599989, 25.405951239 ], [ -80.224354620999861, 25.416083075000145 ], [ -80.215728318999936, 25.432033596000068 ], [ -80.199940558999913, 25.489813544000086 ], [ -80.19701087099989, 25.494696356000148 ], [ -80.188221808999913, 25.498358466000028 ], [ -80.186594204999892, 25.493312893000095 ], [ -80.18846594999988, 25.485419012000094 ], [ -80.190174933999884, 25.481024481000034 ], [ -80.193918423999889, 25.459214585000083 ], [ -80.203480597999885, 25.436590887000094 ], [ -80.216908331999974, 25.415472723 ] ] ], [ [ [ -80.158314581999946, 25.679266669000143 ], [ -80.162912563999868, 25.672837632000139 ], [ -80.175607876999948, 25.673407294000114 ], [ -80.181792772999898, 25.681301174000069 ], [ -80.18032792899993, 25.691880601000136 ], [ -80.169748501999891, 25.700751044000171 ], [ -80.173573370999918, 25.702866929 ], [ -80.176136847999913, 25.704820054000137 ], [ -80.178863084999875, 25.70648834800015 ], [ -80.183338995999947, 25.707586981000091 ], [ -80.183338995999947, 25.713812567000062 ], [ -80.175689256999931, 25.718329169000114 ], [ -80.170074022999927, 25.722845770000063 ], [ -80.166005011999857, 25.728176174000126 ], [ -80.162912563999868, 25.734930731000148 ], [ -80.156076626999948, 25.734930731000148 ], [ -80.158314581999946, 25.679266669000143 ] ] ], [ [ [ -171.722808397999927, 25.773016669000143 ], [ -171.729359503999916, 25.751939195000134 ], [ -171.739084438999868, 25.756293036000116 ], [ -171.740671352999897, 25.769029039000159 ], [ -171.722849087999919, 25.773016669000143 ], [ -171.722808397999927, 25.773016669000143 ] ] ], [ [ [ -81.373199022999898, 25.816107489000089 ], [ -81.370716925999943, 25.810126044000143 ], [ -81.377430792999917, 25.807033596000068 ], [ -81.387562628999945, 25.806097723 ], [ -81.393218553999958, 25.802191473 ], [ -81.397084113999966, 25.797593492000161 ], [ -81.399891730999911, 25.794867255 ], [ -81.399728969999842, 25.791815497000087 ], [ -81.403228318999936, 25.793524481000091 ], [ -81.406809048999918, 25.796698309000149 ], [ -81.41771399599989, 25.808783270000063 ], [ -81.425160285999965, 25.811468817000062 ], [ -81.433338995999861, 25.804754950000117 ], [ -81.439564581999917, 25.803900458 ], [ -81.439849412999962, 25.826483466000084 ], [ -81.441232876999948, 25.832505601 ], [ -81.440500454999921, 25.842433986000074 ], [ -81.429514126999948, 25.850897528000033 ], [ -81.412220831999946, 25.843247789000102 ], [ -81.405181443999879, 25.836981512000065 ], [ -81.38707434799997, 25.824123440000122 ], [ -81.380482550999915, 25.82094961100016 ], [ -81.373199022999898, 25.816107489000089 ] ] ], [ [ [ -81.465158657999893, 25.865668036000031 ], [ -81.45799719999988, 25.850409247000059 ], [ -81.456125454999892, 25.841864325000031 ], [ -81.453439907999922, 25.838812567000119 ], [ -81.450510219999899, 25.832342841000028 ], [ -81.453358527999939, 25.82550690300009 ], [ -81.459624803999901, 25.822821356000034 ], [ -81.466949022999898, 25.829331773000106 ], [ -81.471058722999942, 25.835272528000061 ], [ -81.473866339999887, 25.840399481000148 ], [ -81.479562954999977, 25.84760163 ], [ -81.495269334999932, 25.848700262000037 ], [ -81.498036261999886, 25.852118231000063 ], [ -81.502837693999879, 25.855454820000162 ], [ -81.507883266999926, 25.852036851000079 ], [ -81.508371548999918, 25.847316799000154 ], [ -81.509103969999842, 25.843491929000052 ], [ -81.510975714999915, 25.83685944200009 ], [ -81.51203365799995, 25.836127020000148 ], [ -81.512115037999934, 25.840277411 ], [ -81.51496334499987, 25.84300364800005 ], [ -81.519764777999882, 25.848700262000037 ], [ -81.516916469999927, 25.859767971000068 ], [ -81.503041144999941, 25.86587148600016 ], [ -81.494455532999922, 25.867621161000059 ], [ -81.489816860999895, 25.869818427000055 ], [ -81.47435462099989, 25.87246328300013 ], [ -81.465158657999893, 25.865668036000031 ] ] ], [ [ [ -81.676136847999885, 25.90127187700007 ], [ -81.663400844999927, 25.896918036000088 ], [ -81.660023566999911, 25.886542059000178 ], [ -81.672027147999927, 25.86725495000006 ], [ -81.677398240999878, 25.861476955000072 ], [ -81.690256313999924, 25.863104559000092 ], [ -81.696156378999945, 25.865790106000176 ], [ -81.698801235999923, 25.872626044000086 ], [ -81.701568162999905, 25.877508856000148 ], [ -81.706369594999899, 25.881496486000131 ], [ -81.70856686099998, 25.88377513200011 ], [ -81.710764126999948, 25.889715887000037 ], [ -81.7084041009999, 25.898667710000083 ], [ -81.69896399599989, 25.899847723 ], [ -81.688872850999928, 25.899318752000042 ], [ -81.676136847999885, 25.90127187700007 ] ] ], [ [ [ -81.536488410999908, 25.870917059000092 ], [ -81.545765753999945, 25.8536644550001 ], [ -81.548491990999906, 25.857489325000088 ], [ -81.546457485999895, 25.872748114000061 ], [ -81.54784094999988, 25.881659247000115 ], [ -81.554025844999842, 25.884507554000052 ], [ -81.558705206999946, 25.889064846000011 ], [ -81.561024542999917, 25.894842841000141 ], [ -81.558338995999947, 25.903387762000179 ], [ -81.545887824999909, 25.902411200000117 ], [ -81.53921464799987, 25.895331122000144 ], [ -81.542225714999887, 25.89386627800009 ], [ -81.54312089799987, 25.893011786000088 ], [ -81.541005011999857, 25.890122789000046 ], [ -81.536040818999908, 25.88499583500014 ], [ -81.53355872299997, 25.878648179000109 ], [ -81.536488410999908, 25.870917059000092 ] ] ], [ [ [ -173.95917721299989, 26.059637762000122 ], [ -173.959950324999909, 26.055324611000017 ], [ -173.965646938999896, 26.058579820000162 ], [ -173.966379360999923, 26.061957098000093 ], [ -173.965199347999885, 26.066107489000117 ], [ -173.964995897999927, 26.071356512000094 ], [ -173.962839321999923, 26.06663646 ], [ -173.960519985999895, 26.063137111000017 ], [ -173.95917721299989, 26.059637762000122 ] ] ], [ [ [ -82.129221157999922, 26.46112702 ], [ -82.096262173999946, 26.454535223000121 ], [ -82.076812303999958, 26.456203518000152 ], [ -82.068430141999897, 26.467962958000115 ], [ -82.026844855999911, 26.447455145000063 ], [ -82.04552161399991, 26.443752346000124 ], [ -82.07091223899991, 26.424627997000144 ], [ -82.088246222999913, 26.419501044000057 ], [ -82.103586391999869, 26.422552802000141 ], [ -82.163929816999882, 26.454291083 ], [ -82.175038214999915, 26.462469794000086 ], [ -82.184071417999917, 26.473334052 ], [ -82.191314256999959, 26.4884300800001 ], [ -82.200672980999883, 26.519598700000174 ], [ -82.204945441999911, 26.550482489000117 ], [ -82.196278449999909, 26.544501044000114 ], [ -82.19078528599988, 26.536525783000158 ], [ -82.187163865999906, 26.526922919000086 ], [ -82.184437628999945, 26.515773830000157 ], [ -82.175892706999917, 26.494940497000087 ], [ -82.164133266999841, 26.479559637000037 ], [ -82.148793097999885, 26.468573309000178 ], [ -82.129221157999922, 26.46112702 ] ] ], [ [ [ -82.229318813999868, 26.633775132000054 ], [ -82.225453253999945, 26.611273505000057 ], [ -82.239084438999896, 26.634182033000158 ], [ -82.247670050999915, 26.654364325000088 ], [ -82.260161912999934, 26.701320705000015 ], [ -82.255482550999915, 26.701239325000031 ], [ -82.252349412999934, 26.699611721000011 ], [ -82.245961066999911, 26.694525458 ], [ -82.244536912999934, 26.67080312700007 ], [ -82.229318813999868, 26.633775132000054 ] ] ], [ [ [ -82.080962693999908, 26.509019273000106 ], [ -82.082020636999857, 26.491522528000175 ], [ -82.095082160999937, 26.495835679000081 ], [ -82.108509894999912, 26.516302802000141 ], [ -82.12364661399991, 26.56537506700009 ], [ -82.136708136999886, 26.584662177000112 ], [ -82.132435675999886, 26.609808661 ], [ -82.145741339999915, 26.640122789000159 ], [ -82.16466223899991, 26.671942450000031 ], [ -82.177642381999931, 26.701320705000015 ], [ -82.163970506999874, 26.701320705000015 ], [ -82.143910285999937, 26.694647528000147 ], [ -82.124501105999911, 26.676459052000084 ], [ -82.113636847999942, 26.654364325000088 ], [ -82.123199022999927, 26.618719794000029 ], [ -82.11156165299991, 26.596380927000027 ], [ -82.096018032999922, 26.574937242000161 ], [ -82.088246222999913, 26.560451565000122 ], [ -82.080962693999908, 26.509019273000106 ] ] ], [ [ [ -82.25910396999987, 26.737250067 ], [ -82.266428188999868, 26.714992580000157 ], [ -82.274647589999887, 26.736151434000149 ], [ -82.277821417999945, 26.785060940000122 ], [ -82.287505662999905, 26.803127346000068 ], [ -82.281483527999882, 26.809475002000099 ], [ -82.278431769999884, 26.810044664000074 ], [ -82.273833787999962, 26.803127346000068 ], [ -82.262928839999887, 26.780096747000087 ], [ -82.257964647999927, 26.758530992000161 ], [ -82.25910396999987, 26.737250067 ] ] ], [ [ [ -97.163398650999852, 26.113592979000046 ], [ -97.166379235999926, 26.102846573000036 ], [ -97.179330813999854, 26.11982858100005 ], [ -97.18831397999989, 26.149335642000139 ], [ -97.213016566999841, 26.292714116000113 ], [ -97.227160603999948, 26.337414977000108 ], [ -97.239898240999963, 26.364935614000061 ], [ -97.249175584999904, 26.390814520000092 ], [ -97.26036536399991, 26.467962958000115 ], [ -97.268381313999868, 26.490383205000128 ], [ -97.292062954999977, 26.52920156500015 ], [ -97.301340298999946, 26.550482489000117 ], [ -97.313221808999884, 26.60675690300009 ], [ -97.318104620999861, 26.616441148000078 ], [ -97.329253709999875, 26.633042710000112 ], [ -97.337880011999886, 26.653957424000069 ], [ -97.35008704299986, 26.697414455000043 ], [ -97.363392706999974, 26.721177476000108 ], [ -97.355946417999888, 26.728583075000117 ], [ -97.362538214999887, 26.734442450000145 ], [ -97.366810675999886, 26.740708726000108 ], [ -97.369211391999841, 26.747788804000081 ], [ -97.370228644999884, 26.755926825000088 ], [ -97.368234829999949, 26.759955145000148 ], [ -97.358265753999945, 26.762518622000144 ], [ -97.355946417999888, 26.76585521 ], [ -97.357004360999866, 26.771551825000145 ], [ -97.36192786399991, 26.779282945000162 ], [ -97.363392706999974, 26.783270575000145 ], [ -97.367421027999853, 26.79120514500012 ], [ -97.397531704999977, 26.831000067 ], [ -97.388050910999965, 26.865545966000028 ], [ -97.385406053999873, 26.900376695000048 ], [ -97.393910285999908, 26.994289455000015 ], [ -97.403065558999884, 27.030910549000126 ], [ -97.405018683999941, 27.050767320000048 ], [ -97.398019985999866, 27.088364976000051 ], [ -97.397084113999881, 27.107326565000065 ], [ -97.405018683999941, 27.125230210000112 ], [ -97.396962042999917, 27.146185614000061 ], [ -97.391590949999852, 27.193101304000109 ], [ -97.377064581999917, 27.207831122000115 ], [ -97.383900519999941, 27.187933661000031 ], [ -97.376291469999899, 26.931626695000105 ], [ -97.342884894999912, 26.756740627000099 ], [ -97.238677537999934, 26.445786851000051 ], [ -97.239898240999963, 26.43378327000012 ], [ -97.231271938999868, 26.421087958000086 ], [ -97.224924282999922, 26.399074611000074 ], [ -97.21219000499994, 26.340282908000077 ], [ -97.202259894999969, 26.298773505000085 ], [ -97.198312954999977, 26.276109117000132 ], [ -97.182679856999926, 26.231154556 ], [ -97.177423894999919, 26.205007664 ], [ -97.17067950899991, 26.179523321000048 ], [ -97.164401777999899, 26.131494536 ], [ -97.163398650999852, 26.113592979000046 ] ] ], [ [ [ -82.59308834499987, 27.339829820000048 ], [ -82.58918209499987, 27.324448960000112 ], [ -82.606678839999915, 27.336655992000189 ], [ -82.649037238999938, 27.381333726000051 ], [ -82.657460089999887, 27.39679596600017 ], [ -82.66441809799997, 27.404486395 ], [ -82.676625128999945, 27.421779690000093 ], [ -82.680978969999842, 27.434068101000051 ], [ -82.664214647999927, 27.426906643 ], [ -82.654286261999914, 27.419663804 ], [ -82.630116339999915, 27.37970612200003 ], [ -82.59308834499987, 27.339829820000048 ] ] ], [ [ [ -97.178007216999845, 27.652843669 ], [ -97.259354604999942, 27.496174655000132 ], [ -97.320256321999892, 27.357574337000088 ], [ -97.346609416999883, 27.274163730000069 ], [ -97.351642487999953, 27.235170581000162 ], [ -97.365912490999904, 27.224231404000122 ], [ -97.388091600999957, 27.223944403000175 ], [ -97.397531704999977, 27.228908596000124 ], [ -97.389759894999969, 27.245550848000065 ], [ -97.370252640999922, 27.348366418000111 ], [ -97.338758743999847, 27.409122490000172 ], [ -97.321527833999937, 27.456231586000129 ], [ -97.312397116999961, 27.477972228000127 ], [ -97.298182559999873, 27.507865422000023 ], [ -97.282954363999949, 27.540472627000113 ], [ -97.270767838999888, 27.566737607000093 ], [ -97.257232225999928, 27.59275950700011 ], [ -97.245106574999852, 27.623195705000072 ], [ -97.244007941999911, 27.632635809000092 ], [ -97.249582485999923, 27.643784898000106 ], [ -97.254139777999853, 27.659654039000046 ], [ -97.230620897999898, 27.651190497000087 ], [ -97.219227667999945, 27.643947658000073 ], [ -97.211984829999921, 27.632961330000015 ], [ -97.205718553999873, 27.632961330000015 ], [ -97.15103105399993, 27.739894924000069 ], [ -97.123850063999924, 27.769517320000105 ], [ -97.081857876999919, 27.804144598 ], [ -97.075428839999915, 27.814520575000088 ], [ -97.067534959999932, 27.840887762000094 ], [ -97.052601691999911, 27.844183661000145 ], [ -97.044016079999892, 27.83527252800009 ], [ -97.054921027999882, 27.824774481000034 ], [ -97.178007216999845, 27.652843669 ] ] ], [ [ [ -80.167225714999887, 27.197007554000109 ], [ -80.162912563999868, 27.173651434000121 ], [ -80.177316860999952, 27.202215887000094 ], [ -80.197621222999942, 27.223944403000175 ], [ -80.208159959999904, 27.26292552300005 ], [ -80.268950975999928, 27.382310289000131 ], [ -80.27277584499987, 27.39679596600017 ], [ -80.275868292999945, 27.401760158000044 ], [ -80.289540167999888, 27.411810614 ], [ -80.292591925999972, 27.417303778000033 ], [ -80.294056769999912, 27.429917710000112 ], [ -80.306874152999853, 27.461655992000161 ], [ -80.347808397999898, 27.612494208000058 ], [ -80.356760219999927, 27.629339911000059 ], [ -80.36583411399991, 27.642238674000069 ], [ -80.372914191999882, 27.656561591000141 ], [ -80.377797003999945, 27.686468817000119 ], [ -80.386789516999869, 27.706732489000146 ], [ -80.388783331999917, 27.718654690000093 ], [ -80.39110266799986, 27.727443752000156 ], [ -80.409901495999918, 27.756496486000131 ], [ -80.438465949999909, 27.830471096000011 ], [ -80.450917120999918, 27.852036851000108 ], [ -80.447417772999927, 27.8556175800001 ], [ -80.444569464999887, 27.857489325000145 ], [ -80.43724524599989, 27.859564520000092 ], [ -80.43724524599989, 27.854559637000037 ], [ -80.435536261999886, 27.8517113300001 ], [ -80.432728644999941, 27.849351304000137 ], [ -80.429798956999917, 27.845892645000148 ], [ -80.422189907999979, 27.804999091000113 ], [ -80.401926235999952, 27.764146226000051 ], [ -80.361480272999927, 27.701239325000117 ], [ -80.347238735999923, 27.664129950000117 ], [ -80.342762824999852, 27.643255927000141 ], [ -80.341053839999859, 27.62246328300013 ], [ -80.337635870999947, 27.606634833000115 ], [ -80.167225714999887, 27.197007554000109 ] ] ], [ [ [ -97.028675910999937, 27.871527411000031 ], [ -97.034413214999915, 27.852036851000108 ], [ -97.043039516999926, 27.870306708 ], [ -97.029774542999888, 27.900580145000092 ], [ -96.993478969999899, 27.948309637000037 ], [ -96.963978644999912, 27.976711330000072 ], [ -96.959339972999885, 27.983058986000103 ], [ -96.953033006999931, 27.994208075000117 ], [ -96.953358527999882, 28.000311591000113 ], [ -96.972564256999931, 28.005031643 ], [ -96.972564256999931, 28.009914455000072 ], [ -96.914051886999857, 28.099107164000046 ], [ -96.900257941999939, 28.101955471000096 ], [ -96.89289303299995, 28.109198309000092 ], [ -96.887603318999879, 28.119208075000088 ], [ -96.88023841099988, 28.130113023000078 ], [ -96.867583787999905, 28.135565497000115 ], [ -96.854847785999965, 28.130682684000035 ], [ -96.845366990999963, 28.121242580000015 ], [ -96.842640753999888, 28.112779039000159 ], [ -96.845692511999886, 28.102850653000175 ], [ -96.847157355999855, 28.080471096000153 ], [ -96.85008704299986, 28.071193752000013 ], [ -96.938221808999884, 27.983058986000103 ], [ -96.979237433999884, 27.927801825000088 ], [ -97.01463782499988, 27.890936591000028 ], [ -97.028675910999937, 27.871527411000031 ] ] ], [ [ [ -80.629017706999917, 28.181057033000073 ], [ -80.63646399599989, 28.181057033000073 ], [ -80.638010219999927, 28.193426825000117 ], [ -80.640695766999897, 28.204169012000037 ], [ -80.64858964799987, 28.222723700000031 ], [ -80.631988084999932, 28.19041575700011 ], [ -80.629017706999917, 28.181057033000073 ] ] ], [ [ [ -96.406727667999888, 28.344427802000084 ], [ -96.415150519999912, 28.333075262000094 ], [ -96.416859503999916, 28.328762111000103 ], [ -96.489491339999915, 28.297105210000112 ], [ -96.522328253999916, 28.289618231000148 ], [ -96.553537563999896, 28.271429755000057 ], [ -96.608631964999944, 28.22943756700009 ], [ -96.702626105999883, 28.185532945000048 ], [ -96.727650519999912, 28.161607164000159 ], [ -96.781158006999931, 28.126450914000102 ], [ -96.808705206999946, 28.103257554 ], [ -96.820871548999918, 28.088324286000145 ], [ -96.82835852799991, 28.071193752000013 ], [ -96.835804816999968, 28.071193752000013 ], [ -96.832508917999945, 28.088771877000127 ], [ -96.824289516999841, 28.107489325000088 ], [ -96.813221808999913, 28.12368398600016 ], [ -96.801665818999879, 28.133856512000094 ], [ -96.801665818999879, 28.140082098000065 ], [ -96.808990037999877, 28.151434637000037 ], [ -96.812367316999911, 28.170111395 ], [ -96.807769334999961, 28.187648830000157 ], [ -96.791127081999917, 28.19525788 ], [ -96.770741339999915, 28.197455145000092 ], [ -96.738514777999882, 28.206854559000092 ], [ -96.722238735999866, 28.208970445000105 ], [ -96.7103572259999, 28.213364976000022 ], [ -96.672108527999853, 28.23371002800009 ], [ -96.663889126999948, 28.239691473 ], [ -96.654286261999886, 28.257147528000147 ], [ -96.612049933999856, 28.277492580000157 ], [ -96.602447068999879, 28.287502346000124 ], [ -96.594797329999949, 28.292669989000146 ], [ -96.548451300999972, 28.311428127000013 ], [ -96.528065558999884, 28.330145575000174 ], [ -96.514963344999927, 28.336818752000127 ], [ -96.493234829999949, 28.33930084800015 ], [ -96.455433722999913, 28.336004950000117 ], [ -96.443226691999911, 28.341376044000171 ], [ -96.431141730999911, 28.359767971000039 ], [ -96.430490688999868, 28.36782461100016 ], [ -96.431467251999948, 28.388983466000141 ], [ -96.427723761999914, 28.393296617000075 ], [ -96.418812628999973, 28.395086981000063 ], [ -96.412342902999882, 28.397528387000179 ], [ -96.40758216099988, 28.39638906500015 ], [ -96.403797980999855, 28.387111721000096 ], [ -96.40298417899993, 28.360785223000093 ], [ -96.403797980999855, 28.35236237200003 ], [ -96.406727667999888, 28.344427802000084 ] ] ], [ [ [ -178.298397057999921, 28.387372162000148 ], [ -178.30271836599988, 28.386464725000039 ], [ -178.304366162999884, 28.387912197000063 ], [ -178.29798837599995, 28.390993294000097 ], [ -178.294286781999915, 28.394978087000098 ], [ -178.292436738999868, 28.3980567360001 ], [ -178.290381138999891, 28.401678575000105 ], [ -178.287904780999895, 28.392989461000141 ], [ -178.292224761999933, 28.390090854000121 ], [ -178.298397057999921, 28.387372162000148 ] ] ], [ [ [ -96.350087042999888, 28.408880927000055 ], [ -96.369699673999946, 28.406927802000027 ], [ -96.369699673999946, 28.414455471000068 ], [ -96.312896287999877, 28.458563544000143 ], [ -96.275257941999911, 28.478705145 ], [ -96.232533331999889, 28.489488023000021 ], [ -96.232533331999889, 28.482733466000141 ], [ -96.240467902999853, 28.481919664000046 ], [ -96.244618292999888, 28.480169989000061 ], [ -96.247873501999919, 28.477769273000106 ], [ -96.246734178999901, 28.475246486000103 ], [ -96.254953579999892, 28.471096096000153 ], [ -96.27603105399993, 28.457098700000088 ], [ -96.283924933999884, 28.447658596000068 ], [ -96.308216925999972, 28.441717841000141 ], [ -96.333729620999861, 28.418850002000127 ], [ -96.350087042999888, 28.408880927000055 ] ] ], [ [ [ -80.612172003999916, 28.568833726000136 ], [ -80.618478969999842, 28.537665106000148 ], [ -80.649525519999969, 28.475246486000103 ], [ -80.658192511999857, 28.437486070000134 ], [ -80.66421464799987, 28.31509023600016 ], [ -80.66893469999988, 28.29706452000012 ], [ -80.669992641999926, 28.287502346000124 ], [ -80.667958136999886, 28.275946356000119 ], [ -80.659006313999868, 28.256293036000059 ], [ -80.651478644999912, 28.239976304000137 ], [ -80.649769660999908, 28.225165106000148 ], [ -80.664947068999908, 28.252590236000017 ], [ -80.700184699999937, 28.348089911000116 ], [ -80.714711066999882, 28.369777736000103 ], [ -80.719634568999936, 28.388332424000012 ], [ -80.728342251999919, 28.469061591000028 ], [ -80.737416144999912, 28.484849351000079 ], [ -80.739898240999935, 28.517482815000122 ], [ -80.732289191999911, 28.544623114000146 ], [ -80.710926886999857, 28.544134833000058 ], [ -80.704701300999886, 28.560614325000031 ], [ -80.6986384759999, 28.567775783000073 ], [ -80.67747962099989, 28.578924872000087 ], [ -80.655506964999887, 28.593329169000171 ], [ -80.642933722999885, 28.598130601000051 ], [ -80.629017706999917, 28.598781643 ], [ -80.612172003999916, 28.568833726000136 ] ] ], [ [ [ -82.683216925999915, 28.73773834800015 ], [ -82.677601691999911, 28.736070054000137 ], [ -82.672718878999945, 28.737046617000104 ], [ -82.666005011999914, 28.734442450000117 ], [ -82.667062954999949, 28.722357489 ], [ -82.672271287999934, 28.715236721000153 ], [ -82.673736131999902, 28.714422919000143 ], [ -82.678212042999888, 28.714260158000073 ], [ -82.681874152999939, 28.716945705000157 ], [ -82.681874152999939, 28.720851955000157 ], [ -82.696034308999856, 28.725572007000054 ], [ -82.695871548999889, 28.728949286000088 ], [ -82.692005988999881, 28.729152736000131 ], [ -82.688140428999873, 28.728989976000079 ], [ -82.685617641999869, 28.730047919000029 ], [ -82.689279751999919, 28.731756903000033 ], [ -82.688954230999883, 28.735296942000033 ], [ -82.683216925999915, 28.73773834800015 ] ] ], [ [ [ -82.682199673999946, 28.760321356000119 ], [ -82.692534959999961, 28.760239976000136 ], [ -82.697377081999946, 28.761460679000052 ], [ -82.696400519999969, 28.76398346600017 ], [ -82.692738410999908, 28.769354559000035 ], [ -82.691639777999882, 28.773098049000069 ], [ -82.695464647999898, 28.776434637000094 ], [ -82.697580532999893, 28.782294012000037 ], [ -82.694935675999915, 28.787583726000108 ], [ -82.688099738999881, 28.788153387000179 ], [ -82.679921027999882, 28.784654039000188 ], [ -82.673491990999963, 28.777085679000137 ], [ -82.673817511999886, 28.76666901200015 ], [ -82.682199673999946, 28.760321356000119 ] ] ], [ [ [ -90.879628058999884, 29.051255601 ], [ -90.915109829999949, 29.051255601 ], [ -90.943714972999942, 29.060777085 ], [ -90.903187628999916, 29.057196356000119 ], [ -90.879628058999884, 29.051255601 ] ] ], [ [ [ -90.643950975999928, 29.070624091000113 ], [ -90.656320766999869, 29.063218492000132 ], [ -90.672759568999936, 29.057277736000103 ], [ -90.7494197259999, 29.040961005000085 ], [ -90.765207485999952, 29.040961005000085 ], [ -90.767160610999895, 29.047064520000063 ], [ -90.73997962099989, 29.052883205000015 ], [ -90.73501542899993, 29.05760325700011 ], [ -90.714100714999887, 29.06541575700011 ], [ -90.708241339999944, 29.06541575700011 ], [ -90.705433722999885, 29.061753648000078 ], [ -90.69684811099998, 29.059230861000131 ], [ -90.684071417999917, 29.06085846600017 ], [ -90.676625128999945, 29.065171617000161 ], [ -90.673573370999861, 29.067938544000029 ], [ -90.657093878999973, 29.066839911000088 ], [ -90.652088995999918, 29.067206122000087 ], [ -90.648833787999877, 29.069403387000094 ], [ -90.642201300999915, 29.072943427000084 ], [ -90.643950975999928, 29.070624091000113 ] ] ], [ [ [ -90.413970506999931, 29.052435614000117 ], [ -90.41340084499987, 29.048570054000109 ], [ -90.42015540299991, 29.048732815000065 ], [ -90.464588995999918, 29.057806708000086 ], [ -90.512359178999873, 29.074855861000131 ], [ -90.510975714999887, 29.080308335000083 ], [ -90.452300584999961, 29.06956614800005 ], [ -90.428578253999945, 29.061224677 ], [ -90.417388475999957, 29.055487372000115 ], [ -90.413970506999931, 29.052435614000117 ] ] ], [ [ [ -90.283843553999958, 29.078558661000088 ], [ -90.346547003999945, 29.058050848000121 ], [ -90.31859290299991, 29.078558661000088 ], [ -90.31078040299991, 29.082424221000068 ], [ -90.302561001999919, 29.084906317 ], [ -90.293609178999901, 29.08612702000012 ], [ -90.283843553999958, 29.086004950000145 ], [ -90.283843553999958, 29.078558661000088 ] ] ], [ [ [ -83.036773240999906, 29.13751862200003 ], [ -83.049956834999932, 29.131984768 ], [ -83.058176235999952, 29.136175848000121 ], [ -83.057525193999908, 29.150091864000117 ], [ -83.050282355999883, 29.155707098000121 ], [ -83.042958136999857, 29.151271877000127 ], [ -83.038197394999969, 29.145209052000055 ], [ -83.03294837099989, 29.14126211100016 ], [ -83.029652472999942, 29.139797268 ], [ -83.036773240999906, 29.13751862200003 ] ] ], [ [ [ -90.450021938999896, 29.235093492000047 ], [ -90.4525447259999, 29.224025783000016 ], [ -90.45360266799986, 29.237982489000089 ], [ -90.44627844999988, 29.260321356000119 ], [ -90.43455969999988, 29.264471747000144 ], [ -90.433827277999939, 29.255113023000106 ], [ -90.440256313999868, 29.247707424000126 ], [ -90.446766730999855, 29.242132880000113 ], [ -90.450021938999896, 29.235093492000047 ] ] ], [ [ [ -90.02375240799995, 29.216376044000171 ], [ -90.030629035999937, 29.216376044000171 ], [ -90.024281378999916, 29.238470770000063 ], [ -90.001698370999947, 29.249090887000094 ], [ -89.976633266999869, 29.256903387000094 ], [ -89.962961391999926, 29.270982164000046 ], [ -89.955474412999934, 29.270982164000046 ], [ -89.962961391999926, 29.264146226000108 ], [ -89.955474412999934, 29.257310289000102 ], [ -89.976144985999952, 29.245062567000147 ], [ -90.010365363999938, 29.229437567000062 ], [ -90.02375240799995, 29.216376044000171 ] ] ], [ [ [ -89.914458787999934, 29.284857489000117 ], [ -89.929269985999923, 29.27659739800005 ], [ -89.938954230999883, 29.277248440000093 ], [ -89.933827277999853, 29.284572658000101 ], [ -89.927845831999946, 29.28815338700015 ], [ -89.922759568999908, 29.289292710000026 ], [ -89.913156704999949, 29.290228583 ], [ -89.914458787999934, 29.284857489000117 ] ] ], [ [ [ -94.814279751999891, 29.352932033000073 ], [ -94.724408970999974, 29.333154895000078 ], [ -94.891654983999871, 29.224861529000165 ], [ -94.947248464999916, 29.193913693000141 ], [ -95.075955386999908, 29.114043627000157 ], [ -95.108281049999903, 29.088597249000046 ], [ -95.116543590999896, 29.088992912000023 ], [ -95.102255879999916, 29.11117147 ], [ -95.081280775999915, 29.136083932000176 ], [ -95.034002990999937, 29.162938401000147 ], [ -94.967765416999924, 29.20787631400016 ], [ -94.943098856999939, 29.22286028800012 ], [ -94.928740668999893, 29.236891388000132 ], [ -94.920725063999868, 29.250474351 ], [ -94.917225714999887, 29.255316473000065 ], [ -94.875111456999917, 29.284613348000093 ], [ -94.866810675999943, 29.299953518000123 ], [ -94.862049933999941, 29.305121161000145 ], [ -94.839833136999886, 29.310492255 ], [ -94.837880011999943, 29.311265367000104 ], [ -94.828033006999931, 29.31761302300005 ], [ -94.821644660999908, 29.331122137000122 ], [ -94.824289516999897, 29.343329169000086 ], [ -94.84154212099989, 29.346096096000153 ], [ -94.84154212099989, 29.352932033000073 ], [ -94.836496548999946, 29.352362372000115 ], [ -94.835275844999842, 29.353989976000136 ], [ -94.835275844999842, 29.356838283000073 ], [ -94.834095831999917, 29.359767971000096 ], [ -94.831939256999902, 29.360174872000087 ], [ -94.827870245999861, 29.359767971000096 ], [ -94.827015753999945, 29.353949286000145 ], [ -94.814279751999891, 29.352932033000073 ] ] ], [ [ [ -89.182606574999909, 29.473130601000051 ], [ -89.203236456999917, 29.469142971000096 ], [ -89.221831834999932, 29.46963125200007 ], [ -89.187814907999893, 29.480373440000093 ], [ -89.173003709999932, 29.489325262000122 ], [ -89.167836066999911, 29.503729559000178 ], [ -89.163156704999921, 29.504461981000119 ], [ -89.161610480999883, 29.503159898000106 ], [ -89.161366339999915, 29.500637111000103 ], [ -89.160389777999853, 29.497503973000121 ], [ -89.166249152999882, 29.482367255000113 ], [ -89.182606574999909, 29.473130601000051 ] ] ], [ [ [ -90.104644334999932, 29.511379299000012 ], [ -90.095814581999974, 29.510077216000113 ], [ -90.081776495999918, 29.511297919000029 ], [ -90.061105923999889, 29.504543361000103 ], [ -90.053578253999945, 29.500474351000136 ], [ -90.048980272999898, 29.496649481000119 ], [ -90.041086391999841, 29.493394273000078 ], [ -90.030100063999868, 29.490912177000141 ], [ -90.020415818999908, 29.486639716000028 ], [ -90.014556443999965, 29.478583075000088 ], [ -90.01805579299986, 29.474351304000081 ], [ -90.028391079999977, 29.47540924700003 ], [ -90.028146938999924, 29.47190989800005 ], [ -90.01805579299986, 29.461330471000096 ], [ -90.009103969999842, 29.457586981000148 ], [ -90.001861131999902, 29.459621486000074 ], [ -89.998443162999905, 29.461249091000113 ], [ -89.997303839999859, 29.465562242000104 ], [ -89.995716925999943, 29.46474844 ], [ -89.994862433999941, 29.459377346000124 ], [ -89.994943813999924, 29.456610419000086 ], [ -89.993234829999921, 29.458441473000065 ], [ -89.991525844999899, 29.455715236000103 ], [ -89.991688605999883, 29.44863515800013 ], [ -89.995838995999918, 29.444810289000102 ], [ -90.001047329999892, 29.445705471000011 ], [ -90.015736456999889, 29.443793036000145 ], [ -90.021311001999919, 29.448309637000094 ], [ -90.024891730999883, 29.456854559000035 ], [ -90.031483527999853, 29.463283596000124 ], [ -90.03921464799987, 29.464422919000171 ], [ -90.044341600999871, 29.461411851000079 ], [ -90.049956834999875, 29.461411851000079 ], [ -90.053781704999892, 29.463527736000074 ], [ -90.057687954999892, 29.466213283000158 ], [ -90.06208248599998, 29.47284577000012 ], [ -90.061350063999839, 29.477240302000112 ], [ -90.058827277999939, 29.478013414000131 ], [ -90.06419837099989, 29.478664455000072 ], [ -90.078602667999945, 29.476629950000145 ], [ -90.091949022999955, 29.47353750200007 ], [ -90.101796027999882, 29.478338934000149 ], [ -90.119007941999911, 29.496242580000015 ], [ -90.119862433999913, 29.505519924000069 ], [ -90.113514777999882, 29.510728257000054 ], [ -90.104644334999932, 29.511379299000012 ] ] ], [ [ [ -89.091420050999915, 29.523911851000108 ], [ -89.098500128999973, 29.520941473 ], [ -89.057036912999962, 29.562079169000171 ], [ -89.054798956999974, 29.563625393000038 ], [ -89.049916144999912, 29.565008856000091 ], [ -89.05402584499987, 29.559515692000062 ], [ -89.084095831999917, 29.529445705000128 ], [ -89.091420050999915, 29.523911851000108 ] ] ], [ [ [ -88.968820766999897, 29.638576565000065 ], [ -88.97826087099989, 29.631659247000172 ], [ -88.979603644999884, 29.632879950000088 ], [ -88.97008216099988, 29.639797268000095 ], [ -88.964507615999878, 29.642767645 ], [ -88.968820766999897, 29.638576565000065 ] ] ], [ [ [ -91.802072719999899, 29.490057684000035 ], [ -91.840484178999901, 29.483832098000093 ], [ -91.898019985999895, 29.517035223 ], [ -91.908192511999943, 29.521144924000154 ], [ -91.91844641799986, 29.529974677000027 ], [ -92.020497199999852, 29.568752346000124 ], [ -92.036529100999928, 29.58209870000006 ], [ -92.03538977799991, 29.596177476 ], [ -92.012318488999938, 29.613714911000116 ], [ -91.993275519999941, 29.618841864000146 ], [ -91.973703579999977, 29.620510158000158 ], [ -91.949126756999959, 29.627264716000084 ], [ -91.94351152299987, 29.631537177 ], [ -91.933338995999918, 29.64394765800013 ], [ -91.929269985999866, 29.647121486000103 ], [ -91.917103644999969, 29.648138739000061 ], [ -91.861398891999869, 29.637193101 ], [ -91.845570441999939, 29.628241278000147 ], [ -91.819976365999963, 29.606146552000084 ], [ -91.789947068999908, 29.594631252000127 ], [ -91.788685675999886, 29.592474677000141 ], [ -91.758534308999884, 29.586737372000172 ], [ -91.733957485999866, 29.58502838700015 ], [ -91.72020423099994, 29.581732489000117 ], [ -91.713978644999884, 29.573716539000159 ], [ -91.723215298999946, 29.558986721000096 ], [ -91.759632941999911, 29.541164455000015 ], [ -91.773101365999906, 29.530991929000081 ], [ -91.778431769999969, 29.514308986000131 ], [ -91.778635219999927, 29.500555731000119 ], [ -91.780832485999923, 29.493353583000086 ], [ -91.787749803999901, 29.490545966000028 ], [ -91.802072719999899, 29.490057684000035 ] ] ], [ [ [ -85.086089647999927, 29.685736395000063 ], [ -85.083648240999906, 29.675034898000135 ], [ -85.0892634759999, 29.670152085000055 ], [ -85.095814581999889, 29.662420966000141 ], [ -85.101307745999918, 29.653265692000062 ], [ -85.103586391999897, 29.643988348000121 ], [ -85.108713344999899, 29.634019273000135 ], [ -85.120350714999915, 29.633978583000143 ], [ -85.141753709999961, 29.64085521000014 ], [ -85.150461391999841, 29.644476630000028 ], [ -85.158070441999882, 29.652655341000113 ], [ -85.165109829999949, 29.661932684000149 ], [ -85.171864386999886, 29.66885000200007 ], [ -85.182281053999873, 29.673976955000072 ], [ -85.202300584999932, 29.680975653000147 ], [ -85.212798631999902, 29.688706773000078 ], [ -85.171538865999963, 29.683254299000126 ], [ -85.153065558999941, 29.684637762000122 ], [ -85.138295050999943, 29.69550202 ], [ -85.113677537999934, 29.691961981000119 ], [ -85.100453253999916, 29.688055731000119 ], [ -85.087757941999939, 29.68683502800009 ], [ -85.086089647999927, 29.685736395000063 ] ] ], [ [ [ -88.925404425999915, 29.683091539000159 ], [ -88.938832160999908, 29.673285223000121 ], [ -88.874094204999892, 29.747463283000073 ], [ -88.889556443999936, 29.725327867000189 ], [ -88.925404425999915, 29.683091539000159 ] ] ], [ [ [ -84.969471808999913, 29.611761786000088 ], [ -84.990874803999873, 29.606146552000084 ], [ -85.04918372299997, 29.605861721000124 ], [ -85.07127844999988, 29.611761786000088 ], [ -85.097320115999935, 29.627264716000084 ], [ -85.081206834999961, 29.623968817000147 ], [ -85.05402584499987, 29.609442450000117 ], [ -85.03156490799995, 29.610907294000171 ], [ -84.987456834999961, 29.620428778000175 ], [ -84.774566209999932, 29.709784247000087 ], [ -84.771311001999976, 29.713812567000062 ], [ -84.770904100999871, 29.718329169000114 ], [ -84.76817786399991, 29.721909898 ], [ -84.757883266999897, 29.72345612200003 ], [ -84.749989386999914, 29.725490627000156 ], [ -84.74559485599994, 29.729966539000131 ], [ -84.742258266999897, 29.734442450000088 ], [ -84.737375454999921, 29.736476955000015 ], [ -84.724110480999911, 29.740301825000031 ], [ -84.70523027299987, 29.758490302000112 ], [ -84.69269771999987, 29.764390367000047 ], [ -84.69269771999987, 29.756984768000066 ], [ -84.698353644999969, 29.754584052000112 ], [ -84.706613735999952, 29.748032945000048 ], [ -84.706369594999899, 29.743963934000178 ], [ -84.728911912999905, 29.735825914000159 ], [ -84.788238084999961, 29.69550202 ], [ -84.887847459999904, 29.657945054 ], [ -84.908762173999975, 29.642482815000065 ], [ -84.969471808999913, 29.611761786000088 ] ] ], [ [ [ -89.435210740999935, 29.77228424700003 ], [ -89.43211829299986, 29.757635809000121 ], [ -89.42731686099998, 29.743963934000178 ], [ -89.440256313999896, 29.748480536000145 ], [ -89.447417772999927, 29.757798570000162 ], [ -89.452381964999887, 29.76703522300015 ], [ -89.458607550999943, 29.771226304000081 ], [ -89.466908331999917, 29.766424872000087 ], [ -89.476714647999927, 29.743719794000057 ], [ -89.48997962099989, 29.736476955000015 ], [ -89.494048631999931, 29.778794664000131 ], [ -89.490589972999942, 29.793768622000144 ], [ -89.475697394999969, 29.805365302000084 ], [ -89.463368292999917, 29.798895575000174 ], [ -89.458607550999943, 29.795396226 ], [ -89.455189581999917, 29.791693427000141 ], [ -89.441314256999931, 29.784613348000065 ], [ -89.435210740999935, 29.77228424700003 ] ] ], [ [ [ -89.33543860599994, 29.812201239 ], [ -89.304351365999935, 29.805365302000084 ], [ -89.29360917899993, 29.807114976000079 ], [ -89.283762173999889, 29.811021226000079 ], [ -89.277170376999919, 29.812079169000029 ], [ -89.276478644999884, 29.805365302000084 ], [ -89.290679490999906, 29.771226304000081 ], [ -89.337025519999969, 29.806626695 ], [ -89.33543860599994, 29.812201239 ] ] ], [ [ [ -84.608713344999899, 29.78925202 ], [ -84.664702928999958, 29.77871328300013 ], [ -84.656849738999966, 29.787054755000113 ], [ -84.617014126999891, 29.805365302000084 ], [ -84.593413865999935, 29.81854889500012 ], [ -84.583607550999915, 29.821844794000143 ], [ -84.576405402999882, 29.819769598000121 ], [ -84.586333787999905, 29.799953518000123 ], [ -84.608713344999899, 29.78925202 ] ] ], [ [ [ -89.284820115999935, 29.923488674000126 ], [ -89.293934699999937, 29.920070705000128 ], [ -89.295480923999975, 29.924627997000172 ], [ -89.27904212099989, 29.937201239000061 ], [ -89.26105709499987, 29.943345445000048 ], [ -89.234364386999914, 29.948431708000058 ], [ -89.238758917999917, 29.94135163 ], [ -89.238840298999889, 29.936265367000161 ], [ -89.235503709999961, 29.931626695000048 ], [ -89.240589972999885, 29.929348049000069 ], [ -89.2552791009999, 29.929348049000069 ], [ -89.27407792899993, 29.926336981000176 ], [ -89.284820115999935, 29.923488674000126 ] ] ], [ [ [ -89.322580532999922, 29.917181708 ], [ -89.32787024599989, 29.915920315000093 ], [ -89.317738410999937, 29.926092841000028 ], [ -89.309437628999945, 29.93650950700011 ], [ -89.304351365999935, 29.945990302000112 ], [ -89.293812628999973, 29.962103583 ], [ -89.278065558999913, 29.982123114000061 ], [ -89.272938605999911, 29.982082424000069 ], [ -89.280629035999908, 29.965765692000147 ], [ -89.295806443999908, 29.942206122000115 ], [ -89.3041072259999, 29.932359117000161 ], [ -89.322580532999922, 29.917181708 ] ] ], [ [ [ -88.829579230999911, 29.810288804000137 ], [ -88.854562954999921, 29.769191799000126 ], [ -88.853382941999911, 29.774603583 ], [ -88.853586391999869, 29.780218817 ], [ -88.855458136999914, 29.785956122000144 ], [ -88.859364386999914, 29.791693427000141 ], [ -88.829945441999911, 29.843410549000069 ], [ -88.823963995999918, 29.860663153000175 ], [ -88.823353644999941, 29.91299062700007 ], [ -88.823963995999918, 29.928900458000086 ], [ -88.817779100999928, 29.935126044000143 ], [ -88.832142706999917, 29.96234772300015 ], [ -88.83625240799995, 29.978420315000122 ], [ -88.83141028599988, 29.989691473000036 ], [ -88.838246222999913, 29.997219143000066 ], [ -88.848011847999942, 30.033107815000065 ], [ -88.857574022999927, 30.048041083000115 ], [ -88.87242591099988, 30.058661200000145 ], [ -88.850453253999973, 30.04682038 ], [ -88.840077277999882, 30.025458075000031 ], [ -88.832142706999917, 30.001857815 ], [ -88.817779100999928, 29.983547268000123 ], [ -88.810943162999905, 29.915228583000143 ], [ -88.821034308999884, 29.83266836100016 ], [ -88.829579230999911, 29.810288804000137 ] ] ], [ [ [ -89.424916144999941, 30.142564195000134 ], [ -89.431263800999943, 30.133368231000148 ], [ -89.439361131999902, 30.136542059000035 ], [ -89.433013475999957, 30.145697333000115 ], [ -89.426421678999873, 30.14838288 ], [ -89.424916144999941, 30.142564195000134 ] ] ], [ [ [ -89.221831834999932, 30.07290273600016 ], [ -89.216542120999947, 30.063218492000189 ], [ -89.215646938999868, 30.058661200000145 ], [ -89.208119269999912, 30.063177802000112 ], [ -89.202219204999949, 30.067857164000131 ], [ -89.197661912999934, 30.073187567 ], [ -89.194488084999961, 30.079738674000069 ], [ -89.188343878999973, 30.079738674000069 ], [ -89.187408006999902, 30.063218492000189 ], [ -89.191761847999885, 30.049139716000141 ], [ -89.201161261999914, 30.041571356000119 ], [ -89.215646938999868, 30.044989325000117 ], [ -89.222075975999871, 30.033758856000119 ], [ -89.228871222999913, 30.035956122000115 ], [ -89.242990688999839, 30.052435614 ], [ -89.246001756999931, 30.057114976000108 ], [ -89.248890753999973, 30.064032294000114 ], [ -89.253041144999912, 30.070257880000085 ], [ -89.26036536399991, 30.07290273600016 ], [ -89.267241990999906, 30.070624091000084 ], [ -89.272572394999884, 30.065741278000118 ], [ -89.275786912999934, 30.060858466000141 ], [ -89.276478644999884, 30.058661200000145 ], [ -89.283843553999873, 30.059515692000062 ], [ -89.288238084999961, 30.061997789000159 ], [ -89.291167772999898, 30.064846096000124 ], [ -89.29442298099994, 30.066066799000126 ], [ -89.301258917999945, 30.063950914000131 ], [ -89.306996222999913, 30.059271552000112 ], [ -89.310699022999955, 30.05459219 ], [ -89.311838344999899, 30.052435614 ], [ -89.332102016999897, 30.0489769550001 ], [ -89.339263475999957, 30.052679755000142 ], [ -89.345326300999943, 30.066066799000126 ], [ -89.333485480999883, 30.067572333 ], [ -89.319935675999915, 30.070949611000017 ], [ -89.30894934799997, 30.076076565000122 ], [ -89.304351365999935, 30.083156643000095 ], [ -89.297718878999973, 30.08397044500002 ], [ -89.284901495999918, 30.08397044500002 ], [ -89.276682094999842, 30.089504299000012 ], [ -89.283924933999856, 30.107082424000154 ], [ -89.268625454999892, 30.111558335000112 ], [ -89.254465298999975, 30.11798737200003 ], [ -89.229318813999896, 30.134344794000057 ], [ -89.209868943999908, 30.154771226000108 ], [ -89.196400519999912, 30.164984442000147 ], [ -89.180816209999932, 30.168524481000034 ], [ -89.180816209999932, 30.161688544000114 ], [ -89.194406704999977, 30.155259507 ], [ -89.207142706999917, 30.146429755000142 ], [ -89.235463019999969, 30.120672919000114 ], [ -89.249908006999931, 30.101996161000116 ], [ -89.236195441999911, 30.093491929 ], [ -89.218617316999968, 30.086737372000144 ], [ -89.221831834999932, 30.07290273600016 ] ] ], [ [ [ -88.942738410999908, 30.213812567000147 ], [ -88.969309048999975, 30.210638739000089 ], [ -88.967355923999918, 30.214300848000121 ], [ -88.940785285999965, 30.217515367000189 ], [ -88.927845831999946, 30.217596747000172 ], [ -88.942738410999908, 30.213812567000147 ] ] ], [ [ [ -88.427357550999886, 30.216253973000093 ], [ -88.43419348899991, 30.209418036000059 ], [ -88.46971594999988, 30.210842190000122 ], [ -88.503041144999969, 30.216253973000093 ], [ -88.503041144999969, 30.223781643000123 ], [ -88.427357550999886, 30.216253973000093 ] ] ], [ [ [ -89.06480872299997, 30.236761786000145 ], [ -89.068186001999976, 30.225816148000078 ], [ -89.084624803999873, 30.195786851000108 ], [ -89.089466925999943, 30.196600653000033 ], [ -89.092518683999856, 30.197658596000096 ], [ -89.095285610999923, 30.199530341000141 ], [ -89.09894771999987, 30.2032738300001 ], [ -89.094838019999912, 30.206122137000037 ], [ -89.089507615999935, 30.21198151200015 ], [ -89.084624803999873, 30.216253973000093 ], [ -89.092152472999942, 30.223781643000123 ], [ -89.09894771999987, 30.216253973000093 ], [ -89.107980923999975, 30.227118231000148 ], [ -89.12140865799995, 30.230861721000011 ], [ -89.153553839999915, 30.229925848000121 ], [ -89.153553839999915, 30.236761786000145 ], [ -89.101307745999918, 30.235052802000141 ], [ -89.077015753999945, 30.240790106000091 ], [ -89.06480872299997, 30.257798570000077 ], [ -89.057972785999937, 30.257798570000077 ], [ -89.057484503999945, 30.252671617000047 ], [ -89.062977667999888, 30.249741929000137 ], [ -89.065541144999912, 30.24697500200007 ], [ -89.06480872299997, 30.236761786000145 ] ] ], [ [ [ -88.546457485999923, 30.220363674000126 ], [ -88.556263800999943, 30.216742255000085 ], [ -88.75633704299986, 30.244208075000117 ], [ -88.75633704299986, 30.250433661000088 ], [ -88.731312628999945, 30.257228908000101 ], [ -88.697824673999889, 30.257879950000145 ], [ -88.665191209999932, 30.252386786000116 ], [ -88.643055792999888, 30.240464585000083 ], [ -88.621205206999917, 30.23151276200015 ], [ -88.559681769999969, 30.231146552000141 ], [ -88.537912563999896, 30.224432684000092 ], [ -88.546457485999923, 30.220363674000126 ] ] ], [ [ [ -88.090972459999932, 30.244696356000091 ], [ -88.311268683999856, 30.236761786000145 ], [ -88.296986456999946, 30.244696356000091 ], [ -88.20482337099989, 30.257798570000077 ], [ -88.149647589999859, 30.257798570000077 ], [ -88.134632941999939, 30.259995835000055 ], [ -88.125314907999979, 30.265082098000093 ], [ -88.118031378999973, 30.271144924000069 ], [ -88.109038865999963, 30.276109117000132 ], [ -88.071115688999839, 30.257798570000077 ], [ -88.071115688999839, 30.250433661000088 ], [ -88.084095831999917, 30.245917059000121 ], [ -88.090972459999932, 30.244696356000091 ] ] ], [ [ [ -86.617095506999931, 30.412014065000093 ], [ -86.52183997299997, 30.40127187700007 ], [ -86.530140753999945, 30.396877346000096 ], [ -86.540272589999915, 30.395412502000042 ], [ -86.551380988999938, 30.396795966000113 ], [ -86.562408006999874, 30.401109117000104 ], [ -86.562611456999917, 30.401190497000087 ], [ -86.562814907999979, 30.40127187700007 ], [ -86.56273352799991, 30.401190497000087 ], [ -86.562611456999917, 30.401149807000095 ], [ -86.562489386999857, 30.401109117000104 ], [ -86.901844855999911, 30.36361318600008 ], [ -87.241200324999909, 30.326117255000057 ], [ -87.296498175999886, 30.332342841000028 ], [ -87.278228318999936, 30.338120835000083 ], [ -87.197132941999882, 30.33978913 ], [ -87.081166144999912, 30.356634833 ], [ -87.022775844999842, 30.374579169000143 ], [ -86.951730923999975, 30.373928127000099 ], [ -86.92711341099988, 30.380764065 ], [ -86.918202277999939, 30.383978583000058 ], [ -86.890695766999897, 30.393133856000148 ], [ -86.87531490799995, 30.395005601000108 ], [ -86.831410285999937, 30.393622137000037 ], [ -86.724029100999871, 30.406236070000105 ], [ -86.7005916009999, 30.414943752000013 ], [ -86.693755662999877, 30.408107815000093 ], [ -86.659250454999949, 30.415838934000092 ], [ -86.617095506999931, 30.412014065000093 ] ] ], [ [ [ -81.454213019999941, 30.734849351000079 ], [ -81.461659308999913, 30.72581614800005 ], [ -81.469146287999877, 30.729315497000144 ], [ -81.478749152999853, 30.805975653000118 ], [ -81.47801673099994, 30.831691799000154 ], [ -81.478749152999853, 30.840073960000112 ], [ -81.481597459999904, 30.848863023 ], [ -81.490467902999853, 30.868109442000119 ], [ -81.49242102799991, 30.874212958000115 ], [ -81.482167120999861, 30.904364325000031 ], [ -81.432687954999921, 30.938788153000175 ], [ -81.424143032999893, 30.970404364000061 ], [ -81.41730709499987, 30.970404364000061 ], [ -81.417062954999921, 30.949896552 ], [ -81.419422980999883, 30.925279039000188 ], [ -81.428293423999946, 30.892564195000077 ], [ -81.431955532999893, 30.863104559000178 ], [ -81.44155839799987, 30.82737864800005 ], [ -81.457020636999886, 30.799750067000147 ], [ -81.457142706999946, 30.784572658000158 ], [ -81.450795050999915, 30.754461981000034 ], [ -81.454213019999941, 30.734849351000079 ] ] ], [ [ [ -81.26171836599994, 31.387792473000118 ], [ -81.279610537999929, 31.385481299000119 ], [ -81.291210182999919, 31.395217086000102 ], [ -81.300320438999904, 31.411516397000085 ], [ -81.289076365999847, 31.439955905000048 ], [ -81.271367433999927, 31.46190300300016 ], [ -81.257555471999922, 31.49035609 ], [ -81.251289383999904, 31.50457806900009 ], [ -81.234850875999939, 31.526501102000068 ], [ -81.220780584999886, 31.527681633000142 ], [ -81.20290879399991, 31.534334064000163 ], [ -81.184963349999947, 31.530085360000058 ], [ -81.1746502579999, 31.521421082000032 ], [ -81.186007987999858, 31.502812252000169 ], [ -81.198631143999904, 31.483102318000149 ], [ -81.213714904999875, 31.453559403000114 ], [ -81.235289851999937, 31.433784704000132 ], [ -81.26171836599994, 31.387792473000118 ] ] ], [ [ [ -81.149601264999916, 31.587015093 ], [ -81.16095992399994, 31.567313750000082 ], [ -81.175071153999909, 31.570502761000128 ], [ -81.170090199999891, 31.586896920000086 ], [ -81.167639602999913, 31.600002680000088 ], [ -81.177992497999867, 31.611943952 ], [ -81.179484529999854, 31.635942425000124 ], [ -81.171939179999953, 31.652357992000148 ], [ -81.160554923999911, 31.669889304000137 ], [ -81.149258050999919, 31.698338704000108 ], [ -81.136434531999839, 31.698409526000106 ], [ -81.131259533999923, 31.692978298000142 ], [ -81.133715716999859, 31.679863862000147 ], [ -81.133526625999934, 31.656941275000051 ], [ -81.128168949999917, 31.628596155000153 ], [ -81.138283112999943, 31.612172422000086 ], [ -81.149601264999916, 31.587015093 ] ] ], [ [ [ -118.595690633999936, 33.035281301000069 ], [ -118.589857487999851, 33.029967116000122 ], [ -118.577164844999928, 33.032455749000135 ], [ -118.564367112999918, 33.023762111000067 ], [ -118.565465458999938, 33.018407652000164 ], [ -118.560180125999878, 33.006330697000109 ], [ -118.549787298999902, 33.001576939000145 ], [ -118.545049309999925, 32.985612929000084 ], [ -118.516022975999917, 32.958162318000163 ], [ -118.504424056999895, 32.941329224000143 ], [ -118.483562601999893, 32.921599942000014 ], [ -118.466738940999846, 32.914819848000022 ], [ -118.450661601999911, 32.897624555000121 ], [ -118.407109687999935, 32.864257863 ], [ -118.381983559999952, 32.847662402000182 ], [ -118.358766391999907, 32.827828497000112 ], [ -118.350941535999951, 32.818670966000028 ], [ -118.363596157999837, 32.816839911000145 ], [ -118.384180700999934, 32.824391357000124 ], [ -118.401483379999902, 32.819990138000108 ], [ -118.404164191999939, 32.812404690000065 ], [ -118.411366339999873, 32.809800523000078 ], [ -118.425011087999891, 32.802416140000062 ], [ -118.429043422999925, 32.802872774000107 ], [ -118.438367387999918, 32.81692165800014 ], [ -118.449915045999958, 32.818819046000115 ], [ -118.474263153999885, 32.8381217230001 ], [ -118.489901248999885, 32.844903564000091 ], [ -118.499149718999945, 32.850627919000047 ], [ -118.506771710999885, 32.865249260000141 ], [ -118.508595383999875, 32.876468773000013 ], [ -118.520151559999917, 32.885466869000069 ], [ -118.531234811999909, 32.90340769500007 ], [ -118.537593170999926, 32.9057514980001 ], [ -118.546917738999895, 32.918750014000025 ], [ -118.548187619999894, 32.937190824000126 ], [ -118.551701850999862, 32.945411119000099 ], [ -118.558689245999886, 32.953108413000066 ], [ -118.575546478999868, 32.969004341000087 ], [ -118.579904751999962, 32.987779039000188 ], [ -118.58675346699988, 33.003329658000141 ], [ -118.593759444999932, 33.013946066000031 ], [ -118.608244568999936, 33.014376784000078 ], [ -118.607215286999946, 33.030856352000157 ], [ -118.595690633999936, 33.035281301000069 ] ] ], [ [ [ -79.360951300999972, 33.005682684000035 ], [ -79.368397589999944, 33.005682684000035 ], [ -79.368072068999908, 33.024888414000188 ], [ -79.363107876999976, 33.043036200000088 ], [ -79.35309811099998, 33.057562567000119 ], [ -79.337757941999939, 33.066148179000052 ], [ -79.335560675999943, 33.064683335 ], [ -79.335113084999932, 33.063177802000141 ], [ -79.336577928999901, 33.061712958000086 ], [ -79.34044348899991, 33.060248114000117 ], [ -79.341623501999948, 33.045233466000084 ], [ -79.360951300999972, 33.005682684000035 ] ] ], [ [ [ -119.513339989999849, 33.276456669000041 ], [ -119.49784820799988, 33.266124827000155 ], [ -119.48860446699986, 33.267188126000107 ], [ -119.48253091599986, 33.263603347000142 ], [ -119.46220396799994, 33.256544526000155 ], [ -119.44339065499986, 33.242169710000056 ], [ -119.434462582999927, 33.231317053000154 ], [ -119.434336974999837, 33.22401178600002 ], [ -119.439182447999926, 33.219843984000065 ], [ -119.446812677999844, 33.219295845000161 ], [ -119.456582632999883, 33.215980487000039 ], [ -119.46859456499989, 33.216292155000147 ], [ -119.472942058999891, 33.215324263000113 ], [ -119.487180598999913, 33.217886180000065 ], [ -119.491015440999945, 33.218752130000141 ], [ -119.495365090999954, 33.21732714000008 ], [ -119.502514552999884, 33.220891169000097 ], [ -119.515099988999907, 33.22210224200002 ], [ -119.523382283999865, 33.227932842000186 ], [ -119.544188332999894, 33.231319744000089 ], [ -119.566909339999924, 33.247472164000115 ], [ -119.567003653999919, 33.252496030000131 ], [ -119.574225471999881, 33.258797130000019 ], [ -119.572698580999941, 33.264755664000106 ], [ -119.578926043999871, 33.27609667500009 ], [ -119.577894128999844, 33.27930804400016 ], [ -119.562447845999912, 33.271741240000054 ], [ -119.55058211199993, 33.280117057000112 ], [ -119.542886423999917, 33.280178295000141 ], [ -119.532103489999912, 33.286278258 ], [ -119.513339989999849, 33.276456669000041 ] ] ], [ [ [ -118.535860837999863, 33.477278162000133 ], [ -118.530102725999939, 33.469976175000014 ], [ -118.524377885999925, 33.466714878000104 ], [ -118.517747515999957, 33.459782452000084 ], [ -118.508057996999909, 33.454680973000151 ], [ -118.499706173999883, 33.451812500000031 ], [ -118.499682794999899, 33.44815369700008 ], [ -118.498770320999895, 33.442665713000125 ], [ -118.493060577999898, 33.441589198000045 ], [ -118.490442104999957, 33.443421645000157 ], [ -118.485636536999891, 33.444876593000103 ], [ -118.484329640999945, 33.447093576000114 ], [ -118.476900714999886, 33.447445403000089 ], [ -118.472499288999956, 33.441963898000054 ], [ -118.468075783999879, 33.442408711 ], [ -118.462823692999905, 33.439843866000061 ], [ -118.457540441999924, 33.435110204000082 ], [ -118.450054222999938, 33.431861993 ], [ -118.444791158999934, 33.428584013000105 ], [ -118.437307795999914, 33.429362591000043 ], [ -118.433853213999896, 33.427155365000132 ], [ -118.429443462999899, 33.428282726000148 ], [ -118.421119870999888, 33.427947626000119 ], [ -118.394449177999917, 33.415962763000053 ], [ -118.389098455999957, 33.417460528000092 ], [ -118.382598976999887, 33.410526297000033 ], [ -118.379374826999921, 33.410182864000106 ], [ -118.374027800999912, 33.410206772000052 ], [ -118.369206483999875, 33.408392662000054 ], [ -118.368302772999883, 33.405101551000072 ], [ -118.366907513999905, 33.398881928000051 ], [ -118.36958062699992, 33.394849740000112 ], [ -118.368289460999847, 33.389002583000106 ], [ -118.363376394999946, 33.388277561000066 ], [ -118.355131151999856, 33.377346319000068 ], [ -118.343628195999955, 33.366762193000156 ], [ -118.331757313999901, 33.359112834000157 ], [ -118.326514339999889, 33.348901252000175 ], [ -118.326343656999882, 33.344607568000086 ], [ -118.322764640999964, 33.343132417000064 ], [ -118.31725463899997, 33.343429236000034 ], [ -118.308665395999924, 33.33642000100015 ], [ -118.304344449999903, 33.319268941000118 ], [ -118.307854332999867, 33.318724439000093 ], [ -118.310583629999925, 33.314231484000132 ], [ -118.304340113999899, 33.309040023000122 ], [ -118.312127837999881, 33.305542270000089 ], [ -118.314709021999931, 33.301629145000121 ], [ -118.326034906999922, 33.29863279700011 ], [ -118.346016731999882, 33.305231359000018 ], [ -118.354946583999947, 33.312944618000145 ], [ -118.364003247999861, 33.315047967000012 ], [ -118.374796158999899, 33.319511779000138 ], [ -118.396096027999931, 33.320100243000141 ], [ -118.410465684999878, 33.320371925000146 ], [ -118.422664262999959, 33.316634174000072 ], [ -118.443834805999941, 33.318826713000121 ], [ -118.46358558599988, 33.323514310000107 ], [ -118.472771269999896, 33.332942806000133 ], [ -118.484243943999871, 33.346074552000161 ], [ -118.489581558999902, 33.358498939000171 ], [ -118.484399969999899, 33.368413836000045 ], [ -118.486164956999914, 33.372427754000157 ], [ -118.480071710999894, 33.380143233000112 ], [ -118.474872309999924, 33.382370955000127 ], [ -118.479324236999858, 33.386750276 ], [ -118.487232176999839, 33.402811890000137 ], [ -118.484523316999883, 33.405381113000189 ], [ -118.48714958099994, 33.408304122000104 ], [ -118.486345800999871, 33.415967844000036 ], [ -118.490734640999918, 33.419625399000054 ], [ -118.497756378999853, 33.42143085400015 ], [ -118.503907513999962, 33.423224902000172 ], [ -118.510496250999864, 33.423938125000021 ], [ -118.515654118999947, 33.423005280000112 ], [ -118.520788897999893, 33.427514671000026 ], [ -118.530673002999961, 33.428580903000025 ], [ -118.535084784999952, 33.429311825000028 ], [ -118.542988218999923, 33.432922771 ], [ -118.550885946999955, 33.433253662000041 ], [ -118.559226277999912, 33.432853992 ], [ -118.56673559899987, 33.436856014000014 ], [ -118.57285073199985, 33.437906618000099 ], [ -118.573730276999882, 33.440455082000099 ], [ -118.574117225999913, 33.44661376700013 ], [ -118.579049097999956, 33.448476365000047 ], [ -118.584382505999912, 33.452864114000093 ], [ -118.589607025999911, 33.460095565000145 ], [ -118.595881198999891, 33.466705629000117 ], [ -118.602116222999925, 33.471470083000085 ], [ -118.603913367999851, 33.476588999000128 ], [ -118.59686781099991, 33.476973211000129 ], [ -118.58677851199991, 33.475571359000057 ], [ -118.578002707999886, 33.476350805000052 ], [ -118.569624876999924, 33.474536554000125 ], [ -118.563435898999884, 33.473426576000136 ], [ -118.545937539999883, 33.475028762000093 ], [ -118.540674604999893, 33.475783166000085 ], [ -118.535860837999863, 33.477278162000133 ] ] ], [ [ [ -118.226577624999933, 33.765449583000034 ], [ -118.22391862499984, 33.756066514000125 ], [ -118.243878229999922, 33.750844216000033 ], [ -118.236346109999943, 33.728046034000116 ], [ -118.250134425999931, 33.723618208000133 ], [ -118.245571496999872, 33.714879458000055 ], [ -118.257628533999963, 33.716554070000072 ], [ -118.261326341999848, 33.725000144000077 ], [ -118.25912648099991, 33.729407138000013 ], [ -118.244320061999886, 33.734290960000081 ], [ -118.248993863999971, 33.749427260000132 ], [ -118.253853961999937, 33.746218959000075 ], [ -118.25110729, 33.736269119000056 ], [ -118.260562331999878, 33.73345394400009 ], [ -118.268615110999946, 33.728931446 ], [ -118.270859149999893, 33.739639570000136 ], [ -118.267506095999934, 33.747028786 ], [ -118.254988861999948, 33.75808264400014 ], [ -118.250319951999913, 33.757555440000132 ], [ -118.245547112999887, 33.759683031000137 ], [ -118.234675975999863, 33.763152826000166 ], [ -118.226577624999933, 33.765449583000034 ] ] ], [ [ [ -77.94204667899993, 33.916815497000087 ], [ -77.96239173099994, 33.85687897300015 ], [ -77.969960089999887, 33.847967841000028 ], [ -77.981312628999945, 33.853827216000141 ], [ -77.997710740999963, 33.858954169000171 ], [ -78.012277798999889, 33.865627346000124 ], [ -78.01781165299991, 33.875881252000156 ], [ -78.010080532999893, 33.892035223000121 ], [ -77.995228644999941, 33.899318752000127 ], [ -77.979725714999915, 33.898179429 ], [ -77.969960089999887, 33.889553127000099 ], [ -77.963286912999934, 33.894476630000057 ], [ -77.94204667899993, 33.916815497000087 ] ] ], [ [ [ -120.042324519999866, 34.028081162000106 ], [ -120.049937673999878, 34.015605371000092 ], [ -120.04700351399994, 34.003812582000094 ], [ -120.033968531999847, 33.989577195000081 ], [ -120.008337388999905, 33.97902667000001 ], [ -119.980407272999912, 33.983467124000171 ], [ -119.978781448999953, 33.959370996000061 ], [ -119.970692784999926, 33.952931074000119 ], [ -119.968830159999911, 33.941116579000109 ], [ -119.999628467999912, 33.941479228 ], [ -120.018949772999932, 33.93415329900013 ], [ -120.049688375999864, 33.914781298 ], [ -120.071290524999952, 33.911785084000158 ], [ -120.080626792999894, 33.906362829000145 ], [ -120.101298472999915, 33.90688890100013 ], [ -120.109011043999899, 33.899737962000088 ], [ -120.10989116399989, 33.893140151000139 ], [ -120.124205654999898, 33.895086377000055 ], [ -120.133400634999873, 33.902824408000114 ], [ -120.15263550099985, 33.911687703 ], [ -120.17560998499988, 33.922231553000032 ], [ -120.184467483999924, 33.937422165000143 ], [ -120.189428045999932, 33.94479976300012 ], [ -120.198079576999888, 33.952101495000036 ], [ -120.210243987999903, 33.972487739000158 ], [ -120.219359467999965, 33.976723149000023 ], [ -120.22549272399992, 33.988458458000153 ], [ -120.237181432999918, 33.991713313000062 ], [ -120.248516704999886, 34.001127158000045 ], [ -120.236564990999895, 34.008803220000019 ], [ -120.217615999999865, 34.010541155000041 ], [ -120.201055341999904, 34.004695622000057 ], [ -120.185819994999918, 34.008918186000031 ], [ -120.170962859999875, 34.007413919 ], [ -120.158485535999915, 34.015951829000144 ], [ -120.145480934999938, 34.02449689800001 ], [ -120.136097785999922, 34.024725653000118 ], [ -120.096665303999899, 34.017860670000076 ], [ -120.07247756799984, 34.024894548000063 ], [ -120.057874835999883, 34.037784863000169 ], [ -120.044138729999872, 34.037272705000149 ], [ -120.042324519999866, 34.028081162000106 ] ] ], [ [ [ -120.360690360999882, 34.053097529000141 ], [ -120.356017773999895, 34.047080956000073 ], [ -120.344581841999869, 34.046492220000047 ], [ -120.335766106999912, 34.048702926000161 ], [ -120.330301140999907, 34.047174813000126 ], [ -120.318325774999906, 34.040055005000156 ], [ -120.311306009999868, 34.034476555000182 ], [ -120.306556533999924, 34.02639704400012 ], [ -120.308301269999859, 34.018200390000132 ], [ -120.329612341999848, 34.018629218000072 ], [ -120.351232122999889, 34.019022108000073 ], [ -120.360439239999891, 34.014757433000099 ], [ -120.373824538999926, 34.017764392000018 ], [ -120.382382058999838, 34.024128673000106 ], [ -120.392774212999925, 34.025965751000129 ], [ -120.406225727999939, 34.031414923000071 ], [ -120.415194010999898, 34.03246878400013 ], [ -120.423769553999875, 34.024945950000031 ], [ -120.438196941999891, 34.029559783000039 ], [ -120.446088133999922, 34.030216641000138 ], [ -120.449202675999871, 34.035865963000035 ], [ -120.437970384999886, 34.038538274000146 ], [ -120.415273713999923, 34.054496065000038 ], [ -120.403405948999946, 34.051456813000115 ], [ -120.394042700999904, 34.053285218000141 ], [ -120.3800094959999, 34.0608976810001 ], [ -120.368979028999931, 34.071311326000014 ], [ -120.369068028999919, 34.076225100000059 ], [ -120.362212693999908, 34.07168203300013 ], [ -120.358966172999956, 34.064972361000102 ], [ -120.356262126999866, 34.058510533000018 ], [ -120.360690360999882, 34.053097529000141 ] ] ], [ [ [ -119.835159866999845, 34.063585676000017 ], [ -119.82437089799987, 34.055080471000096 ], [ -119.806996222999899, 34.051947333000115 ], [ -119.787740187999944, 34.056188569000099 ], [ -119.77785356099993, 34.055863163000097 ], [ -119.759262504999938, 34.055808821000042 ], [ -119.752833634999945, 34.052281636000046 ], [ -119.744292772999898, 34.052150783000158 ], [ -119.737005455999935, 34.046430236000148 ], [ -119.732147472999884, 34.048557464000041 ], [ -119.711835934999911, 34.042254864000185 ], [ -119.70379551699989, 34.034561746000023 ], [ -119.692381916999921, 34.028223749000077 ], [ -119.685359820999864, 34.019871289 ], [ -119.677022679999894, 34.020750575000093 ], [ -119.666636794999874, 34.016764887000093 ], [ -119.654397726999917, 34.019084734000117 ], [ -119.633182665999882, 34.013635007000133 ], [ -119.615639117999962, 34.019543137000127 ], [ -119.607930806999974, 34.029474258000093 ], [ -119.610079325999934, 34.039645939000039 ], [ -119.58864085099988, 34.049712044000088 ], [ -119.57540772099992, 34.050677210000103 ], [ -119.564930792999917, 34.055324611000131 ], [ -119.532521882999887, 34.041423910000091 ], [ -119.521494225999874, 34.034291329000112 ], [ -119.529426059999892, 34.025248406000017 ], [ -119.542666345999919, 34.020164343000189 ], [ -119.544527335999888, 34.013617241000176 ], [ -119.54783312899994, 34.003847125000121 ], [ -119.559521218999876, 33.994308649000132 ], [ -119.580325866999971, 33.993586235000137 ], [ -119.589497547999883, 33.989005583000122 ], [ -119.624820943999921, 33.987315553000187 ], [ -119.645457367999953, 33.986212475000045 ], [ -119.657682596999919, 33.986061776 ], [ -119.667048150999904, 33.983050180000035 ], [ -119.673278146999877, 33.978096858000086 ], [ -119.68211608499989, 33.976333644000036 ], [ -119.684945141999933, 33.973874143000117 ], [ -119.700174026999917, 33.968738494 ], [ -119.706478544999925, 33.968674579000137 ], [ -119.712690855999952, 33.961674293000115 ], [ -119.719512041999891, 33.959134293 ], [ -119.742213280999891, 33.962449514000028 ], [ -119.753468400999878, 33.962301480000136 ], [ -119.759239190999878, 33.957341699 ], [ -119.772047500999861, 33.959598317000129 ], [ -119.788251176999864, 33.959765133000147 ], [ -119.801565511999883, 33.963211129000072 ], [ -119.817204834999899, 33.959337927000078 ], [ -119.825197394999876, 33.96653235400008 ], [ -119.840504051999901, 33.969574153000124 ], [ -119.85076733199989, 33.967383031000125 ], [ -119.866711383999899, 33.978934276000118 ], [ -119.874109320999878, 33.980046565000023 ], [ -119.881261996999896, 33.991349371000169 ], [ -119.884370573999888, 34.001838363 ], [ -119.887068710999927, 34.008776658000144 ], [ -119.877082120999916, 34.024386762000134 ], [ -119.877221801999923, 34.032482766000143 ], [ -119.88625449899989, 34.038108749000131 ], [ -119.899179466999854, 34.049601328000065 ], [ -119.913563605999926, 34.055894273000021 ], [ -119.919123166999853, 34.057536940000134 ], [ -119.921549780999896, 34.054679350000029 ], [ -119.928468376999916, 34.055800203000118 ], [ -119.933019092999942, 34.060229146000111 ], [ -119.924292045999863, 34.066858478000185 ], [ -119.921019781999931, 34.073446135 ], [ -119.917224857999898, 34.078820327000031 ], [ -119.904627893999901, 34.074301803000097 ], [ -119.88704397599993, 34.074300968000117 ], [ -119.856411932999933, 34.070551942000165 ], [ -119.835159866999845, 34.063585676000017 ] ] ], [ [ [ -77.818714972999885, 34.172674872000172 ], [ -77.820627407999922, 34.171576239000117 ], [ -77.823353644999912, 34.171861070000077 ], [ -77.825998501999891, 34.170640367000047 ], [ -77.845936652999882, 34.123765367000189 ], [ -77.860178188999981, 34.100409247000087 ], [ -77.8744197259999, 34.08812083500014 ], [ -77.864003058999913, 34.113674221000124 ], [ -77.856556769999912, 34.142645575000031 ], [ -77.844227667999888, 34.16665273600016 ], [ -77.819203253999973, 34.177476304000052 ], [ -77.818714972999885, 34.172674872000172 ] ] ], [ [ [ -77.35252844999988, 34.522284247000144 ], [ -77.354400193999936, 34.521185614000117 ], [ -77.357411261999943, 34.521389065000065 ], [ -77.360463019999941, 34.520086981000176 ], [ -77.386341925999943, 34.501695054000137 ], [ -77.467762824999909, 34.465399481000034 ], [ -77.500721808999884, 34.458685614000089 ], [ -77.514556443999965, 34.453762111000017 ], [ -77.617787238999881, 34.377630927000141 ], [ -77.6341853509999, 34.362494208000143 ], [ -77.614735480999883, 34.395453192000119 ], [ -77.57872473899991, 34.425360419000086 ], [ -77.449818488999938, 34.495672919000029 ], [ -77.43187415299991, 34.499660549000012 ], [ -77.413726365999906, 34.503973700000088 ], [ -77.374134894999969, 34.523138739000061 ], [ -77.353016730999855, 34.52757396000014 ], [ -77.35252844999988, 34.522284247000144 ] ] ], [ [ [ -76.537709113999938, 34.642157294000029 ], [ -76.551665818999908, 34.636867580000128 ], [ -76.556223110999952, 34.64061107 ], [ -76.592681443999908, 34.663519598000093 ], [ -76.64321855399993, 34.678412177000141 ], [ -76.654774542999945, 34.68455638200011 ], [ -76.654774542999945, 34.691473700000117 ], [ -76.634266730999883, 34.691473700000117 ], [ -76.565337693999936, 34.67096588700015 ], [ -76.554798956999974, 34.664211330000015 ], [ -76.542144334999904, 34.652899481000034 ], [ -76.537709113999938, 34.642157294000029 ] ] ], [ [ [ -76.681467251999948, 34.705145575000145 ], [ -76.681467251999948, 34.698228257000054 ], [ -76.801869269999912, 34.705145575000145 ], [ -76.827504035999965, 34.702948309000149 ], [ -77.09976152299987, 34.64984772300015 ], [ -77.082386847999885, 34.665472723000121 ], [ -77.054432745999861, 34.67487213700015 ], [ -76.89745032499988, 34.698228257000054 ], [ -76.733550584999904, 34.717596747000144 ], [ -76.681467251999948, 34.705145575000145 ] ] ], [ [ [ -76.519642706999917, 34.615790106000034 ], [ -76.53062903599988, 34.589056708000115 ], [ -76.539214647999898, 34.608221747000172 ], [ -76.525054490999963, 34.637844143000123 ], [ -76.407785610999895, 34.794419664000188 ], [ -76.304676886999857, 34.883246161000116 ], [ -76.262318488999966, 34.906724351 ], [ -76.256255662999877, 34.913641669000086 ], [ -76.24950110599994, 34.92186107 ], [ -76.233957485999923, 34.931708075000117 ], [ -76.215972459999904, 34.940334377000013 ], [ -76.202259894999969, 34.944728908000101 ], [ -76.222767706999917, 34.917425848000121 ], [ -76.249663865999906, 34.903225002000013 ], [ -76.299875454999977, 34.858587958000143 ], [ -76.322092251999919, 34.849066473000121 ], [ -76.340402798999889, 34.838446356000091 ], [ -76.39598548099994, 34.787583726000079 ], [ -76.519642706999917, 34.615790106000034 ] ] ], [ [ [ -76.140858527999882, 34.992499091000141 ], [ -76.147043423999946, 34.992499091000141 ], [ -76.137277798999918, 35.003404039000131 ], [ -76.106434699999852, 35.030340887000179 ], [ -76.099842902999882, 35.044623114000089 ], [ -76.096506313999924, 35.04962799700003 ], [ -76.088978644999884, 35.055243231000034 ], [ -76.081532355999911, 35.062201239000117 ], [ -76.078114386999886, 35.071600653000033 ], [ -76.07249915299991, 35.074774481000091 ], [ -76.059681769999969, 35.071478583000058 ], [ -76.037180141999869, 35.061346747000115 ], [ -76.04059811099998, 35.05768463700015 ], [ -76.043934699999909, 35.056301174000069 ], [ -76.047515428999873, 35.055731512000122 ], [ -76.051421678999873, 35.054592190000065 ], [ -76.12559973899991, 35.011542059000035 ], [ -76.140858527999882, 34.992499091000141 ] ] ], [ [ [ -75.908070441999939, 35.136460679000137 ], [ -76.017323370999861, 35.075018622000144 ], [ -76.005970831999889, 35.085150458 ], [ -75.998850063999924, 35.09707265800013 ], [ -75.98997962099989, 35.123439846000124 ], [ -75.96703040299991, 35.117743231000148 ], [ -75.939849412999905, 35.126898505000142 ], [ -75.886341925999972, 35.156968492000161 ], [ -75.798898891999926, 35.184230861000074 ], [ -75.770253058999941, 35.197943427 ], [ -75.77599036399991, 35.190741278000147 ], [ -75.782093878999916, 35.185858466000084 ], [ -75.79820716099988, 35.178045966000113 ], [ -75.817372199999937, 35.162909247000115 ], [ -75.908070441999939, 35.136460679000137 ] ] ], [ [ [ -75.543771938999953, 35.233303127000013 ], [ -75.553700324999852, 35.232001044000029 ], [ -75.585316535999937, 35.233303127000013 ], [ -75.623158331999889, 35.219061591000113 ], [ -75.644439256999959, 35.21576569200009 ], [ -75.682199673999918, 35.201239325000031 ], [ -75.698312954999892, 35.197943427 ], [ -75.704009568999879, 35.19594961100016 ], [ -75.717518683999856, 35.186916408000158 ], [ -75.72557532499988, 35.184881903000033 ], [ -75.735747850999928, 35.187689520000063 ], [ -75.73338782499988, 35.194037177000027 ], [ -75.724680141999897, 35.200913804000109 ], [ -75.715687628999973, 35.20538971600017 ], [ -75.705962693999908, 35.206244208000086 ], [ -75.701568162999934, 35.210028387000094 ], [ -75.698963995999947, 35.21482982 ], [ -75.694569464999859, 35.219061591000113 ], [ -75.693023240999906, 35.221991278000033 ], [ -75.69237219999988, 35.226874091000113 ], [ -75.690337693999936, 35.23135000200007 ], [ -75.684966600999871, 35.233303127000013 ], [ -75.681955532999979, 35.231512762000037 ], [ -75.6810603509999, 35.228013414000046 ], [ -75.679798956999974, 35.225246486000074 ], [ -75.675363735999895, 35.22581614800005 ], [ -75.612619594999927, 35.25259023600016 ], [ -75.543120897999898, 35.273098049000012 ], [ -75.516346808999913, 35.291001695000077 ], [ -75.51707923099994, 35.321478583000115 ], [ -75.510894334999961, 35.333685614000089 ], [ -75.498768683999884, 35.382879950000088 ], [ -75.494374152999882, 35.420477606000091 ], [ -75.48452714799987, 35.456691799000041 ], [ -75.482248501999891, 35.479071356000034 ], [ -75.483631964999887, 35.489935614000117 ], [ -75.488758917999888, 35.509222723000065 ], [ -75.489125128999916, 35.52069733300003 ], [ -75.485259568999908, 35.532049872000172 ], [ -75.471669074999852, 35.554348049000041 ], [ -75.468617316999939, 35.565090236000131 ], [ -75.469349738999881, 35.588771877000156 ], [ -75.475819464999887, 35.630113023 ], [ -75.50096594999988, 35.703314520000148 ], [ -75.502756313999953, 35.722723700000145 ], [ -75.52000891799986, 35.756659247000087 ], [ -75.526112433999941, 35.775702216000084 ], [ -75.51707923099994, 35.780747789000131 ], [ -75.499501105999911, 35.767482815 ], [ -75.48668372299997, 35.743801174000069 ], [ -75.47874915299991, 35.717230536000116 ], [ -75.476063605999911, 35.695379950000174 ], [ -75.473540818999908, 35.674872137000037 ], [ -75.454945441999911, 35.623114325000117 ], [ -75.45181230399993, 35.582505601000108 ], [ -75.470570441999911, 35.504787502000099 ], [ -75.49083411399991, 35.336411851000051 ], [ -75.515614386999886, 35.260199286 ], [ -75.525380011999914, 35.243963934000149 ], [ -75.543771938999953, 35.233303127000013 ] ] ], [ [ [ -75.62535559799997, 35.830145575000088 ], [ -75.643950975999871, 35.829169012000122 ], [ -75.659291144999912, 35.836004950000031 ], [ -75.666167772999927, 35.852280992000161 ], [ -75.670643683999884, 35.871323960000055 ], [ -75.678456183999884, 35.886908270000063 ], [ -75.707753058999913, 35.913397528000033 ], [ -75.715687628999973, 35.924750067 ], [ -75.721262173999975, 35.929999091000084 ], [ -75.727772589999887, 35.934556382000139 ], [ -75.7298884759999, 35.939398505000113 ], [ -75.721831834999932, 35.945257880000057 ], [ -75.713042772999898, 35.946966864000061 ], [ -75.70376542899993, 35.945705471000153 ], [ -75.695220506999902, 35.942450262000094 ], [ -75.688343878999888, 35.938421942000119 ], [ -75.67406165299991, 35.933294989000117 ], [ -75.667388475999957, 35.929510809000092 ], [ -75.661040818999908, 35.924750067 ], [ -75.659331834999904, 35.915432033000158 ], [ -75.647043423999946, 35.899237372000115 ], [ -75.612619594999927, 35.863267320000134 ], [ -75.621896938999981, 35.844916083000086 ], [ -75.622141079999921, 35.834662177000055 ], [ -75.62535559799997, 35.830145575000088 ] ] ], [ [ [ -75.857643583999902, 37.19405349200018 ], [ -75.839550312999904, 37.192793578000092 ], [ -75.823226891999951, 37.196322534000061 ], [ -75.817301653999948, 37.20699019600012 ], [ -75.811724207999902, 37.209081221000119 ], [ -75.810779290999875, 37.200169376000119 ], [ -75.816242171999875, 37.18607639700015 ], [ -75.829063995999917, 37.17674031300011 ], [ -75.84959102699986, 37.163584232000133 ], [ -75.871327919999914, 37.142872242000166 ], [ -75.886520223999895, 37.123105777000077 ], [ -75.899460469999951, 37.117310204000077 ], [ -75.914537451999905, 37.11232258400004 ], [ -75.928601938999918, 37.112221513000023 ], [ -75.926316896999936, 37.117843892000096 ], [ -75.915383639999931, 37.118544935 ], [ -75.907615631999874, 37.122960471000127 ], [ -75.903772929999917, 37.129214309000034 ], [ -75.892816255999918, 37.140674254000103 ], [ -75.894323477999905, 37.161239546000118 ], [ -75.901794543999898, 37.175593717000098 ], [ -75.906213787999889, 37.194590194000071 ], [ -75.905419867999939, 37.234426456000037 ], [ -75.895603355999953, 37.252969990000096 ], [ -75.889483445999929, 37.280404557000011 ], [ -75.873970533999881, 37.290379804000096 ], [ -75.858674916999888, 37.282514126000038 ], [ -75.851751548999914, 37.270772896000054 ], [ -75.854055205999941, 37.26088484500012 ], [ -75.867196051999912, 37.25411214800009 ], [ -75.876666174999912, 37.240672164000145 ], [ -75.883245709999926, 37.218648076000036 ], [ -75.877139417999899, 37.205592522000032 ], [ -75.869313885999901, 37.198439284000145 ], [ -75.857643583999902, 37.19405349200018 ] ] ], [ [ [ -75.685037571999885, 37.414915019000048 ], [ -75.719214311999906, 37.368297608000105 ], [ -75.724573768999875, 37.373899392000155 ], [ -75.707945937999881, 37.39861533100013 ], [ -75.684319121999863, 37.436734982000146 ], [ -75.676477466999955, 37.455072995000151 ], [ -75.670329446999915, 37.462843914000089 ], [ -75.656127420999894, 37.461505501000104 ], [ -75.660430400999957, 37.443184451000079 ], [ -75.685037571999885, 37.414915019000048 ] ] ], [ [ [ -75.659574709999845, 37.482975749000119 ], [ -75.670617250999925, 37.477057165000147 ], [ -75.674374746999973, 37.48583466200013 ], [ -75.66219507699995, 37.504461516000063 ], [ -75.643928848999906, 37.534846196000117 ], [ -75.6342270049999, 37.558354016000138 ], [ -75.621981072999915, 37.571119736000171 ], [ -75.613391905999976, 37.57800280700009 ], [ -75.599805919999937, 37.575130510000022 ], [ -75.602194676999972, 37.562408279000138 ], [ -75.642532350999915, 37.511396818000051 ], [ -75.659574709999845, 37.482975749000119 ] ] ], [ [ [ -75.981290971999897, 37.992836254000096 ], [ -75.989768470999934, 37.973150901000153 ], [ -75.995650528999874, 37.945146582000135 ], [ -76.005049315999941, 37.950471527 ], [ -76.010153000999907, 37.960734322000135 ], [ -76.021359023999906, 37.961139669000104 ], [ -76.016870257999955, 37.950381436 ], [ -76.019280001999846, 37.943985813000026 ], [ -76.019823120999945, 37.937604423000138 ], [ -76.017226170999919, 37.928794343 ], [ -76.02281804699993, 37.928260202000146 ], [ -76.026367898999922, 37.913515256000053 ], [ -76.029495904999919, 37.914962447000065 ], [ -76.03154517, 37.929663813 ], [ -76.029831743999921, 37.941941898 ], [ -76.027453454999943, 37.950790470000115 ], [ -76.03310258399992, 37.954671353000137 ], [ -76.036786470999886, 37.950718316000078 ], [ -76.043613276999878, 37.949192180000026 ], [ -76.045064639999879, 37.965370371000134 ], [ -76.045254665999977, 37.980087770000168 ], [ -76.051421678999873, 37.994086005000028 ], [ -76.046131964999887, 37.999416408000073 ], [ -76.03056423299995, 37.999827016000111 ], [ -76.013648893999857, 37.991614997000013 ], [ -76.003041144999969, 38.00096263200011 ], [ -76.013539191999939, 38.010484117000104 ], [ -76.039458787999934, 38.021144924000126 ], [ -76.040285303999923, 38.029194685000121 ], [ -76.029128393999883, 38.033696697000138 ], [ -76.017353921999899, 38.038692814000157 ], [ -76.010464090999875, 38.035799724000142 ], [ -76.00536477299994, 38.026514029000012 ], [ -75.987207329999933, 38.018796120000118 ], [ -75.981290971999897, 37.992836254000096 ] ] ], [ [ [ -76.025944393999879, 38.153420958000041 ], [ -76.033230297999921, 38.148551101000166 ], [ -76.06275995799993, 38.158906715000072 ], [ -76.083607762999947, 38.160666373000097 ], [ -76.079009401999969, 38.18284381000008 ], [ -76.064461302999916, 38.194510306000112 ], [ -76.048607684999922, 38.200407545000175 ], [ -76.036217811999933, 38.189907737000127 ], [ -76.023818623999944, 38.178457834000099 ], [ -76.029782187999899, 38.165901169000151 ], [ -76.025944393999879, 38.153420958000041 ] ] ], [ [ [ -75.342142507999881, 37.875660905000032 ], [ -75.352277924999981, 37.867622419 ], [ -75.365410935999904, 37.862877446000155 ], [ -75.378535209999939, 37.855772599 ], [ -75.39291340399987, 37.864699272000067 ], [ -75.400126542999914, 37.874113272000059 ], [ -75.388778431999867, 37.878387484000044 ], [ -75.369018297999872, 37.869472149 ], [ -75.358275612999904, 37.874211754000143 ], [ -75.349956729999946, 37.889319871000069 ], [ -75.36372687599993, 37.894950624000117 ], [ -75.374499694999912, 37.897757569000092 ], [ -75.367965439999892, 37.909090647000156 ], [ -75.350087042999888, 37.913031317000062 ], [ -75.339100714999915, 37.91620514500012 ], [ -75.330474412999905, 37.922430731000091 ], [ -75.325266079999921, 37.932684637000122 ], [ -75.318267381999931, 37.940375067000119 ], [ -75.304758266999869, 37.973618882000139 ], [ -75.297596808999913, 37.984930731000034 ], [ -75.278553839999944, 38.007635809000149 ], [ -75.254465298999918, 38.030910549000097 ], [ -75.250640428999901, 38.036891994000101 ], [ -75.229644334999961, 38.069891669000143 ], [ -75.199818488999938, 38.103827216000113 ], [ -75.194894985999895, 38.113959052000055 ], [ -75.190337693999936, 38.142726955000015 ], [ -75.179310675999915, 38.168198960000112 ], [ -75.153309699999909, 38.207017320000134 ], [ -75.114369269999941, 38.28021881700009 ], [ -75.098703579999949, 38.302639065 ], [ -75.092437303999901, 38.302639065 ], [ -75.102691209999932, 38.273138739000117 ], [ -75.138661261999914, 38.218817450000088 ], [ -75.171197075999942, 38.148288511000104 ], [ -75.189694718999959, 38.089779714000159 ], [ -75.228871222999942, 38.047512111000131 ], [ -75.234079555999926, 38.038600979000094 ], [ -75.313580985999863, 37.919094879000127 ], [ -75.326039191999939, 37.892279364000061 ], [ -75.342142507999881, 37.875660905000032 ] ] ], [ [ [ -74.359242316999882, 39.401556708000086 ], [ -74.393381313999981, 39.389146226000051 ], [ -74.425526495999947, 39.393744208 ], [ -74.448150193999908, 39.419867255000142 ], [ -74.430897589999915, 39.425360419000171 ], [ -74.421701626999919, 39.416937567000119 ], [ -74.413563605999911, 39.404771226000136 ], [ -74.399769660999908, 39.399359442 ], [ -74.386626756999931, 39.40648021000014 ], [ -74.371734178999901, 39.436590887000179 ], [ -74.3587947259999, 39.447170315000122 ], [ -74.36754309799997, 39.46503327 ], [ -74.351633266999841, 39.470200914000188 ], [ -74.302113410999908, 39.464748440000065 ], [ -74.304921027999853, 39.459784247000115 ], [ -74.313343878999916, 39.455145575000174 ], [ -74.317860480999855, 39.454006252000127 ], [ -74.330922003999945, 39.426092841000113 ], [ -74.359242316999882, 39.401556708000086 ] ] ], [ [ [ -74.231632420999887, 39.552991248000026 ], [ -74.256418423999975, 39.522202867000161 ], [ -74.255767381999931, 39.529730536000116 ], [ -74.254465298999918, 39.534613348000093 ], [ -74.254639712999875, 39.547361925000118 ], [ -74.24007209699991, 39.575387884000136 ], [ -74.159986580999941, 39.685463525 ], [ -74.132883266999869, 39.714667059000121 ], [ -74.118275519999941, 39.737982489000117 ], [ -74.109486456999889, 39.748928127000099 ], [ -74.098133917999917, 39.755682684000035 ], [ -74.10578365799995, 39.729152736000074 ], [ -74.129681643999902, 39.701289716000034 ], [ -74.147901462999926, 39.665895583000108 ], [ -74.184308354999899, 39.615554709000079 ], [ -74.231632420999887, 39.552991248000026 ] ] ], [ [ [ -73.389515753999916, 40.616766669000143 ], [ -73.574120034999851, 40.575093006000046 ], [ -73.56639295699992, 40.590320242000175 ], [ -73.443846537999917, 40.618936383000076 ], [ -73.400732991999888, 40.629640755000153 ], [ -73.377738167999922, 40.634617012000049 ], [ -73.357600610999953, 40.640327809000055 ], [ -73.339384144999968, 40.644592667000055 ], [ -73.318311166999877, 40.646661882000117 ], [ -73.269456782999924, 40.649295803000186 ], [ -73.248401601999973, 40.647720291000113 ], [ -73.25614437599998, 40.639051948000187 ], [ -73.3203241679999, 40.635055865000126 ], [ -73.389515753999916, 40.616766669000143 ] ] ], [ [ [ -74.074615135999863, 40.63403299500014 ], [ -74.071941277999969, 40.623331691000132 ], [ -74.061451202999933, 40.614608642000022 ], [ -74.053568731999945, 40.602703867000102 ], [ -74.102102654999925, 40.55457049200011 ], [ -74.133917983999964, 40.532668015000141 ], [ -74.139674179999901, 40.534644207000142 ], [ -74.148036611999913, 40.534629064000129 ], [ -74.163164211999856, 40.527446857000072 ], [ -74.179854991999918, 40.519861493000022 ], [ -74.192361444999904, 40.511488534000122 ], [ -74.209069023999945, 40.509462598000184 ], [ -74.228368888999853, 40.502257783000019 ], [ -74.242983653999943, 40.499434562000104 ], [ -74.250830956999948, 40.501396666000076 ], [ -74.252944180999918, 40.507354413000186 ], [ -74.248259573999917, 40.512937402 ], [ -74.239392175999853, 40.516939516000107 ], [ -74.238930238999927, 40.527258953000157 ], [ -74.241603460999869, 40.539165454000127 ], [ -74.232759232999854, 40.547928974000016 ], [ -74.218665239999893, 40.553132482000152 ], [ -74.207195510999895, 40.560311463000133 ], [ -74.201487383999847, 40.569856296000111 ], [ -74.197894548999869, 40.584956394000088 ], [ -74.194351857999919, 40.612766385 ], [ -74.191801699999957, 40.628264243000146 ], [ -74.18241904899989, 40.637422431000104 ], [ -74.170927338999945, 40.643410194000083 ], [ -74.153631248999886, 40.637489667000139 ], [ -74.126088019999941, 40.633490302 ], [ -74.110259568999908, 40.637762762000094 ], [ -74.097320115999906, 40.643500067000062 ], [ -74.083536306999946, 40.649517990000092 ], [ -74.076715703999952, 40.648744482000112 ], [ -74.073052142999956, 40.644372259000122 ], [ -74.071450231999933, 40.638030716000159 ], [ -74.074615135999863, 40.63403299500014 ] ] ], [ [ [ -73.147531704999892, 40.644313869000158 ], [ -73.24578304899984, 40.623806097000127 ], [ -73.29745864599991, 40.622622436000157 ], [ -73.30504608499993, 40.629921830000157 ], [ -73.255291545999938, 40.629668423000155 ], [ -73.218830254999887, 40.639634581000067 ], [ -73.176609963999852, 40.650997904000135 ], [ -73.104658647999969, 40.667220301000086 ], [ -73.040342970999887, 40.681995243000173 ], [ -73.013905402999939, 40.690456447000102 ], [ -72.948903813999948, 40.71538570100013 ], [ -72.914268560999915, 40.72452721700013 ], [ -72.881511091999926, 40.734399851000049 ], [ -72.832370115999879, 40.747744334000103 ], [ -72.779230118999891, 40.766843235000081 ], [ -72.757082747999902, 40.768802103000084 ], [ -72.757239253999899, 40.760085740000179 ], [ -72.804921027999882, 40.750840562000022 ], [ -72.83153235599994, 40.74164459800015 ], [ -72.913476531999947, 40.712901219000102 ], [ -72.991525844999899, 40.688177802000112 ], [ -73.041005011999857, 40.672634182000124 ], [ -73.147531704999892, 40.644313869000158 ] ] ], [ [ [ -74.002227342999902, 40.704046942000062 ], [ -74.016916469999899, 40.699286200000145 ], [ -74.011977144999975, 40.730038127000128 ], [ -74.003155496999881, 40.75587118900016 ], [ -73.98696855399993, 40.778713283000073 ], [ -73.939157680999898, 40.854234117000189 ], [ -73.932810024999867, 40.868841864000117 ], [ -73.928049282999979, 40.877508856000119 ], [ -73.917958136999914, 40.875067450000174 ], [ -73.916656053999901, 40.863348700000088 ], [ -73.929676886999886, 40.843817450000117 ], [ -73.938791469999899, 40.828192450000031 ], [ -73.940093553999901, 40.81386953300013 ], [ -73.933379686999842, 40.797186591000113 ], [ -73.946424705999874, 40.777234373000013 ], [ -73.972219057999922, 40.740679303000135 ], [ -73.972293428999933, 40.727202721000182 ], [ -73.975805636999922, 40.714012798000155 ], [ -74.002227342999902, 40.704046942000062 ] ] ], [ [ [ -72.278469953999888, 41.058459579000029 ], [ -72.282389982999888, 41.047881126000149 ], [ -72.275660300999846, 41.03927114700015 ], [ -72.27552668699991, 41.031833217000056 ], [ -72.28625314199985, 41.034203040000037 ], [ -72.297891043999897, 41.041522594000114 ], [ -72.317750215999922, 41.048753110000078 ], [ -72.340762692999931, 41.048506604000025 ], [ -72.358797710999909, 41.045830657000025 ], [ -72.371305754999923, 41.054991786000144 ], [ -72.372391265999852, 41.06861794300012 ], [ -72.361916808999894, 41.0798920350001 ], [ -72.34155907199991, 41.090651640000132 ], [ -72.340158782999964, 41.103683108000112 ], [ -72.327844947999921, 41.105055633000077 ], [ -72.322713373999903, 41.094572403000186 ], [ -72.305248736999943, 41.084218047000022 ], [ -72.295336769999949, 41.081841638000029 ], [ -72.280481500999883, 41.078894846000097 ], [ -72.282769755999936, 41.068953265000076 ], [ -72.278469953999888, 41.058459579000029 ] ] ], [ [ [ -72.079033592999934, 41.094844765000161 ], [ -72.085092645999879, 41.091725159000035 ], [ -72.084971027999927, 41.083542954 ], [ -72.081450656999891, 41.074878819000091 ], [ -72.086100767999881, 41.068189192 ], [ -72.0927894699999, 41.061478812000175 ], [ -72.100822928999946, 41.054246244000112 ], [ -72.101020651999875, 41.067545871000064 ], [ -72.102584503999964, 41.081343332000088 ], [ -72.108138394999855, 41.090505812000131 ], [ -72.122438565999914, 41.09293289600005 ], [ -72.136025491999931, 41.092807360000151 ], [ -72.141520829999962, 41.096849278 ], [ -72.134807581999979, 41.10202611300015 ], [ -72.128131927999902, 41.109246518000177 ], [ -72.131021871999906, 41.120472208000038 ], [ -72.109071842999896, 41.106860885000131 ], [ -72.091353886999855, 41.101899546000155 ], [ -72.078430715999872, 41.09996428400008 ], [ -72.079033592999934, 41.094844765000161 ] ] ], [ [ [ -72.246896938999924, 41.135443427000112 ], [ -72.260243292999945, 41.12502676000004 ], [ -72.276193813999953, 41.117051499000169 ], [ -72.289458787999877, 41.113348700000031 ], [ -72.304432745999918, 41.131944078000132 ], [ -72.343617316999939, 41.114203192000119 ], [ -72.412342902999939, 41.064886786000145 ], [ -72.415304877999887, 41.054447018000118 ], [ -72.399973110999895, 41.051336981000176 ], [ -72.392811652999882, 41.047186591000141 ], [ -72.38508053299995, 41.044460354000179 ], [ -72.390542936999907, 41.031470594 ], [ -72.412076657999933, 41.034132382000152 ], [ -72.431121424999901, 41.030403194000044 ], [ -72.437408006999931, 41.025702216000028 ], [ -72.438832160999908, 41.015977281000161 ], [ -72.435699022999927, 41.005886135000097 ], [ -72.433461066999939, 40.993231512000037 ], [ -72.437733527999882, 40.984198309000121 ], [ -72.4466853509999, 40.991400458000058 ], [ -72.454945441999882, 41.003729559000092 ], [ -72.466457344999895, 41.003826693000136 ], [ -72.472539347999884, 40.990394246000122 ], [ -72.494943813999924, 40.989813544000029 ], [ -72.499582485999952, 40.988959052000112 ], [ -72.510548404999923, 40.984899506000048 ], [ -72.520659959999875, 40.985174872000087 ], [ -72.53392195899994, 40.974852572000188 ], [ -72.543562169999888, 40.966622917000151 ], [ -72.543080206999889, 40.956569729000122 ], [ -72.562442498999928, 40.944198054000097 ], [ -72.580044077999844, 40.932878172000173 ], [ -72.599562218999893, 40.930714996000162 ], [ -72.615937256999956, 40.927718727000027 ], [ -72.624623175999915, 40.907822984000106 ], [ -72.613433397999898, 40.908880927000055 ], [ -72.60285396999987, 40.908392645000063 ], [ -72.593006964999944, 40.905829169000143 ], [ -72.58429928299995, 40.900417385000097 ], [ -72.563588019999941, 40.912380276000036 ], [ -72.54393469999988, 40.910101630000085 ], [ -72.523833787999934, 40.903021552000112 ], [ -72.501361214999861, 40.897389032000021 ], [ -72.480846811999896, 40.89793746 ], [ -72.457142706999974, 40.910264390000052 ], [ -72.449882699999961, 40.919798586000113 ], [ -72.443714972999885, 40.931748765000165 ], [ -72.441029425999915, 40.942979234000163 ], [ -72.42929964699988, 40.946945601000053 ], [ -72.408179945999933, 40.950647239 ], [ -72.386131264999932, 40.971808593000119 ], [ -72.367184446999914, 40.994600253000144 ], [ -72.342111782999893, 40.999823309000092 ], [ -72.326538788999954, 40.999224229 ], [ -72.321105165999967, 41.005910246000056 ], [ -72.332091667999947, 41.030699717000076 ], [ -72.321522589999859, 41.035834052000084 ], [ -72.30668324399997, 41.03552480900008 ], [ -72.30126195099993, 41.020346417 ], [ -72.298456258999863, 41.006000018000023 ], [ -72.270104262999951, 41.002427612000119 ], [ -72.26344585599989, 41.015454601000087 ], [ -72.248633136999871, 41.017633218000029 ], [ -72.242543728999891, 41.029075175000131 ], [ -72.240210863999977, 41.037788731000077 ], [ -72.233709181999899, 41.044065751000019 ], [ -72.213785742999875, 41.039804036000092 ], [ -72.186752243999905, 41.0091633440001 ], [ -72.18355467899994, 41.02782147300006 ], [ -72.180043097999913, 41.047064520000063 ], [ -72.166865938999962, 41.056647412000089 ], [ -72.155384894999912, 41.054999091000056 ], [ -72.122873501999919, 41.017401434000035 ], [ -72.118153449999937, 41.006862697000159 ], [ -72.108998175999943, 41.001410223000121 ], [ -72.088042772999898, 41.004828192000147 ], [ -72.049875454999921, 41.017686265000165 ], [ -72.011708136999857, 41.042100328000018 ], [ -71.992746548999946, 41.049627997000172 ], [ -71.975707177999908, 41.043397001000116 ], [ -71.958752629999964, 41.046282747000063 ], [ -71.958067816999886, 41.06971829000004 ], [ -71.945304415999971, 41.073475417000125 ], [ -71.933427361999918, 41.064925487000053 ], [ -71.918934699999937, 41.058661200000088 ], [ -71.918934699999937, 41.064886786000145 ], [ -71.930904400999907, 41.078790580000188 ], [ -71.903300180999878, 41.084672137 ], [ -71.875111456999974, 41.075710354000037 ], [ -71.857411261999886, 41.071722723000065 ], [ -71.864898240999935, 41.062079169000086 ], [ -71.884969602999917, 41.045397036000125 ], [ -71.929511641999852, 41.037847875000168 ], [ -72.008872330999878, 41.0073856610001 ], [ -72.087147589999915, 40.983425197000102 ], [ -72.159820115999878, 40.95526764500012 ], [ -72.219862084999932, 40.933422721000014 ], [ -72.316991699999875, 40.896260082000126 ], [ -72.37173417899993, 40.875840562000107 ], [ -72.40665794899985, 40.862072135000162 ], [ -72.441273566999939, 40.855007229000122 ], [ -72.460764126999948, 40.852606512000179 ], [ -72.448353644999912, 40.86823151200015 ], [ -72.447417772999927, 40.879095770000148 ], [ -72.459136522999927, 40.885362046000083 ], [ -72.484689907999893, 40.887396552000112 ], [ -72.496571417999945, 40.88410065300009 ], [ -72.50059973899991, 40.87604401200015 ], [ -72.498361782999922, 40.865790106000034 ], [ -72.491525844999927, 40.856024481000176 ], [ -72.490793423999889, 40.846869208 ], [ -72.502308722999913, 40.839056708000115 ], [ -72.541818813999981, 40.82050202 ], [ -72.605279860999929, 40.801330324000119 ], [ -72.704442139999941, 40.776177001000107 ], [ -72.723954719999881, 40.770419324000116 ], [ -72.732004360999952, 40.769964911 ], [ -72.737904425999915, 40.773789781000019 ], [ -72.731694441999906, 40.77764891000011 ], [ -72.72538681799989, 40.778378957000129 ], [ -72.678458505999885, 40.790999752000133 ], [ -72.650516448999952, 40.79745521800011 ], [ -72.663580017999919, 40.800773149000022 ], [ -72.67932500099991, 40.800939970000158 ], [ -72.700344896999951, 40.799570565000082 ], [ -72.726960578999893, 40.807789457000055 ], [ -72.743946776999906, 40.796839494000082 ], [ -72.765170690999952, 40.783147914 ], [ -72.801898582999939, 40.782710473000137 ], [ -72.828008902999898, 40.78970843600014 ], [ -72.813628709999875, 40.781602281000019 ], [ -72.81794186099998, 40.768418687000164 ], [ -72.832753058999856, 40.759629624000084 ], [ -72.852792144999938, 40.749423148000076 ], [ -72.879074698999943, 40.745685802000125 ], [ -72.889257383999848, 40.765638468000148 ], [ -72.91036189899998, 40.758273537000079 ], [ -72.926258917999917, 40.756415106000034 ], [ -72.94681688299994, 40.741891623000171 ], [ -73.012196417999917, 40.749579169000029 ], [ -73.022572394999912, 40.747585354000179 ], [ -73.033421404999899, 40.731434457000105 ], [ -73.054954202999937, 40.729211969000161 ], [ -73.083323361999931, 40.724651524000123 ], [ -73.099099901999921, 40.72039401100001 ], [ -73.114731929999948, 40.728049412000146 ], [ -73.129383547999879, 40.730135124000142 ], [ -73.140435726999954, 40.726237526000077 ], [ -73.142404751999891, 40.716131903000147 ], [ -73.145393247999891, 40.705219127000149 ], [ -73.158029800999884, 40.699741432000067 ], [ -73.179514126999891, 40.704697984000106 ], [ -73.211931149999884, 40.705641452000108 ], [ -73.233323368999919, 40.714504671000086 ], [ -73.24702646199998, 40.707036144000128 ], [ -73.2618169, 40.695598322000095 ], [ -73.275003328999929, 40.686929889000069 ], [ -73.317488744999963, 40.683573226000178 ], [ -73.37221703599991, 40.662365485000024 ], [ -73.402157394999875, 40.657719149000073 ], [ -73.504545765999893, 40.643829900000085 ], [ -73.561120824999875, 40.638048905000133 ], [ -73.627173416999966, 40.614397052000115 ], [ -73.643433137999892, 40.604904261000073 ], [ -73.65286479, 40.601351179000076 ], [ -73.664367163999941, 40.603760995000172 ], [ -73.655975527999885, 40.608905716000052 ], [ -73.655417366999899, 40.618040455000127 ], [ -73.667950370999847, 40.626014131000133 ], [ -73.695790167999917, 40.621527411000059 ], [ -73.710925150999856, 40.610211603000025 ], [ -73.71044687299991, 40.59511485000003 ], [ -73.606336608999868, 40.594086480000115 ], [ -73.575480501999891, 40.593206284000033 ], [ -73.581800787999953, 40.58448644500011 ], [ -73.707343238999869, 40.582794339000159 ], [ -73.752349146999904, 40.585650805000071 ], [ -73.768050210999974, 40.58964326600001 ], [ -73.812589607999939, 40.583735717000181 ], [ -73.897117599999945, 40.554678083000127 ], [ -73.939470184999919, 40.541958871000148 ], [ -73.939478888999929, 40.555477037000074 ], [ -73.850548545999914, 40.580884281000138 ], [ -73.789791963999875, 40.600291753000093 ], [ -73.776156962999977, 40.610607521000176 ], [ -73.768805901999883, 40.618545669000085 ], [ -73.771419689999874, 40.623318697000045 ], [ -73.780848758999866, 40.62889794200008 ], [ -73.798128849999927, 40.638059347000123 ], [ -73.815411419999919, 40.64562735000014 ], [ -73.829559114999881, 40.648818970000079 ], [ -73.851563736999879, 40.643670073000109 ], [ -73.868848696999891, 40.640104301000022 ], [ -73.87722978899987, 40.636135967000044 ], [ -73.882989330999919, 40.631767981000124 ], [ -73.891346808999884, 40.623602606000176 ], [ -73.892935723999898, 40.614289357000175 ], [ -73.883515680999949, 40.600379116000127 ], [ -73.877761104999962, 40.582095511 ], [ -73.891888319999907, 40.576935281000075 ], [ -73.897644047999904, 40.583296509000078 ], [ -73.911770011999948, 40.583697425000096 ], [ -73.926417976999915, 40.583698501000114 ], [ -73.932169250999976, 40.577737156000168 ], [ -73.941582930999942, 40.574557584000061 ], [ -73.988125445999913, 40.569370426000049 ], [ -74.003816963999896, 40.570550837000113 ], [ -74.011673825999907, 40.579288274000149 ], [ -74.000694911999858, 40.583271640000063 ], [ -73.998086972999914, 40.589632339 ], [ -74.00489548799996, 40.597182034000113 ], [ -74.030021284999918, 40.60549772800006 ], [ -74.039989745999947, 40.619785734000104 ], [ -74.035834780999892, 40.63885938600005 ], [ -74.023810964999882, 40.649200055000065 ], [ -74.012839686999911, 40.664700094000111 ], [ -74.015479257999914, 40.677803734000108 ], [ -74.001879397999886, 40.690127016000119 ], [ -73.997696619999942, 40.696087389000169 ], [ -73.990589972999913, 40.699774481000063 ], [ -73.980336066999968, 40.704616604000122 ], [ -73.969335484999903, 40.708749400000116 ], [ -73.959371441999878, 40.724663351000046 ], [ -73.956796235999946, 40.743171457000088 ], [ -73.930233316999932, 40.773121062000129 ], [ -73.908599852999913, 40.788677409000016 ], [ -73.88709434699993, 40.779934320000123 ], [ -73.870302940999892, 40.782312821000104 ], [ -73.8608600499999, 40.776351255000137 ], [ -73.823053986999895, 40.797382220000131 ], [ -73.778989037999906, 40.792176561000176 ], [ -73.757522417999922, 40.771111135000083 ], [ -73.750136660999914, 40.791345974000095 ], [ -73.764259992999882, 40.810031622000011 ], [ -73.755523240999906, 40.832790432000152 ], [ -73.739816860999923, 40.834336656000104 ], [ -73.729359503999945, 40.824082749000169 ], [ -73.721791144999912, 40.811224677000055 ], [ -73.71458899599989, 40.804795640000137 ], [ -73.702992316999939, 40.810166734000106 ], [ -73.696888800999972, 40.821885484000077 ], [ -73.700428839999859, 40.833604234000077 ], [ -73.733062303999901, 40.843695380000142 ], [ -73.731271938999924, 40.854437567000147 ], [ -73.720204230999883, 40.86623769700013 ], [ -73.705306454999942, 40.866744483000119 ], [ -73.674351139999914, 40.856755178000142 ], [ -73.665514773999945, 40.838452057 ], [ -73.653309699999852, 40.823919989000117 ], [ -73.646117115999914, 40.830866767000074 ], [ -73.653360533999887, 40.867785537000103 ], [ -73.63265498699991, 40.899585676000029 ], [ -73.56527346799993, 40.914514375000138 ], [ -73.520463477999868, 40.917601860000062 ], [ -73.512684699999909, 40.90509674700003 ], [ -73.515288865999906, 40.900417385000097 ], [ -73.52860364199995, 40.891722363000028 ], [ -73.540669920999932, 40.895338276000146 ], [ -73.549097950999879, 40.890985467000164 ], [ -73.534981193999897, 40.878627729000144 ], [ -73.51134759699994, 40.877349385000159 ], [ -73.509721879999887, 40.88569418900012 ], [ -73.507571480999871, 40.893637954000056 ], [ -73.493394042999938, 40.891991487000084 ], [ -73.492936759999935, 40.881643621000094 ], [ -73.47982825399987, 40.877244456000184 ], [ -73.472443886999969, 40.882367618000146 ], [ -73.475534850999907, 40.890738775000088 ], [ -73.468129035999908, 40.893622137000179 ], [ -73.469146287999877, 40.901312567 ], [ -73.485340949999937, 40.917914130000057 ], [ -73.494095341999866, 40.927052509000148 ], [ -73.485687170999881, 40.945625696000022 ], [ -73.46208391599987, 40.936382307000102 ], [ -73.431304490999935, 40.933294989 ], [ -73.440825975999928, 40.914658921000026 ], [ -73.432199673999918, 40.907660223000121 ], [ -73.420318162999877, 40.900417385000097 ], [ -73.405021252999859, 40.903954901000148 ], [ -73.388661261999914, 40.905951239000117 ], [ -73.370920376999919, 40.900091864000089 ], [ -73.358265753999945, 40.900417385000097 ], [ -73.354725714999859, 40.914129950000031 ], [ -73.360636864999918, 40.925092679 ], [ -73.378960844999938, 40.924464349000161 ], [ -73.399568848999934, 40.925418193000112 ], [ -73.410023566999939, 40.939886786000088 ], [ -73.407761527999924, 40.947162289000133 ], [ -73.401930500999924, 40.954404294000184 ], [ -73.395174359999942, 40.954367892 ], [ -73.379781533999903, 40.94701298400004 ], [ -73.374064543999907, 40.936073438000122 ], [ -73.350960147999871, 40.930856422000133 ], [ -73.325900791999914, 40.929256722 ], [ -73.293184226999898, 40.92470378700007 ], [ -73.263428446999939, 40.913623240000121 ], [ -73.243723110999952, 40.910264390000052 ], [ -73.23534094999988, 40.907822984000106 ], [ -73.224598761999886, 40.908270575000088 ], [ -73.17870032499988, 40.919012762000094 ], [ -73.159494594999842, 40.930243231000119 ], [ -73.148101365999878, 40.945624091000141 ], [ -73.152821417999888, 40.962469794000143 ], [ -73.13536536399991, 40.968451239000061 ], [ -73.113148566999968, 40.973456122000115 ], [ -73.098744269999884, 40.969509182000124 ], [ -73.104400193999879, 40.948797919000114 ], [ -73.091297980999911, 40.948350328000018 ], [ -73.082142706999946, 40.951605536000059 ], [ -73.079172329999921, 40.958563544000143 ], [ -73.084584113999966, 40.969305731000148 ], [ -73.076222684999948, 40.971944765000117 ], [ -73.048441013999877, 40.963015009000131 ], [ -73.008968787999947, 40.967066290000147 ], [ -72.900376287999848, 40.963255021000109 ], [ -72.830089225999899, 40.969175333000024 ], [ -72.781120910999846, 40.965079675000183 ], [ -72.696092176999883, 40.981017533000013 ], [ -72.628325975999957, 40.983587958000058 ], [ -72.606109178999901, 40.989935614 ], [ -72.541347084999927, 41.023818126000023 ], [ -72.471651720999887, 41.055953110000118 ], [ -72.453861659999916, 41.074423881000101 ], [ -72.445176584999842, 41.085848868000127 ], [ -72.412923105999909, 41.089811820000094 ], [ -72.38304602799991, 41.108913479000151 ], [ -72.35871334499987, 41.131130276000121 ], [ -72.343413865999906, 41.140651760000125 ], [ -72.289458787999877, 41.161159572000159 ], [ -72.275542772999898, 41.162624416000128 ], [ -72.25999915299991, 41.160834052000141 ], [ -72.247222459999961, 41.155707098000121 ], [ -72.24168860599994, 41.146795966000084 ], [ -72.246896938999924, 41.135443427000112 ] ] ], [ [ [ -71.571571694999903, 41.149769275000082 ], [ -71.599550269999924, 41.145778973000134 ], [ -71.613747606999908, 41.15518087400001 ], [ -71.612717179999919, 41.167466984000058 ], [ -71.608024977999889, 41.180589387000012 ], [ -71.597486495999959, 41.187669262000142 ], [ -71.591216600999871, 41.197333075000088 ], [ -71.582671678999958, 41.204046942000147 ], [ -71.58043372299997, 41.214789130000057 ], [ -71.57919993, 41.225571522000038 ], [ -71.572580532999979, 41.228827216000113 ], [ -71.567046678999958, 41.22483958500014 ], [ -71.553541122999917, 41.214571842000012 ], [ -71.55947373399988, 41.201024044000135 ], [ -71.56615149599989, 41.193752346000124 ], [ -71.559925910999908, 41.183742580000128 ], [ -71.551869269999969, 41.17572663 ], [ -71.544473261999883, 41.162887597000136 ], [ -71.549094582999885, 41.1520420720001 ], [ -71.571571694999903, 41.149769275000082 ] ] ], [ [ [ -70.801756294999933, 41.24807623400001 ], [ -70.810902549999867, 41.24804580500016 ], [ -70.8231082369999, 41.250759965000029 ], [ -70.832282438999954, 41.256691798000091 ], [ -70.830471037999899, 41.260365562000132 ], [ -70.821934590999973, 41.260392670000059 ], [ -70.814020616999926, 41.263167429000148 ], [ -70.809126441999894, 41.259514254000052 ], [ -70.801797508999954, 41.256784545000059 ], [ -70.801756294999933, 41.24807623400001 ] ] ], [ [ [ -71.970152916999979, 41.273622163000184 ], [ -71.988328753999895, 41.260085361000122 ], [ -71.998733526999871, 41.251666100000122 ], [ -72.022806512999949, 41.253486779000028 ], [ -72.038797679999846, 41.249446826000067 ], [ -72.036563179999888, 41.260865196000097 ], [ -72.026228000999907, 41.266903798000115 ], [ -72.022129892999914, 41.276858134000136 ], [ -72.011349225999936, 41.276207975 ], [ -72.003362312999883, 41.267012781000076 ], [ -71.998077193999933, 41.274082014000115 ], [ -71.994003807999974, 41.283080978000143 ], [ -71.976809354999972, 41.284705958000032 ], [ -71.953888265999922, 41.286710664000069 ], [ -71.939756728999953, 41.292197055000159 ], [ -71.920732329999908, 41.291396489000093 ], [ -71.928000764999894, 41.28197883000017 ], [ -71.94657542899995, 41.276567892000017 ], [ -71.970152916999979, 41.273622163000184 ] ] ], [ [ [ -70.019202133999926, 41.370116838000072 ], [ -70.0052791009999, 41.342718817000147 ], [ -69.974964972999913, 41.302191473000121 ], [ -69.957759819999922, 41.275747900000013 ], [ -69.967149245999906, 41.24945285400004 ], [ -70.00112988399988, 41.239256614000098 ], [ -70.043038490999947, 41.243333906000103 ], [ -70.097596060999905, 41.241829638000084 ], [ -70.137745228999904, 41.247152366000037 ], [ -70.233143683999856, 41.283758856000091 ], [ -70.256348598999864, 41.292767142000073 ], [ -70.278112397999934, 41.307906609000142 ], [ -70.272358116999982, 41.311347581000078 ], [ -70.256287786999906, 41.309160085000102 ], [ -70.240816118999902, 41.300931916000096 ], [ -70.217287877999894, 41.29742713200001 ], [ -70.16105114699991, 41.292966801 ], [ -70.124288156999881, 41.295870942000036 ], [ -70.106800910999908, 41.295233466000141 ], [ -70.097767706999889, 41.290432033000158 ], [ -70.089711066999939, 41.289984442000062 ], [ -70.081939256999959, 41.292547919000143 ], [ -70.071400519999884, 41.301581122000172 ], [ -70.046009894999969, 41.30756256700009 ], [ -70.031402147999955, 41.317531643000095 ], [ -70.020090298999975, 41.330796617000104 ], [ -70.01402747299997, 41.344631252000013 ], [ -70.032338019999941, 41.339504299000097 ], [ -70.060292120999861, 41.31663646 ], [ -70.076079881999902, 41.311102606000148 ], [ -70.044300910999965, 41.35097890800013 ], [ -70.037220831999917, 41.372870184000178 ], [ -70.054149404999919, 41.392686019000067 ], [ -70.052396188999893, 41.396562483000181 ], [ -70.039745775999933, 41.394359283000043 ], [ -70.028870052999963, 41.386119721000071 ], [ -70.019202133999926, 41.370116838000072 ] ] ], [ [ [ -70.446685350999928, 41.36741771000014 ], [ -70.452870245999918, 41.358872789000102 ], [ -70.465484178999901, 41.360256252000099 ], [ -70.481271938999924, 41.369574286000145 ], [ -70.494781053999901, 41.382310289000188 ], [ -70.500599738999966, 41.39362213700015 ], [ -70.486927863999938, 41.402655341000084 ], [ -70.470692511999886, 41.420314846000096 ], [ -70.455718553999958, 41.429632880000142 ], [ -70.446034308999884, 41.413519598000065 ], [ -70.444935675999943, 41.382025458000058 ], [ -70.446685350999928, 41.36741771000014 ] ] ], [ [ [ -70.927916692999901, 41.418619697000068 ], [ -70.938665493999935, 41.411220055000129 ], [ -70.948503408999898, 41.41412356000005 ], [ -70.94067753399986, 41.420774915000052 ], [ -70.926029890999928, 41.428916850000135 ], [ -70.911335139999892, 41.429705943000144 ], [ -70.897646195999869, 41.436371808000118 ], [ -70.8711762289999, 41.438669510000167 ], [ -70.859464515999974, 41.448265053000156 ], [ -70.856493551999904, 41.443127761000184 ], [ -70.848598487999908, 41.434332142000116 ], [ -70.85445358399997, 41.429167623000083 ], [ -70.875983758999951, 41.42248052900014 ], [ -70.892653934999913, 41.422422083000086 ], [ -70.906385821999919, 41.422371097000152 ], [ -70.927916692999901, 41.418619697000068 ] ] ], [ [ [ -70.593006964999887, 41.47166575700011 ], [ -70.603667772999927, 41.448228257000139 ], [ -70.588775193999965, 41.45416901200015 ], [ -70.5794978509999, 41.465887762000065 ], [ -70.570423956999917, 41.473944403000175 ], [ -70.555897589999887, 41.46873607 ], [ -70.545765753999916, 41.453924872000115 ], [ -70.546254035999908, 41.444281317000147 ], [ -70.556548631999931, 41.436509507000054 ], [ -70.57640540299991, 41.427801825000145 ], [ -70.563343878999945, 41.418687242000075 ], [ -70.549305792999888, 41.414536851000136 ], [ -70.517404751999976, 41.413519598000065 ], [ -70.507435675999886, 41.362616278000147 ], [ -70.525013800999915, 41.359076239000061 ], [ -70.666005011999886, 41.357001044000143 ], [ -70.69627844999988, 41.351507880000113 ], [ -70.72394771999987, 41.342718817000147 ], [ -70.747670050999886, 41.331000067000062 ], [ -70.775908982999852, 41.304388739000117 ], [ -70.786407029999936, 41.304144598000093 ], [ -70.804676886999886, 41.312567450000031 ], [ -70.814971482999908, 41.320705471000153 ], [ -70.834055141999897, 41.339911200000088 ], [ -70.84622148299988, 41.346665757000139 ], [ -70.84622148299988, 41.354071356000034 ], [ -70.781971808999856, 41.35423411699999 ], [ -70.75450598899991, 41.372503973000065 ], [ -70.742176886999857, 41.384833075000117 ], [ -70.715321417999888, 41.420355536000088 ], [ -70.702626105999911, 41.427801825000145 ], [ -70.689605272999927, 41.433091539000046 ], [ -70.65990149599989, 41.456529039000102 ], [ -70.605132615999878, 41.474025783000158 ], [ -70.593006964999887, 41.47166575700011 ] ] ], [ [ [ -70.76830594199987, 41.459546233000182 ], [ -70.790816343999978, 41.449198852000151 ], [ -70.808457403999881, 41.446946159 ], [ -70.832950695999898, 41.442465380000087 ], [ -70.839860588999926, 41.450530765000124 ], [ -70.828125195999888, 41.457181823000113 ], [ -70.813402837999973, 41.455017817000126 ], [ -70.802652704999929, 41.463133107000132 ], [ -70.782123842999908, 41.478623419000158 ], [ -70.742966652999939, 41.500765861 ], [ -70.724354383999867, 41.511099655000166 ], [ -70.710638157999909, 41.519213976000074 ], [ -70.694925507999955, 41.517037162000079 ], [ -70.679194013999847, 41.510449556000097 ], [ -70.699784321999886, 41.502326750000108 ], [ -70.718398387999912, 41.491998179000021 ], [ -70.742893235999901, 41.481654371000118 ], [ -70.75856515699985, 41.475740581000096 ], [ -70.757554008999961, 41.468392619 ], [ -70.76830594199987, 41.459546233000182 ] ] ], [ [ [ -71.392648891999926, 41.463283596000153 ], [ -71.398793097999913, 41.461900132000082 ], [ -71.40099036399991, 41.468451239000061 ], [ -71.39517167899993, 41.490912177000055 ], [ -71.398793097999913, 41.50287506700009 ], [ -71.392201300999915, 41.505926825000174 ], [ -71.389475063999953, 41.509222723000121 ], [ -71.387806769999941, 41.512884833000086 ], [ -71.384429490999935, 41.517157294000086 ], [ -71.395334438999896, 41.526434637000037 ], [ -71.392689581999917, 41.542669989000089 ], [ -71.377674933999884, 41.577948309000121 ], [ -71.368397589999944, 41.576239325000117 ], [ -71.362416144999912, 41.572455145000092 ], [ -71.35912024599989, 41.56639232 ], [ -71.357818162999877, 41.558172919000086 ], [ -71.357289191999911, 41.536566473000093 ], [ -71.360422329999977, 41.514553127000099 ], [ -71.365630662999877, 41.495347398000135 ], [ -71.371449347999942, 41.482367255000142 ], [ -71.376088019999941, 41.476996161000088 ], [ -71.384144660999908, 41.469468492000104 ], [ -71.392648891999926, 41.463283596000153 ] ] ], [ [ [ -70.002105272999927, 41.553778387000094 ], [ -70.021473761999943, 41.550726630000113 ], [ -69.981027798999918, 41.627671617000104 ], [ -69.97301184799997, 41.653713283000073 ], [ -69.96507727799991, 41.65135325700011 ], [ -69.96129309799997, 41.646958726000051 ], [ -69.95995032499988, 41.640692450000088 ], [ -69.959380662999905, 41.632635809000149 ], [ -69.976226365999906, 41.612290757000082 ], [ -70.002105272999927, 41.553778387000094 ] ] ], [ [ [ -71.238026495999918, 41.500311591000084 ], [ -71.233631964999915, 41.489203192000147 ], [ -71.264800584999904, 41.496079820000077 ], [ -71.285959438999924, 41.482001044000029 ], [ -71.303212042999917, 41.466376044000029 ], [ -71.323068813999924, 41.46873607 ], [ -71.33495032499988, 41.459051825000031 ], [ -71.346180792999888, 41.454738674000126 ], [ -71.354562954999949, 41.45831940300009 ], [ -71.357818162999877, 41.472479559000121 ], [ -71.35130774599989, 41.477850653000175 ], [ -71.319976365999935, 41.48847077000012 ], [ -71.30882727799991, 41.495428778000118 ], [ -71.321359829999921, 41.50853099199999 ], [ -71.325550910999937, 41.519964911000116 ], [ -71.322255011999914, 41.530422268 ], [ -71.312489386999886, 41.540757554000109 ], [ -71.309152798999946, 41.546087958 ], [ -71.30817623599998, 41.553168036000145 ], [ -71.30882727799991, 41.567775783000073 ], [ -71.305775519999941, 41.57172272300015 ], [ -71.291086391999926, 41.578273830000128 ], [ -71.285511847999913, 41.581732489000146 ], [ -71.279449022999927, 41.593085028000118 ], [ -71.27358964799987, 41.62099844000015 ], [ -71.26781165299991, 41.632635809000149 ], [ -71.257801886999943, 41.640692450000088 ], [ -71.232736782999922, 41.652777411 ], [ -71.220611131999931, 41.660549221000011 ], [ -71.220611131999931, 41.64004140800013 ], [ -71.23257402299987, 41.605902411000145 ], [ -71.233631964999915, 41.530829169000029 ], [ -71.235096808999884, 41.518988348000065 ], [ -71.237538214999915, 41.509507554000052 ], [ -71.238026495999918, 41.500311591000084 ] ] ], [ [ [ -71.315093553999873, 41.580796617000047 ], [ -71.330718553999958, 41.575588283000158 ], [ -71.33722896999987, 41.582098700000145 ], [ -71.33722896999987, 41.592515367000047 ], [ -71.330718553999958, 41.610744533000044 ], [ -71.335926886999857, 41.626369533000016 ], [ -71.356760219999927, 41.631577867000104 ], [ -71.359364386999914, 41.641994533000101 ], [ -71.355458136999943, 41.660223700000174 ], [ -71.343739386999943, 41.670640367000075 ], [ -71.335926886999857, 41.657619533000073 ], [ -71.330718553999958, 41.64720286699999 ], [ -71.31769771999987, 41.632879950000088 ], [ -71.303374803999901, 41.626369533000016 ], [ -71.304676886999886, 41.604234117000132 ], [ -71.315093553999873, 41.580796617000047 ] ] ], [ [ [ -69.652333136999886, 43.790432033000101 ], [ -69.664051886999857, 43.789129950000088 ], [ -69.684885219999842, 43.81126536699999 ], [ -69.688791469999842, 43.828192450000145 ], [ -69.67316646999987, 43.85293203300013 ], [ -69.647124803999873, 43.83730703300013 ], [ -69.648426886999886, 43.819077867000075 ], [ -69.652333136999886, 43.790432033000101 ] ] ], [ [ [ -69.714820772999957, 43.859451721000184 ], [ -69.714833136999914, 43.859442450000031 ], [ -69.721343553999901, 43.872463283000016 ], [ -69.730458136999886, 43.890692450000088 ], [ -69.722645636999914, 43.907619533000073 ], [ -69.700510219999927, 43.927150783000158 ], [ -69.69399980399993, 43.945379950000031 ], [ -69.678374803999958, 43.967515367000104 ], [ -69.66926021999987, 43.955796617000132 ], [ -69.66926021999987, 43.94277578300013 ], [ -69.680978969999842, 43.933661200000145 ], [ -69.69009355399993, 43.90501536699999 ], [ -69.690124219999888, 43.904863117 ], [ -69.6901618979999, 43.904677304000089 ], [ -69.690213886999942, 43.904422367000123 ], [ -69.690279751999896, 43.904101304000122 ], [ -69.69035905399997, 43.903717117000141 ], [ -69.690451355999869, 43.903272804000053 ], [ -69.690556219999934, 43.902771367000028 ], [ -69.690673209999943, 43.902215804 ], [ -69.690801886999935, 43.901609117000149 ], [ -69.690941813999956, 43.900954304000052 ], [ -69.691092553999908, 43.900254367000159 ], [ -69.691253667999916, 43.899512304000112 ], [ -69.691424719999929, 43.898731117000139 ], [ -69.691605272999965, 43.897913804000112 ], [ -69.691794886999929, 43.897063367 ], [ -69.691993126999904, 43.896182804000048 ], [ -69.692199553999927, 43.895275117 ], [ -69.692413730999874, 43.894343304000088 ], [ -69.692635219999914, 43.893390367000123 ], [ -69.692863584999884, 43.892419304000057 ], [ -69.693098386999878, 43.891433117000091 ], [ -69.693339188999886, 43.890434804000094 ], [ -69.693585553999952, 43.889427367000124 ], [ -69.693837042999888, 43.888413804000109 ], [ -69.694093219999843, 43.887397117000106 ], [ -69.69435364799989, 43.88638030400007 ], [ -69.694617886999907, 43.885366367000032 ], [ -69.694885501999948, 43.884358304000116 ], [ -69.695156053999938, 43.883359117000126 ], [ -69.695429105999978, 43.882371804000158 ], [ -69.695704219999925, 43.881399367000157 ], [ -69.695980959999901, 43.880444804000049 ], [ -69.696258886999885, 43.879511117000064 ], [ -69.696537563999954, 43.8786013040001 ], [ -69.696816553999923, 43.877718367000156 ], [ -69.697095417999918, 43.876865304 ], [ -69.697373719999945, 43.876045117000089 ], [ -69.697651022999963, 43.875260804000121 ], [ -69.697926886999966, 43.874515367000171 ], [ -69.698200876999891, 43.873811804000027 ], [ -69.698472553999892, 43.873153117000172 ], [ -69.698741480999871, 43.872542304000078 ], [ -69.699007219999913, 43.87198236700003 ], [ -69.69926933499994, 43.871476304000069 ], [ -69.699527386999961, 43.871027117000111 ], [ -69.699780938999879, 43.87063780400014 ], [ -69.700029553999855, 43.870311367000127 ], [ -69.700272792999897, 43.870050804000172 ], [ -69.700510219999927, 43.869859117000104 ], [ -69.701009136999915, 43.869522450000048 ], [ -69.701280001999947, 43.869336929000056 ], [ -69.701564053999903, 43.869140783 ], [ -69.701860480999926, 43.868934637000095 ], [ -69.702168469999918, 43.868719117000026 ], [ -69.702487209999902, 43.868494846000104 ], [ -69.702815886999929, 43.868262450000159 ], [ -69.70315368899989, 43.86802255400012 ], [ -69.703499803999932, 43.867775783000027 ], [ -69.703853417999966, 43.867522762000149 ], [ -69.704213719999927, 43.867264117000062 ], [ -69.704579897999849, 43.867000471000111 ], [ -69.704951136999938, 43.866732450000043 ], [ -69.70532662699992, 43.866460679000042 ], [ -69.705705553999906, 43.866185783000034 ], [ -69.706087105999956, 43.865908387000061 ], [ -69.706470469999971, 43.865629117000154 ], [ -69.706854834999973, 43.865348596000118 ], [ -69.707239386999902, 43.865067450000041 ], [ -69.70762331399996, 43.864786304000134 ], [ -69.708005803999896, 43.864505783000098 ], [ -69.708386042999905, 43.864226512000087 ], [ -69.708763219999952, 43.863949117000132 ], [ -69.709136522999927, 43.863674221000124 ], [ -69.709505136999951, 43.863402450000038 ], [ -69.709868251999893, 43.863134429000141 ], [ -69.71022505399992, 43.862870783000105 ], [ -69.710574730999923, 43.862612137 ], [ -69.710916469999944, 43.862359117000139 ], [ -69.711249459999863, 43.862112346000131 ], [ -69.711572886999903, 43.861872450000092 ], [ -69.71188593899987, 43.861640054000063 ], [ -69.712187803999882, 43.861415783000055 ], [ -69.712477667999877, 43.861200262000082 ], [ -69.712754719999907, 43.860994117000175 ], [ -69.713018147999918, 43.86079797100011 ], [ -69.713267136999917, 43.860612450000119 ], [ -69.713500876999916, 43.860438179000184 ], [ -69.713718553999882, 43.860275783000148 ], [ -69.713919355999877, 43.860125887 ], [ -69.714102469999943, 43.859989117000154 ], [ -69.714267084999875, 43.85986609600009 ], [ -69.714412386999925, 43.859757450000146 ], [ -69.714537563999869, 43.85966380400005 ], [ -69.714641803999882, 43.859585783000071 ], [ -69.714724292999875, 43.859524012000023 ], [ -69.714784219999871, 43.859479117000049 ], [ -69.714820772999957, 43.859451721000184 ] ] ], [ [ [ -68.634103969999927, 44.018296617000075 ], [ -68.656239386999886, 44.010484117000075 ], [ -68.662749803999901, 44.019598700000145 ], [ -68.660145636999886, 44.03261953300013 ], [ -68.653635219999899, 44.052150783000044 ], [ -68.651031053999901, 44.065171617000104 ], [ -68.640614386999914, 44.078192450000088 ], [ -68.626291469999927, 44.091213283000073 ], [ -68.606760219999842, 44.08860911699999 ], [ -68.601551886999857, 44.070379950000117 ], [ -68.59894771999987, 44.046942450000031 ], [ -68.60806230399993, 44.023504950000145 ], [ -68.634103969999927, 44.018296617000075 ] ] ], [ [ [ -68.807118292999888, 44.037543036 ], [ -68.815459764999844, 44.031927802000027 ], [ -68.83458411399991, 44.035101630000085 ], [ -68.869252081999889, 44.048366604000094 ], [ -68.860096808999913, 44.065212307000095 ], [ -68.868031378999973, 44.079372463000126 ], [ -68.886748826999849, 44.089870510000097 ], [ -68.910186326999934, 44.095526434000092 ], [ -68.901560024999924, 44.114040432000095 ], [ -68.884144660999937, 44.113836981000148 ], [ -68.848133917999888, 44.095526434000092 ], [ -68.827381964999887, 44.089789130000113 ], [ -68.782744920999932, 44.084662177 ], [ -68.772979295999875, 44.081895249000141 ], [ -68.774647589999887, 44.061875718000081 ], [ -68.786732550999886, 44.052354234000077 ], [ -68.800567186999899, 44.046576239000117 ], [ -68.807118292999888, 44.037543036 ] ] ], [ [ [ -68.841135219999899, 44.13808828300013 ], [ -68.851551886999886, 44.125067450000145 ], [ -68.863270636999886, 44.119859117000047 ], [ -68.88801021999987, 44.13027578300013 ], [ -68.90103105399993, 44.13418203300013 ], [ -68.919260219999927, 44.125067450000145 ], [ -68.937489386999914, 44.105536200000174 ], [ -68.942697719999899, 44.117254950000145 ], [ -68.940093553999901, 44.125067450000145 ], [ -68.92837480399993, 44.14199453300013 ], [ -68.889312303999958, 44.164129950000117 ], [ -68.856760219999899, 44.181057033000101 ], [ -68.820301886999914, 44.178452867000019 ], [ -68.81118730399993, 44.169338283000016 ], [ -68.81118730399993, 44.148504950000031 ], [ -68.824208136999914, 44.144598700000031 ], [ -68.841135219999899, 44.13808828300013 ] ] ], [ [ [ -68.443999803999901, 44.181057033000101 ], [ -68.438791469999927, 44.174546617000104 ], [ -68.427072719999927, 44.175848700000088 ], [ -68.41665605399993, 44.18235911699999 ], [ -68.402333136999857, 44.175848700000088 ], [ -68.390614386999886, 44.162827867000104 ], [ -68.39191646999987, 44.14590078300013 ], [ -68.40363521999987, 44.13418203300013 ], [ -68.43228105399993, 44.128973700000145 ], [ -68.442697719999927, 44.144598700000031 ], [ -68.454416469999899, 44.151109117000132 ], [ -68.463531053999901, 44.149807033000044 ], [ -68.48957271999987, 44.140692450000031 ], [ -68.502593553999958, 44.148504950000031 ], [ -68.506499803999958, 44.160223700000117 ], [ -68.492176886999857, 44.169338283000016 ], [ -68.475249803999873, 44.166734117000104 ], [ -68.472645636999886, 44.177150783000101 ], [ -68.459624803999901, 44.184963283000101 ], [ -68.443999803999901, 44.181057033000101 ] ] ], [ [ [ -68.6142878899999, 44.223985093000138 ], [ -68.608509894999941, 44.212836005000142 ], [ -68.620106574999852, 44.208441473000065 ], [ -68.644317186999871, 44.203192450000174 ], [ -68.656361456999974, 44.19916413 ], [ -68.65062415299991, 44.190293687000135 ], [ -68.643055792999945, 44.18463776200015 ], [ -68.622792120999947, 44.177516994000101 ], [ -68.622792120999947, 44.17133209800015 ], [ -68.662058071999951, 44.156195380000057 ], [ -68.681996222999942, 44.152614651000178 ], [ -68.716338670999903, 44.167344468000167 ], [ -68.720204230999883, 44.17214590100015 ], [ -68.714629686999899, 44.181219794000143 ], [ -68.710886196999951, 44.190456447000102 ], [ -68.713327602999897, 44.200995184000178 ], [ -68.724598761999886, 44.219061591000084 ], [ -68.71625729099992, 44.218451239000146 ], [ -68.698923305999926, 44.219671942000062 ], [ -68.690459764999872, 44.219061591000084 ], [ -68.695057745999918, 44.22862376500008 ], [ -68.696766730999911, 44.239528713000155 ], [ -68.695301886999857, 44.250433661000145 ], [ -68.690459764999872, 44.260036526000121 ], [ -68.678944464999944, 44.26963939000008 ], [ -68.667469855999911, 44.270127671000083 ], [ -68.642079230999883, 44.260036526000121 ], [ -68.623076951999877, 44.249863999000169 ], [ -68.616485154999907, 44.237087307000039 ], [ -68.6142878899999, 44.223985093000138 ] ] ], [ [ [ -68.885406053999958, 44.29954661699999 ], [ -68.90103105399993, 44.28001536699999 ], [ -68.92056230399993, 44.237046617000047 ], [ -68.933583136999914, 44.23574453300013 ], [ -68.933583136999914, 44.24355703300013 ], [ -68.927072719999927, 44.266994533000016 ], [ -68.92446855399993, 44.281317450000088 ], [ -68.941395636999914, 44.281317450000088 ], [ -68.942697719999899, 44.290432033000073 ], [ -68.92446855399993, 44.307359117000075 ], [ -68.90103105399993, 44.311265367000075 ], [ -68.885406053999958, 44.29954661699999 ] ] ], [ [ [ -68.475249803999873, 44.324286200000145 ], [ -68.484364386999886, 44.313869533000158 ], [ -68.49738521999987, 44.320379950000145 ], [ -68.509103969999842, 44.322984117000047 ], [ -68.52212480399993, 44.322984117000047 ], [ -68.52993730399993, 44.330796617000047 ], [ -68.52993730399993, 44.345119533000044 ], [ -68.524728969999927, 44.359442450000117 ], [ -68.519520636999943, 44.367254950000088 ], [ -68.511708136999943, 44.378973700000088 ], [ -68.502593553999958, 44.380275783000101 ], [ -68.496083136999857, 44.376369533000101 ], [ -68.492176886999857, 44.364650783000016 ], [ -68.48957271999987, 44.347723700000031 ], [ -68.486968553999873, 44.334702867000047 ], [ -68.475249803999873, 44.324286200000145 ] ] ], [ [ [ -68.885406053999958, 44.330796617000047 ], [ -68.903635219999842, 44.319077867000047 ], [ -68.91665605399993, 44.332098700000031 ], [ -68.91665605399993, 44.345119533000044 ], [ -68.911447719999842, 44.365952867000104 ], [ -68.899728969999842, 44.37767161699999 ], [ -68.88410396999987, 44.391994533000073 ], [ -68.86847896999987, 44.38157786699999 ], [ -68.859364386999886, 44.358140367000104 ], [ -68.86847896999987, 44.347723700000031 ], [ -68.885406053999958, 44.330796617000047 ] ] ], [ [ [ -68.198923305999926, 44.308620510000154 ], [ -68.240834113999938, 44.294541734000049 ], [ -68.283314581999889, 44.292425848000121 ], [ -68.306874152999853, 44.308417059000121 ], [ -68.313710089999859, 44.308417059000121 ], [ -68.320098436999899, 44.284938869000044 ], [ -68.309437628999945, 44.270941473 ], [ -68.296498175999943, 44.261094468000167 ], [ -68.296335415999891, 44.250067450000031 ], [ -68.308786587999919, 44.237860419000143 ], [ -68.326039191999911, 44.225897528000118 ], [ -68.341297980999883, 44.223578192000062 ], [ -68.347849087999862, 44.240179755000113 ], [ -68.352284308999941, 44.238063869000101 ], [ -68.363758917999888, 44.234727281000076 ], [ -68.368356899999924, 44.232733466000028 ], [ -68.380116339999887, 44.246446031000161 ], [ -68.414051886999943, 44.258612372000144 ], [ -68.423573370999947, 44.274278062000022 ], [ -68.40847734299993, 44.278347072000159 ], [ -68.405466274999924, 44.28526439000008 ], [ -68.41238359299993, 44.291856187000135 ], [ -68.427276170999875, 44.294785874000169 ], [ -68.434803839999944, 44.299994208000058 ], [ -68.433867967999873, 44.312038479000179 ], [ -68.428741014999844, 44.325710354000122 ], [ -68.410104946999951, 44.360052802000084 ], [ -68.40135657499988, 44.371771552000055 ], [ -68.392567511999914, 44.376735744000101 ], [ -68.378936326999877, 44.379502671000168 ], [ -68.36746171799993, 44.386419989000061 ], [ -68.364287889999872, 44.395331122000115 ], [ -68.375762498999904, 44.404079494000158 ], [ -68.354969855999911, 44.423285223000121 ], [ -68.315907355999855, 44.436957098000065 ], [ -68.274037238999938, 44.439276434000035 ], [ -68.244821743999921, 44.424505927000055 ], [ -68.24193274599989, 44.404974677000084 ], [ -68.18529212099989, 44.357001044000171 ], [ -68.176543748999904, 44.328314520000035 ], [ -68.198923305999926, 44.308620510000154 ] ] ], [ [ [ -67.566395636999914, 44.461004950000117 ], [ -67.584624803999901, 44.444077867000132 ], [ -67.593739386999886, 44.457098700000117 ], [ -67.605458136999886, 44.48314036699999 ], [ -67.615874803999958, 44.505275783000158 ], [ -67.61457271999987, 44.514390367000047 ], [ -67.600249803999873, 44.518296617000047 ], [ -67.582020636999886, 44.514390367000047 ], [ -67.578114386999914, 44.49095286699999 ], [ -67.566395636999914, 44.47923411699999 ], [ -67.566395636999914, 44.461004950000117 ] ] ], [ [ [ -67.276031053999901, 44.602932033000158 ], [ -67.302072719999899, 44.596421617000075 ], [ -67.32160396999987, 44.602932033000158 ], [ -67.318999803999958, 44.612046617000047 ], [ -67.303374803999873, 44.625067450000031 ], [ -67.283843553999901, 44.619859117000047 ], [ -67.270822719999927, 44.613348700000145 ], [ -67.276031053999901, 44.602932033000158 ] ] ], [ [ [ -66.986073370999918, 44.909776109000134 ], [ -66.989572719999899, 44.897609768000066 ], [ -67.012115037999877, 44.899359442000062 ], [ -67.01732337099989, 44.908026434000149 ], [ -67.045114712999947, 44.92715078300013 ], [ -67.045114712999947, 44.944484768000038 ], [ -67.038156704999949, 44.954901434000092 ], [ -67.029489712999862, 44.944484768000038 ], [ -67.003448045999903, 44.925401109000134 ], [ -66.986073370999918, 44.909776109000134 ] ] ], [ [ [ -66.920562303999873, 44.850327867000104 ], [ -66.91926021999987, 44.837307033000016 ], [ -66.93879146999987, 44.838609117000104 ], [ -66.95571855399993, 44.846421617000104 ], [ -66.97524980399993, 44.860744533000101 ], [ -66.981760219999899, 44.872463283000073 ], [ -66.958322719999842, 44.87767161699999 ], [ -66.954416469999842, 44.889390367000075 ], [ -66.954416469999842, 44.899807033000158 ], [ -66.946603969999842, 44.91543203300013 ], [ -66.940093553999958, 44.925848700000031 ], [ -66.933583136999857, 44.941473700000117 ], [ -66.921864386999886, 44.947984117000104 ], [ -66.904937303999901, 44.955796617000104 ], [ -66.904937303999901, 44.946682033000016 ], [ -66.903635219999899, 44.933661200000031 ], [ -66.891916469999899, 44.921942450000031 ], [ -66.893218553999901, 44.906317450000145 ], [ -66.901031053999901, 44.889390367000075 ], [ -66.916656053999873, 44.87767161699999 ], [ -66.93097896999987, 44.86985911699999 ], [ -66.920562303999873, 44.850327867000104 ] ] ], [ [ [ -66.977853969999927, 44.936265367000104 ], [ -66.985666469999899, 44.925848700000031 ], [ -67.005197719999899, 44.947984117000104 ], [ -67.014312303999873, 44.96360911699999 ], [ -67.01691646999987, 44.97923411699999 ], [ -67.005197719999899, 44.989650783000073 ], [ -66.989572719999899, 45.001369533000158 ], [ -66.973947719999927, 45.018296617000047 ], [ -66.954416469999842, 45.027411200000031 ], [ -66.93879146999987, 45.02480703300013 ], [ -66.940093553999958, 45.01178620000006 ], [ -66.945301886999943, 45.000067450000145 ], [ -66.94790605399993, 44.98314036699999 ], [ -66.96353105399993, 44.961004950000088 ], [ -66.977853969999927, 44.936265367000104 ] ] ], [ [ [ -123.315661128999906, 46.148536334000099 ], [ -123.337982852999943, 46.147594230000138 ], [ -123.357860546999902, 46.150489106000023 ], [ -123.376900531999908, 46.156129577000073 ], [ -123.396638058999912, 46.168933311000117 ], [ -123.41104639299995, 46.175079562000107 ], [ -123.420570513999891, 46.18559215700013 ], [ -123.422956321999948, 46.187805964000162 ], [ -123.417084890999973, 46.204842387000113 ], [ -123.40504284399988, 46.200934099000122 ], [ -123.388368537999852, 46.190369727000089 ], [ -123.366208324999945, 46.179202599000078 ], [ -123.348859523999892, 46.166408939000164 ], [ -123.324326823999883, 46.154661723000046 ], [ -123.315661128999906, 46.148536334000099 ] ] ], [ [ [ -123.436684247999906, 46.220399101000154 ], [ -123.440840311999878, 46.213248060000083 ], [ -123.45266382599992, 46.218285565000073 ], [ -123.468439305999922, 46.22500342299999 ], [ -123.4778060189999, 46.236092680000027 ], [ -123.482424040999902, 46.249340785000086 ], [ -123.480746802999946, 46.255943786 ], [ -123.471194763999918, 46.25478849100007 ], [ -123.460126576999926, 46.247562316000099 ], [ -123.444334921999925, 46.235899076000081 ], [ -123.436684247999906, 46.220399101000154 ] ] ], [ [ [ -123.945530795999915, 46.417647034000041 ], [ -123.964121070999937, 46.406790580000077 ], [ -123.974716258999948, 46.440181221000088 ], [ -123.9977626189999, 46.453397257000134 ], [ -123.990952824999908, 46.473173406000129 ], [ -123.990346363999919, 46.488292977000057 ], [ -123.981109178999901, 46.497463283000016 ], [ -123.973997197999878, 46.492929715000074 ], [ -123.971207071999856, 46.484780393000037 ], [ -123.963894818999862, 46.480118485000119 ], [ -123.948180199999925, 46.464190148000071 ], [ -123.947117611999928, 46.448679532000071 ], [ -123.945530795999915, 46.417647034000041 ] ] ], [ [ [ -122.701079881999931, 47.123968817000119 ], [ -122.706776495999918, 47.123968817000119 ], [ -122.715240037999948, 47.128159898000078 ], [ -122.723744269999884, 47.132391669000086 ], [ -122.737904425999915, 47.142320054 ], [ -122.742176886999914, 47.143744208000058 ], [ -122.746408657999851, 47.15371328300013 ], [ -122.737904425999915, 47.157904364000089 ], [ -122.729400193999879, 47.162176825000088 ], [ -122.723744269999884, 47.17206452 ], [ -122.718088344999899, 47.180609442000119 ], [ -122.705393032999837, 47.181952216000028 ], [ -122.685536261999928, 47.180609442000119 ], [ -122.675607876999919, 47.176336981000119 ], [ -122.671376105999911, 47.164984442000147 ], [ -122.672759568999894, 47.15509674700003 ], [ -122.677072719999884, 47.139553127000127 ], [ -122.689768032999851, 47.129584052000141 ], [ -122.701079881999931, 47.123968817000119 ] ] ], [ [ [ -122.859689907999837, 47.177720445 ], [ -122.873850063999853, 47.167873440000065 ], [ -122.879465298999946, 47.17206452 ], [ -122.882313605999897, 47.180609442000119 ], [ -122.88801021999987, 47.193304755 ], [ -122.890777147999927, 47.200384833000058 ], [ -122.8978572259999, 47.208889065000093 ], [ -122.912017381999917, 47.218817450000088 ], [ -122.921945766999912, 47.228705145 ], [ -122.921945766999912, 47.237209377000127 ], [ -122.914865688999868, 47.255560614000089 ], [ -122.912017381999917, 47.26972077 ], [ -122.904937303999944, 47.278265692000119 ], [ -122.890777147999927, 47.278265692000119 ], [ -122.882313605999897, 47.283880927000112 ], [ -122.865305141999926, 47.289536851000108 ], [ -122.858225063999868, 47.29242584800015 ], [ -122.846913214999887, 47.298041083000058 ], [ -122.852609829999864, 47.285345770000092 ], [ -122.866769985999895, 47.278265692000119 ], [ -122.868153449999866, 47.268296617000132 ], [ -122.868153449999866, 47.255560614000089 ], [ -122.869536912999948, 47.242865302000112 ], [ -122.858225063999868, 47.231512762000037 ], [ -122.848296678999958, 47.220200914000159 ], [ -122.848296678999958, 47.207464911000031 ], [ -122.848296678999958, 47.193304755 ], [ -122.859689907999837, 47.177720445 ] ] ], [ [ [ -122.422434048999918, 47.408840236000017 ], [ -122.406158006999888, 47.400336005000085 ], [ -122.38735917899993, 47.39398834800015 ], [ -122.366810675999886, 47.383530992000075 ], [ -122.374338344999856, 47.383246161000116 ], [ -122.417795376999891, 47.370794989000032 ], [ -122.449533657999851, 47.347723700000145 ], [ -122.469227667999888, 47.336371161000088 ], [ -122.474720831999917, 47.349554755000113 ], [ -122.473784959999932, 47.362860419000143 ], [ -122.466379360999852, 47.373195705000157 ], [ -122.452219204999835, 47.377346096000011 ], [ -122.44225012899993, 47.382513739 ], [ -122.439849412999891, 47.392808335000112 ], [ -122.446400519999969, 47.40058014500012 ], [ -122.463042772999913, 47.397772528000147 ], [ -122.455637173999932, 47.391017971000124 ], [ -122.475249803999901, 47.384466864000146 ], [ -122.485422329999849, 47.379828192000119 ], [ -122.48973548099994, 47.373928127000099 ], [ -122.490223761999928, 47.353827216000056 ], [ -122.492176886999886, 47.344183661000059 ], [ -122.49657141799986, 47.336371161000088 ], [ -122.503407355999883, 47.331529039000102 ], [ -122.510487433999941, 47.332098700000145 ], [ -122.518299933999927, 47.337307033000158 ], [ -122.527251756999959, 47.346258856000091 ], [ -122.531483527999882, 47.356919664000131 ], [ -122.527577277999882, 47.366441148000106 ], [ -122.521066860999895, 47.374416408000073 ], [ -122.51768958199996, 47.380438544000086 ], [ -122.510243292999903, 47.455796617000047 ], [ -122.503977016999855, 47.467474677000141 ], [ -122.489003058999913, 47.482652085000112 ], [ -122.471018032999879, 47.495794989000089 ], [ -122.455637173999932, 47.500881252000013 ], [ -122.462066209999946, 47.486761786000088 ], [ -122.457630988999966, 47.480169989 ], [ -122.448597785999951, 47.475409247000087 ], [ -122.441314256999945, 47.466742255000028 ], [ -122.439116990999949, 47.456244208000143 ], [ -122.438059048999904, 47.435858466000141 ], [ -122.435129360999881, 47.42572663 ], [ -122.422434048999918, 47.408840236000017 ] ] ], [ [ [ -122.495106574999895, 47.601548570000105 ], [ -122.493275519999926, 47.594224351000108 ], [ -122.488636847999899, 47.589585679 ], [ -122.480376756999902, 47.586859442 ], [ -122.488636847999899, 47.581366278000175 ], [ -122.498768683999856, 47.571234442000119 ], [ -122.520863410999937, 47.573960679 ], [ -122.542347785999965, 47.595526434000092 ], [ -122.557606574999937, 47.597886460000055 ], [ -122.570546027999939, 47.596096096000068 ], [ -122.577870245999947, 47.601548570000105 ], [ -122.569569464999873, 47.61810944200009 ], [ -122.567697719999899, 47.629584052000112 ], [ -122.574615037999905, 47.637884833 ], [ -122.579253709999918, 47.648667710000026 ], [ -122.580474412999934, 47.662990627000099 ], [ -122.578928188999896, 47.669378973 ], [ -122.561879035999937, 47.685614325000145 ], [ -122.558013475999942, 47.695746161000031 ], [ -122.558949347999928, 47.705959377000127 ], [ -122.557769334999904, 47.713812567000119 ], [ -122.547922329999878, 47.716986395 ], [ -122.537709113999938, 47.71478913 ], [ -122.526519334999932, 47.70929596600017 ], [ -122.516835089999873, 47.702378648 ], [ -122.51097571499993, 47.695868231000176 ], [ -122.505848761999914, 47.663275458000115 ], [ -122.499623175999943, 47.648667710000026 ], [ -122.489857550999915, 47.641262111000017 ], [ -122.498036261999914, 47.633612372000087 ], [ -122.503285285999908, 47.630031643000038 ], [ -122.51097571499993, 47.627590236000074 ], [ -122.500152147999927, 47.619289455000015 ], [ -122.500599738999924, 47.611721096000153 ], [ -122.496937628999973, 47.607123114000117 ], [ -122.495106574999895, 47.601548570000105 ] ] ], [ [ [ -122.67711341099988, 48.048651434000035 ], [ -122.67320716099988, 48.023749091000113 ], [ -122.681507941999953, 48.007269598000036 ], [ -122.700184699999937, 48.00775788 ], [ -122.71760006399991, 48.023016669000171 ], [ -122.730783657999865, 48.042425848000093 ], [ -122.736724412999891, 48.055731512000094 ], [ -122.740874803999915, 48.0743675800001 ], [ -122.738921678999873, 48.082505601000108 ], [ -122.729318813999896, 48.082993882 ], [ -122.723011847999956, 48.076239325000145 ], [ -122.720326300999972, 48.054754950000031 ], [ -122.716297980999911, 48.048285223000121 ], [ -122.701975063999924, 48.049221096000011 ], [ -122.701649542999903, 48.064398505 ], [ -122.711984829999906, 48.083644924000126 ], [ -122.729318813999896, 48.096747137000094 ], [ -122.718902147999913, 48.102240302000141 ], [ -122.709217902999853, 48.102240302000141 ], [ -122.701161261999914, 48.097601630000113 ], [ -122.686879035999922, 48.073228257000054 ], [ -122.67711341099988, 48.048651434000035 ] ] ], [ [ [ -122.586496548999946, 48.390814520000063 ], [ -122.584584113999895, 48.383368231000176 ], [ -122.582875128999888, 48.380316473000093 ], [ -122.579009568999879, 48.37714264500012 ], [ -122.577707485999881, 48.35667552300005 ], [ -122.515980597999956, 48.321966864 ], [ -122.5175675119999, 48.29401276200015 ], [ -122.530873175999915, 48.283840236000017 ], [ -122.546376105999926, 48.281398830000072 ], [ -122.562123175999886, 48.28620026200015 ], [ -122.575917120999904, 48.297674872000115 ], [ -122.59398352799991, 48.307928778000033 ], [ -122.608998175999943, 48.29913971600017 ], [ -122.620350714999915, 48.281927802000055 ], [ -122.627430792999874, 48.267279364000146 ], [ -122.641265428999873, 48.287990627000156 ], [ -122.646799282999893, 48.280829169000114 ], [ -122.648548956999889, 48.262640692000119 ], [ -122.651356574999937, 48.249945380000057 ], [ -122.665923631999874, 48.242173570000048 ], [ -122.723703579999892, 48.233791408000101 ], [ -122.710072394999941, 48.221421617000047 ], [ -122.696115688999882, 48.22016022300015 ], [ -122.66502844999988, 48.226385809000092 ], [ -122.651926235999909, 48.22406647300015 ], [ -122.628325975999871, 48.214300848 ], [ -122.616932745999904, 48.212062893000123 ], [ -122.595529751999948, 48.20538971600017 ], [ -122.580637173999904, 48.188462632 ], [ -122.571034308999927, 48.166245835000112 ], [ -122.558664516999897, 48.121323960000112 ], [ -122.554595506999931, 48.066066799000012 ], [ -122.546620245999875, 48.017035223000065 ], [ -122.535511847999942, 48.005926825000031 ], [ -122.522043423999961, 48.01194896000014 ], [ -122.510243292999903, 48.035223700000145 ], [ -122.522857225999886, 48.057074286 ], [ -122.52403723899991, 48.079413153000033 ], [ -122.514027472999913, 48.090765692 ], [ -122.493153449999852, 48.079657294000143 ], [ -122.476958787999905, 48.065252997000087 ], [ -122.460031704999921, 48.053452867000132 ], [ -122.381092902999882, 48.01581452000012 ], [ -122.365549282999879, 47.999660549000069 ], [ -122.359364386999914, 47.976629950000117 ], [ -122.350656704999835, 47.960923570000048 ], [ -122.346791144999926, 47.95058828300013 ], [ -122.349476691999897, 47.945949611000017 ], [ -122.355213995999875, 47.941961981000034 ], [ -122.37364661399991, 47.919175523000106 ], [ -122.378488735999895, 47.914699611000131 ], [ -122.381906704999892, 47.907782294000057 ], [ -122.386708136999886, 47.904933986000103 ], [ -122.392974412999934, 47.905096747000144 ], [ -122.394683397999941, 47.910345770000148 ], [ -122.395822719999884, 47.916489976000108 ], [ -122.400380011999914, 47.919175523000106 ], [ -122.422271287999948, 47.912339585 ], [ -122.435414191999911, 47.910467841000028 ], [ -122.441314256999945, 47.915472723000065 ], [ -122.443348761999886, 47.936916408000101 ], [ -122.449696417999903, 47.959458726 ], [ -122.460519985999909, 47.977850653000033 ], [ -122.476063605999911, 47.986883856000034 ], [ -122.488514777999924, 47.985093492000047 ], [ -122.50706946499993, 47.970851955000128 ], [ -122.51768958199996, 47.966294664000102 ], [ -122.530344204999849, 47.967352606000148 ], [ -122.539214647999898, 47.972154039000046 ], [ -122.54808509, 47.979966539000046 ], [ -122.562001105999911, 47.987372137000122 ], [ -122.580189581999903, 48.004868882000082 ], [ -122.593332485999866, 48.025376695000134 ], [ -122.592152472999942, 48.04205963700015 ], [ -122.609771287999962, 48.060492255 ], [ -122.614857550999886, 48.074896552000055 ], [ -122.600168423999889, 48.130113023 ], [ -122.607248501999948, 48.153753973000036 ], [ -122.622954881999917, 48.163316148000106 ], [ -122.644398566999939, 48.161444403000033 ], [ -122.668446417999888, 48.150580145000148 ], [ -122.693226691999939, 48.180243231000091 ], [ -122.699777798999932, 48.184759833000143 ], [ -122.710113084999932, 48.187079169000114 ], [ -122.723540818999936, 48.19269440300009 ], [ -122.736154751999919, 48.199652411 ], [ -122.744130011999871, 48.205877997000144 ], [ -122.755726691999882, 48.229641018000152 ], [ -122.75121009, 48.249945380000057 ], [ -122.668446417999888, 48.362860419000029 ], [ -122.656564907999837, 48.385077216000084 ], [ -122.630848761999886, 48.384670315000065 ], [ -122.616688605999869, 48.389593817000119 ], [ -122.605458136999871, 48.39842357 ], [ -122.595773891999897, 48.401922919000086 ], [ -122.586496548999946, 48.390814520000063 ] ] ], [ [ [ -122.849354620999918, 48.461615302000084 ], [ -122.836293097999942, 48.459947007000054 ], [ -122.820952928999887, 48.472601630000113 ], [ -122.808338995999904, 48.458197333000058 ], [ -122.806141730999911, 48.442043361000103 ], [ -122.81309973899991, 48.427313544000114 ], [ -122.827748175999915, 48.417385158000016 ], [ -122.88988196499993, 48.424139716000141 ], [ -122.88345292899993, 48.441473700000031 ], [ -122.89867102799991, 48.447902736000131 ], [ -122.921376105999855, 48.450995184000035 ], [ -122.937611456999889, 48.458319403000033 ], [ -122.942534959999946, 48.475775458 ], [ -122.937001105999926, 48.49323151200015 ], [ -122.924875454999849, 48.507147528000033 ], [ -122.910308397999913, 48.51357656500015 ], [ -122.916249152999939, 48.523871161000059 ], [ -122.916981574999866, 48.533636786 ], [ -122.912464972999913, 48.541734117000132 ], [ -122.910308397999913, 48.54706452 ], [ -122.887074347999885, 48.563666083000058 ], [ -122.877023891999912, 48.56586334800015 ], [ -122.860747850999886, 48.539618231000119 ], [ -122.859038865999878, 48.521307684000149 ], [ -122.86192786399991, 48.48932526200015 ], [ -122.858469204999906, 48.472845770000063 ], [ -122.849354620999918, 48.461615302000084 ] ] ], [ [ [ -122.694081183999856, 48.543524481000119 ], [ -122.703033006999888, 48.541896877000099 ], [ -122.714344855999869, 48.54193756700009 ], [ -122.722889777999882, 48.548163153000033 ], [ -122.737049933999913, 48.577134507000139 ], [ -122.735422329999892, 48.590399481000148 ], [ -122.726796027999882, 48.60150788 ], [ -122.715484178999901, 48.606024481000148 ], [ -122.702870245999918, 48.600409247000144 ], [ -122.696400519999912, 48.592271226000136 ], [ -122.693714972999928, 48.585923570000105 ], [ -122.67845618399987, 48.572902736000017 ], [ -122.67454993399987, 48.568793036000059 ], [ -122.679269985999881, 48.564520575000145 ], [ -122.685902472999942, 48.556952216000113 ], [ -122.688059048999946, 48.547023830000015 ], [ -122.694081183999856, 48.543524481000119 ] ] ], [ [ [ -122.992258266999855, 48.51357656500015 ], [ -123.002349412999905, 48.509182033000158 ], [ -123.01056881399991, 48.51162344 ], [ -123.016590949999909, 48.511419989000146 ], [ -123.020171678999887, 48.499335028000033 ], [ -123.016835089999859, 48.496649481000148 ], [ -122.999134894999955, 48.472601630000113 ], [ -122.991322394999955, 48.46767812700007 ], [ -122.982899542999917, 48.463609117000104 ], [ -122.96495520699996, 48.458319403000033 ], [ -122.96495520699996, 48.451483466000028 ], [ -122.979318813999853, 48.45636627800009 ], [ -122.990386522999884, 48.455877997000087 ], [ -123.001616990999878, 48.453111070000048 ], [ -123.016468878999945, 48.451483466000028 ], [ -123.030018683999913, 48.453802802000084 ], [ -123.038441535999951, 48.459418036000088 ], [ -123.04527747299997, 48.466376044000171 ], [ -123.053700324999923, 48.472601630000113 ], [ -123.065419074999909, 48.478501695000077 ], [ -123.070383266999869, 48.480129299000097 ], [ -123.091623501999948, 48.478827216000084 ], [ -123.102650519999898, 48.480292059000064 ], [ -123.116363084999918, 48.484198309000035 ], [ -123.129709438999839, 48.489732164000159 ], [ -123.139312303999915, 48.495835679000052 ], [ -123.149159308999927, 48.505601304 ], [ -123.154449022999913, 48.51312897300015 ], [ -123.166574673999904, 48.543524481000119 ], [ -123.173939581999903, 48.573431708 ], [ -123.174143032999865, 48.578436591000028 ], [ -123.177561001999962, 48.598822333000115 ], [ -123.158436652999896, 48.614569403000175 ], [ -123.129139777999868, 48.620062567 ], [ -123.102121548999918, 48.609116929000137 ], [ -123.093820766999855, 48.59760163 ], [ -123.076649542999917, 48.584051825000031 ], [ -123.05776933499989, 48.572902736000017 ], [ -123.024647589999859, 48.562811591000141 ], [ -123.004302537999948, 48.539455471000153 ], [ -122.977650519999926, 48.531317450000031 ], [ -122.979969855999897, 48.525132554000081 ], [ -122.992258266999855, 48.51357656500015 ] ] ], [ [ [ -122.857818162999948, 48.708685614 ], [ -122.745838995999875, 48.664374091000141 ], [ -122.750884568999908, 48.654730536000088 ], [ -122.757232225999928, 48.650051174000069 ], [ -122.800445115999935, 48.62962474199999 ], [ -122.804514126999891, 48.623724677000055 ], [ -122.805409308999884, 48.616888739000117 ], [ -122.808949347999956, 48.611273505000142 ], [ -122.820952928999887, 48.609116929000137 ], [ -122.831125454999849, 48.612697658000016 ], [ -122.841379360999866, 48.620917059000092 ], [ -122.865874803999901, 48.649603583000058 ], [ -122.879872199999866, 48.677191473000093 ], [ -122.882394985999881, 48.687974351 ], [ -122.886789516999855, 48.696275132000054 ], [ -122.896351691999939, 48.699774481000148 ], [ -122.905913865999921, 48.697333075000031 ], [ -122.910308397999913, 48.687974351 ], [ -122.908762173999961, 48.676947333000143 ], [ -122.906117316999882, 48.671087958 ], [ -122.905629035999894, 48.666083075000145 ], [ -122.910308397999913, 48.657538153000033 ], [ -122.86192786399991, 48.601711330000128 ], [ -122.874379035999922, 48.59373607 ], [ -122.887521938999882, 48.589992580000157 ], [ -122.917144334999932, 48.588690497000144 ], [ -122.93333899599989, 48.59275950700011 ], [ -122.941395636999914, 48.602606512000037 ], [ -122.945871548999975, 48.614081122000087 ], [ -122.951283331999932, 48.623439846000039 ], [ -122.968413865999963, 48.634588934000035 ], [ -122.980091925999957, 48.638617255000028 ], [ -122.985463019999912, 48.63304271 ], [ -122.986236131999931, 48.619330145000063 ], [ -122.989613410999951, 48.604641018000066 ], [ -122.997059699999937, 48.597154039000102 ], [ -123.009632941999925, 48.60541413 ], [ -123.022206183999913, 48.618394273 ], [ -123.026519334999918, 48.626532294000114 ], [ -123.026356574999866, 48.636460679000109 ], [ -123.020904100999914, 48.642482815 ], [ -122.997141079999921, 48.660589911000116 ], [ -122.988840298999932, 48.664374091000141 ], [ -122.977772589999901, 48.667792059000149 ], [ -122.929310675999915, 48.70844147300015 ], [ -122.917958136999943, 48.711411851000051 ], [ -122.896636522999884, 48.712144273 ], [ -122.857818162999948, 48.708685614 ] ] ], [ [ [ -122.613148566999882, 48.648423570000048 ], [ -122.620472785999894, 48.645941473 ], [ -122.633615688999853, 48.65167877800009 ], [ -122.655140753999959, 48.664740302000055 ], [ -122.662220831999917, 48.670314846000068 ], [ -122.679432745999932, 48.688177802000141 ], [ -122.703114386999871, 48.70791250200007 ], [ -122.716542120999861, 48.715236721000068 ], [ -122.720285610999895, 48.724920966000028 ], [ -122.715158657999879, 48.739081122000144 ], [ -122.69847571499993, 48.73468659100017 ], [ -122.671376105999911, 48.704820054 ], [ -122.662342902999896, 48.697699286000116 ], [ -122.64736894399995, 48.690741278000061 ], [ -122.635161912999891, 48.683294989000061 ], [ -122.628407355999855, 48.677069403000118 ], [ -122.621408657999879, 48.668524481000091 ], [ -122.61534583199996, 48.658636786000088 ], [ -122.613148566999882, 48.648423570000048 ] ] ], [ [ [ -123.035289663048076, 48.992514547075118 ], [ -123.035308397999884, 48.992499091000113 ], [ -123.04527747299997, 48.98436107 ], [ -123.088490363999881, 48.972235419000086 ], [ -123.089344855999883, 48.987982489000061 ], [ -123.090484178999915, 48.992499091000113 ], [ -123.090488167733341, 48.992514547010543 ], [ -123.035306345999899, 48.992514547000056 ], [ -123.035289663048076, 48.992514547075118 ] ] ], [ [ [ -95.160569213999906, 49.369494121000074 ], [ -95.102820800999922, 49.35393951500005 ], [ -94.982518066999944, 49.356161601000153 ], [ -94.926087402999912, 49.345567933000083 ], [ -94.856195028999906, 49.318282776000061 ], [ -94.839141804999969, 49.308877665000111 ], [ -94.827256225999946, 49.29285797200005 ], [ -94.819892334999963, 49.252033590000067 ], [ -94.810358032999972, 49.229606019000173 ], [ -94.806120565999919, 49.21089915 ], [ -94.811184855999898, 49.16656077100005 ], [ -94.803743449999871, 49.14640696300016 ], [ -94.792038736999899, 49.126459860000139 ], [ -94.753772339999898, 49.026155904000078 ], [ -94.711216796999935, 48.914586487000079 ], [ -94.711733561999949, 48.862755026000102 ], [ -94.712146972999875, 48.842446187000078 ], [ -94.713283854999901, 48.823842672000026 ], [ -94.710906738999938, 48.807512920000178 ], [ -94.701785848999947, 48.790097962000132 ], [ -94.688892578999969, 48.778832498999989 ], [ -94.592851928999949, 48.726432597000056 ], [ -94.519161336999929, 48.704470113000085 ], [ -94.479499674999971, 48.700697734000144 ], [ -94.311577107999938, 48.713926900000061 ], [ -94.29258601899997, 48.711911520000015 ], [ -94.284033569999963, 48.709069316000054 ], [ -94.274499267999971, 48.7041083780001 ], [ -94.265481729999919, 48.697752177000055 ], [ -94.258453735999922, 48.690827536000157 ], [ -94.255766560999888, 48.683541158000097 ], [ -94.252459268999985, 48.662405497000137 ], [ -94.251038167999894, 48.65728953000017 ], [ -94.232150431999855, 48.652018535000039 ], [ -94.034849812999937, 48.643311056000172 ], [ -93.874885417999906, 48.636205546000141 ], [ -93.835740519999945, 48.617136943000062 ], [ -93.809385538999976, 48.543575541000067 ], [ -93.778663900999931, 48.519468486000122 ], [ -93.7567789309999, 48.516548767000032 ], [ -93.61629655, 48.531302389000032 ], [ -93.599889282999953, 48.526341451000079 ], [ -93.566583821999927, 48.538278707000032 ], [ -93.491756347999882, 48.542309469000131 ], [ -93.459923665999952, 48.557398987000127 ], [ -93.452249714999965, 48.57272105 ], [ -93.453774170999878, 48.586957907000155 ], [ -93.451474568999942, 48.597422384000097 ], [ -93.417316446999877, 48.604114482000014 ], [ -93.385716308999889, 48.614863180000143 ], [ -93.257739624999914, 48.630314433000038 ], [ -93.131700805999969, 48.624630025 ], [ -92.979720417999971, 48.617679546000105 ], [ -92.955587524999913, 48.612227682000125 ], [ -92.884196532999908, 48.579878235000038 ], [ -92.725549886999914, 48.548691508000061 ], [ -92.648603678999905, 48.536263326 ], [ -92.630181030999978, 48.519468486000122 ], [ -92.627468018999963, 48.502776998000073 ], [ -92.646743326999911, 48.49742848800004 ], [ -92.691365925999918, 48.489857891000085 ], [ -92.710641235999873, 48.482881572000068 ], [ -92.718909464999911, 48.459782207 ], [ -92.70405249099997, 48.44515777600013 ], [ -92.67712906899996, 48.441747132 ], [ -92.657052776, 48.438233134000043 ], [ -92.570520588999898, 48.446656393000055 ], [ -92.52693151899993, 48.445622864000072 ], [ -92.490628824999959, 48.433117168000152 ], [ -92.474531615999894, 48.410482890000097 ], [ -92.467581136999911, 48.394282329000092 ], [ -92.467064371999982, 48.353225403000138 ], [ -92.462465169999916, 48.329299215000148 ], [ -92.451380574999916, 48.312685242000143 ], [ -92.418230142999903, 48.282041118 ], [ -92.384640462999982, 48.232405904000032 ], [ -92.371850545999905, 48.222587382000071 ], [ -92.353815470999905, 48.222897441000143 ], [ -92.327873901999965, 48.229434509000114 ], [ -92.303663492999959, 48.239278870000092 ], [ -92.291028605999941, 48.24956248000008 ], [ -92.292062134999924, 48.270336406000027 ], [ -92.301415568999971, 48.290645244000146 ], [ -92.303095052999936, 48.310928243000049 ], [ -92.281597656999878, 48.331779684000125 ], [ -92.259118408999967, 48.339634502000152 ], [ -92.154732014999922, 48.350124818000111 ], [ -92.070499430999917, 48.34671417300008 ], [ -92.043420979999951, 48.334596049000183 ], [ -92.030114298999962, 48.313176169000158 ], [ -92.021355142999965, 48.287441305000172 ], [ -92.00799678599995, 48.262481588000085 ], [ -91.992157959999929, 48.247908834000143 ], [ -91.975492309999908, 48.236565857000144 ], [ -91.957302205999866, 48.22832346600002 ], [ -91.852244018999926, 48.195974019000019 ], [ -91.764988362999929, 48.187344056000157 ], [ -91.744136922999957, 48.179592590000155 ], [ -91.727574625999949, 48.168327128000115 ], [ -91.695509399999935, 48.137579651000138 ], [ -91.716438354999923, 48.112051494000028 ], [ -91.692512166999933, 48.097866313000068 ], [ -91.618614868999941, 48.089572246000117 ], [ -91.597479207999896, 48.090399068000139 ], [ -91.589676065999896, 48.08833201200018 ], [ -91.581097778999947, 48.080942281000077 ], [ -91.579805867999909, 48.07096873000016 ], [ -91.585128539999943, 48.060840149000015 ], [ -91.586988891999937, 48.052571920000062 ], [ -91.574844929999955, 48.048205262000081 ], [ -91.487098348999922, 48.053476258 ], [ -91.464722452999922, 48.04895457 ], [ -91.446273966999911, 48.040738017000038 ], [ -91.427928833999943, 48.036448874000158 ], [ -91.365400349999931, 48.057842916000098 ], [ -91.276361857999945, 48.064767558000156 ], [ -91.238069621999955, 48.082647604000115 ], [ -91.203963175999974, 48.107658997000115 ], [ -91.071103068999975, 48.170859274000108 ], [ -91.028159952999914, 48.18483774900001 ], [ -91.008109497999868, 48.194372051000087 ], [ -90.92315344299999, 48.22710907 ], [ -90.873802449999886, 48.234343771000155 ], [ -90.840677856999974, 48.220106914 ], [ -90.837939005999942, 48.21054677299999 ], [ -90.848842733999902, 48.198712871000069 ], [ -90.84972123299994, 48.189566142000089 ], [ -90.843003296, 48.176982931000069 ], [ -90.834269979999931, 48.171789449000144 ], [ -90.823883016999901, 48.168327128000115 ], [ -90.812307495999875, 48.160989075000103 ], [ -90.803057413999937, 48.147165629000156 ], [ -90.79670121299992, 48.11706410699999 ], [ -90.786469278999931, 48.100450134000155 ], [ -90.750347452999932, 48.08399119100001 ], [ -90.7013065189999, 48.084559632000051 ], [ -90.6110794679999, 48.103499044 ], [ -90.586843220999896, 48.104816793000154 ], [ -90.573872436999892, 48.097892151000067 ], [ -90.562193562999909, 48.08884877600012 ], [ -90.542013916999935, 48.08373280900004 ], [ -90.531601115, 48.084559632000051 ], [ -90.501887166999921, 48.094274801 ], [ -90.490492513999925, 48.096238506000034 ], [ -90.483464518999909, 48.09448150700014 ], [ -90.477857625999974, 48.091535950000051 ], [ -90.470622925999919, 48.089882304000085 ], [ -90.178625244999893, 48.116443990000036 ], [ -90.120385905999882, 48.115358786000016 ], [ -90.073256998999966, 48.101199443000084 ], [ -90.06103552299993, 48.091019186000111 ], [ -90.008222209, 48.029730937000139 ], [ -89.99532893899999, 48.018594666000027 ], [ -89.980316936, 48.010093893000104 ], [ -89.920449788999946, 47.987459615000077 ], [ -89.902440551999945, 47.985909323000058 ], [ -89.803454346999871, 48.013762919000115 ], [ -89.780975097999942, 48.017199402000145 ], [ -89.763301758999944, 48.017302755000074 ], [ -89.745964314999924, 48.013762919000115 ], [ -89.724596109999936, 48.005908102 ], [ -89.712788045999929, 48.003375956000085 ], [ -89.678655762999938, 48.008698629000051 ], [ -89.656589925999953, 48.007975159000139 ], [ -89.593105428, 47.996502991000128 ], [ -89.498962443999886, 47.995094552000026 ], [ -89.461847289999923, 47.994539286000091 ], [ -89.387097330999921, 47.98053497299999 ], [ -89.363636230999958, 47.979604797000135 ], [ -89.340381835999921, 47.984152324000078 ], [ -89.24552974499997, 48.021178488000132 ], [ -89.095254678999936, 48.079934591 ], [ -88.904620320999925, 48.154296977000016 ], [ -88.782147175999967, 48.202071838000094 ], [ -88.642724162999883, 48.25659047500001 ], [ -88.578877929999919, 48.270388082000139 ], [ -88.407906453999971, 48.304055278000092 ], [ -88.376461344999939, 48.305114645000074 ], [ -88.347264159999895, 48.298655091000043 ], [ -88.159678711999931, 48.224886984000179 ], [ -87.972093261999959, 48.151170553000057 ], [ -87.784481974999977, 48.077428284000021 ], [ -87.59689652499992, 48.003737692000087 ], [ -87.409259399999939, 47.929995422000061 ], [ -87.221699788999871, 47.856253154000015 ], [ -87.034166015999915, 47.782485047000179 ], [ -86.846554728999934, 47.708742778000143 ], [ -86.741806600999979, 47.666445618000139 ], [ -86.637058471999921, 47.624122620000051 ], [ -86.532310343999967, 47.581902975000091 ], [ -86.427613891999925, 47.539579977000173 ], [ -86.322865763999943, 47.497205302000069 ], [ -86.21811763499997, 47.454933981000082 ], [ -86.113369506999931, 47.412662659 ], [ -86.008569702999949, 47.370365499000016 ], [ -85.883616088999901, 47.318559876000123 ], [ -85.758610798999939, 47.266780090000154 ], [ -85.633631347999966, 47.215026144 ], [ -85.508626058999909, 47.16322052000011 ], [ -85.383646606999946, 47.111440735000045 ], [ -85.258641316999899, 47.059686788000093 ], [ -85.133661865999926, 47.007829488000098 ], [ -85.008656575999879, 46.95599802700012 ], [ -84.992404337999943, 46.948789164000161 ], [ -84.976203776999938, 46.941476949000062 ], [ -84.959977376999944, 46.934242249000093 ], [ -84.943673461999907, 46.927007548000134 ], [ -84.927447062999903, 46.91966949500015 ], [ -84.911168985999979, 46.91248647 ], [ -84.894942586999974, 46.905148417000092 ], [ -84.878690347999878, 46.897913717000122 ], [ -84.863730021999885, 46.881945700000088 ], [ -84.85419572, 46.861171773000066 ], [ -84.835411336999897, 46.803862610000081 ], [ -84.816446085999956, 46.74590749100004 ], [ -84.787455606999885, 46.657179057000022 ], [ -84.773322102999941, 46.633433736000157 ], [ -84.693688720999972, 46.564859111000047 ], [ -84.589405679999942, 46.475122986000073 ], [ -84.566564696999961, 46.461196188000159 ], [ -84.541294921999878, 46.452824606000021 ], [ -84.51230444299992, 46.451636047000179 ], [ -84.492176473999933, 46.456881206 ], [ -84.478301350999885, 46.466467184000109 ], [ -84.465408080999879, 46.478171896000092 ], [ -84.448096475999961, 46.489721578000044 ], [ -84.423240111999917, 46.511580709000057 ], [ -84.389702107999909, 46.520262350000124 ], [ -84.352469237999884, 46.522742818 ], [ -84.305340331999872, 46.501607158000141 ], [ -84.242010864999969, 46.52646352100011 ], [ -84.19728491199993, 46.546358948000105 ], [ -84.147675536999941, 46.541346334000067 ], [ -84.110442667999934, 46.52646352100011 ], [ -84.158811808999957, 46.433342591000027 ], [ -84.147675536999941, 46.399882101000017 ], [ -84.129046183999975, 46.375025737000058 ], [ -84.105430053999868, 46.347740580000149 ], [ -84.112897298999968, 46.327870992000058 ], [ -84.119098470999887, 46.314228414000141 ], [ -84.114137532999933, 46.295573222000158 ], [ -84.106670288999908, 46.276969706000116 ], [ -84.099228882999881, 46.250873108000022 ], [ -84.099228882999881, 46.237230530000105 ], [ -84.096774250999914, 46.224828187000142 ], [ -84.086800700999902, 46.201212057000035 ], [ -84.055820678999879, 46.171446432000053 ], [ -84.021042439999917, 46.151602681000057 ], [ -84.014169474999875, 46.115997620000158 ], [ -84.008769287999911, 46.112328593000186 ], [ -83.995824340999974, 46.101166484000046 ], [ -83.976394001999978, 46.073106181000028 ], [ -83.964585937999885, 46.063184307000043 ], [ -83.947300171999899, 46.060600484000034 ], [ -83.930737874999892, 46.066956686000154 ], [ -83.872679402999921, 46.107884420000076 ], [ -83.856427165999918, 46.115739238000018 ], [ -83.839296427999869, 46.119201559000047 ], [ -83.818057413999981, 46.116566060000039 ], [ -83.766536010999886, 46.106489157000013 ], [ -83.664836791999932, 46.119149883000048 ], [ -83.613883829999907, 46.115635885000088 ], [ -83.565437174999943, 46.09077952100013 ], [ -83.50882564399987, 46.047371317000128 ], [ -83.492030802999892, 46.03708770700014 ], [ -83.474099080999935, 46.023135071000141 ], [ -83.462807780999952, 46.007787171000174 ], [ -83.465856689999896, 45.993111064000104 ], [ -83.510246744999932, 45.932391256000088 ], [ -83.556212930999919, 45.869656068000054 ], [ -83.595254475999951, 45.816429342000092 ], [ -83.510711832999874, 45.779067281000138 ], [ -83.396326050999903, 45.728527731 ], [ -83.199309652999943, 45.641556295000086 ], [ -83.019010579999957, 45.561871236000016 ], [ -82.759439860999947, 45.447201233000058 ], [ -82.588778442999882, 45.37180531900016 ], [ -82.54828995799997, 45.334598287000077 ], [ -82.532141073, 45.293515523000011 ], [ -82.484081990999925, 45.083244120000174 ], [ -82.436022908999888, 44.872972718000042 ], [ -82.387886312999882, 44.662701315 ], [ -82.339878905999939, 44.452429912000085 ], [ -82.291845662999975, 44.242210185000076 ], [ -82.243683227999924, 44.031938782000125 ], [ -82.195624145999943, 43.821693217000089 ], [ -82.147565063999906, 43.611344299000152 ], [ -82.145446329999913, 43.600647278000125 ], [ -82.14565303599997, 43.576411031000148 ], [ -82.153611205999937, 43.549590963000171 ], [ -82.185857299999981, 43.487295024000147 ], [ -82.218000041999943, 43.425024923000038 ], [ -82.250194458999971, 43.362780660000013 ], [ -82.282388875999914, 43.300484721000188 ], [ -82.314505778999944, 43.238188782000165 ], [ -82.346726033999914, 43.175841167000115 ], [ -82.378920450999942, 43.113571066000091 ], [ -82.411089029999886, 43.051275127000068 ], [ -82.416411702999937, 43.017142843 ], [ -82.414603027999959, 42.983243104000096 ], [ -82.430441853999952, 42.95130706800002 ], [ -82.453179483999918, 42.918983460000121 ], [ -82.464780842999886, 42.883636780000032 ], [ -82.468036458999876, 42.863973898 ], [ -82.482324991999945, 42.835112610000138 ], [ -82.485270548999949, 42.818524476000121 ], [ -82.47361751299988, 42.798163961000014 ], [ -82.470982015999965, 42.790567525000043 ], [ -82.471343749999875, 42.77984466600013 ], [ -82.47695064399997, 42.761473694000031 ], [ -82.483410197999945, 42.719254049000156 ], [ -82.511263793999916, 42.64667450000006 ], [ -82.526224121999888, 42.619906108000166 ], [ -82.549245971999937, 42.590941468 ], [ -82.575833496999877, 42.571795349000084 ], [ -82.608467162999915, 42.561098328000085 ], [ -82.644330606999887, 42.557816874000096 ], [ -82.694405069999874, 42.519137065000095 ], [ -82.800135050999899, 42.417980449000098 ], [ -82.83282039499997, 42.398007508 ], [ -82.943511311999941, 42.355477804000131 ], [ -83.040352946999889, 42.331861674000109 ], [ -83.079962930999926, 42.30506744400013 ], [ -83.10983191, 42.272278748000119 ], [ -83.128512939999922, 42.239955140000134 ], [ -83.135928507999949, 42.200267639000131 ], [ -83.139649210999949, 42.115854188000029 ], [ -83.159492960999927, 42.046323548000132 ], [ -83.157012492999883, 42.000434876000057 ], [ -83.132506619999873, 41.941952808000039 ], [ -83.123448649999943, 41.9203364050001 ], [ -83.097377888999972, 41.87576548300008 ], [ -83.068413249999907, 41.847731019000079 ], [ -82.98379309099991, 41.808069357000093 ], [ -82.865221516999981, 41.752491353 ], [ -82.711122395999922, 41.680247701000056 ], [ -82.666913207999897, 41.669085592000116 ], [ -82.451319132999913, 41.671901957 ], [ -82.424860799999948, 41.676811219000044 ], [ -82.281355346999931, 41.743292949000093 ], [ -82.137746540999927, 41.809800517000056 ], [ -81.994241088999928, 41.876204733000108 ], [ -81.850735635999939, 41.942712301000157 ], [ -81.707281860999871, 42.009219869000148 ], [ -81.563724731999969, 42.075675761000085 ], [ -81.420219278999951, 42.142157491000077 ], [ -81.276662150999954, 42.208665060000115 ], [ -81.147884480999977, 42.228250427000049 ], [ -81.019158488999977, 42.247809957000172 ], [ -80.890380818999915, 42.267447002000026 ], [ -80.761654826999944, 42.28703236900013 ], [ -80.632877156999939, 42.306643575000138 ], [ -80.520233196999925, 42.323782098000137 ], [ -80.50415116399995, 42.326228943000089 ], [ -80.375373494999877, 42.345788473000184 ], [ -80.24659582599989, 42.365477194000121 ], [ -80.093168497999898, 42.420150859 ], [ -79.939767008999922, 42.474772848000143 ], [ -79.786391357999946, 42.529368999000084 ], [ -79.763006634999897, 42.53770492800011 ], [ -79.633015706999885, 42.584042664000108 ], [ -79.479640055999909, 42.63871632899999 ], [ -79.326186889999917, 42.69333831800013 ], [ -79.172759562999914, 42.748011984000172 ], [ -79.019383910999949, 42.802685649000026 ], [ -78.963056600999948, 42.84012522400009 ], [ -78.918950765999966, 42.889243673000138 ], [ -78.909054727999973, 42.930223084 ], [ -78.915255900999938, 42.94761220300002 ], [ -78.936339884999967, 42.960040385000084 ], [ -78.959956013999914, 42.966215719000061 ], [ -78.983520467999909, 42.976137593000075 ], [ -79.008350992999937, 42.991046245000021 ], [ -79.022019409999956, 43.002234193000149 ], [ -79.031967122999873, 43.01342214 ], [ -79.028246419999874, 43.034506124000032 ], [ -79.022019409999956, 43.049414775000074 ], [ -79.023259643999978, 43.058070578000027 ], [ -79.030752726999935, 43.066803894000188 ], [ -79.041863159999963, 43.075459697000056 ], [ -79.055531575999879, 43.087887879000121 ], [ -79.062947143999878, 43.096543681000171 ], [ -79.06527258299991, 43.105897116000037 ], [ -79.065737670999937, 43.120237326 ], [ -79.061422689999887, 43.130288392000139 ], [ -79.055583251999877, 43.13842743000005 ], [ -79.051604166999908, 43.146850688000043 ], [ -79.049330403999988, 43.15984731000016 ], [ -79.048606933999878, 43.170621847000106 ], [ -79.053774576999899, 43.26035797100009 ], [ -79.058425455999952, 43.277798767000107 ], [ -79.091627563999879, 43.342523499000109 ], [ -79.174309855999951, 43.464531555000164 ], [ -79.078992675999928, 43.498948060000103 ], [ -78.946184244999955, 43.546722921000097 ], [ -78.750821492999961, 43.617054546000091 ], [ -78.688086303999938, 43.631808167000102 ], [ -78.457273518999926, 43.630981344000091 ], [ -78.226460734999904, 43.630206197000078 ], [ -77.995673787999891, 43.629431051000054 ], [ -77.764835163999891, 43.62865590400007 ], [ -77.533996541999869, 43.627854920000132 ], [ -77.303209594999942, 43.627105612000136 ], [ -77.072370971999931, 43.626330465000123 ], [ -76.84153234899992, 43.625503642000083 ], [ -76.836002970999914, 43.628035788 ], [ -76.830473591999919, 43.630438741000049 ], [ -76.824892536999897, 43.632893372000112 ], [ -76.819363158999892, 43.635425517 ], [ -76.813782104999888, 43.63788014800015 ], [ -76.80830440299988, 43.640308940000025 ], [ -76.802723348999876, 43.642789409 ], [ -76.797193970999871, 43.645269877000075 ], [ -76.754354206999921, 43.700098572000073 ], [ -76.711514444999892, 43.755004781000181 ], [ -76.668674682999949, 43.809885153 ], [ -76.625886596999919, 43.864765523000116 ], [ -76.582995157999875, 43.919594218 ], [ -76.54020707199993, 43.974474589000025 ], [ -76.497367309999902, 44.029354960000134 ], [ -76.454630900999888, 44.084235332000119 ], [ -76.430032918999899, 44.103303935000113 ], [ -76.350089477999887, 44.151724752000078 ], [ -76.344405069999937, 44.158184306000024 ], [ -76.341356160999908, 44.165780742 ], [ -76.337118692999951, 44.173738912000047 ], [ -76.327765258999904, 44.18149037700006 ], [ -76.317171590999948, 44.185056051000132 ], [ -76.206635701999915, 44.217405498000019 ], [ -76.185758422999925, 44.225673727000171 ], [ -76.169325317999949, 44.242365214000088 ], [ -76.169738728999874, 44.247687887000055 ], [ -76.178058634999928, 44.27213084 ], [ -76.178678751999911, 44.27864207000006 ], [ -76.149791626999871, 44.304531962000098 ], [ -76.067264363999925, 44.347991842000013 ], [ -75.898695841999938, 44.399978333000135 ], [ -75.870325480999924, 44.408608297000072 ], [ -75.855701049999936, 44.42204417000012 ], [ -75.845417439999949, 44.439045715000034 ], [ -75.830948038999935, 44.464315491000107 ], [ -75.791183024999924, 44.496768291000038 ], [ -75.75462194799988, 44.527567444000098 ], [ -75.699689900999971, 44.581672668000081 ], [ -75.578198608999941, 44.661512757000182 ], [ -75.455958007999925, 44.741766256000105 ], [ -75.341830606999935, 44.816748759000163 ], [ -75.270232909999976, 44.863774313000036 ], [ -75.129647175999963, 44.925165914000118 ], [ -75.075593627999893, 44.935501200000132 ], [ -75.058721273999907, 44.941030578000138 ], [ -75.014899657999905, 44.965990296000101 ], [ -74.998647420999902, 44.972398173000059 ], [ -74.940201375999919, 44.987746074000128 ], [ -74.903743652, 45.005212708000087 ], [ -74.886509562999919, 45.009398499000113 ], [ -74.868474486999929, 45.01012196900011 ], [ -74.741557169999936, 44.998856507000042 ], [ -74.712961391999926, 44.99925364800005 ], [ -74.695875203999918, 44.998029684000031 ], [ -74.596113850999927, 44.998494772000143 ], [ -74.496352497999908, 44.999011536000083 ], [ -74.396616984999923, 44.99947662300012 ], [ -74.296881469999903, 44.999993388000135 ], [ -74.1971459559999, 45.000458476000077 ], [ -74.097384603999899, 45.000975240000017 ], [ -73.997649088999907, 45.001440328000129 ], [ -73.897887736999905, 45.001957093 ], [ -73.798152221999914, 45.002473857000112 ], [ -73.698416707999911, 45.002938945000054 ], [ -73.598655355999909, 45.003404033 ], [ -73.498919840999889, 45.003920797000106 ], [ -73.399158487999898, 45.004385885000048 ], [ -73.351340858999919, 45.004633645000027 ], [ -73.299422973999896, 45.004902649000186 ], [ -73.199687459999979, 45.005419414000031 ], [ -73.099951944999901, 45.005884502000143 ], [ -73.000268106999926, 45.006349590000085 ], [ -72.900480916999896, 45.006866354000024 ], [ -72.800693725999878, 45.007331442000137 ], [ -72.700958211999904, 45.007796530000078 ], [ -72.6012743739999, 45.008313294000018 ], [ -72.501487183, 45.008830058000157 ], [ -72.401751668999907, 45.009295146000071 ], [ -72.301964477999974, 45.009760233000023 ], [ -72.202228963999886, 45.010328674000064 ], [ -72.10254512599991, 45.010793762 ], [ -72.00280961099989, 45.011258850000118 ], [ -71.903074097, 45.011775615000047 ], [ -71.803286905999897, 45.01224070300016 ], [ -71.70355139199998, 45.012757467000128 ], [ -71.603815877999892, 45.013274231000153 ], [ -71.505848136999958, 45.013731075000024 ], [ -71.504080363999975, 45.013739319000095 ], [ -71.506612507999961, 45.037045390000017 ], [ -71.504752156999956, 45.052961731000053 ], [ -71.497259073999942, 45.066552633000057 ], [ -71.45658972199999, 45.110994365000025 ], [ -71.451215373999929, 45.121691386000023 ], [ -71.44599605399992, 45.140294902000065 ], [ -71.441603556999922, 45.150681865000095 ], [ -71.413026488999947, 45.186183574000054 ], [ -71.406566934999972, 45.204942119000137 ], [ -71.42268998299997, 45.217189434000076 ], [ -71.44904496299992, 45.226904603000108 ], [ -71.438813028999874, 45.233467510000096 ], [ -71.394888061999922, 45.241529033000077 ], [ -71.381245482999901, 45.250779114000082 ], [ -71.352099975999892, 45.27832265300016 ], [ -71.334323283999964, 45.288709616000105 ], [ -71.311533976999954, 45.294135641000153 ], [ -71.293395548999939, 45.29232696600009 ], [ -71.209369669999916, 45.254758199 ], [ -71.18513342299994, 45.248557027000103 ], [ -71.160328735999968, 45.24576650000013 ], [ -71.141725219999927, 45.252329407000119 ], [ -71.111029418999891, 45.287107646000081 ], [ -71.095242269999915, 45.30090525300001 ], [ -71.085552937999978, 45.304212545000112 ], [ -71.084951960999973, 45.304292578000073 ], [ -71.064210571999979, 45.307054749000187 ], [ -71.054417887999904, 45.310362040000186 ], [ -71.036667033999976, 45.323384501000035 ], [ -71.027597818999936, 45.334649963000075 ], [ -71.016539062999925, 45.343124898 ], [ -70.993155477999949, 45.347827454000154 ], [ -70.968118245999875, 45.34452016200008 ], [ -70.951607625999969, 45.332014466000075 ], [ -70.906907511999918, 45.246231588000157 ], [ -70.892412272999906, 45.234604390000086 ], [ -70.87435136, 45.24566314800002 ], [ -70.870604817999975, 45.255274964000122 ], [ -70.872491007999969, 45.274188538000047 ], [ -70.870243082999963, 45.283128561000083 ], [ -70.862620808999907, 45.290363261000053 ], [ -70.842389485999917, 45.30121531200011 ], [ -70.835258137999972, 45.309793599000116 ], [ -70.832080037999901, 45.328552144000028 ], [ -70.835464844999933, 45.373097229000123 ], [ -70.833837036999881, 45.393096008000057 ], [ -70.82598221799995, 45.410459290000077 ], [ -70.812985595999919, 45.423430074000109 ], [ -70.794873006999893, 45.430406392000108 ], [ -70.771876993999939, 45.430044658 ], [ -70.752550007999901, 45.422344870000117 ], [ -70.718004313999899, 45.397281799 ], [ -70.696739461999925, 45.388651836000136 ], [ -70.67578466799992, 45.388703512000077 ], [ -70.653589640999911, 45.395473124000105 ], [ -70.641316487999887, 45.40849558500004 ], [ -70.650256510999981, 45.427460836000094 ], [ -70.668162394999882, 45.439036357000063 ], [ -70.707384806999926, 45.456399638000065 ], [ -70.722836059999906, 45.470920716000094 ], [ -70.732008626999914, 45.491591289000112 ], [ -70.730329142999949, 45.507972717000158 ], [ -70.686791748999923, 45.572723287000159 ], [ -70.589614216999934, 45.651788229000047 ], [ -70.572405965999934, 45.662278544000017 ], [ -70.514735066999975, 45.68170888300007 ], [ -70.484762735999936, 45.699640605000141 ], [ -70.472799641999899, 45.703568014000112 ], [ -70.450423746999917, 45.703723044000142 ], [ -70.439132446999935, 45.705893453000058 ], [ -70.41931453499987, 45.716900533000128 ], [ -70.407351441, 45.73152496400003 ], [ -70.402442179999952, 45.749663391000141 ], [ -70.403940795999887, 45.771160787 ], [ -70.408281616999943, 45.781651103000129 ], [ -70.413681803999907, 45.787697246000093 ], [ -70.417169962999964, 45.79379506500014 ], [ -70.415232096999944, 45.80438873300001 ], [ -70.409935262999909, 45.81074493500013 ], [ -70.389807291999944, 45.825059306000028 ], [ -70.312654378999952, 45.867640686000087 ], [ -70.283172973999967, 45.89048166900001 ], [ -70.262528238999948, 45.923037821000051 ], [ -70.255939493999875, 45.94887603800008 ], [ -70.263148355999931, 45.956834208000046 ], [ -70.280434123999925, 45.959314677000023 ], [ -70.303946899999914, 45.968616435000129 ], [ -70.316297566999964, 45.982982483000129 ], [ -70.316891845999919, 45.999002177000094 ], [ -70.306143147999904, 46.035330709000064 ], [ -70.303636840999928, 46.038482971000022 ], [ -70.29430924499988, 46.044942526000071 ], [ -70.292009643999876, 46.048663229000098 ], [ -70.293017333999927, 46.054037578000063 ], [ -70.296092081999888, 46.057861634000076 ], [ -70.300794636999939, 46.061737366000145 ], [ -70.304773722999926, 46.065974834000187 ], [ -70.311362467999913, 46.071865947 ], [ -70.312628540999953, 46.079565735000088 ], [ -70.30032955, 46.089280905000024 ], [ -70.264440266999969, 46.106592510000112 ], [ -70.249479939999901, 46.120596823000042 ], [ -70.244002238999911, 46.141009013000158 ], [ -70.24924739599993, 46.162764791000185 ], [ -70.263329223999875, 46.183228659000136 ], [ -70.284800781999905, 46.191858622 ], [ -70.280899210999934, 46.211857401000131 ], [ -70.253407348999957, 46.251493226 ], [ -70.236173258999969, 46.288338522000018 ], [ -70.223693400999906, 46.300792542000082 ], [ -70.201885945999976, 46.305495097000076 ], [ -70.199508829999928, 46.315261943000124 ], [ -70.197028360999951, 46.336862692000082 ], [ -70.188398396999901, 46.358411764000053 ], [ -70.167417764999897, 46.368178610000101 ], [ -70.153051716999897, 46.372829488000079 ], [ -70.074322672999926, 46.419544983000051 ], [ -70.061816976999921, 46.44540903700009 ], [ -70.050086425999922, 46.511270651000174 ], [ -70.03272314499992, 46.609765930000052 ], [ -70.023628092999928, 46.661287334000136 ], [ -70.007763427999919, 46.704075419000063 ], [ -69.989960896999975, 46.721697083000052 ], [ -69.899708008999966, 46.811562398000078 ], [ -69.809403441999933, 46.901298523000051 ], [ -69.719098876999908, 46.991086324000051 ], [ -69.628794311999968, 47.08079661100011 ], [ -69.538463907999926, 47.170610250000109 ], [ -69.448159342999986, 47.260346375000111 ], [ -69.357906453999959, 47.350134176000026 ], [ -69.267627726999933, 47.439844462000067 ], [ -69.25091040099997, 47.452918600000132 ], [ -69.237267822999883, 47.458809713000122 ], [ -69.221971598999914, 47.459688213000064 ], [ -69.069655313999931, 47.431886292000016 ], [ -69.054023193999882, 47.418398743000139 ], [ -69.054333251999964, 47.389253235000027 ], [ -69.066192993999977, 47.32967030900015 ], [ -69.06513362599992, 47.296339010000096 ], [ -69.063559775999892, 47.290809266000153 ], [ -69.057485514999939, 47.269467265000074 ], [ -69.040199747999935, 47.24905507400014 ], [ -68.906228596999938, 47.190221457000135 ], [ -68.889717976999947, 47.190609029000157 ], [ -68.761818807999902, 47.237040304000075 ], [ -68.717790486999945, 47.245231018000098 ], [ -68.668801229999929, 47.24342234300012 ], [ -68.64420324699995, 47.245282694000124 ], [ -68.625599731999898, 47.255204570000032 ], [ -68.607926391999882, 47.269829 ], [ -68.585240437999914, 47.282489726000122 ], [ -68.539661824999939, 47.299853008000142 ], [ -68.518009398999936, 47.30476226800009 ], [ -68.49201615399997, 47.307552796000138 ], [ -68.466746378999915, 47.305692444000115 ], [ -68.435327107999882, 47.291274720000033 ], [ -68.422563029999907, 47.29310923300001 ], [ -68.410212361999953, 47.297424215 ], [ -68.385614380999897, 47.301713359000146 ], [ -68.383392292999957, 47.307139384000109 ], [ -68.384839233999884, 47.315872701 ], [ -68.382048705999921, 47.327809957000127 ], [ -68.347838907999915, 47.358505758 ], [ -68.299728148999947, 47.367833354000098 ], [ -68.246449747999975, 47.360572816000129 ], [ -68.19704707899993, 47.341400859000132 ], [ -68.184334675999906, 47.333132629 ], [ -68.156067667999906, 47.306674296 ], [ -68.145060587999922, 47.301454977000091 ], [ -68.115398315999954, 47.29228241 ], [ -68.101445679999955, 47.286184591000122 ], [ -68.039382283999913, 47.245231018000098 ], [ -67.993183552999938, 47.223216859000118 ], [ -67.962436075999904, 47.197688700000086 ], [ -67.953702758999924, 47.186629944000074 ], [ -67.949982055999925, 47.172935689000056 ], [ -67.943419148999936, 47.16453827 ], [ -67.899132446999914, 47.138777568000179 ], [ -67.870607055999955, 47.107358297000033 ], [ -67.854742390999945, 47.097849834000058 ], [ -67.813556274999939, 47.081907654000034 ], [ -67.808698689999915, 47.075138042000091 ], [ -67.805184692999973, 47.035631409000146 ], [ -67.802549194999955, 46.901246847000138 ], [ -67.800017049999951, 46.766784770000115 ], [ -67.79743322799996, 46.632296855000064 ], [ -67.794849406999873, 46.49786061600004 ], [ -67.792317260999965, 46.363476054000117 ], [ -67.789733439999878, 46.229013978000083 ], [ -67.787149617999972, 46.094551900000155 ], [ -67.784565796999885, 45.960141500000034 ], [ -67.782757120999889, 45.950529684000017 ], [ -67.776555949999903, 45.942933248000074 ], [ -67.767460896999921, 45.93595693000016 ], [ -67.75965775599991, 45.928567200000046 ], [ -67.757849080999904, 45.919472148000082 ], [ -67.769424601999873, 45.903969218000086 ], [ -67.787356323999916, 45.890016581000069 ], [ -67.799241902999967, 45.875650534000087 ], [ -67.792627318999877, 45.858907370000125 ], [ -67.776090861999961, 45.840820618000024 ], [ -67.772835245999971, 45.828056540000048 ], [ -67.779863240999902, 45.815705872000095 ], [ -67.794125935999972, 45.799169413000087 ], [ -67.806269897999954, 45.781754456000058 ], [ -67.811127482999979, 45.766509908000117 ], [ -67.807045043999977, 45.712869772000047 ], [ -67.800120401999976, 45.699847311000113 ], [ -67.786116088999904, 45.691217346000158 ], [ -67.761776488999971, 45.680106913000046 ], [ -67.748030558999943, 45.677781474000099 ], [ -67.740744180999883, 45.683620911 ], [ -67.735524861999949, 45.690752258000046 ], [ -67.727980102999908, 45.692250875000141 ], [ -67.717386433999906, 45.685377910000071 ], [ -67.710461791999933, 45.67540435800008 ], [ -67.704829060999913, 45.664190572000123 ], [ -67.690773070999882, 45.653803609000093 ], [ -67.660335652999919, 45.637370504000117 ], [ -67.607522338999871, 45.620058900000132 ], [ -67.551866820999948, 45.610447083000039 ], [ -67.506391561999891, 45.609826966000142 ], [ -67.475799112999965, 45.6129792280001 ], [ -67.449960896999954, 45.61080881700012 ], [ -67.431305704999971, 45.597941386000016 ], [ -67.4221073, 45.568795878000017 ], [ -67.426189737999977, 45.533449199000088 ], [ -67.443036254999981, 45.522183736000144 ], [ -67.467530883999927, 45.508282776000058 ], [ -67.493214070999898, 45.493141581000046 ], [ -67.482310343999956, 45.455521139000112 ], [ -67.428825236999927, 45.387049866000112 ], [ -67.434561319999972, 45.35030792300013 ], [ -67.459055948999918, 45.318423564000071 ], [ -67.468667765999925, 45.301835429000064 ], [ -67.475023966999885, 45.28235341400007 ], [ -67.471303263999943, 45.266282044000107 ], [ -67.427585001999972, 45.236568095000123 ], [ -67.390533, 45.193108216000113 ], [ -67.356271525999915, 45.165926412000047 ], [ -67.31921952299993, 45.153885804000154 ], [ -67.284647989999939, 45.169698792000148 ], [ -67.279583699999961, 45.17905222600011 ], [ -67.279221964999948, 45.187372131000146 ], [ -67.277206583999913, 45.195071920000075 ], [ -67.267336384999936, 45.202513326000158 ], [ -67.254985718999961, 45.205045472000066 ], [ -67.242428344999951, 45.202565003000089 ], [ -67.219070597999917, 45.192126363000156 ], [ -67.2061662079999, 45.189400586000133 ], [ -67.176014777999853, 45.178656317000119 ], [ -67.191273566999911, 45.180365302000112 ], [ -67.204375779999907, 45.178208726000136 ], [ -67.210316535999908, 45.171087958000086 ], [ -67.203887498999904, 45.157497463000126 ], [ -67.199899868999921, 45.156602281000048 ], [ -67.179676886999914, 45.157497463000126 ], [ -67.172393357999908, 45.155137437000164 ], [ -67.168446417999917, 45.149522203000075 ], [ -67.165964321999894, 45.142849026000121 ], [ -67.159616665999948, 45.132350979000037 ], [ -67.154164191999911, 45.119167385000097 ], [ -67.15208899599989, 45.116563218000081 ], [ -67.145985480999911, 45.115179755000113 ], [ -67.139393683999941, 45.111558335000055 ], [ -67.128203904999907, 45.102891343000138 ], [ -67.113474087999919, 45.086940822000045 ], [ -67.100290493999893, 45.069362697000102 ], [ -67.111195441999939, 45.053656317000062 ], [ -67.1045222649999, 45.037949937000079 ], [ -67.090036587999947, 45.025864976 ], [ -67.077015753999973, 45.020982164000102 ], [ -67.071644660999908, 45.014390367000047 ], [ -67.051991339999859, 44.98338450700011 ], [ -67.040069139999929, 44.973171291000156 ], [ -67.052235480999911, 44.961289781000048 ], [ -67.056019660999937, 44.945420640000108 ], [ -67.062733527999882, 44.931423244000044 ], [ -67.083485480999883, 44.925401109000134 ], [ -67.094512498999904, 44.933050848000065 ], [ -67.105946417999888, 44.945786851000108 ], [ -67.117298956999946, 44.948350328000018 ], [ -67.128203904999907, 44.925401109000134 ], [ -67.113067186999928, 44.915554104000122 ], [ -67.112090623999848, 44.904079494000158 ], [ -67.121693488999938, 44.894558010000154 ], [ -67.138417120999861, 44.890651760000154 ], [ -67.15135657499988, 44.89594147300015 ], [ -67.184763149999924, 44.916774807000039 ], [ -67.196481899999924, 44.918565171000026 ], [ -67.20339921799993, 44.904893296000083 ], [ -67.190541144999884, 44.89057038 ], [ -67.172311977999925, 44.877224026000178 ], [ -67.162953253999973, 44.866725979000122 ], [ -67.148671027999882, 44.81553782800016 ], [ -67.145985480999911, 44.825710354000094 ], [ -67.143788214999915, 44.85573965100015 ], [ -67.141835089999859, 44.863308010000097 ], [ -67.130360480999911, 44.864732164000159 ], [ -67.114369269999912, 44.846909898000021 ], [ -67.100290493999893, 44.849636135000154 ], [ -67.107696092999873, 44.857123114000117 ], [ -67.094105597999913, 44.863308010000097 ], [ -67.09711666599992, 44.867783921000168 ], [ -67.102284308999913, 44.877956447000102 ], [ -67.107696092999873, 44.883164781000019 ], [ -67.08849036399991, 44.888128973000065 ], [ -67.074737107999908, 44.870794989000061 ], [ -67.067128058999856, 44.844427802000084 ], [ -67.06615149599989, 44.822292385000097 ], [ -67.043649868999893, 44.833970445 ], [ -67.04198157499988, 44.854437567000062 ], [ -67.059315558999856, 44.897447007000025 ], [ -67.043690558999884, 44.894029039000188 ], [ -67.032948370999861, 44.88438548400002 ], [ -67.012155727999868, 44.857123114000117 ], [ -67.009063279999907, 44.856390692 ], [ -66.99474036399991, 44.857123114000117 ], [ -66.991403774999895, 44.855658270000063 ], [ -66.991444464999887, 44.851914781000133 ], [ -66.992298956999974, 44.847398179 ], [ -66.991688605999911, 44.843491929 ], [ -66.979481574999937, 44.818793036 ], [ -66.977324998999933, 44.81553782800016 ], [ -66.984974738999966, 44.804917710000112 ], [ -67.019398566999911, 44.774929104000151 ], [ -67.032582160999937, 44.767116604000151 ], [ -67.042469855999855, 44.766221421000168 ], [ -67.063954230999883, 44.76858144700013 ], [ -67.073597785999965, 44.767116604000151 ], [ -67.074086066999939, 44.763698635000154 ], [ -67.082264777999853, 44.74571360900002 ], [ -67.08661861899995, 44.739772854000094 ], [ -67.094105597999913, 44.747259833000058 ], [ -67.103993292999917, 44.728989976 ], [ -67.113229946999894, 44.716253973000121 ], [ -67.169178839999944, 44.67092519700013 ], [ -67.17796790299991, 44.667588609000106 ], [ -67.195342576999877, 44.663275458 ], [ -67.203887498999904, 44.657253322000187 ], [ -67.20136471299989, 44.653591213000041 ], [ -67.196481899999924, 44.644232489 ], [ -67.224395311999871, 44.644232489 ], [ -67.232696092999845, 44.646755276000121 ], [ -67.248768683999913, 44.655503648 ], [ -67.251088019999884, 44.657253322000187 ], [ -67.261992967999873, 44.657700914000188 ], [ -67.269073045999932, 44.654811916000071 ], [ -67.26903235599994, 44.646348374000027 ], [ -67.258534308999856, 44.629909572000102 ], [ -67.280547654999879, 44.631374416000156 ], [ -67.294789191999968, 44.639634507000082 ], [ -67.308054165999891, 44.649766343000024 ], [ -67.32685299399995, 44.657253322000187 ], [ -67.32685299399995, 44.664740302000055 ], [ -67.310983852999925, 44.682399807000152 ], [ -67.314076300999915, 44.700710354000037 ], [ -67.332020636999857, 44.709499416000099 ], [ -67.360951300999943, 44.698838609000163 ], [ -67.347360805999898, 44.692653713000098 ], [ -67.360788540999891, 44.68557363500004 ], [ -67.373321092999902, 44.685899156000161 ], [ -67.38512122299997, 44.691188869000044 ], [ -67.395741339999915, 44.698838609000163 ], [ -67.389393683999884, 44.682481187000135 ], [ -67.37755286399991, 44.670762437000164 ], [ -67.371327277999853, 44.657700914000188 ], [ -67.382069464999887, 44.637396552 ], [ -67.367217576999906, 44.627468166000185 ], [ -67.370350714999887, 44.622300523 ], [ -67.379383917999888, 44.621283270000035 ], [ -67.382069464999887, 44.623765367000047 ], [ -67.398426886999886, 44.611802476000108 ], [ -67.404530402999882, 44.605698960000112 ], [ -67.409413214999944, 44.595811265000023 ], [ -67.422149217999902, 44.614976304000081 ], [ -67.426747199999937, 44.639390367000132 ], [ -67.434681769999884, 44.659206447000045 ], [ -67.457142706999889, 44.664740302000055 ], [ -67.450795050999972, 44.647650458000115 ], [ -67.451852993999921, 44.632269598000065 ], [ -67.450469529999936, 44.619370835000055 ], [ -67.436716274999924, 44.609483140000137 ], [ -67.454335089999944, 44.604600328000075 ], [ -67.472523566999939, 44.60313548400002 ], [ -67.48997962099989, 44.604925848 ], [ -67.50560462099989, 44.609483140000137 ], [ -67.499460415999891, 44.623806057000039 ], [ -67.505726691999939, 44.633571682000152 ], [ -67.51703854099992, 44.634873765000165 ], [ -67.52607174399995, 44.623765367000047 ], [ -67.532907680999955, 44.623765367000047 ], [ -67.539051886999943, 44.646226304000052 ], [ -67.554392055999898, 44.644069729000037 ], [ -67.593739386999886, 44.61631907800016 ], [ -67.573190883999928, 44.617539781000076 ], [ -67.56586666599992, 44.609808661000059 ], [ -67.56708736899995, 44.579046942 ], [ -67.569284633999928, 44.571153062000022 ], [ -67.573231574999937, 44.562486070000105 ], [ -67.574981248999933, 44.553493557000095 ], [ -67.570423956999974, 44.544907945 ], [ -67.569040493999893, 44.538682359000049 ], [ -67.577870245999861, 44.535264390000023 ], [ -67.589792446999894, 44.533189195000105 ], [ -67.597401495999947, 44.530951239000117 ], [ -67.603464321999923, 44.528102932000181 ], [ -67.612090623999933, 44.526597398000135 ], [ -67.621286587999919, 44.526393947000159 ], [ -67.628448045999846, 44.52753327 ], [ -67.638701951999877, 44.531683661000059 ], [ -67.639759894999941, 44.534776109000134 ], [ -67.638661261999886, 44.539333401000178 ], [ -67.639841274999924, 44.547552802000084 ], [ -67.640410936999899, 44.554877020000092 ], [ -67.643747524999924, 44.563910223 ], [ -67.648955857999908, 44.56854889500012 ], [ -67.659209764999929, 44.56667715100015 ], [ -67.668568488999966, 44.561468817000062 ], [ -67.683705206999946, 44.548041083000058 ], [ -67.714141404999907, 44.500759182000095 ], [ -67.728016730999911, 44.503200588000041 ], [ -67.740183071999894, 44.510362046000083 ], [ -67.748768683999913, 44.521999416000185 ], [ -67.751983201999877, 44.538072007000082 ], [ -67.740467902999939, 44.588242906000161 ], [ -67.744577602999868, 44.595811265000023 ], [ -67.755604620999918, 44.589626369000044 ], [ -67.78612219999988, 44.541774807000124 ], [ -67.783314581999917, 44.537298895000148 ], [ -67.78612219999988, 44.52753327 ], [ -67.790150519999941, 44.531724351000051 ], [ -67.800526495999918, 44.541205145000148 ], [ -67.796416795999875, 44.554470119000158 ], [ -67.785511847999913, 44.570583401000064 ], [ -67.779286261999943, 44.585882880000028 ], [ -67.782663540999863, 44.60150788 ], [ -67.79051673099994, 44.59988027600015 ], [ -67.799590623999848, 44.58860911699999 ], [ -67.806630011999914, 44.575384833000143 ], [ -67.817168748999876, 44.583766994000101 ], [ -67.828358527999882, 44.584255276000178 ], [ -67.837147589999859, 44.577744859000077 ], [ -67.84593665299991, 44.551296291000099 ], [ -67.857289191999882, 44.546087958000115 ], [ -67.869007941999882, 44.544541734000077 ], [ -67.874867316999911, 44.541774807000124 ], [ -67.87205969999988, 44.530056057000039 ], [ -67.852324998999848, 44.508653062000079 ], [ -67.847604946999923, 44.497097072000045 ], [ -67.852284308999856, 44.482530015000023 ], [ -67.863555467999845, 44.479356187000164 ], [ -67.877308722999942, 44.482367255000057 ], [ -67.889149542999917, 44.486558335 ], [ -67.884999152999882, 44.466905015000137 ], [ -67.899606899999895, 44.422105210000112 ], [ -67.902211066999911, 44.39720286699999 ], [ -67.92125403599988, 44.411363023 ], [ -67.923451300999972, 44.437770901000178 ], [ -67.915028449999937, 44.466294664000159 ], [ -67.902211066999911, 44.486558335 ], [ -67.917103644999941, 44.481553453000132 ], [ -67.92800859299993, 44.468288479000122 ], [ -67.934681769999884, 44.45136139500012 ], [ -67.93700110599994, 44.435044664000102 ], [ -67.934356248999876, 44.416367906000133 ], [ -67.93700110599994, 44.408636786000116 ], [ -67.947214321999894, 44.41425202000012 ], [ -67.953561977999925, 44.419134833 ], [ -67.959014451999849, 44.422390041000043 ], [ -67.962839321999866, 44.426743882000139 ], [ -67.96430416599992, 44.435044664000102 ], [ -67.967722133999928, 44.500759182000095 ], [ -67.97789466099988, 44.499131578000075 ], [ -67.982899542999917, 44.49416738500004 ], [ -67.984567837999947, 44.486314195000048 ], [ -67.984730597999913, 44.476019598000121 ], [ -67.98875891799986, 44.466498114000117 ], [ -67.998158331999889, 44.466498114000117 ], [ -68.015817837999919, 44.472927151000064 ], [ -68.028797980999911, 44.468532619000158 ], [ -68.01585852799991, 44.458848374000112 ], [ -67.984730597999913, 44.445583401000178 ], [ -67.984405076999877, 44.440659898000106 ], [ -67.97398841099988, 44.413519598 ], [ -67.971140102999954, 44.410834052000112 ], [ -67.972157355999911, 44.403753973000065 ], [ -67.974720831999917, 44.395290432000124 ], [ -67.978871222999942, 44.387884833000115 ], [ -67.984730597999913, 44.383530992000047 ], [ -67.994618292999917, 44.383530992000047 ], [ -67.99779212099989, 44.389268296000111 ], [ -67.999460415999891, 44.395534572000074 ], [ -68.005238410999937, 44.39720286699999 ], [ -68.015004035999908, 44.393744208000086 ], [ -68.015329555999926, 44.390570380000028 ], [ -68.014108852999897, 44.385524807000152 ], [ -68.019520636999943, 44.376695054000109 ], [ -68.050323045999932, 44.340358791000128 ], [ -68.060536261999857, 44.328314520000035 ], [ -68.072987433999884, 44.338324286 ], [ -68.076405402999882, 44.349351304000052 ], [ -68.073475714999859, 44.362046617000104 ], [ -68.066639777999939, 44.376695054000109 ], [ -68.082386847999913, 44.372341213000126 ], [ -68.088408982999908, 44.369248765000137 ], [ -68.097523566999911, 44.38572825700011 ], [ -68.107411261999914, 44.415554104000037 ], [ -68.112416144999941, 44.441351630000057 ], [ -68.108021613999966, 44.463609117000104 ], [ -68.111520962999862, 44.480088609000077 ], [ -68.139352993999921, 44.486558335 ], [ -68.143259243999921, 44.489284572000159 ], [ -68.14305579299986, 44.494981187000135 ], [ -68.143503383999956, 44.500026760000154 ], [ -68.149199998999933, 44.500759182000095 ], [ -68.158070441999882, 44.496812242000104 ], [ -68.159942186999871, 44.491725979000094 ], [ -68.159901495999861, 44.485866604000151 ], [ -68.162871873999876, 44.479112046000026 ], [ -68.162627732999937, 44.473578192 ], [ -68.158924933999884, 44.466782945000077 ], [ -68.158151821999866, 44.461045640000108 ], [ -68.16661536399991, 44.458685614000146 ], [ -68.181589321999951, 44.459092515000137 ], [ -68.187285936999928, 44.462184963000041 ], [ -68.189564581999889, 44.469509182000039 ], [ -68.190215623999848, 44.497544664000046 ], [ -68.193633592999873, 44.520005601000051 ], [ -68.202015753999916, 44.525091864000089 ], [ -68.217518683999913, 44.500759182000095 ], [ -68.219838019999884, 44.485947984000134 ], [ -68.219227667999917, 44.472031968000138 ], [ -68.222116665999863, 44.466294664000159 ], [ -68.254261847999913, 44.493516343000081 ], [ -68.259266730999883, 44.504177151000121 ], [ -68.25849361899995, 44.520697333 ], [ -68.276356574999909, 44.520493882000139 ], [ -68.294300910999965, 44.527777411000059 ], [ -68.308135545999875, 44.529038804000052 ], [ -68.313710089999859, 44.510484117000047 ], [ -68.281524217999902, 44.499375718000024 ], [ -68.26980546799993, 44.486070054000109 ], [ -68.286407029999879, 44.466091213000041 ], [ -68.281442837999919, 44.462673244000129 ], [ -68.278309699999852, 44.459011135000154 ], [ -68.275827602999925, 44.455308335000112 ], [ -68.27273515499985, 44.451849677000112 ], [ -68.317087368999893, 44.451198635000154 ], [ -68.337635870999918, 44.455104885000154 ], [ -68.354685024999895, 44.466091213000041 ], [ -68.36192786399991, 44.445827541000128 ], [ -68.386463995999918, 44.424343166000185 ], [ -68.382598436999928, 44.410834052000112 ], [ -68.409291144999941, 44.404649156000133 ], [ -68.422963019999884, 44.405137437000135 ], [ -68.426706508999928, 44.41722239800005 ], [ -68.423329230999911, 44.470974026000093 ], [ -68.43187415299991, 44.486599026000178 ], [ -68.449940558999941, 44.493679104000037 ], [ -68.478220180999898, 44.493394273000106 ], [ -68.459828253999945, 44.462103583000058 ], [ -68.457753058999941, 44.448716539000046 ], [ -68.459502732999937, 44.442897854000094 ], [ -68.462839321999951, 44.438666083000086 ], [ -68.464466925999972, 44.434271552 ], [ -68.461130337999947, 44.428208726 ], [ -68.456044074999937, 44.424343166000185 ], [ -68.451893683999884, 44.422308661000059 ], [ -68.449696417999888, 44.418727932000095 ], [ -68.450306769999941, 44.410834052000112 ], [ -68.455189581999917, 44.401800848 ], [ -68.464792446999894, 44.389837958000086 ], [ -68.474069790999948, 44.382432359000077 ], [ -68.478220180999898, 44.387233791000156 ], [ -68.478138800999915, 44.410834052000112 ], [ -68.480091925999943, 44.421616929000109 ], [ -68.485056118999921, 44.431911526000036 ], [ -68.504424607999937, 44.413356838000041 ], [ -68.525990363999938, 44.405625718000024 ], [ -68.54942786399991, 44.405747789000188 ], [ -68.574411587999919, 44.410834052000112 ], [ -68.56301835799988, 44.400580145 ], [ -68.551503058999941, 44.377224026000093 ], [ -68.543080206999974, 44.366156317000062 ], [ -68.541778123999876, 44.356919664000188 ], [ -68.556141730999855, 44.330023505000113 ], [ -68.560170050999915, 44.318345445000105 ], [ -68.555856899999924, 44.306179104000037 ], [ -68.545928514999929, 44.302435614 ], [ -68.534535285999965, 44.300645249000027 ], [ -68.525990363999938, 44.294785874000169 ], [ -68.520863410999937, 44.28001536699999 ], [ -68.52318274599989, 44.269558010000097 ], [ -68.532012498999848, 44.266628322000187 ], [ -68.546498175999886, 44.274278062000022 ], [ -68.541005011999857, 44.263698635000154 ], [ -68.533640102999868, 44.256374416000156 ], [ -68.524362758999928, 44.250921942000119 ], [ -68.512928839999859, 44.246364651000178 ], [ -68.54137122299997, 44.237331447000159 ], [ -68.633493618999864, 44.296250718000053 ], [ -68.666940883999928, 44.298203843000081 ], [ -68.683705206999946, 44.294460354000066 ], [ -68.7041316399999, 44.305121161000088 ], [ -68.732045050999943, 44.328314520000035 ], [ -68.756214972999942, 44.334458726 ], [ -68.791778123999933, 44.31639232 ], [ -68.820790167999917, 44.314642645000092 ], [ -68.811797654999907, 44.35158926000004 ], [ -68.803944464999915, 44.369248765000137 ], [ -68.789784308999884, 44.376695054000109 ], [ -68.780262824999909, 44.374538479000122 ], [ -68.770863410999965, 44.365179755 ], [ -68.762806769999941, 44.363063869000158 ], [ -68.753285285999937, 44.367539781000133 ], [ -68.754261847999913, 44.377875067000147 ], [ -68.760446743999893, 44.389349677 ], [ -68.766224738999938, 44.39720286699999 ], [ -68.75320390499985, 44.404974677000084 ], [ -68.741973436999871, 44.41425202000012 ], [ -68.735300258999899, 44.414658921000026 ], [ -68.714792446999951, 44.405300197000102 ], [ -68.704782680999955, 44.404038804 ], [ -68.699330206999917, 44.409694729000179 ], [ -68.717396613999938, 44.431586005000113 ], [ -68.718373175999915, 44.445583401000178 ], [ -68.756214972999942, 44.430894273 ], [ -68.766224738999938, 44.424505927000055 ], [ -68.784413214999944, 44.402777411000088 ], [ -68.795847133999899, 44.392564195000048 ], [ -68.807118292999888, 44.390977281000019 ], [ -68.816192186999871, 44.402085679000052 ], [ -68.814401821999894, 44.417995510000154 ], [ -68.807240363999938, 44.434108791000043 ], [ -68.800323045999846, 44.445583401000178 ], [ -68.796579555999926, 44.448513088000098 ], [ -68.784657355999883, 44.453843492000075 ], [ -68.779245571999923, 44.458685614000146 ], [ -68.776641404999936, 44.46495189000008 ], [ -68.774932420999932, 44.480210679000052 ], [ -68.772979295999875, 44.486558335 ], [ -68.742624477999897, 44.537298895000148 ], [ -68.746205206999974, 44.554877020000092 ], [ -68.779245571999923, 44.561712958 ], [ -68.795847133999899, 44.561997789000046 ], [ -68.801625128999945, 44.560288804000137 ], [ -68.807118292999888, 44.534369208000115 ], [ -68.82762610599994, 44.479112046000026 ], [ -68.821400519999969, 44.478461005000057 ], [ -68.807118292999888, 44.472927151000064 ], [ -68.824696417999917, 44.461045640000108 ], [ -68.845244920999875, 44.453802802000084 ], [ -68.857126430999898, 44.456081447000045 ], [ -68.848133917999888, 44.472927151000064 ], [ -68.86274166599992, 44.475368557000181 ], [ -68.879628058999913, 44.468532619000158 ], [ -68.906483527999882, 44.448716539000046 ], [ -68.919422980999883, 44.441392320000048 ], [ -68.965443488999938, 44.431911526000036 ], [ -68.986602342999845, 44.421169338000126 ], [ -68.982289191999939, 44.413600979000179 ], [ -68.971913214999944, 44.405788479000179 ], [ -68.975087042999917, 44.394069729000094 ], [ -68.972767706999946, 44.383815822000159 ], [ -68.944569464999887, 44.348822333000058 ], [ -68.937489386999914, 44.331976630000057 ], [ -68.945546027999939, 44.317165432000095 ], [ -68.964100714999944, 44.307806708000058 ], [ -68.98460852799991, 44.301214911 ], [ -68.998972133999871, 44.294785874000169 ], [ -69.021595831999946, 44.247788804000052 ], [ -69.036244269999941, 44.232611395000063 ], [ -69.053578253999945, 44.18492259300011 ], [ -69.067901170999932, 44.158962307000095 ], [ -69.077748175999943, 44.144964911000145 ], [ -69.088327602999897, 44.136501369000101 ], [ -69.088327602999897, 44.130316473000121 ], [ -69.082875128999945, 44.115261135000125 ], [ -69.089548305999926, 44.098089911 ], [ -69.086903449999937, 44.086696682000039 ], [ -69.053578253999945, 44.089300848000121 ], [ -69.065215623999848, 44.06761302300005 ], [ -69.075795050999915, 44.052516994000044 ], [ -69.09150143099987, 44.043809312000135 ], [ -69.118763800999943, 44.040879624000027 ], [ -69.126210089999944, 44.031032619000101 ], [ -69.130645311999899, 44.011745510000154 ], [ -69.142038540999863, 43.998724677 ], [ -69.170277472999942, 44.007432359000077 ], [ -69.171823696999894, 43.997178453000132 ], [ -69.175892706999946, 43.991400458 ], [ -69.182484503999916, 43.990016994000101 ], [ -69.191395636999943, 43.993109442 ], [ -69.199574347999942, 43.981878973000093 ], [ -69.203643357999908, 43.970322984000163 ], [ -69.201649542999888, 43.959987697000045 ], [ -69.191395636999943, 43.952175197000159 ], [ -69.227040167999888, 43.935248114000089 ], [ -69.238514777999939, 43.931667385000097 ], [ -69.258005337999919, 43.92800527600015 ], [ -69.26341712099989, 43.929917710000112 ], [ -69.259632941999939, 43.955267645000148 ], [ -69.229237433999884, 43.990993557000181 ], [ -69.219471808999856, 44.008490302000112 ], [ -69.238514777999939, 44.007432359000077 ], [ -69.298858201999877, 43.950384833000086 ], [ -69.310536261999886, 43.94163646 ], [ -69.313750779999936, 43.954331773000078 ], [ -69.303171352999897, 43.981227932000039 ], [ -69.313954230999883, 43.986273505000085 ], [ -69.328317837999862, 43.983384507000139 ], [ -69.353301561999871, 43.972438869000158 ], [ -69.369496222999942, 43.972642320000134 ], [ -69.35326087099989, 43.994655666000043 ], [ -69.347157355999911, 44.00775788 ], [ -69.351796027999939, 44.013617255000142 ], [ -69.369414842999845, 44.015855210000112 ], [ -69.370147264999872, 44.021511135000125 ], [ -69.351796027999939, 44.037543036 ], [ -69.347279425999972, 44.050767320000048 ], [ -69.354196743999864, 44.060492255 ], [ -69.364287889999844, 44.060532945 ], [ -69.369496222999942, 44.044663804000052 ], [ -69.376576300999886, 44.036729234000106 ], [ -69.390980597999942, 44.031927802000027 ], [ -69.402211066999968, 44.02659739800005 ], [ -69.394886847999942, 44.002427476000136 ], [ -69.407704230999883, 43.994330145 ], [ -69.424265102999954, 43.991644598000121 ], [ -69.43036861899995, 43.993109442 ], [ -69.440907355999911, 43.981390692 ], [ -69.447783982999908, 43.967556057000095 ], [ -69.478789842999845, 43.880316473 ], [ -69.494130011999886, 43.851100979000151 ], [ -69.512928839999944, 43.834906317 ], [ -69.514352993999921, 43.85565827 ], [ -69.521677212999919, 43.870347398000021 ], [ -69.52989661399991, 43.883002020000063 ], [ -69.533965623999876, 43.897569078000103 ], [ -69.540231899999924, 43.897569078000103 ], [ -69.545440232999908, 43.883286851000108 ], [ -69.547596808999913, 43.867865302000084 ], [ -69.547637498999904, 43.834906317 ], [ -69.561268683999856, 43.849107164000102 ], [ -69.553822394999969, 43.856553453000103 ], [ -69.569081183999941, 43.86839427300005 ], [ -69.570505337999919, 43.877915757000054 ], [ -69.56541907499988, 43.886989651000064 ], [ -69.561268683999856, 43.897569078000103 ], [ -69.559803839999887, 43.904079494000186 ], [ -69.55492102799991, 43.915798244000158 ], [ -69.553822394999969, 43.920843817000033 ], [ -69.556019660999965, 43.927679755000113 ], [ -69.565378383999899, 43.934271552000027 ], [ -69.567494269999912, 43.94163646 ], [ -69.558867967999902, 43.964585679 ], [ -69.529042120999918, 44.004380601 ], [ -69.533965623999876, 44.021022854000037 ], [ -69.544870571999951, 44.011948960000112 ], [ -69.554066535999908, 43.998561916000128 ], [ -69.567494269999912, 43.972642320000134 ], [ -69.580555792999888, 43.957017320000048 ], [ -69.585804816999968, 43.948472398000106 ], [ -69.584584113999938, 43.94163646 ], [ -69.581817186999899, 43.934556382000139 ], [ -69.584217902999939, 43.92576732 ], [ -69.589304165999863, 43.917344468000024 ], [ -69.5947566399999, 43.911159572000045 ], [ -69.589344855999855, 43.904811916000128 ], [ -69.587513800999972, 43.897243557000152 ], [ -69.589304165999863, 43.889634507000139 ], [ -69.5947566399999, 43.883246161000116 ], [ -69.584828253999888, 43.87071360900002 ], [ -69.577910936999899, 43.85565827 ], [ -69.576039191999939, 43.83897532800016 ], [ -69.581166144999941, 43.821804104000037 ], [ -69.592396613999938, 43.807725328000103 ], [ -69.596140102999897, 43.815904039000102 ], [ -69.5947566399999, 43.849107164000102 ], [ -69.609893357999908, 43.839585679000109 ], [ -69.62446041599992, 43.838405666000185 ], [ -69.639637824999909, 43.84446849199999 ], [ -69.656931118999921, 43.856553453000103 ], [ -69.668894008999928, 43.867051499000141 ], [ -69.670114712999862, 43.873561916000071 ], [ -69.649403449999852, 43.897569078000103 ], [ -69.65379798099994, 43.904974677 ], [ -69.655018683999856, 43.910508531000019 ], [ -69.653431769999912, 43.916205145000092 ], [ -69.649403449999852, 43.924261786000116 ], [ -69.642445441999968, 43.921250718000024 ], [ -69.629343227999897, 43.919216213000183 ], [ -69.622792120999918, 43.917425848 ], [ -69.63121497299997, 43.929225979000151 ], [ -69.642689581999917, 43.933457749000084 ], [ -69.652617967999902, 43.938991604000122 ], [ -69.656931118999921, 43.955267645000148 ], [ -69.653675910999965, 43.967759507000054 ], [ -69.636423305999955, 44.003688869000044 ], [ -69.630116339999915, 44.00804271000014 ], [ -69.619170701999849, 44.017523505000142 ], [ -69.615101691999882, 44.025905666000099 ], [ -69.62958736899995, 44.027289130000085 ], [ -69.64317786399991, 44.020982164000046 ], [ -69.656971808999913, 44.009222723000065 ], [ -69.749704555999926, 43.900661526000178 ], [ -69.759226040999948, 43.886419989000089 ], [ -69.752674933999856, 43.879136460000055 ], [ -69.740264451999934, 43.874863999000141 ], [ -69.731963670999846, 43.869574286000088 ], [ -69.729725714999859, 43.855943101000136 ], [ -69.732655402999882, 43.84190501500008 ], [ -69.746286587999919, 43.814398505000057 ], [ -69.735869920999846, 43.820583401000121 ], [ -69.722401495999861, 43.844224351000051 ], [ -69.712147589999944, 43.849107164000102 ], [ -69.704701300999943, 43.842027085000055 ], [ -69.707264777999882, 43.826931057000039 ], [ -69.73074296799993, 43.775905666000071 ], [ -69.744984503999945, 43.75877513200011 ], [ -69.758005337999919, 43.759507554000052 ], [ -69.766794399999895, 43.787624416000043 ], [ -69.76622473899991, 43.794867255000057 ], [ -69.763620571999923, 43.798936265000023 ], [ -69.760690883999899, 43.801621812000107 ], [ -69.75926673099994, 43.804429429000052 ], [ -69.761463995999918, 43.811550197000102 ], [ -69.766306118999893, 43.813666083000115 ], [ -69.77118893099987, 43.813666083000115 ], [ -69.773548956999917, 43.814398505000057 ], [ -69.780384894999941, 43.862779039000046 ], [ -69.783640102999897, 43.873480536000088 ], [ -69.790720180999955, 43.886704820000105 ], [ -69.794056769999969, 43.897569078000103 ], [ -69.795277472999885, 43.910427151000036 ], [ -69.794870571999894, 43.922145901000121 ], [ -69.795684373999904, 43.933457749000084 ], [ -69.800892706999889, 43.944688218000081 ], [ -69.80337480399993, 43.964911200000117 ], [ -69.80728105399993, 43.983140367000019 ], [ -69.804676886999914, 43.997463283000073 ], [ -69.802072719999927, 44.014390367000075 ], [ -69.790353969999842, 44.02871328300013 ], [ -69.781239386999943, 44.03652578300013 ], [ -69.77082271999987, 44.045640367000132 ], [ -69.768218553999958, 44.053452867000132 ], [ -69.768218553999958, 44.058661200000031 ], [ -69.77472896999987, 44.059963283000016 ], [ -69.782541469999842, 44.057359117000104 ], [ -69.789051886999943, 44.049546617000132 ], [ -69.79946855399993, 44.04433828300013 ], [ -69.817697719999899, 44.03652578300013 ], [ -69.84504146999987, 44.010484117000075 ], [ -69.86457271999987, 43.997463283000073 ], [ -69.874989386999943, 43.98704661699999 ], [ -69.882801886999943, 43.976629950000088 ], [ -69.882801886999943, 43.963609117000104 ], [ -69.87238521999987, 43.958400783000016 ], [ -69.854156053999873, 43.958400783000016 ], [ -69.841135219999899, 43.966213283000016 ], [ -69.832020636999886, 43.974025783000016 ], [ -69.825510219999899, 43.970119533000016 ], [ -69.821603969999899, 43.961004950000031 ], [ -69.815093553999901, 43.933661200000145 ], [ -69.802235480999883, 43.860541083000058 ], [ -69.800892706999889, 43.825181382000054 ], [ -69.791940883999871, 43.791001695000077 ], [ -69.78250077999985, 43.772935289000046 ], [ -69.780384894999941, 43.763454494000044 ], [ -69.787302212999947, 43.737534898000135 ], [ -69.790638800999972, 43.733099677000055 ], [ -69.803171352999868, 43.729681708000058 ], [ -69.814239061999899, 43.721177476000108 ], [ -69.82286536399991, 43.70994700700011 ], [ -69.828155076999877, 43.69826894700013 ], [ -69.83930416599992, 43.709255276000178 ], [ -69.841826951999934, 43.740261135000097 ], [ -69.852080857999852, 43.746690171000026 ], [ -69.857899542999917, 43.754258531000161 ], [ -69.85838782499988, 43.770778713000041 ], [ -69.855498826999877, 43.793890692 ], [ -69.85179602799991, 43.800808010000097 ], [ -69.847035285999908, 43.803737697000102 ], [ -69.843006964999944, 43.807806708000086 ], [ -69.841257290999948, 43.818060614 ], [ -69.844593878999973, 43.826768296000083 ], [ -69.85960852799991, 43.836533921000026 ], [ -69.862985805999926, 43.845729885000097 ], [ -69.860218878999973, 43.856227932000152 ], [ -69.856190558999913, 43.862087307000095 ], [ -69.857126430999898, 43.865708726000079 ], [ -69.869130011999914, 43.869574286000088 ], [ -69.879261847999942, 43.87055084800015 ], [ -69.888539191999911, 43.868353583000058 ], [ -69.896839972999885, 43.86355215100015 ], [ -69.903920050999943, 43.856553453000103 ], [ -69.891713019999969, 43.851345119000101 ], [ -69.881337042999888, 43.844020901000093 ], [ -69.87535559799997, 43.832302151000093 ], [ -69.8760066399999, 43.814398505000057 ], [ -69.88300533799989, 43.800563869000044 ], [ -69.894764777999882, 43.789333401000064 ], [ -69.905629035999965, 43.78729889500012 ], [ -69.910145636999914, 43.801296291000156 ], [ -69.951120571999923, 43.760362046000139 ], [ -69.958200649999895, 43.756333726 ], [ -69.965280727999954, 43.75462474199999 ], [ -69.970692511999914, 43.751491604000094 ], [ -69.974354620999947, 43.734971421000026 ], [ -69.978505011999886, 43.729437567 ], [ -69.984852667999917, 43.726345119000129 ], [ -69.992665167999917, 43.725612697000187 ], [ -69.92629960799988, 43.828558661000059 ], [ -69.93065344999988, 43.849107164000102 ], [ -69.942128058999913, 43.841498114000089 ], [ -69.958363410999937, 43.821804104000037 ], [ -69.972767706999917, 43.799505927 ], [ -69.978993292999888, 43.783962307000095 ], [ -69.98294023299988, 43.767442124000027 ], [ -69.993438279999936, 43.751817124000027 ], [ -70.008900519999941, 43.741237697000159 ], [ -70.027455206999946, 43.739935614000089 ], [ -70.009470180999926, 43.766872463000041 ], [ -69.962635870999861, 43.821030992000104 ], [ -69.951120571999923, 43.849107164000102 ], [ -69.973093227999954, 43.847113348000065 ], [ -70.006377732999937, 43.827093817 ], [ -70.020008917999888, 43.828640041000043 ], [ -70.010853644999912, 43.833278713000155 ], [ -70.000681118999864, 43.84084707200013 ], [ -69.99168860599994, 43.850856838000098 ], [ -69.985829230999911, 43.862779039000046 ], [ -69.999379035999965, 43.861517645000148 ], [ -70.011748826999906, 43.85565827 ], [ -70.022328253999945, 43.847194729000151 ], [ -70.039580857999852, 43.830064195000105 ], [ -70.050038214999944, 43.823960679000137 ], [ -70.074655727999925, 43.814398505000057 ], [ -70.088002081999946, 43.811061916000128 ], [ -70.098907029999936, 43.809922593000081 ], [ -70.10883541599992, 43.806748765000023 ], [ -70.160878058999884, 43.766546942000119 ], [ -70.182606574999852, 43.757066148000106 ], [ -70.208688930999926, 43.715277411 ], [ -70.239125128999973, 43.700059312000022 ], [ -70.238474087999919, 43.687038479000122 ], [ -70.233754035999908, 43.673041083000058 ], [ -70.232289191999968, 43.664170640000023 ], [ -70.242949998999904, 43.653916734000077 ], [ -70.256703253999916, 43.650132554000052 ], [ -70.286854620999918, 43.65049876500008 ], [ -70.286854620999918, 43.643052476000022 ], [ -70.257761196999866, 43.640488999000084 ], [ -70.231556769999941, 43.641546942000147 ], [ -70.210886196999923, 43.63503652600015 ], [ -70.198109503999973, 43.609564520000148 ], [ -70.198231574999937, 43.598659572000159 ], [ -70.202870245999861, 43.56761302300005 ], [ -70.204945441999882, 43.561143296000139 ], [ -70.220244920999846, 43.559068101000136 ], [ -70.245838995999918, 43.549790757 ], [ -70.260202602999897, 43.547471421000026 ], [ -70.255889451999906, 43.554388739000117 ], [ -70.252715623999933, 43.561143296000139 ], [ -70.271514451999877, 43.556911526000036 ], [ -70.292591925999915, 43.534531968000024 ], [ -70.307972785999937, 43.526963609000163 ], [ -70.310536261999857, 43.548366604000122 ], [ -70.325428839999915, 43.549546617000047 ], [ -70.343739386999886, 43.539496161000059 ], [ -70.356434699999937, 43.526963609000163 ], [ -70.36738033799989, 43.505316473000065 ], [ -70.370716925999915, 43.486354885000154 ], [ -70.368397589999859, 43.467230536 ], [ -70.362578904999907, 43.445054429000109 ], [ -70.343210415999891, 43.454291083 ], [ -70.332793748999904, 43.457546291000043 ], [ -70.32164466099988, 43.458726304000052 ], [ -70.32164466099988, 43.45250071800011 ], [ -70.335235154999936, 43.447292385000097 ], [ -70.346913214999944, 43.439439195000105 ], [ -70.366403774999924, 43.420843817000119 ], [ -70.369496222999913, 43.415513414000074 ], [ -70.373524542999888, 43.401882229000122 ], [ -70.37625077999985, 43.397243557000181 ], [ -70.382435675999915, 43.393744208 ], [ -70.395049607999908, 43.392604885000154 ], [ -70.403553839999915, 43.389837958 ], [ -70.422596808999913, 43.376898505 ], [ -70.437692837999919, 43.362982489000117 ], [ -70.454457160999937, 43.350612697000159 ], [ -70.478708462999919, 43.342637437000022 ], [ -70.508737758999899, 43.341498114 ], [ -70.519520636999886, 43.339544989000146 ], [ -70.530506964999944, 43.331773179000137 ], [ -70.56187903599988, 43.301052151000064 ], [ -70.570546027999882, 43.298488674000126 ], [ -70.581654425999915, 43.274888414000102 ], [ -70.583119269999969, 43.250881252000156 ], [ -70.568918423999946, 43.228989976000108 ], [ -70.583607550999943, 43.213934637000094 ], [ -70.596791144999912, 43.195461330000072 ], [ -70.582590298999889, 43.188625393000066 ], [ -70.599517381999874, 43.182237046000139 ], [ -70.611724412999934, 43.173000393000095 ], [ -70.630970831999889, 43.147080796000083 ], [ -70.660145636999943, 43.094142971000124 ], [ -70.671945766999926, 43.085598049000012 ], [ -70.687123175999915, 43.092149156000104 ], [ -70.700306769999941, 43.108465887000122 ], [ -70.714670376999919, 43.121934312000107 ], [ -70.733387824999909, 43.120428778000147 ], [ -70.731271938999981, 43.114650783000073 ], [ -70.742339647999927, 43.087958075000145 ], [ -70.744089321999923, 43.083807684000035 ], [ -70.75450598899991, 43.058986721000068 ], [ -70.732492641999897, 43.063299872000172 ], [ -70.709543423999918, 43.065171617000047 ], [ -70.704213019999941, 43.058905341000084 ], [ -70.708485480999855, 43.045233466000141 ], [ -70.715891079999949, 43.032171942000062 ], [ -70.719715949999852, 43.02757396000014 ], [ -70.728382941999939, 43.011297919000114 ], [ -70.781809048999889, 42.94912344 ], [ -70.803293423999918, 42.913885809000064 ], [ -70.811879035999937, 42.893133856000148 ], [ -70.814279751999976, 42.877305406000019 ], [ -70.815337693999936, 42.870266018000123 ], [ -70.80724036399991, 42.83494700700011 ], [ -70.809152798999946, 42.826239325000031 ], [ -70.818267381999959, 42.823919989000061 ], [ -70.863758917999917, 42.826239325000031 ], [ -70.853627081999974, 42.816961981000176 ], [ -70.844146287999962, 42.811997789000131 ], [ -70.822743292999917, 42.804429429 ], [ -70.820220506999902, 42.804348049000012 ], [ -70.812652147999955, 42.805243231000091 ], [ -70.809152798999946, 42.804429429 ], [ -70.805775519999941, 42.801255601000108 ], [ -70.800770636999914, 42.792547919000029 ], [ -70.804351365999963, 42.780381578000132 ], [ -70.775095180999926, 42.716335354000151 ], [ -70.7826228509999, 42.708929755000085 ], [ -70.812408006999902, 42.74213288 ], [ -70.823597785999908, 42.749863999000112 ], [ -70.819610154999936, 42.718736070000105 ], [ -70.798451300999943, 42.701890367000104 ], [ -70.7416072259999, 42.68162669500002 ], [ -70.757110154999907, 42.675482489000117 ], [ -70.765288865999906, 42.674302476 ], [ -70.775095180999926, 42.674790757 ], [ -70.757110154999907, 42.657212632000054 ], [ -70.701324022999927, 42.653306382000054 ], [ -70.700062628999916, 42.64061107 ], [ -70.68228105399993, 42.632188218000138 ], [ -70.677683071999894, 42.641343492000104 ], [ -70.679554816999939, 42.667954820000077 ], [ -70.671416795999932, 42.677110093000138 ], [ -70.658965623999904, 42.68431224199999 ], [ -70.631743943999908, 42.694606838000098 ], [ -70.633656378999973, 42.680039781000161 ], [ -70.629912889999844, 42.67206452 ], [ -70.621245897999955, 42.66868724199999 ], [ -70.607858852999954, 42.667954820000077 ], [ -70.598052537999905, 42.664984442000147 ], [ -70.599395311999899, 42.657700914000046 ], [ -70.602202928999958, 42.648667710000112 ], [ -70.597035285999937, 42.64061107 ], [ -70.597035285999937, 42.634466864000032 ], [ -70.611480272999898, 42.634507554000024 ], [ -70.618438279999907, 42.628851630000113 ], [ -70.623443162999934, 42.620469468000138 ], [ -70.631743943999908, 42.612738348000121 ], [ -70.642486131999931, 42.60667552300005 ], [ -70.647328253999916, 42.604518947000045 ], [ -70.665882941999911, 42.606472072000187 ], [ -70.666940883999871, 42.608506578000018 ], [ -70.669097459999875, 42.611680406000076 ], [ -70.674753383999956, 42.612290757000054 ], [ -70.686390753999973, 42.606472072000187 ], [ -70.695668097999913, 42.597398179 ], [ -70.701324022999927, 42.588568427000141 ], [ -70.708892381999959, 42.581813869000101 ], [ -70.81029212099989, 42.562811591000084 ], [ -70.861398891999869, 42.546942450000145 ], [ -70.878000454999921, 42.537543036000145 ], [ -70.87059485599994, 42.530707098000121 ], [ -70.878895636999914, 42.525946356000034 ], [ -70.88512122299997, 42.519964911000031 ], [ -70.889312303999901, 42.512274481000091 ], [ -70.891672329999949, 42.502752997000087 ], [ -70.877797003999973, 42.507879950000117 ], [ -70.864328579999892, 42.518296617000019 ], [ -70.854115363999938, 42.523667710000055 ], [ -70.850087042999888, 42.513657945000077 ], [ -70.840321417999945, 42.504868882000025 ], [ -70.838205532999922, 42.499172268000123 ], [ -70.846750454999949, 42.496568101000108 ], [ -70.855295376999976, 42.495062567000062 ], [ -70.860747850999928, 42.491359768000123 ], [ -70.865223761999886, 42.486883856000148 ], [ -70.88512122299997, 42.472845770000035 ], [ -70.891672329999949, 42.469305731000034 ], [ -70.89940344999988, 42.468166408000101 ], [ -70.91551673099994, 42.469427802000027 ], [ -70.92210852799991, 42.465562242000104 ], [ -70.925404425999943, 42.453192450000145 ], [ -70.91755123599998, 42.442775783000073 ], [ -70.904286261999943, 42.434393622000115 ], [ -70.891672329999949, 42.428290106000034 ], [ -70.916371222999942, 42.422430731000176 ], [ -70.943674282999922, 42.446966864 ], [ -70.963042772999955, 42.438299872000115 ], [ -70.973378058999856, 42.425116278000147 ], [ -70.974354620999918, 42.416449286000059 ], [ -70.966175910999908, 42.400376695 ], [ -70.963042772999955, 42.378363348000093 ], [ -70.96031653599988, 42.369045315000122 ], [ -70.95250403599988, 42.359442450000145 ], [ -70.96727454299986, 42.360744533000158 ], [ -70.983631964999887, 42.376613674000097 ], [ -70.997181769999941, 42.380560614000061 ], [ -71.007232225999928, 42.37759023600016 ], [ -71.005848761999943, 42.370794989000117 ], [ -70.997670050999943, 42.363674221000068 ], [ -70.987212693999936, 42.359442450000145 ], [ -71.006011522999898, 42.357123114 ], [ -71.022694464999944, 42.366644598 ], [ -71.036854620999861, 42.37246328300013 ], [ -71.048695441999911, 42.359442450000145 ], [ -71.037424282999922, 42.357001044000029 ], [ -71.027699347999885, 42.353583075000117 ], [ -71.02000891799986, 42.347967841000028 ], [ -71.014556443999936, 42.338934637000094 ], [ -71.029855923999975, 42.337836005000057 ], [ -71.042307094999899, 42.331773179000052 ], [ -71.046783006999959, 42.321519273000135 ], [ -71.038441535999908, 42.307928778000175 ], [ -71.027211066999911, 42.300482489 ], [ -71.017811652999882, 42.300197658000073 ], [ -70.993478969999899, 42.310980536000088 ], [ -70.998890753999945, 42.283758856000176 ], [ -70.983509894999912, 42.279608466000028 ], [ -70.962880011999886, 42.280218817 ], [ -70.95250403599988, 42.267238674000012 ], [ -70.955311652999939, 42.261786200000145 ], [ -70.966175910999908, 42.25381094 ], [ -70.966175910999908, 42.249579169000086 ], [ -70.961781378999945, 42.246242580000157 ], [ -70.955311652999939, 42.243312893000123 ], [ -70.949533657999979, 42.242824611000131 ], [ -70.946888800999886, 42.246486721000011 ], [ -70.940500454999949, 42.24599844 ], [ -70.925770636999886, 42.250392971000011 ], [ -70.909535285999937, 42.257228908000016 ], [ -70.898508266999897, 42.263861395000092 ], [ -70.887196417999888, 42.250555731000148 ], [ -70.875396287999934, 42.254461981000148 ], [ -70.867339647999898, 42.264837958000058 ], [ -70.867095506999959, 42.270656643 ], [ -70.880116339999944, 42.276678778000118 ], [ -70.891916469999899, 42.290716864000061 ], [ -70.899077928999958, 42.306586005 ], [ -70.898508266999897, 42.318426825000145 ], [ -70.85578365799995, 42.283921617000047 ], [ -70.831410285999908, 42.269680080000128 ], [ -70.783802863999938, 42.25967031500015 ], [ -70.761586066999968, 42.249212958000058 ], [ -70.741810675999943, 42.23566315300009 ], [ -70.716297980999855, 42.211859442000033 ], [ -70.713734503999945, 42.205145575000145 ], [ -70.71349036399991, 42.175360419000143 ], [ -70.713124152999882, 42.172430731000034 ], [ -70.70836341099988, 42.172186591000084 ], [ -70.695871548999975, 42.163885809000121 ], [ -70.67821204299986, 42.144110419000086 ], [ -70.652984178999901, 42.109035549000012 ], [ -70.630970831999889, 42.092515367000132 ], [ -70.6361384759999, 42.075425523 ], [ -70.627756313999924, 42.059149481000148 ], [ -70.597564256999931, 42.023098049000012 ], [ -70.592193162999962, 42.020086981000091 ], [ -70.59080969999988, 42.017320054000137 ], [ -70.596791144999912, 42.01064687700007 ], [ -70.606760219999899, 42.004584052 ], [ -70.617298956999946, 42.00324127800009 ], [ -70.627919074999909, 42.005560614000061 ], [ -70.637806769999912, 42.01064687700007 ], [ -70.632883266999869, 42.012111721000124 ], [ -70.623605923999889, 42.016058661000116 ], [ -70.617298956999946, 42.016791083000058 ], [ -70.629302537999877, 42.044338283000073 ], [ -70.638905402999853, 42.058905341000113 ], [ -70.648345506999874, 42.065252997000059 ], [ -70.655751105999855, 42.058010158000016 ], [ -70.665109829999892, 42.01064687700007 ], [ -70.675038214999887, 42.014715887000037 ], [ -70.682850714999887, 42.016058661000116 ], [ -70.690337693999965, 42.014715887000037 ], [ -70.714833136999886, 42.002671617000132 ], [ -70.654937303999958, 41.957098700000174 ], [ -70.623687303999873, 41.955064195000048 ], [ -70.604969855999911, 41.952541408000044 ], [ -70.565825975999871, 41.95538971600017 ], [ -70.544992641999897, 41.940619208 ], [ -70.529652472999942, 41.90648021 ], [ -70.523915167999888, 41.868394273000021 ], [ -70.531646287999877, 41.841782945000048 ], [ -70.533111131999931, 41.816229559000149 ], [ -70.504261847999913, 41.790025132000139 ], [ -70.43919837099989, 41.756089585 ], [ -70.400868292999945, 41.745021877000156 ], [ -70.274728969999842, 41.736273505000085 ], [ -70.289865688999924, 41.731634833000058 ], [ -70.32648678299995, 41.731390692 ], [ -70.339507615999935, 41.725734768 ], [ -70.335194464999944, 41.719224351000108 ], [ -70.315256313999953, 41.715562242000075 ], [ -70.274728969999842, 41.715155341000141 ], [ -70.243723110999923, 41.724107164000188 ], [ -70.191314256999931, 41.747056382 ], [ -70.100819464999887, 41.765936591000113 ], [ -70.070241354999922, 41.773458363000103 ], [ -70.036447719999899, 41.785834052000027 ], [ -70.021473761999943, 41.790920315000122 ], [ -70.000111456999889, 41.81631094000015 ], [ -70.003845379999944, 41.84629625700002 ], [ -70.001820441999911, 41.88190338700015 ], [ -70.021473761999943, 41.906927802 ], [ -70.011586066999939, 41.906887111000103 ], [ -70.003163214999887, 41.908596096000011 ], [ -69.986683722999913, 41.913763739 ], [ -69.986683722999913, 41.921210028000175 ], [ -70.006011522999927, 41.922837632 ], [ -70.018666144999912, 41.930080471000124 ], [ -70.028146938999896, 41.937974351 ], [ -70.037912563999953, 41.941636460000055 ], [ -70.051828579999921, 41.935248114000117 ], [ -70.057362433999941, 41.904242255 ], [ -70.068674282999922, 41.893296617000047 ], [ -70.071840605999881, 41.927678962000115 ], [ -70.074490303999937, 41.947629265000117 ], [ -70.079790032999938, 41.995005957000032 ], [ -70.08378508699991, 42.012454048000123 ], [ -70.09985153, 42.037390252000122 ], [ -70.138096235999882, 42.057351722000178 ], [ -70.16561855899991, 42.063835382 ], [ -70.189793965999911, 42.04938290900013 ], [ -70.192128058999856, 42.037909247000172 ], [ -70.176665818999936, 42.037502346000068 ], [ -70.17162024599989, 42.037909247000172 ], [ -70.170807835999909, 42.027879022 ], [ -70.18927424799989, 42.017859987000051 ], [ -70.202556304999916, 42.026203178000159 ], [ -70.224615563999919, 42.050380918000101 ], [ -70.231350656999922, 42.05723842700003 ], [ -70.240090436999907, 42.059226541000115 ], [ -70.246819749999901, 42.061468091000151 ], [ -70.24431172199985, 42.068718454000177 ], [ -70.236596393999918, 42.075855142000094 ], [ -70.229376759999951, 42.080616148000118 ], [ -70.215764130999929, 42.084642532000103 ], [ -70.19221991, 42.086062010000049 ], [ -70.167661709999919, 42.082976925000153 ], [ -70.146466263999912, 42.081010900000095 ], [ -70.117863494999966, 42.073805360000065 ], [ -70.081197774999879, 42.058353658000115 ], [ -70.051123477999937, 42.039752634000095 ], [ -70.014011529999976, 41.998940519000044 ], [ -69.982167981999936, 41.953621164000097 ], [ -69.943255322999931, 41.857625261000081 ], [ -69.924672003999945, 41.838080145000035 ], [ -69.927723761999943, 41.834865627000156 ], [ -69.93101966099988, 41.832953192 ], [ -69.934681769999941, 41.832098700000088 ], [ -69.938872850999957, 41.831854559000149 ], [ -69.95335852799991, 41.84088776200015 ], [ -69.963961179999927, 41.843532877000158 ], [ -69.97203528599988, 41.839178778000147 ], [ -69.975738084999932, 41.810532945 ], [ -69.97984778599988, 41.79706452 ], [ -69.956654425999943, 41.807806708000115 ], [ -69.942005988999938, 41.806463934000035 ], [ -69.93423417899993, 41.792954820000048 ], [ -69.932525193999936, 41.741034247000172 ], [ -69.938872850999957, 41.674221096000124 ], [ -69.978138800999972, 41.681830145000063 ], [ -70.136870897999927, 41.660549221000011 ], [ -70.185292120999947, 41.660549221000011 ], [ -70.217355923999918, 41.648260809000035 ], [ -70.229644334999875, 41.646226304000109 ], [ -70.239898240999906, 41.643255927 ], [ -70.248524542999917, 41.635687567000062 ], [ -70.264149542999888, 41.616156317000062 ], [ -70.272775844999899, 41.610581773000078 ], [ -70.271229620999947, 41.621039130000142 ], [ -70.261057094999899, 41.646226304000109 ], [ -70.275990363999938, 41.644232489000089 ], [ -70.303049282999979, 41.634751695000077 ], [ -70.319081183999884, 41.632635809000149 ], [ -70.351958787999962, 41.635199286000059 ], [ -70.36587480399993, 41.632798570000105 ], [ -70.380848761999886, 41.622992255 ], [ -70.391590949999909, 41.619208075000145 ], [ -70.405873175999886, 41.63751862200003 ], [ -70.418080206999946, 41.64004140800013 ], [ -70.428374803999873, 41.631903387000037 ], [ -70.459095831999974, 41.591620184000149 ], [ -70.479847785999965, 41.573879299000154 ], [ -70.504261847999913, 41.563706773000106 ], [ -70.53270423099994, 41.559149481000148 ], [ -70.565825975999871, 41.558172919000086 ], [ -70.59605872299997, 41.55304596600017 ], [ -70.658681674999883, 41.521349108 ], [ -70.685617641999869, 41.530829169000029 ], [ -70.661732550999972, 41.550482489000061 ], [ -70.652495897999927, 41.57802969 ], [ -70.652007615999935, 41.654242255000057 ], [ -70.657093878999945, 41.670558986000074 ], [ -70.658273891999869, 41.68447500200007 ], [ -70.652007615999935, 41.693915106000176 ], [ -70.639963344999927, 41.702297268000123 ], [ -70.631906704999977, 41.71112702 ], [ -70.637806769999912, 41.721991278000175 ], [ -70.628163214999944, 41.728094794000171 ], [ -70.623605923999889, 41.729437567000062 ], [ -70.63060462099989, 41.740139065000093 ], [ -70.640004035999908, 41.74095286699999 ], [ -70.648182745999918, 41.734198309000149 ], [ -70.651437954999949, 41.721991278000175 ], [ -70.658273891999869, 41.721991278000175 ], [ -70.68980872299997, 41.739691473000093 ], [ -70.710438605999911, 41.748032945000048 ], [ -70.719715949999852, 41.746161200000088 ], [ -70.72329667899993, 41.71377187700007 ], [ -70.721913214999944, 41.701605536 ], [ -70.712880011999943, 41.687811591000084 ], [ -70.739328579999921, 41.690130927000055 ], [ -70.749094204999949, 41.679754950000145 ], [ -70.756092902999939, 41.663031317000119 ], [ -70.774322068999908, 41.646226304000109 ], [ -70.786040818999908, 41.660467841000028 ], [ -70.79784094999988, 41.658880927 ], [ -70.805734829999949, 41.651027736000017 ], [ -70.805734829999949, 41.646226304000109 ], [ -70.805002407999922, 41.642564195000077 ], [ -70.821115688999981, 41.634995835000112 ], [ -70.840565558999884, 41.628892320000134 ], [ -70.850087042999888, 41.629543361000074 ], [ -70.84398352799991, 41.603949286 ], [ -70.845204230999911, 41.592474677000055 ], [ -70.856922980999911, 41.591620184000149 ], [ -70.862904425999915, 41.597235419000143 ], [ -70.869984503999973, 41.615871486000131 ], [ -70.874256964999887, 41.622992255 ], [ -70.881011522999927, 41.627915757000054 ], [ -70.905384894999884, 41.64004140800013 ], [ -70.907338019999941, 41.614935614000061 ], [ -70.920969204999977, 41.598334052 ], [ -70.931630011999914, 41.580267645000092 ], [ -70.925160285999908, 41.550726630000113 ], [ -70.947621222999913, 41.536444403000118 ], [ -70.959706183999913, 41.531195380000142 ], [ -70.973622199999909, 41.530829169000029 ], [ -70.972238735999923, 41.535101630000113 ], [ -70.97093665299991, 41.537665106000034 ], [ -71.015451626999919, 41.512274481000119 ], [ -71.040150519999912, 41.50714752800009 ], [ -71.06981360599994, 41.517157294000086 ], [ -71.04946855399993, 41.523749091000141 ], [ -71.043853318999936, 41.536851304000109 ], [ -71.049305792999888, 41.551947333000115 ], [ -71.062367316999968, 41.564357815000065 ], [ -71.062123175999915, 41.543850002000013 ], [ -71.07371985599994, 41.538723049000097 ], [ -71.110747850999957, 41.543850002000013 ], [ -71.101551886999886, 41.528306382000025 ], [ -71.097157355999911, 41.523382880000142 ], [ -71.121896938999981, 41.513006903000061 ], [ -71.18590247299997, 41.46873607 ], [ -71.199126756999902, 41.492132880000085 ], [ -71.202015753999945, 41.502630927000141 ], [ -71.196400519999941, 41.513413804000052 ], [ -71.195668097999913, 41.520819403000033 ], [ -71.206939256999902, 41.558172919000086 ], [ -71.21051998599998, 41.602240302 ], [ -71.209706183999856, 41.626166083000058 ], [ -71.206939256999902, 41.646226304000109 ], [ -71.19395911399991, 41.676865953000018 ], [ -71.190256313999953, 41.685614325000088 ], [ -71.135568813999924, 41.755519924000041 ], [ -71.110747850999957, 41.79706452 ], [ -71.126047329999921, 41.792425848000093 ], [ -71.138091600999928, 41.779933986000074 ], [ -71.169545050999943, 41.73330312700007 ], [ -71.176258917999917, 41.726629950000117 ], [ -71.18590247299997, 41.721991278000175 ], [ -71.207997199999852, 41.729152736000017 ], [ -71.221058722999942, 41.731390692 ], [ -71.226877407999979, 41.725734768 ], [ -71.228993292999888, 41.720933335000112 ], [ -71.23684648299988, 41.709580796000139 ], [ -71.238392706999917, 41.70734284100017 ], [ -71.240549282999922, 41.69806549700003 ], [ -71.240223761999914, 41.684637762000037 ], [ -71.241037563999924, 41.681219794000029 ], [ -71.244862433999913, 41.680324611000017 ], [ -71.26040605399993, 41.65110911699999 ], [ -71.285715298999975, 41.659613348000036 ], [ -71.301828579999949, 41.659613348000036 ], [ -71.30882727799991, 41.670803127000127 ], [ -71.306752081999917, 41.684719143 ], [ -71.301503058999913, 41.702622789000159 ], [ -71.294056769999941, 41.720160223 ], [ -71.280913865999878, 41.741400458 ], [ -71.283029751999891, 41.748846747000144 ], [ -71.289702928999958, 41.754095770000148 ], [ -71.298817511999943, 41.756089585 ], [ -71.301991339999915, 41.751695054000109 ], [ -71.304432745999947, 41.730047919000029 ], [ -71.30882727799991, 41.721991278000175 ], [ -71.318186001999948, 41.72479889500012 ], [ -71.337066209999904, 41.73379140800013 ], [ -71.355620897999898, 41.746283270000063 ], [ -71.364003058999856, 41.759833075000031 ], [ -71.365589972999885, 41.777655341000084 ], [ -71.370350714999887, 41.79205963700015 ], [ -71.378814256999931, 41.80499909100017 ], [ -71.391346808999913, 41.818793036000088 ], [ -71.395008917999888, 41.805731512000094 ], [ -71.396311001999976, 41.783270575000088 ], [ -71.395090298999946, 41.759507554 ], [ -71.391346808999913, 41.742499091000028 ], [ -71.384755011999857, 41.735663153000118 ], [ -71.375599738999966, 41.730536200000088 ], [ -71.36750240799995, 41.723822333000058 ], [ -71.364003058999856, 41.712062893000066 ], [ -71.366851365999906, 41.703558661000145 ], [ -71.3802791009999, 41.683661200000145 ], [ -71.384429490999935, 41.674221096000124 ], [ -71.391468878999888, 41.683010158000016 ], [ -71.398426886999886, 41.689764716000056 ], [ -71.40689042899993, 41.693833726 ], [ -71.41860917899993, 41.694647528000118 ], [ -71.430246548999918, 41.691107489000117 ], [ -71.441639777999882, 41.684068101000051 ], [ -71.446766730999911, 41.677232164000046 ], [ -71.423329230999911, 41.66815827000012 ], [ -71.413807745999918, 41.652899481000148 ], [ -71.410267706999946, 41.632961330000072 ], [ -71.412464972999942, 41.612738348000065 ], [ -71.423695441999939, 41.594305731000034 ], [ -71.437367316999968, 41.58478424700003 ], [ -71.442779100999928, 41.574652411000088 ], [ -71.429514126999891, 41.554388739000061 ], [ -71.424631313999924, 41.538885809000149 ], [ -71.423410610999895, 41.486395575000088 ], [ -71.426096157999979, 41.46873607 ], [ -71.454791809999904, 41.406131900000148 ], [ -71.469618487999924, 41.391331281000149 ], [ -71.483957485999895, 41.379950262000037 ], [ -71.488270636999886, 41.370591539000102 ], [ -71.497710740999906, 41.366278387000094 ], [ -71.507801886999886, 41.36810944200009 ], [ -71.530384894999941, 41.376450914000046 ], [ -71.555828068999887, 41.374845528 ], [ -71.598884489999904, 41.367522493000095 ], [ -71.753814256999931, 41.331040757000054 ], [ -71.828972493999885, 41.316984425 ], [ -71.871474674999973, 41.302575088000154 ], [ -71.87791399799994, 41.311512218000033 ], [ -71.85653400399994, 41.322501385000137 ], [ -71.862375454999921, 41.332586981000091 ], [ -71.872141079999949, 41.339260158000158 ], [ -71.88536536399991, 41.344631252000013 ], [ -71.898060675999943, 41.346502997000172 ], [ -71.96324622299997, 41.345363674000126 ], [ -71.972889777999939, 41.343695380000113 ], [ -72.036244269999884, 41.317857164000102 ], [ -72.083404100999871, 41.352036851 ], [ -72.095122850999957, 41.346096096000068 ], [ -72.101144985999952, 41.322455145000148 ], [ -72.110707160999937, 41.311102606000148 ], [ -72.13540605399993, 41.312079169000143 ], [ -72.168039516999897, 41.322455145000148 ], [ -72.194325324999909, 41.323797919000029 ], [ -72.200062628999973, 41.297430731000034 ], [ -72.226918097999942, 41.310695705000157 ], [ -72.287953253999916, 41.282945054 ], [ -72.319894985999923, 41.293687242000104 ], [ -72.327015753999888, 41.298732815000122 ], [ -72.341053839999944, 41.30337148600016 ], [ -72.34715735599994, 41.307318427000141 ], [ -72.350412563999981, 41.314642645000148 ], [ -72.34780839799987, 41.321600653000033 ], [ -72.343983527999882, 41.329291083000058 ], [ -72.343413865999906, 41.338364976000051 ], [ -72.348378058999941, 41.348334052000055 ], [ -72.358225063999953, 41.357977606000119 ], [ -72.372710740999906, 41.364732164000074 ], [ -72.391835089999887, 41.366278387000094 ], [ -72.380197719999899, 41.350083726000051 ], [ -72.363636847999913, 41.336900132 ], [ -72.354359503999945, 41.321234442000119 ], [ -72.364572719999899, 41.297430731000034 ], [ -72.354888475999928, 41.291449286000116 ], [ -72.35090084499987, 41.289984442000062 ], [ -72.369781053999901, 41.27659739800005 ], [ -72.390777147999927, 41.277777411000088 ], [ -72.433461066999939, 41.289984442000062 ], [ -72.452626105999911, 41.28790924700003 ], [ -72.475087042999917, 41.281073309000121 ], [ -72.495269334999961, 41.270331122000115 ], [ -72.507923956999917, 41.256415106000034 ], [ -72.513335740999963, 41.261053778000147 ], [ -72.516916469999842, 41.262925523000106 ], [ -72.519520636999943, 41.264960028000147 ], [ -72.522206183999913, 41.270168361000131 ], [ -72.529652472999885, 41.270168361000131 ], [ -72.540638800999943, 41.263657945000048 ], [ -72.581898566999911, 41.27875397300015 ], [ -72.604807094999899, 41.283758856000091 ], [ -72.661773240999906, 41.274074611000131 ], [ -72.671050584999875, 41.267482815000065 ], [ -72.678781704999977, 41.26048411699999 ], [ -72.686675584999961, 41.256415106000034 ], [ -72.699330206999917, 41.25657786699999 ], [ -72.709095831999974, 41.260565497000144 ], [ -72.717884894999941, 41.26585521000014 ], [ -72.727650519999969, 41.270168361000131 ], [ -72.741322394999912, 41.272162177000084 ], [ -72.779449022999898, 41.270168361000131 ], [ -72.789784308999884, 41.267320054000024 ], [ -72.806019660999937, 41.257757880000113 ], [ -72.813343878999945, 41.259588934000092 ], [ -72.826511668999927, 41.256508012000083 ], [ -72.842892007999865, 41.258471221000079 ], [ -72.856066570999872, 41.245418825000129 ], [ -72.892426694999898, 41.244974743000071 ], [ -72.895725820999928, 41.255582446000162 ], [ -72.895253058999884, 41.26585521000014 ], [ -72.903146938999953, 41.277167059000121 ], [ -72.905832485999923, 41.300523179000109 ], [ -72.909982876999976, 41.305121161000059 ], [ -72.918934699999909, 41.298651434000149 ], [ -72.927357550999943, 41.288804429000137 ], [ -72.930043097999942, 41.283758856000091 ], [ -72.967274542999917, 41.256415106000034 ], [ -72.992909308999884, 41.228989976000079 ], [ -73.002023891999869, 41.221747137000065 ], [ -73.013827767999885, 41.206723785000023 ], [ -73.0384376129999, 41.205227028000181 ], [ -73.053537563999953, 41.211737372000144 ], [ -73.063710089999915, 41.204779364000089 ], [ -73.085519985999952, 41.197007554000081 ], [ -73.094471808999884, 41.191310940000093 ], [ -73.103749152999939, 41.180365302000112 ], [ -73.107411261999886, 41.174709377000127 ], [ -73.110591825999876, 41.161942588000116 ], [ -73.108485080999912, 41.148708693000074 ], [ -73.134237146999908, 41.147207262 ], [ -73.155086966999932, 41.158858700000124 ], [ -73.164338142999952, 41.165109096 ], [ -73.17010966299992, 41.169571071000163 ], [ -73.18406770099989, 41.174108750000173 ], [ -73.184277537999947, 41.161773039000124 ], [ -73.208914855999893, 41.156722824000056 ], [ -73.215809699999909, 41.163031317000119 ], [ -73.219105597999942, 41.166001695000048 ], [ -73.221099412999877, 41.167141018000095 ], [ -73.225168423999946, 41.163275458000086 ], [ -73.224232249999915, 41.149812032000156 ], [ -73.227855536999868, 41.142795121000077 ], [ -73.233800505999881, 41.136681440000146 ], [ -73.244462403999904, 41.127966256000079 ], [ -73.262127241999934, 41.120185131000099 ], [ -73.271521241999949, 41.117622037000118 ], [ -73.278338650999842, 41.130017491000061 ], [ -73.286452311999881, 41.134492373000043 ], [ -73.293648322999843, 41.123094779000056 ], [ -73.301933495999975, 41.116990281000156 ], [ -73.315993464999877, 41.115338998000041 ], [ -73.33238108499998, 41.113712437000018 ], [ -73.350026931999935, 41.106797636000138 ], [ -73.364068014999958, 41.106025200000019 ], [ -73.371937628999973, 41.101955471000068 ], [ -73.379750128999945, 41.100165106000176 ], [ -73.423736131999874, 41.077704169000086 ], [ -73.437611456999974, 41.073065497000144 ], [ -73.474598761999914, 41.054754950000088 ], [ -73.485218878999945, 41.053859768 ], [ -73.504198604999942, 41.042567679000157 ], [ -73.523211028999896, 41.021490678000177 ], [ -73.537123985999898, 41.031278356000158 ], [ -73.546701626999919, 41.028876044000086 ], [ -73.564849412999934, 41.018947658000073 ], [ -73.589993528999884, 41.01479138100008 ], [ -73.596875070999943, 41.023670370000119 ], [ -73.603923338999948, 41.022815711000121 ], [ -73.611147364999908, 41.01133620500012 ], [ -73.619367333999975, 41.008738009000169 ], [ -73.634581963999921, 41.007055073000103 ], [ -73.641700113999946, 41.001773909000022 ], [ -73.650257941999968, 40.996568101000051 ], [ -73.64801998599998, 40.99209219 ], [ -73.653146938999896, 40.982123114 ], [ -73.674387173999975, 40.958807684000092 ], [ -73.676991339999887, 40.954779364000117 ], [ -73.698719855999855, 40.954779364000117 ], [ -73.710764126999948, 40.953029690000122 ], [ -73.720366990999935, 40.947007554000137 ], [ -73.764393683999856, 40.910101630000085 ], [ -73.777414516999841, 40.894110419000171 ], [ -73.782826300999886, 40.87604401200015 ], [ -73.788156704999949, 40.871771552000141 ], [ -73.799916144999912, 40.872259833000115 ], [ -73.811675584999904, 40.871039130000113 ], [ -73.816965298999975, 40.862005927 ], [ -73.819910300999936, 40.839129802000016 ], [ -73.805058856999921, 40.826147183 ], [ -73.797685063999978, 40.813193685000087 ], [ -73.829728052999911, 40.810897622000184 ], [ -73.866027933999931, 40.811837517000143 ], [ -73.893832631999942, 40.803853362000055 ], [ -73.926828579999949, 40.804795640000137 ], [ -73.932281053999901, 40.81777578300013 ], [ -73.932281053999901, 40.82558828300013 ], [ -73.925770636999914, 40.836004950000117 ], [ -73.915353969999899, 40.856838283000101 ], [ -73.90884355399993, 40.868557033000073 ], [ -73.912749803999901, 40.881577867000075 ], [ -73.921864386999914, 40.886786200000145 ], [ -73.898019985999923, 40.930487372000144 ], [ -73.889475063999896, 40.972154039000102 ], [ -73.875396287999962, 41.013332424000069 ], [ -73.872181769999912, 41.033636786000088 ], [ -73.871571417999945, 41.115545966000028 ], [ -73.875314907999979, 41.153265692 ], [ -73.885894334999932, 41.187567450000145 ], [ -73.895741339999859, 41.20319245000006 ], [ -73.907582160999908, 41.213364976 ], [ -73.940500454999892, 41.235988674000154 ], [ -73.957020636999886, 41.257757880000113 ], [ -73.953480597999885, 41.27472565300009 ], [ -73.945139126999919, 41.291001695000105 ], [ -73.947336391999897, 41.311102606000148 ], [ -73.965972459999904, 41.300116278000118 ], [ -73.97594153599988, 41.292181708000143 ], [ -73.982045050999972, 41.283758856000091 ], [ -73.98497473899991, 41.269598700000174 ], [ -73.982167120999947, 41.26113515800013 ], [ -73.977609829999892, 41.252875067000147 ], [ -73.970204230999911, 41.21906159100017 ], [ -73.963069279999843, 41.205698739000027 ], [ -73.952279859999919, 41.18929388700009 ], [ -73.932320866999902, 41.178269018000137 ], [ -73.917876756999931, 41.163519598000121 ], [ -73.916656053999901, 41.145697333000143 ], [ -73.920643683999884, 41.101955471000068 ], [ -73.906361456999889, 41.016262111000103 ], [ -73.907134568999908, 40.990790106000091 ], [ -73.907704230999883, 40.971869208000086 ], [ -73.918080206999974, 40.931463934000035 ], [ -73.954741990999906, 40.858587958 ], [ -73.991915736999914, 40.798459889000029 ], [ -74.006252545999899, 40.780613916000121 ], [ -74.014310803999876, 40.765843350000139 ], [ -74.018633012999913, 40.751682691000084 ], [ -74.020926850999899, 40.74205104900004 ], [ -74.028028207999853, 40.727857259000146 ], [ -74.031929412999972, 40.71418089700002 ], [ -74.048085089999887, 40.70062897300015 ], [ -74.071034308999884, 40.687201239000061 ], [ -74.089344855999855, 40.669256903000118 ], [ -74.096005799999944, 40.654757927000119 ], [ -74.110659702999982, 40.650361898000099 ], [ -74.131022201999912, 40.645176895000176 ], [ -74.142085422999912, 40.646322963000145 ], [ -74.138991247999883, 40.657847673000148 ], [ -74.105567969999953, 40.705192639000089 ], [ -74.112435420999901, 40.717893467000167 ], [ -74.126016755999899, 40.703170392000104 ], [ -74.133317875999865, 40.691238053000021 ], [ -74.142191382999897, 40.676120917000148 ], [ -74.150018138999911, 40.66418304800014 ], [ -74.16075598899991, 40.662461656000076 ], [ -74.17906653599988, 40.653509833000058 ], [ -74.19032065899998, 40.64938391200009 ], [ -74.209646772999861, 40.634230638000147 ], [ -74.215286196999898, 40.59165780700009 ], [ -74.221669074999909, 40.572088934000092 ], [ -74.233016929999877, 40.566537389000032 ], [ -74.249043802999978, 40.562974599000128 ], [ -74.260487582999957, 40.551819592000143 ], [ -74.259877644999932, 40.536731426000173 ], [ -74.263930321999879, 40.513289788000023 ], [ -74.269649527999945, 40.504920293000126 ], [ -74.282687445999841, 40.497318766000106 ], [ -74.269549955999878, 40.483058603000146 ], [ -74.256337042999888, 40.460028387000037 ], [ -74.221913214999859, 40.451890367000104 ], [ -74.205922003999973, 40.442938544000086 ], [ -74.197132941999911, 40.440863348000065 ], [ -74.145904100999957, 40.447699286000088 ], [ -74.119943813999953, 40.445257880000142 ], [ -74.032338019999941, 40.421616929000109 ], [ -73.992990688999953, 40.402411200000145 ], [ -73.988008610999913, 40.407833631000088 ], [ -73.995310921999902, 40.421852665000173 ], [ -73.998199022999927, 40.441107489 ], [ -74.018218553999901, 40.480536200000174 ], [ -73.989572719999842, 40.468207098000121 ], [ -73.97915605399993, 40.449286200000117 ], [ -73.975701151999885, 40.429270343 ], [ -73.970929989999917, 40.394748808000045 ], [ -73.972393743999902, 40.32765030000003 ], [ -73.979888019999919, 40.280157751000147 ], [ -73.992054816999968, 40.226874091000084 ], [ -74.010751982999949, 40.16755553000003 ], [ -74.018224365999856, 40.140894452000154 ], [ -74.025605695999872, 40.111030098000143 ], [ -74.030559571999873, 40.079340938000186 ], [ -74.036719425999905, 40.048585416 ], [ -74.040410622999872, 40.028078116000174 ], [ -74.046561585999967, 39.997336800000184 ], [ -74.058819376999878, 39.954516313000155 ], [ -74.062501720999904, 39.933095818000155 ], [ -74.067424091999953, 39.903305242000059 ], [ -74.072339591999878, 39.875379288000047 ], [ -74.093012632999915, 39.776337060000131 ], [ -74.100438434999887, 39.783232835000135 ], [ -74.080739697999917, 39.922878770000082 ], [ -74.072174928999942, 39.972990828 ], [ -74.066041948999896, 39.992554936000133 ], [ -74.05746527699992, 40.012122391000091 ], [ -74.051325299999945, 40.035393950000085 ], [ -74.050282355999883, 40.054999091000141 ], [ -74.06069902299987, 40.062160549000012 ], [ -74.080480269999953, 40.051265493000145 ], [ -74.078066071999842, 40.043810869000097 ], [ -74.067121821999905, 40.041934725000104 ], [ -74.06350300299988, 40.030751857000055 ], [ -74.075681355999905, 40.025177181000132 ], [ -74.08301557, 40.011209643000043 ], [ -74.103685518999981, 40.014023988000034 ], [ -74.109486456999889, 40.002834377000127 ], [ -74.12205969999988, 39.997300523000106 ], [ -74.126088019999941, 39.981594143000152 ], [ -74.105824347999942, 39.985541083000143 ], [ -74.102284308999856, 39.970933335000112 ], [ -74.112375454999921, 39.949693101000136 ], [ -74.132883266999869, 39.933783270000035 ], [ -74.113608745999898, 39.931076346000125 ], [ -74.10999225899991, 39.92174081800006 ], [ -74.127042612999873, 39.905893387000063 ], [ -74.136799836999927, 39.890967340000188 ], [ -74.131991183999872, 39.87229385000002 ], [ -74.125884568999879, 39.855617580000015 ], [ -74.12726803299995, 39.848456122000144 ], [ -74.145904100999957, 39.830755927000055 ], [ -74.165865231999874, 39.80656409 ], [ -74.186518894999921, 39.772110756000032 ], [ -74.190196861999937, 39.744163243000017 ], [ -74.163319464999915, 39.735174872000172 ], [ -74.161139800999877, 39.720868789000164 ], [ -74.166013727999911, 39.704098069000125 ], [ -74.167551235999952, 39.699367580000157 ], [ -74.181779425999906, 39.691988520000152 ], [ -74.198762344999892, 39.676139540000108 ], [ -74.210908821999936, 39.650965306000117 ], [ -74.243622470999952, 39.643485902000165 ], [ -74.252114890999877, 39.631354767000161 ], [ -74.24754798099994, 39.621405341000113 ], [ -74.256418423999975, 39.61163971600017 ], [ -74.276367305999969, 39.607072361000078 ], [ -74.290905097999968, 39.605187201000078 ], [ -74.306666225999919, 39.594895349000112 ], [ -74.328490899999878, 39.576184835000092 ], [ -74.329709796999907, 39.562177996000131 ], [ -74.303537563999981, 39.54165273600016 ], [ -74.290191209999961, 39.523138739000146 ], [ -74.297352667999917, 39.508612372000115 ], [ -74.31090247299997, 39.506659247000144 ], [ -74.316273566999939, 39.514553127000127 ], [ -74.318186001999891, 39.524644273000021 ], [ -74.32127844999988, 39.529730536000116 ], [ -74.3587947259999, 39.550197658000073 ], [ -74.373646613999938, 39.543443101000051 ], [ -74.386789516999897, 39.544419664000131 ], [ -74.398019985999923, 39.550034898000106 ], [ -74.40721594999988, 39.557033596000011 ], [ -74.406483527999853, 39.520086981000148 ], [ -74.401275193999965, 39.502427476000136 ], [ -74.389271613999938, 39.494940497000172 ], [ -74.380116339999859, 39.487494208 ], [ -74.383697068999936, 39.471096096000096 ], [ -74.396351691999911, 39.447170315000122 ], [ -74.411244269999941, 39.450181382000139 ], [ -74.422108527999939, 39.455145575000174 ], [ -74.432972785999908, 39.456203518000123 ], [ -74.448150193999908, 39.447170315000122 ], [ -74.454904751999948, 39.439032294000114 ], [ -74.462066209999904, 39.426418361000131 ], [ -74.467518683999913, 39.412095445000048 ], [ -74.468658006999959, 39.399359442 ], [ -74.450306769999912, 39.406439520000148 ], [ -74.434396938999896, 39.395005601000022 ], [ -74.421783006999902, 39.375230210000083 ], [ -74.413441535999937, 39.357123114000061 ], [ -74.444406704999977, 39.347113348000093 ], [ -74.502837693999936, 39.318182684000178 ], [ -74.530140753999945, 39.310614325000031 ], [ -74.530140753999945, 39.316229559000035 ], [ -74.521107550999915, 39.330389716000141 ], [ -74.508859829999949, 39.343451239000117 ], [ -74.481760219999842, 39.364650783000044 ], [ -74.509632941999882, 39.378851630000142 ], [ -74.542347785999908, 39.347316799000126 ], [ -74.555246548999918, 39.32929108300003 ], [ -74.550648566999882, 39.316229559000035 ], [ -74.550648566999882, 39.310614325000031 ], [ -74.614491339999915, 39.312404690000037 ], [ -74.64207923099994, 39.306708075000031 ], [ -74.660471157999979, 39.289496161000116 ], [ -74.642567511999914, 39.289007880000113 ], [ -74.629505988999938, 39.284369208 ], [ -74.61815344999988, 39.278753973 ], [ -74.605213995999861, 39.275213934000121 ], [ -74.550648566999882, 39.289496161000116 ], [ -74.550648566999882, 39.282660223 ], [ -74.578968878999945, 39.267767645000148 ], [ -74.620838995999947, 39.223211981000148 ], [ -74.643055792999917, 39.213812567000119 ], [ -74.654367641999897, 39.201361395000035 ], [ -74.701486782999979, 39.124416408000016 ], [ -74.711822068999879, 39.1310082050001 ], [ -74.722808397999955, 39.13182200700011 ], [ -74.733265753999916, 39.127427476000108 ], [ -74.74242102799991, 39.118150132000082 ], [ -74.737538214999944, 39.117743231000148 ], [ -74.736724412999934, 39.116766669000086 ], [ -74.736968553999873, 39.114691473000065 ], [ -74.735585089999887, 39.111395575000031 ], [ -74.725249803999873, 39.115952867000161 ], [ -74.716379360999923, 39.114935614000117 ], [ -74.710194464999859, 39.10879140800013 ], [ -74.708322719999899, 39.097723700000088 ], [ -74.713734503999945, 39.091131903000033 ], [ -74.737172003999916, 39.070257880000057 ], [ -74.745716925999943, 39.054510809000092 ], [ -74.753814256999874, 39.048773505000113 ], [ -74.764068162999905, 39.044256903000175 ], [ -74.788075324999852, 39.03904857 ], [ -74.78937740799995, 39.03119538 ], [ -74.785267706999889, 39.022040106000119 ], [ -74.783355272999927, 39.015122789000102 ], [ -74.803293423999918, 38.987616278000175 ], [ -74.836089647999927, 38.963446356000176 ], [ -74.875111456999889, 38.944525458000058 ], [ -74.933094855999883, 38.926336981000148 ], [ -74.944243943999908, 38.924383856000119 ], [ -74.954701300999886, 38.926418361000131 ], [ -74.967640753999888, 38.935777085000083 ], [ -74.969333779999914, 38.945996873000027 ], [ -74.9651503179999, 38.957010710000063 ], [ -74.961798332999933, 38.969322707000103 ], [ -74.956768190999924, 38.98811157400003 ], [ -74.952566038999862, 39.007548164000085 ], [ -74.94432532499988, 39.02472565300009 ], [ -74.894439256999931, 39.107611395 ], [ -74.887277798999889, 39.146795966000141 ], [ -74.906320766999869, 39.179632880000142 ], [ -74.922230597999885, 39.188544012000179 ], [ -74.938588019999912, 39.192531643000152 ], [ -74.978871222999885, 39.193304755000085 ], [ -74.986439581999946, 39.192328192 ], [ -75.003732876999919, 39.188055731000091 ], [ -75.01305091099988, 39.187079169000029 ], [ -75.022206183999856, 39.189276434000121 ], [ -75.023426886999886, 39.194891669000114 ], [ -75.0228572259999, 39.202460028000147 ], [ -75.026682094999927, 39.210679429000052 ], [ -75.040272589999887, 39.214544989000061 ], [ -75.061146613999938, 39.213527736000103 ], [ -75.092437303999901, 39.207586981000176 ], [ -75.106597459999932, 39.200140692 ], [ -75.117176886999886, 39.192816473000093 ], [ -75.128895636999886, 39.187689520000092 ], [ -75.146473761999914, 39.187079169000029 ], [ -75.145008917999945, 39.191473700000088 ], [ -75.159331834999932, 39.19863515800013 ], [ -75.166981574999852, 39.207586981000176 ], [ -75.168812628999916, 39.216009833000115 ], [ -75.165638800999972, 39.228338934000149 ], [ -75.166981574999852, 39.23427969 ], [ -75.175770636999914, 39.242010809000092 ], [ -75.211659308999913, 39.264349677000141 ], [ -75.225941535999908, 39.268988348000065 ], [ -75.234201626999891, 39.273382880000142 ], [ -75.242095506999874, 39.292629299000097 ], [ -75.249501105999855, 39.296942450000088 ], [ -75.287424282999979, 39.296942450000088 ], [ -75.303618943999936, 39.303290106000034 ], [ -75.313221808999913, 39.317816473000065 ], [ -75.320912238999938, 39.333685614 ], [ -75.331410285999908, 39.344142971000068 ], [ -75.340565558999884, 39.345038153000147 ], [ -75.348215298999918, 39.342027085000055 ], [ -75.35448157499988, 39.338568427000055 ], [ -75.359364386999943, 39.337876695000105 ], [ -75.367176886999914, 39.34259674700003 ], [ -75.371937628999916, 39.34772370000006 ], [ -75.375559048999889, 39.352728583000086 ], [ -75.477650519999941, 39.440863348000093 ], [ -75.508168097999885, 39.45734284100017 ], [ -75.53160559799997, 39.477972723 ], [ -75.541330532999922, 39.50885651200015 ], [ -75.537342902999853, 39.503159898000078 ], [ -75.531646287999962, 39.498480536000059 ], [ -75.523833787999877, 39.494940497000172 ], [ -75.521555141999897, 39.514105536000145 ], [ -75.510406053999873, 39.559637762000094 ], [ -75.513661261999914, 39.573797919000029 ], [ -75.54747473899991, 39.601060289000102 ], [ -75.558216925999915, 39.613470770000148 ], [ -75.557443813999896, 39.621242580000128 ], [ -75.53538977799991, 39.638902085000055 ], [ -75.516509568999965, 39.64777252800009 ], [ -75.510243292999917, 39.65265534100017 ], [ -75.507150844999842, 39.662298895000148 ], [ -75.504994269999941, 39.676011460000083 ], [ -75.501128709999932, 39.68829987200003 ], [ -75.487538214999887, 39.696844794000143 ], [ -75.483143683999884, 39.70416901200015 ], [ -75.476673956999889, 39.711371161000088 ], [ -75.465199347999942, 39.714667059000121 ], [ -75.46336829299986, 39.719387111000131 ], [ -75.461822068999908, 39.748236395000148 ], [ -75.440174933999941, 39.777004299000097 ], [ -75.406117316999911, 39.802923895 ], [ -75.367298956999889, 39.823797919000171 ], [ -75.310902472999942, 39.843207098000065 ], [ -75.268299933999913, 39.850775458000115 ], [ -75.246083136999857, 39.85187409100017 ], [ -75.229074673999889, 39.854559637000065 ], [ -75.192941860999952, 39.867499091000141 ], [ -75.168853318999908, 39.872707424000154 ], [ -75.167591925999915, 39.873480536000059 ], [ -75.16624915299991, 39.873358466000084 ], [ -75.16075598899991, 39.878566799000097 ], [ -75.144154425999943, 39.874904690000122 ], [ -75.12938391799986, 39.88385651200015 ], [ -75.114816860999923, 39.897162177 ], [ -75.098703579999949, 39.906439520000148 ], [ -75.113677537999905, 39.92206452000012 ], [ -75.120228644999969, 39.94074127800009 ], [ -75.115956183999856, 39.952582098000065 ], [ -75.098703579999949, 39.947455145000148 ], [ -75.085031704999921, 39.9610863300001 ], [ -75.078765428999873, 39.953599351000136 ], [ -75.03941809799997, 40.002630927000084 ], [ -75.023589647999927, 40.016302802000112 ], [ -75.046538865999935, 40.009100653000175 ], [ -75.079986131999902, 39.986395575000031 ], [ -75.102406378999888, 39.981594143000152 ], [ -75.119699673999889, 39.974188544000143 ], [ -75.132923956999946, 39.956122137000037 ], [ -75.138742641999897, 39.933579820000077 ], [ -75.13341223899991, 39.912665106000091 ], [ -75.147775844999899, 39.90257396000014 ], [ -75.207915818999879, 39.885402736000017 ], [ -75.24868730399993, 39.867254950000117 ], [ -75.273101365999906, 39.864081122000144 ], [ -75.297352667999888, 39.871730861000074 ], [ -75.358876105999855, 39.848334052 ], [ -75.376454230999883, 39.845038153000147 ], [ -75.391713019999941, 39.839585679000109 ], [ -75.427642381999931, 39.803412177 ], [ -75.462961391999869, 39.784613348000121 ], [ -75.47671464799987, 39.772121486000046 ], [ -75.487660285999937, 39.731675523 ], [ -75.500721808999913, 39.714260158000016 ], [ -75.545765753999888, 39.670233466000113 ], [ -75.551136847999942, 39.666245835000112 ], [ -75.586822068999908, 39.655951239000032 ], [ -75.592152472999942, 39.649237372000144 ], [ -75.595204230999855, 39.638495184000149 ], [ -75.60114498599998, 39.627264716000141 ], [ -75.605213995999947, 39.616685289000188 ], [ -75.602691209999932, 39.607896226000136 ], [ -75.574045376999948, 39.585598049000097 ], [ -75.565500454999921, 39.576849677000112 ], [ -75.555816209999875, 39.559271552 ], [ -75.554595506999959, 39.541164455000072 ], [ -75.56118730399993, 39.523016669000171 ], [ -75.575062628999916, 39.50519440300009 ], [ -75.583566860999952, 39.483343817000062 ], [ -75.587938167999965, 39.462770639000112 ], [ -75.568863115999875, 39.440354876000029 ], [ -75.552760578999909, 39.425793962000157 ], [ -75.527891175999855, 39.403390924000135 ], [ -75.490793423999918, 39.353461005000113 ], [ -75.488514777999853, 39.347316799000126 ], [ -75.482411261999857, 39.344671942000147 ], [ -75.45916525699991, 39.328292960000127 ], [ -75.434410619999937, 39.31487386300013 ], [ -75.428490187999898, 39.291292781 ], [ -75.407704230999855, 39.270249742000161 ], [ -75.39801998599998, 39.249335028000118 ], [ -75.394154425999886, 39.224595445000134 ], [ -75.404757128999904, 39.172230870000092 ], [ -75.406116405999938, 39.151998866000113 ], [ -75.404572667999929, 39.130647151000161 ], [ -75.40161623599991, 39.117166347000122 ], [ -75.397445180999938, 39.102636364000048 ], [ -75.40140434099996, 39.078287597000084 ], [ -75.393789890999926, 39.055551025000014 ], [ -75.369205114999971, 39.040257328000095 ], [ -75.342582121999925, 39.020211252000038 ], [ -75.314849412999934, 38.984076239 ], [ -75.311128447999891, 38.967954136000017 ], [ -75.311070292999887, 38.949468208000027 ], [ -75.310325873999943, 38.927818264000152 ], [ -75.296620245999861, 38.913072007000139 ], [ -75.244352785999951, 38.859798652000123 ], [ -75.195482727999945, 38.815490865000029 ], [ -75.166326653999931, 38.794382357000117 ], [ -75.130414234999932, 38.782771825000012 ], [ -75.099926219999958, 38.788048410000059 ], [ -75.095860983999842, 38.797555178 ], [ -75.099252048999858, 38.805480878000125 ], [ -75.092474762999899, 38.807591577000053 ], [ -75.084340484999927, 38.795966511000088 ], [ -75.066122551999882, 38.678024950000164 ], [ -75.064807137999935, 38.632608972000028 ], [ -75.071848110999952, 38.638332424000012 ], [ -75.077621833999842, 38.686475198000082 ], [ -75.086410656999874, 38.693344819000018 ], [ -75.120921036999874, 38.683834673 ], [ -75.139188520999937, 38.68805248000011 ], [ -75.119781053999873, 38.658880927000055 ], [ -75.133941209999904, 38.660386460000112 ], [ -75.139393683999941, 38.662054755000113 ], [ -75.145863410999937, 38.66152578300013 ], [ -75.147206183999941, 38.660060940000093 ], [ -75.149973110999895, 38.659816799000126 ], [ -75.153309699999909, 38.658880927000055 ], [ -75.142567511999914, 38.6505394550001 ], [ -75.130441860999923, 38.643052476000108 ], [ -75.116118943999936, 38.638413804 ], [ -75.098703579999949, 38.638413804 ], [ -75.121408657999893, 38.621323960000055 ], [ -75.19005286399991, 38.606675523000135 ], [ -75.207915818999879, 38.590033270000092 ], [ -75.187408006999931, 38.590033270000092 ], [ -75.191517706999974, 38.582709052 ], [ -75.196441209999932, 38.576849677000141 ], [ -75.201975063999953, 38.572455145000063 ], [ -75.207915818999879, 38.569525458000143 ], [ -75.191761847999913, 38.566961981000034 ], [ -75.152211066999968, 38.588446356000148 ], [ -75.126047329999921, 38.590033270000092 ], [ -75.119618292999917, 38.584295966000028 ], [ -75.111683722999942, 38.574164130000057 ], [ -75.10326087099989, 38.565904039000159 ], [ -75.095570441999882, 38.566392320000077 ], [ -75.075184699999909, 38.586493231000119 ], [ -75.069567274999883, 38.593535570000071 ], [ -75.069203253999888, 38.608303127000156 ], [ -75.065337693999879, 38.614935614000117 ], [ -75.060091085999915, 38.612540620000019 ], [ -75.058745696999978, 38.60514757300011 ], [ -75.056734304999907, 38.586665777000078 ], [ -75.057728644999941, 38.552720445000134 ], [ -75.052845831999974, 38.527329820000105 ], [ -75.050021190999928, 38.498985334000011 ], [ -75.047328385999975, 38.475732608000143 ], [ -75.043975389999929, 38.453802802000112 ], [ -75.044056769999912, 38.453436591000113 ], [ -75.044748501999948, 38.425034898000078 ], [ -75.05113684799997, 38.387762762000094 ], [ -75.067008878999872, 38.353519856000119 ], [ -75.078765428999873, 38.336737372000115 ], [ -75.075795050999943, 38.36627838700015 ], [ -75.059234178999901, 38.422796942 ], [ -75.057728644999941, 38.453436591000113 ], [ -75.058094855999855, 38.453721421000054 ], [ -75.062733527999882, 38.457342841000084 ], [ -75.06859290299991, 38.459906317 ], [ -75.075795050999943, 38.461004950000145 ], [ -75.085031704999921, 38.460882880000085 ], [ -75.083892381999874, 38.453599351000079 ], [ -75.082915818999908, 38.447455145000092 ], [ -75.089882200999881, 38.432201367000076 ], [ -75.102016211999853, 38.438538203000107 ], [ -75.118196260999952, 38.437481204000122 ], [ -75.097978712999918, 38.407913028000152 ], [ -75.104045298999978, 38.395242014000146 ], [ -75.11213051999988, 38.399466031000046 ], [ -75.127628405999928, 38.405800428000035 ], [ -75.147845779999926, 38.413714890000122 ], [ -75.165367585999888, 38.416875316000144 ], [ -75.179509981999871, 38.40842047800011 ], [ -75.139754134999919, 38.399462658000132 ], [ -75.132341496999885, 38.394184582000136 ], [ -75.13341223899991, 38.385158596000011 ], [ -75.13341223899991, 38.377671617000132 ], [ -75.126047329999921, 38.377671617000132 ], [ -75.126047329999921, 38.371527411000059 ], [ -75.13060462099989, 38.369289455000072 ], [ -75.135365363999966, 38.36603424700003 ], [ -75.13963782499988, 38.364081122000172 ], [ -75.12547766799986, 38.360337632000054 ], [ -75.112131313999953, 38.362494208000143 ], [ -75.100738084999875, 38.36212799700003 ], [ -75.092437303999901, 38.351019598 ], [ -75.094227667999888, 38.33535390800013 ], [ -75.104400193999936, 38.316229559000149 ], [ -75.117990688999896, 38.298163153000033 ], [ -75.129750128999973, 38.285549221000153 ], [ -75.154286261999886, 38.240912177 ], [ -75.163889126999976, 38.233710028000147 ], [ -75.197499152999882, 38.232570705000015 ], [ -75.200672980999855, 38.240301825000031 ], [ -75.187408006999931, 38.261664130000085 ], [ -75.22004146999987, 38.247626044000029 ], [ -75.233062303999958, 38.238959052000141 ], [ -75.242665167999945, 38.226955471000011 ], [ -75.257150844999899, 38.16815827000012 ], [ -75.266916469999927, 38.159247137000179 ], [ -75.27171790299991, 38.15232982 ], [ -75.283273891999841, 38.120550848000121 ], [ -75.2904353509999, 38.110825914000188 ], [ -75.297352667999888, 38.110785223 ], [ -75.315907355999883, 38.116888739000089 ], [ -75.325266079999921, 38.117010809000149 ], [ -75.333892381999931, 38.111558335000112 ], [ -75.350168423999946, 38.09406159100017 ], [ -75.356027798999918, 38.090318101000136 ], [ -75.351185675999915, 38.082098700000031 ], [ -75.373036261999886, 38.031968492000047 ], [ -75.37515214799987, 38.023830471000124 ], [ -75.378285285999937, 38.011664130000142 ], [ -75.390980597999913, 38.002671617000104 ], [ -75.406849738999938, 37.997381903000061 ], [ -75.421457485999952, 37.987941799000126 ], [ -75.426177537999877, 37.976507880000085 ], [ -75.434344222999954, 37.961832993000101 ], [ -75.431881663999945, 37.951830343000083 ], [ -75.419151572999851, 37.943278643000113 ], [ -75.425163156999872, 37.936114395000018 ], [ -75.435424110999861, 37.93370459700013 ], [ -75.43478266199989, 37.925602755000099 ], [ -75.419654559999913, 37.919923128000093 ], [ -75.423855846999885, 37.913716503 ], [ -75.438921258999926, 37.906050951000097 ], [ -75.447920462999889, 37.893635372000077 ], [ -75.443071420999871, 37.889360228000115 ], [ -75.425577005999912, 37.892742699000124 ], [ -75.417100778999895, 37.886091984000146 ], [ -75.424895251999914, 37.875113328000126 ], [ -75.446591827999924, 37.867432140000162 ], [ -75.470658192999878, 37.851162519000027 ], [ -75.49228479599995, 37.83108400000016 ], [ -75.512081309999928, 37.808620754000131 ], [ -75.531269449999854, 37.787884126000094 ], [ -75.560505046999964, 37.743902112000129 ], [ -75.598144417999947, 37.700011217000068 ], [ -75.627078755999889, 37.67383181100017 ], [ -75.652822905999955, 37.642552348000052 ], [ -75.70595768799987, 37.580183078000104 ], [ -75.716686026999895, 37.559551193000075 ], [ -75.733469204999949, 37.536078192 ], [ -75.744876095999899, 37.524204036000029 ], [ -75.759799746999931, 37.507953766000114 ], [ -75.771473761999857, 37.490301825000088 ], [ -75.783924933999884, 37.483587958000143 ], [ -75.788319464999859, 37.475897528000033 ], [ -75.810496163999886, 37.462182433000166 ], [ -75.818707122999911, 37.454237853000066 ], [ -75.81031085199993, 37.443098825000092 ], [ -75.814804614999844, 37.436493676000069 ], [ -75.823831826999907, 37.427559640000098 ], [ -75.821677230999882, 37.419019681000137 ], [ -75.806309228999851, 37.414503307000089 ], [ -75.795874384999962, 37.405682914000025 ], [ -75.79996167099992, 37.400068415000177 ], [ -75.811537749999928, 37.398357022000155 ], [ -75.820169258999897, 37.391729234000039 ], [ -75.828439933999874, 37.390693559000155 ], [ -75.836357871999894, 37.395908136000045 ], [ -75.855005072999916, 37.397437837000112 ], [ -75.875846258999928, 37.369350848000025 ], [ -75.887308510999929, 37.356967294000086 ], [ -75.900477444999893, 37.325513665000145 ], [ -75.911529663999914, 37.290766132000087 ], [ -75.923491887999973, 37.244441581 ], [ -75.927296738999928, 37.211368332000077 ], [ -75.934157825999876, 37.173303837 ], [ -75.935040156999975, 37.158416935000062 ], [ -75.935925557999951, 37.135016347000132 ], [ -75.949111081999888, 37.124951910000149 ], [ -75.966428600999848, 37.134795304000036 ], [ -75.976121612999918, 37.161518403000102 ], [ -76.000778086999844, 37.194365245000128 ], [ -76.000965949999852, 37.220160223 ], [ -75.996205206999946, 37.23383209800015 ], [ -75.996205206999946, 37.239976304000109 ], [ -76.016957160999937, 37.257798570000105 ], [ -76.014963344999899, 37.281561591000113 ], [ -76.000111456999946, 37.303534247000115 ], [ -75.982533331999917, 37.316351630000057 ], [ -75.995920376999919, 37.320257880000142 ], [ -76.00145423099994, 37.319484768000123 ], [ -76.010568813999924, 37.316351630000057 ], [ -75.990793423999918, 37.353013414000159 ], [ -75.984771287999905, 37.371893622000087 ], [ -75.98997962099989, 37.384588934000149 ], [ -75.973784959999932, 37.391546942000147 ], [ -75.962147589999944, 37.403265692000119 ], [ -75.955881313999981, 37.415920315 ], [ -75.95531165299991, 37.425604559000149 ], [ -75.956450975999957, 37.424953518000038 ], [ -75.962228969999927, 37.425726630000142 ], [ -75.966175910999908, 37.424505927000112 ], [ -75.968251105999911, 37.418158270000092 ], [ -75.975697394999912, 37.418158270000092 ], [ -75.972889777999853, 37.435126044000143 ], [ -75.965646938999924, 37.452948309000035 ], [ -75.954009568999908, 37.466986395000092 ], [ -75.926177537999962, 37.47842031500015 ], [ -75.924631313999924, 37.488999742000189 ], [ -75.934152798999918, 37.495062567 ], [ -75.95531165299991, 37.487005927000055 ], [ -75.951771613999938, 37.515936591000141 ], [ -75.93781490799995, 37.53729889500012 ], [ -75.917103644999941, 37.552476304000109 ], [ -75.893788214999859, 37.56273021000014 ], [ -75.934722459999875, 37.576402085000083 ], [ -75.921254035999908, 37.585760809000092 ], [ -75.911040818999965, 37.594875393000095 ], [ -75.909494594999927, 37.603216864000061 ], [ -75.921742316999882, 37.610541083000058 ], [ -75.90461178299995, 37.619859117000104 ], [ -75.882679816999911, 37.623765367000104 ], [ -75.871449347999913, 37.629543361000074 ], [ -75.886341925999972, 37.644680080000072 ], [ -75.875721808999941, 37.660711981000148 ], [ -75.860829230999883, 37.669012762000037 ], [ -75.841704881999902, 37.672105210000112 ], [ -75.818674282999922, 37.672593492000104 ], [ -75.824940558999884, 37.687811591000084 ], [ -75.823841925999943, 37.696519273000078 ], [ -75.788685675999972, 37.727484442 ], [ -75.790516730999855, 37.733303127000156 ], [ -75.811879035999908, 37.733465887000122 ], [ -75.811879035999908, 37.740912177 ], [ -75.790842251999976, 37.75385163 ], [ -75.777455206999974, 37.766424872000087 ], [ -75.777902798999975, 37.78009674700003 ], [ -75.79820716099988, 37.796128648000106 ], [ -75.78685462099989, 37.809393622000144 ], [ -75.775542772999927, 37.80792877800009 ], [ -75.764475063999981, 37.800523179000024 ], [ -75.753488735999923, 37.796128648000106 ], [ -75.694569464999859, 37.802313544000086 ], [ -75.703724738999938, 37.81073639500012 ], [ -75.70848548099994, 37.821682033000016 ], [ -75.708119269999912, 37.833156643000152 ], [ -75.702015753999945, 37.843329169000086 ], [ -75.694813605999911, 37.844712632000082 ], [ -75.671376105999911, 37.841498114000117 ], [ -75.661040818999908, 37.843329169000086 ], [ -75.669504360999952, 37.852036851 ], [ -75.674305792999945, 37.861395575000117 ], [ -75.674224412999962, 37.87034739800005 ], [ -75.667836066999939, 37.878078518000152 ], [ -75.670969204999921, 37.892564195000105 ], [ -75.689279751999976, 37.903998114000061 ], [ -75.717518683999856, 37.909409898000106 ], [ -75.742990688999953, 37.905991929 ], [ -75.742990688999953, 37.912176825000145 ], [ -75.719146287999877, 37.927639065000093 ], [ -75.694569464999859, 37.939520575000031 ], [ -75.661773240999935, 37.944769598000121 ], [ -75.645863410999937, 37.949530341000028 ], [ -75.633127407999979, 37.960028387000179 ], [ -75.653675910999908, 37.967962958000058 ], [ -75.672596808999941, 37.971991278000118 ], [ -75.763172980999883, 37.978216864000089 ], [ -75.786284959999932, 37.975897528000118 ], [ -75.808176235999952, 37.963446356000091 ], [ -75.838124152999939, 37.941229559000035 ], [ -75.858021613999938, 37.931138414000159 ], [ -75.867095506999931, 37.936102606000034 ], [ -75.868967251999891, 37.943304755000057 ], [ -75.8724666009999, 37.946966864000032 ], [ -75.874989386999914, 37.951117255000057 ], [ -75.873361782999979, 37.960028387000179 ], [ -75.867502407999922, 37.967230536000116 ], [ -75.858794725999957, 37.973211981000034 ], [ -75.850412563999896, 37.981105861000017 ], [ -75.845366990999963, 37.994086005000028 ], [ -75.854847785999965, 37.993353583000086 ], [ -75.862700975999957, 37.990790106000148 ], [ -75.868885870999918, 37.986517645000063 ], [ -75.873361782999979, 37.980454820000077 ], [ -75.880116339999915, 37.980454820000077 ], [ -75.879546678999958, 37.985337632000139 ], [ -75.881011522999898, 37.986639716000028 ], [ -75.883656378999888, 37.986761786 ], [ -75.886341925999972, 37.987941799000126 ], [ -75.878651495999861, 37.994574286 ], [ -75.857248501999919, 38.021144924000126 ], [ -75.852853969999927, 38.031968492000047 ], [ -75.846424933999913, 38.039618231000148 ], [ -75.818267381999931, 38.042710679000052 ], [ -75.811879035999908, 38.045965887000094 ], [ -75.80207271999987, 38.058050848 ], [ -75.756581183999913, 38.092596747000115 ], [ -75.742990688999953, 38.110825914000188 ], [ -75.757679816999939, 38.113267320000134 ], [ -75.768625454999921, 38.1056175800001 ], [ -75.77953040299991, 38.095404364000061 ], [ -75.794504360999923, 38.090318101000136 ], [ -75.819081183999941, 38.091009833000086 ], [ -75.833322719999842, 38.08917877800009 ], [ -75.845366990999963, 38.083482164000102 ], [ -75.847564256999959, 38.086371161000145 ], [ -75.847767706999917, 38.087469794000086 ], [ -75.848622199999909, 38.088324286 ], [ -75.852853969999927, 38.090318101000136 ], [ -75.852853969999927, 38.097805080000015 ], [ -75.842600063999896, 38.101304429 ], [ -75.83238684799997, 38.107570705000128 ], [ -75.823882615999935, 38.115545966000084 ], [ -75.818674282999922, 38.124457098000121 ], [ -75.824859178999901, 38.131293036000059 ], [ -75.814442511999914, 38.135199286000145 ], [ -75.784413214999859, 38.139471747000144 ], [ -75.776478644999912, 38.144964911 ], [ -75.779693162999962, 38.155218817000119 ], [ -75.794016079999949, 38.158880927000084 ], [ -75.811634894999969, 38.157294012000037 ], [ -75.824859178999901, 38.159247137000179 ], [ -75.848133917999917, 38.152167059000121 ], [ -75.893462693999936, 38.156073309000121 ], [ -75.91429602799991, 38.151800848 ], [ -75.919545050999886, 38.144842841000028 ], [ -75.920643683999941, 38.13572825700011 ], [ -75.922759568999936, 38.127875067000147 ], [ -75.931304490999878, 38.124457098000121 ], [ -75.937408006999959, 38.127630927 ], [ -75.940500454999949, 38.135402736000103 ], [ -75.941558397999898, 38.155462958000058 ], [ -75.928456183999941, 38.193548895000148 ], [ -75.896311001999976, 38.210679429 ], [ -75.856027798999889, 38.219712632 ], [ -75.818674282999922, 38.233710028000147 ], [ -75.834584113999938, 38.240179755000057 ], [ -75.878732876999948, 38.242865302000141 ], [ -75.897206183999856, 38.251125393000123 ], [ -75.906646287999877, 38.270982164000131 ], [ -75.902414516999869, 38.293768622000144 ], [ -75.891224738999938, 38.315130927000112 ], [ -75.85806230399993, 38.358587958000058 ], [ -75.849110480999883, 38.373968817 ], [ -75.843373175999915, 38.395453192000119 ], [ -75.840728318999936, 38.400824286000088 ], [ -75.843251105999855, 38.404364325000145 ], [ -75.856271938999924, 38.405666408000158 ], [ -75.863148566999939, 38.401760158000158 ], [ -75.866444464999887, 38.392401434000035 ], [ -75.869007941999882, 38.38108958500014 ], [ -75.873361782999979, 38.371527411000059 ], [ -75.924712693999908, 38.324896552000055 ], [ -75.931304490999878, 38.316880601000108 ], [ -75.955677863999938, 38.25779857 ], [ -75.962717251999891, 38.247992255000142 ], [ -75.968251105999911, 38.254055080000128 ], [ -75.96808834499987, 38.26260000200007 ], [ -75.966623501999891, 38.27228424700003 ], [ -75.968251105999911, 38.282131252000127 ], [ -75.974110480999883, 38.28815338700015 ], [ -75.983631964999859, 38.295477606000148 ], [ -75.992339647999955, 38.30390045800003 ], [ -75.996205206999946, 38.313177802000055 ], [ -75.990101691999968, 38.325995184000092 ], [ -75.962391730999883, 38.335842190000037 ], [ -75.95531165299991, 38.351019598 ], [ -75.964833136999914, 38.373480536 ], [ -75.990467902999882, 38.362046617000047 ], [ -76.018910285999908, 38.334784247000144 ], [ -76.037180141999869, 38.309475002000013 ], [ -76.02672278599988, 38.304185289000046 ], [ -76.019276495999918, 38.294419664000102 ], [ -76.017323370999861, 38.281805731000119 ], [ -76.017323370999861, 38.267808335000055 ], [ -76.028675910999937, 38.241766669000086 ], [ -76.037912563999896, 38.232489325000031 ], [ -76.048817511999886, 38.23932526200015 ], [ -76.081206834999875, 38.284084377000099 ], [ -76.09117591099988, 38.292425848000065 ], [ -76.117502407999979, 38.298285223 ], [ -76.12437903599988, 38.3048363300001 ], [ -76.13341223899991, 38.323065497000172 ], [ -76.192941860999923, 38.382757880000057 ], [ -76.209706183999941, 38.392035223 ], [ -76.22085527299987, 38.383612372000144 ], [ -76.206532355999883, 38.338568427 ], [ -76.209706183999941, 38.316880601000108 ], [ -76.215931769999912, 38.316880601000108 ], [ -76.221099412999905, 38.343898830000157 ], [ -76.239857550999972, 38.368231512000122 ], [ -76.269886847999913, 38.405666408000158 ], [ -76.27513587099989, 38.411566473000093 ], [ -76.282338019999941, 38.421820380000113 ], [ -76.288889126999919, 38.433539130000028 ], [ -76.295480923999889, 38.455511786000116 ], [ -76.304025844999927, 38.463283596000124 ], [ -76.313303188999953, 38.468695380000085 ], [ -76.318959113999966, 38.473944403000147 ], [ -76.319813605999855, 38.49502187700007 ], [ -76.304676886999857, 38.502630927000112 ], [ -76.286366339999915, 38.5001488300001 ], [ -76.277414516999869, 38.490952867000104 ], [ -76.273101365999878, 38.467474677000055 ], [ -76.263742641999841, 38.465521552000027 ], [ -76.254302537999934, 38.47980377800009 ], [ -76.250070766999897, 38.504950262000179 ], [ -76.242339647999898, 38.521185614000117 ], [ -76.223947719999842, 38.52960846600017 ], [ -76.20148678299995, 38.53510163 ], [ -76.181792772999898, 38.542792059000121 ], [ -76.187245245999947, 38.553290106000091 ], [ -76.171986456999974, 38.566229559000092 ], [ -76.174956834999875, 38.576971747000115 ], [ -76.17926998599998, 38.580511786 ], [ -76.184478318999879, 38.582586981000119 ], [ -76.19098873599998, 38.583563544000086 ], [ -76.198841925999943, 38.583807684000035 ], [ -76.210519985999952, 38.582709052 ], [ -76.213368292999888, 38.57949453300013 ], [ -76.214182094999899, 38.574042059000092 ], [ -76.21934973899991, 38.566392320000077 ], [ -76.23021399599989, 38.559515692000147 ], [ -76.242665167999917, 38.556708075000088 ], [ -76.273671027999939, 38.556463934000149 ], [ -76.286040818999879, 38.562811591000084 ], [ -76.278472459999932, 38.576849677000141 ], [ -76.256255662999877, 38.597398179 ], [ -76.256255662999877, 38.604234117000104 ], [ -76.262603318999908, 38.607814846000068 ], [ -76.267323370999918, 38.611802476000051 ], [ -76.277414516999869, 38.624741929000052 ], [ -76.232492641999869, 38.618068752000013 ], [ -76.215931769999912, 38.617905992000047 ], [ -76.201283331999889, 38.620672919000086 ], [ -76.175404425999886, 38.629217841000028 ], [ -76.161284959999932, 38.631008205000015 ], [ -76.176136847999913, 38.620672919000086 ], [ -76.181792772999898, 38.617905992000047 ], [ -76.171864386999914, 38.610256252000013 ], [ -76.161284959999932, 38.604234117000104 ], [ -76.142648891999869, 38.607489325000145 ], [ -76.114974820999919, 38.587975443000076 ], [ -76.092353834999898, 38.59363380900011 ], [ -76.05358612099991, 38.568038512000115 ], [ -76.01166511699995, 38.565655094000178 ], [ -75.994292772999898, 38.583685614000061 ], [ -75.982533331999917, 38.590033270000092 ], [ -75.970204230999883, 38.606594143000152 ], [ -75.965321417999888, 38.637396552000112 ], [ -75.95531165299991, 38.652655341000084 ], [ -75.959380662999877, 38.655707098000093 ], [ -75.962717251999891, 38.658880927000055 ], [ -75.968251105999911, 38.658880927000055 ], [ -75.98997962099989, 38.623968817000119 ], [ -75.999926978999952, 38.602595207000135 ], [ -76.024243815999853, 38.592846354000145 ], [ -76.059347486999911, 38.606201199000154 ], [ -76.076943919999877, 38.61560427400012 ], [ -76.105028833999881, 38.624910126000131 ], [ -76.092396613999881, 38.658880927000055 ], [ -76.107492641999897, 38.653998114000089 ], [ -76.1205134759999, 38.647935289000188 ], [ -76.134999152999939, 38.64594147300015 ], [ -76.154449022999927, 38.652655341000084 ], [ -76.154449022999927, 38.658880927000055 ], [ -76.145375128999916, 38.665025132000139 ], [ -76.119618292999888, 38.675604559000178 ], [ -76.106068488999938, 38.679388739000032 ], [ -76.106068488999938, 38.686224677000112 ], [ -76.126861131999902, 38.684881903000033 ], [ -76.148508266999897, 38.680894273000078 ], [ -76.166127081999917, 38.681463934000035 ], [ -76.174956834999875, 38.693670966000113 ], [ -76.168324347999913, 38.699896552000055 ], [ -76.164540167999888, 38.708156643000152 ], [ -76.164296027999853, 38.717718817000147 ], [ -76.16812089799987, 38.727728583000115 ], [ -76.176991339999915, 38.716131903000118 ], [ -76.181467251999976, 38.702378648 ], [ -76.186919725999928, 38.691066799000012 ], [ -76.198649065999888, 38.67505635800002 ], [ -76.2090689959999, 38.68672448000008 ], [ -76.2265126449999, 38.700970811000147 ], [ -76.236467401999846, 38.715154570000053 ], [ -76.227815676999882, 38.735726853000031 ], [ -76.201837816999841, 38.732305854000131 ], [ -76.221878188999938, 38.750931670000156 ], [ -76.233850452999945, 38.757449349000026 ], [ -76.254399834999901, 38.749237355000119 ], [ -76.273657155999842, 38.714526703000061 ], [ -76.291942400999858, 38.721314589000102 ], [ -76.297311869999959, 38.750939216000162 ], [ -76.288442061999973, 38.766697874 ], [ -76.288038197999953, 38.775526088000035 ], [ -76.294383350999851, 38.773854203000056 ], [ -76.309832623999853, 38.761237941000061 ], [ -76.310585376999882, 38.735330673000121 ], [ -76.326515629999903, 38.718243454000017 ], [ -76.326746941999943, 38.698754971000128 ], [ -76.322008078999886, 38.689431406000054 ], [ -76.325821517999941, 38.677534132000133 ], [ -76.341292952999908, 38.673172934000078 ], [ -76.346262173999946, 38.689927476000079 ], [ -76.343617316999939, 38.714178778000147 ], [ -76.340321417999917, 38.728420315000065 ], [ -76.331206834999932, 38.745917059000121 ], [ -76.311634894999941, 38.804266669000114 ], [ -76.306548631999931, 38.814357815000065 ], [ -76.304676886999857, 38.822739976000136 ], [ -76.277251756999902, 38.840887762000037 ], [ -76.260346136999914, 38.858046002000052 ], [ -76.253168886999902, 38.85500277800007 ], [ -76.259559489999845, 38.839215203000109 ], [ -76.239320078999896, 38.822074675000138 ], [ -76.221007040999893, 38.815277173000126 ], [ -76.2124257239999, 38.807636661000132 ], [ -76.212102858999913, 38.788244976000087 ], [ -76.198437064999951, 38.776205481000105 ], [ -76.183595633999857, 38.764383585000118 ], [ -76.173110537999889, 38.756612444000083 ], [ -76.143910285999965, 38.768133856000176 ], [ -76.131459113999938, 38.772894598000065 ], [ -76.11754309799997, 38.78506094000015 ], [ -76.109038865999935, 38.800726630000113 ], [ -76.112904425999943, 38.816555080000072 ], [ -76.126332160999937, 38.800726630000113 ], [ -76.146839972999885, 38.790350653000033 ], [ -76.176967035999951, 38.78555069800008 ], [ -76.194376405999947, 38.813917755 ], [ -76.188167384999929, 38.846690832000135 ], [ -76.156997803999872, 38.86012378400001 ], [ -76.127064581999974, 38.866034247000115 ], [ -76.106068488999938, 38.877997137000065 ], [ -76.147857225999957, 38.891546942000033 ], [ -76.154449022999927, 38.89533112200003 ], [ -76.147328253999973, 38.915920315000065 ], [ -76.148345506999931, 38.924953518000095 ], [ -76.161284959999932, 38.926418361000131 ], [ -76.164418097999913, 38.920599677 ], [ -76.171783006999931, 38.896918036000059 ], [ -76.178374803999901, 38.891669012000179 ], [ -76.19788293499991, 38.878455907000088 ], [ -76.195057745999918, 38.912176825000031 ], [ -76.192779100999957, 38.928290106000119 ], [ -76.196905500999947, 38.935648094000058 ], [ -76.207953363999962, 38.944045698000153 ], [ -76.229920049999919, 38.952344295000117 ], [ -76.243275519999969, 38.950628973000121 ], [ -76.247181769999969, 38.951157945000105 ], [ -76.255441860999952, 38.943833726000108 ], [ -76.262766079999949, 38.935370184000149 ], [ -76.263742641999841, 38.93260325700011 ], [ -76.273752407999922, 38.927883205000015 ], [ -76.280506964999859, 38.926662502000099 ], [ -76.311268683999941, 38.924627997000144 ], [ -76.31932532499988, 38.922674872000115 ], [ -76.328846808999884, 38.916489976000136 ], [ -76.331898566999968, 38.906968492000047 ], [ -76.331982287999949, 38.895480098000021 ], [ -76.327062726999969, 38.880957851000161 ], [ -76.328363983999907, 38.865156181000103 ], [ -76.346930969999846, 38.856454414 ], [ -76.359241341999848, 38.846602146000166 ], [ -76.374747926999902, 38.841573223000083 ], [ -76.366316667999882, 38.896320777000128 ], [ -76.356285351999873, 38.948639309 ], [ -76.338856574999852, 38.977606512000094 ], [ -76.335764126999976, 38.985012111000074 ], [ -76.322092251999919, 39.006415106000034 ], [ -76.315297003999916, 39.029364325000117 ], [ -76.306385870999861, 39.031317450000145 ], [ -76.295033331999889, 39.027655341000113 ], [ -76.293261957999874, 39.008770509000058 ], [ -76.285144708999894, 38.98942810700008 ], [ -76.244386022999919, 38.978904315000094 ], [ -76.216214008999884, 38.974319368000167 ], [ -76.197561430999968, 38.979339881000087 ], [ -76.167876756999931, 38.996323960000055 ], [ -76.150990363999938, 39.009100653000118 ], [ -76.147043423999946, 39.029486395000092 ], [ -76.154896613999938, 39.033677476000108 ], [ -76.160878058999941, 39.039740302000112 ], [ -76.165191209999932, 39.047512111000017 ], [ -76.16812089799987, 39.056708075000088 ], [ -76.144602016999897, 39.060126044000086 ], [ -76.13341223899991, 39.062933661000145 ], [ -76.140858527999882, 39.069769598000065 ], [ -76.121652798999918, 39.092474677000112 ], [ -76.077219204999892, 39.128363348 ], [ -76.065093553999901, 39.146144924000097 ], [ -76.087798631999959, 39.138657945000134 ], [ -76.108998175999943, 39.125921942000062 ], [ -76.130523240999963, 39.117824611000131 ], [ -76.154449022999927, 39.124416408000016 ], [ -76.140858527999882, 39.13182200700011 ], [ -76.140858527999882, 39.138657945000134 ], [ -76.175119594999842, 39.124090887000094 ], [ -76.185121968999852, 39.094164026 ], [ -76.203910987999876, 39.080235820000084 ], [ -76.212461065999975, 39.051791498000071 ], [ -76.207625050999866, 39.029812234000062 ], [ -76.204206243999892, 39.014533238000084 ], [ -76.217211676999938, 39.013113964000169 ], [ -76.234876474999851, 39.024751929000146 ], [ -76.242618050999937, 39.033259639 ], [ -76.23110936, 39.058275918000149 ], [ -76.235717566999909, 39.098208193000133 ], [ -76.243045528999858, 39.115753230000095 ], [ -76.242597408999899, 39.126783396000022 ], [ -76.251445571999881, 39.132604068000077 ], [ -76.272685777999953, 39.151551665000071 ], [ -76.272628040999876, 39.167992072000018 ], [ -76.2558610399999, 39.188536055000142 ], [ -76.234091715999938, 39.230449344000149 ], [ -76.212807782999874, 39.261966868000158 ], [ -76.180572068999879, 39.288072007000054 ], [ -76.178618943999936, 39.307847398000078 ], [ -76.174956834999875, 39.316229559000035 ], [ -76.164865688999924, 39.323309637000094 ], [ -76.142933722999885, 39.326646226000108 ], [ -76.13341223899991, 39.330471096000124 ], [ -76.127797003999888, 39.338527736000074 ], [ -76.119984503999916, 39.360174872000144 ], [ -76.1166072259999, 39.364650783000044 ], [ -76.105362293999946, 39.372047815000101 ], [ -76.059605949999906, 39.369628903000077 ], [ -76.027857738999927, 39.362445336000164 ], [ -75.999639207999849, 39.362216741000069 ], [ -75.93149284799992, 39.364984416000098 ], [ -75.88567609999987, 39.362528612000048 ], [ -75.860092653999857, 39.36178451500011 ], [ -75.839182094999899, 39.371486721000124 ], [ -75.864017137999952, 39.379595491000131 ], [ -75.904705704999913, 39.374283418000076 ], [ -76.006596698999886, 39.380548214 ], [ -76.034264631999861, 39.39287729700014 ], [ -76.013905402999853, 39.416164455000015 ], [ -75.973947719999899, 39.450832424000069 ], [ -75.951975063999981, 39.46580638200011 ], [ -75.934722459999875, 39.474514065 ], [ -75.912464972999942, 39.476385809000149 ], [ -75.866118943999965, 39.464300848000065 ], [ -75.839182094999899, 39.460760809000178 ], [ -75.839182094999899, 39.466986395000148 ], [ -75.868763800999943, 39.480658270000092 ], [ -75.884022589999915, 39.492254950000088 ], [ -75.893788214999859, 39.508612372000115 ], [ -75.869130011999857, 39.51947663 ], [ -75.85130774599989, 39.538397528000118 ], [ -75.839263475999871, 39.56146881700009 ], [ -75.831695115999935, 39.584377346000068 ], [ -75.856027798999889, 39.577378648 ], [ -75.87340247299997, 39.562892971000153 ], [ -75.889149542999917, 39.545477606000176 ], [ -75.904930942999897, 39.521531681000127 ], [ -75.966052363999893, 39.481731521000157 ], [ -76.000712972999878, 39.452790123000156 ], [ -75.999663865999935, 39.485500393000152 ], [ -75.990630662999934, 39.504461981000148 ], [ -75.965484178999958, 39.532863674000097 ], [ -75.954660610999952, 39.548081773000078 ], [ -75.94684811099998, 39.565375067000062 ], [ -75.934722459999875, 39.604193427 ], [ -75.951039191999911, 39.601019598000121 ], [ -75.962554490999935, 39.590765692 ], [ -75.979156053999901, 39.567287502000127 ], [ -76.008350392999972, 39.548687008000158 ], [ -76.038206562999903, 39.556620648000134 ], [ -76.064796225999913, 39.555634986000101 ], [ -76.08299719999988, 39.557806708000115 ], [ -76.092396613999881, 39.550197658000073 ], [ -76.120350714999915, 39.494940497000172 ], [ -76.109730597999885, 39.485012111000074 ], [ -76.073068813999953, 39.475083726000079 ], [ -76.065093553999901, 39.470770575000145 ], [ -76.067534959999932, 39.457831122000144 ], [ -76.074126756999931, 39.448797919000143 ], [ -76.122425910999937, 39.411037502000099 ], [ -76.183705206999946, 39.383002020000092 ], [ -76.209706183999941, 39.364650783000044 ], [ -76.225900844999899, 39.37783437700007 ], [ -76.229603644999941, 39.397528387000122 ], [ -76.222767706999917, 39.440334377000013 ], [ -76.21613521999987, 39.459377346000011 ], [ -76.215809699999937, 39.467596747000087 ], [ -76.222767706999917, 39.474514065 ], [ -76.232492641999869, 39.474514065 ], [ -76.240142381999902, 39.46702708500014 ], [ -76.246815558999856, 39.458238023000078 ], [ -76.253163214999887, 39.454006252000127 ], [ -76.266835089999915, 39.378851630000142 ], [ -76.252674933999913, 39.361517645000148 ], [ -76.245228644999912, 39.349554755000113 ], [ -76.246652798999889, 39.344142971000068 ], [ -76.254017706999889, 39.340073960000112 ], [ -76.284169074999909, 39.310614325000031 ], [ -76.291656053999873, 39.357123114000061 ], [ -76.31151282499988, 39.402777411 ], [ -76.325184699999909, 39.407660223000065 ], [ -76.401478644999969, 39.392523505000085 ], [ -76.385568813999953, 39.38226959800015 ], [ -76.358062303999901, 39.377101955000128 ], [ -76.336659308999856, 39.369208075000174 ], [ -76.338856574999852, 39.350978908000101 ], [ -76.33263098899991, 39.350978908000101 ], [ -76.341664191999911, 39.340480861000017 ], [ -76.351633266999897, 39.338202216000141 ], [ -76.362375454999921, 39.337225653000175 ], [ -76.373605923999918, 39.330471096000124 ], [ -76.36652584499987, 39.31732819200009 ], [ -76.369130011999857, 39.313177802000141 ], [ -76.42446855399993, 39.323675848 ], [ -76.430816209999875, 39.318101304 ], [ -76.423451300999972, 39.305650132000082 ], [ -76.390492316999911, 39.271551825000174 ], [ -76.391184048999946, 39.264878648000106 ], [ -76.401478644999969, 39.256008205000072 ], [ -76.416900193999908, 39.263983466000028 ], [ -76.425933397999898, 39.273749091000141 ], [ -76.442494269999969, 39.296942450000088 ], [ -76.450672980999883, 39.302069403000118 ], [ -76.483469204999892, 39.310614325000031 ], [ -76.467762824999909, 39.282904364000146 ], [ -76.44774329299986, 39.256740627000099 ], [ -76.421538865999906, 39.238348700000145 ], [ -76.396865045999874, 39.237981451000124 ], [ -76.402770358999902, 39.227816484000087 ], [ -76.431966554999946, 39.205936307000101 ], [ -76.449177867999907, 39.194956886000099 ], [ -76.448559498999884, 39.208435067000082 ], [ -76.445238776999929, 39.217904850000153 ], [ -76.45531165299991, 39.220160223000065 ], [ -76.463002081999917, 39.213812567000119 ], [ -76.469470108999872, 39.207542411000119 ], [ -76.482508973999927, 39.207388024000139 ], [ -76.497315597999886, 39.20855739500017 ], [ -76.492467796999875, 39.227464775000144 ], [ -76.508297803999938, 39.236026734000134 ], [ -76.531995680999898, 39.245839572000179 ], [ -76.564572869999893, 39.264964190000072 ], [ -76.57081758399994, 39.273637551000078 ], [ -76.581166144999884, 39.267320054000052 ], [ -76.591053839999887, 39.263495184000035 ], [ -76.61656653599988, 39.262193101000136 ], [ -76.623199022999955, 39.259711005000113 ], [ -76.610463019999912, 39.254461981000034 ], [ -76.602592743999935, 39.248324191000151 ], [ -76.585845506999902, 39.248521226000022 ], [ -76.570276267999901, 39.244692263 ], [ -76.563902226999915, 39.231303655000048 ], [ -76.56359011899994, 39.215819648000107 ], [ -76.536520170999978, 39.211443883000172 ], [ -76.530267448999894, 39.203441508000182 ], [ -76.528289328999904, 39.191345123000033 ], [ -76.524672531999897, 39.184657017000077 ], [ -76.517562154999894, 39.17666312900009 ], [ -76.499989386999857, 39.164862372000144 ], [ -76.493792709999894, 39.161469948000118 ], [ -76.480002036999906, 39.167023043000043 ], [ -76.469334925999874, 39.155031707000077 ], [ -76.441029425999915, 39.135158596000124 ], [ -76.433282714999848, 39.131218416000181 ], [ -76.430226769999962, 39.106334232000123 ], [ -76.419506400999893, 39.089620823000146 ], [ -76.42530667199992, 39.074052964000188 ], [ -76.432993946999943, 39.067224002000117 ], [ -76.443571550999934, 39.076527794000143 ], [ -76.443267381999902, 39.088690497000087 ], [ -76.455922003999945, 39.090725002000013 ], [ -76.469146287999905, 39.083441473 ], [ -76.478375574999887, 39.080825592000011 ], [ -76.49743287599992, 39.078572207 ], [ -76.513209942999964, 39.086458471000142 ], [ -76.519276023999851, 39.085708683000021 ], [ -76.516476568999877, 39.075635855000044 ], [ -76.499849053999895, 39.068428057000105 ], [ -76.476327458999975, 39.06400332200009 ], [ -76.42913332899991, 39.045707992000146 ], [ -76.409910302999918, 39.037846908000134 ], [ -76.394195115999935, 39.024562893000123 ], [ -76.398548956999946, 39.014390367000161 ], [ -76.415191209999904, 39.009955145 ], [ -76.438710089999944, 39.008978583000143 ], [ -76.445952928999873, 39.005194403000118 ], [ -76.455569933999868, 38.98873483000007 ], [ -76.47265600699987, 38.995129801000118 ], [ -76.51194242699998, 39.021963273000054 ], [ -76.524618285999935, 39.045392050000103 ], [ -76.539591457999904, 39.064068545000069 ], [ -76.551665818999908, 39.077215887000037 ], [ -76.563547329999949, 39.074286200000031 ], [ -76.569162563999953, 39.066392320000048 ], [ -76.568511522999898, 39.056097723000121 ], [ -76.571187251999874, 39.038643620000144 ], [ -76.561587209999857, 39.036066782000105 ], [ -76.5432939989999, 39.031580718 ], [ -76.530955476999878, 39.021635731000131 ], [ -76.512505774999852, 39.005725367000153 ], [ -76.486157535999922, 38.98652514000004 ], [ -76.476404135999928, 38.975202277000122 ], [ -76.469928568999876, 38.953739787000032 ], [ -76.452426725999942, 38.943860711000028 ], [ -76.465193403999962, 38.932935287000035 ], [ -76.45961237899985, 38.912136603000093 ], [ -76.501440902999889, 38.927118559000164 ], [ -76.525292645999855, 38.951058495000055 ], [ -76.557481536999887, 38.958738721000131 ], [ -76.568607699999859, 38.952541830000044 ], [ -76.53490149599989, 38.937648830000128 ], [ -76.524403449999909, 38.926418361000131 ], [ -76.512399218999917, 38.912852827 ], [ -76.493100771999934, 38.898950019000054 ], [ -76.496197301999899, 38.880063411000137 ], [ -76.507421477999912, 38.87925578300009 ], [ -76.521407326999906, 38.887166072000113 ], [ -76.537464972999885, 38.891669012000179 ], [ -76.5365291009999, 38.887396552000084 ], [ -76.535308397999898, 38.884466864000146 ], [ -76.53062903599988, 38.877997137000065 ], [ -76.523684518999943, 38.870301789000067 ], [ -76.526970007999921, 38.861505348000108 ], [ -76.538991444999908, 38.856641417 ], [ -76.531722230999918, 38.83922899800011 ], [ -76.52227894299989, 38.842713578000129 ], [ -76.505881950999907, 38.84426207900016 ], [ -76.492915721999907, 38.844419789000156 ], [ -76.49428786799993, 38.825546431000177 ], [ -76.503773566999882, 38.807562567000147 ], [ -76.53065552299995, 38.783315912 ], [ -76.551665818999908, 38.775580145000148 ], [ -76.550282355999911, 38.755113023 ], [ -76.538889126999948, 38.737697658000016 ], [ -76.521527661999926, 38.72489274800013 ], [ -76.527077556999927, 38.702643416000157 ], [ -76.529534466999905, 38.675760092000175 ], [ -76.521561790999897, 38.650171732000118 ], [ -76.509148697999933, 38.628139405000141 ], [ -76.512196417999945, 38.571478583000086 ], [ -76.511977318999925, 38.527733910000151 ], [ -76.495500601999908, 38.496018047000078 ], [ -76.435503683999855, 38.438223843000017 ], [ -76.413982208999869, 38.412336458000127 ], [ -76.396056886999901, 38.391275176000093 ], [ -76.38190497699992, 38.384574651000108 ], [ -76.392764412999952, 38.353569848000078 ], [ -76.419359187999873, 38.321705733 ], [ -76.453562565999874, 38.324052805000136 ], [ -76.47130391399989, 38.335501598000079 ], [ -76.469146287999905, 38.364081122000172 ], [ -76.473947719999899, 38.373277085000055 ], [ -76.474964972999942, 38.379584052 ], [ -76.476714647999955, 38.385158596000011 ], [ -76.483469204999892, 38.392035223 ], [ -76.500111456999946, 38.400091864000146 ], [ -76.511341925999943, 38.403998114000146 ], [ -76.542836066999939, 38.40961334800015 ], [ -76.561640284999896, 38.424215095000093 ], [ -76.602456088999901, 38.444334536000085 ], [ -76.636474939999914, 38.474163406000159 ], [ -76.647699386999932, 38.505683473 ], [ -76.671783006999902, 38.654445705000072 ], [ -76.681467251999948, 38.679388739000032 ], [ -76.68407141799986, 38.672552802 ], [ -76.682850714999944, 38.664740302 ], [ -76.68423417899993, 38.653265692000062 ], [ -76.678822394999884, 38.580389716000028 ], [ -76.674672003999945, 38.558417059000092 ], [ -76.675200975999928, 38.535345770000148 ], [ -76.675916791999896, 38.509433360000017 ], [ -76.673643969999972, 38.486057864000102 ], [ -76.65705066599989, 38.450487181000042 ], [ -76.619740363999938, 38.423325914000159 ], [ -76.585845506999902, 38.398871161000116 ], [ -76.521311001999919, 38.374212958000143 ], [ -76.51073157499988, 38.367824611000017 ], [ -76.506092902999853, 38.349554755000142 ], [ -76.493804490999906, 38.329820054000109 ], [ -76.476389126999919, 38.312892971000124 ], [ -76.450633967999948, 38.293140520000136 ], [ -76.432303309999895, 38.294039673 ], [ -76.42458045499987, 38.301669697000094 ], [ -76.406361456999917, 38.308294989 ], [ -76.385783056999912, 38.306302981000115 ], [ -76.373382152999881, 38.298892537000185 ], [ -76.387120614999901, 38.282961133000143 ], [ -76.39645510699998, 38.267076257000056 ], [ -76.393299933999856, 38.24599844 ], [ -76.387277798999946, 38.226955471000011 ], [ -76.380482550999915, 38.21938711100016 ], [ -76.360088704999981, 38.194710594000171 ], [ -76.334106173999913, 38.16337546300015 ], [ -76.320506626999929, 38.138776121000049 ], [ -76.330831098999909, 38.12905995600012 ], [ -76.340304849999967, 38.120726740000023 ], [ -76.33263098899991, 38.090318101000136 ], [ -76.328048038999952, 38.07614873500016 ], [ -76.326051885999902, 38.063785637000038 ], [ -76.32389659699993, 38.043842087000044 ], [ -76.336341361999928, 38.053373361000141 ], [ -76.351283543999926, 38.05735794400006 ], [ -76.395915245999902, 38.102994318000029 ], [ -76.415257254999943, 38.108298778000162 ], [ -76.434086267999902, 38.132142561000094 ], [ -76.426750298999906, 38.158997491000136 ], [ -76.433583136999943, 38.190334377000099 ], [ -76.456125454999921, 38.207017320000134 ], [ -76.455230272999927, 38.197902736000131 ], [ -76.449940558999856, 38.182806708000115 ], [ -76.44871985599994, 38.175970770000035 ], [ -76.450917120999918, 38.166205145000063 ], [ -76.455799933999884, 38.158270575000117 ], [ -76.460804816999939, 38.15232982 ], [ -76.468861456999974, 38.139105536000145 ], [ -76.48216712099989, 38.146144924000012 ], [ -76.503895636999857, 38.166001695000105 ], [ -76.510121222999913, 38.140082098000121 ], [ -76.517160610999895, 38.131781317000147 ], [ -76.53062903599988, 38.138739325000031 ], [ -76.532378709999875, 38.147406317000119 ], [ -76.540322249999861, 38.159773202000096 ], [ -76.547807277999937, 38.183699020000162 ], [ -76.56296942599991, 38.198610491000167 ], [ -76.587662619999975, 38.210645935000159 ], [ -76.61674290499991, 38.223306495000188 ], [ -76.643835240999863, 38.225008069000111 ], [ -76.67809103299993, 38.234835317 ], [ -76.697364081999865, 38.238002953000077 ], [ -76.754724850999935, 38.227602311000069 ], [ -76.777645892999914, 38.237556697000102 ], [ -76.804209846999953, 38.253622573000044 ], [ -76.80101477799991, 38.276312567 ], [ -76.808583136999857, 38.289740302 ], [ -76.811756964999915, 38.299221096000096 ], [ -76.815581834999932, 38.336330471000011 ], [ -76.82762610599994, 38.362860419000143 ], [ -76.848988410999908, 38.382513739000117 ], [ -76.880686001999948, 38.398871161000116 ], [ -76.855946417999888, 38.355210679000137 ], [ -76.846099412999962, 38.330877997000144 ], [ -76.839100714999887, 38.302639065 ], [ -76.839215656999897, 38.257216826000089 ], [ -76.865767420999902, 38.271897818000028 ], [ -76.895726198999881, 38.282406338000087 ], [ -76.922174305999903, 38.291593193 ], [ -76.923639595999902, 38.314880599000091 ], [ -76.948536009999884, 38.330945532000058 ], [ -76.973376781999889, 38.344263777000052 ], [ -76.986683531999915, 38.370720352000077 ], [ -77.014020495999944, 38.441629492000075 ], [ -77.021581873999935, 38.461395300000035 ], [ -77.03156490799995, 38.481390692000119 ], [ -77.032378709999961, 38.471625067 ], [ -77.03490149599989, 38.462713934000149 ], [ -77.038889126999948, 38.454331773 ], [ -77.044545050999943, 38.446600653000175 ], [ -77.060129360999923, 38.428534247000144 ], [ -77.073231574999909, 38.420843817000147 ], [ -77.094637167999906, 38.408720077000126 ], [ -77.105219840999951, 38.411281588000136 ], [ -77.103627081999974, 38.43451569200009 ], [ -77.105295376999976, 38.445461330000128 ], [ -77.09976152299987, 38.453436591000113 ], [ -77.09976152299987, 38.460882880000085 ], [ -77.103179490999878, 38.463080145000063 ], [ -77.104359503999888, 38.464056708000143 ], [ -77.105051235999923, 38.465155341000084 ], [ -77.107248501999919, 38.467718817 ], [ -77.12083899599989, 38.461493231000034 ], [ -77.133941209999961, 38.453436591000113 ], [ -77.12718665299991, 38.450018622000087 ], [ -77.122954881999902, 38.445990302000112 ], [ -77.113433397999898, 38.432928778000147 ], [ -77.133941209999961, 38.398871161000116 ], [ -77.145253058999941, 38.388739325000174 ], [ -77.167795376999919, 38.380926825000174 ], [ -77.178334113999881, 38.374579169000143 ], [ -77.203651219999955, 38.364295392000045 ], [ -77.231931387999879, 38.374068355000148 ], [ -77.255258569999853, 38.393521921000016 ], [ -77.262324702999933, 38.424926647000078 ], [ -77.257859956999908, 38.451061215000109 ], [ -77.266394991999903, 38.472844197000157 ], [ -77.267041481999911, 38.494079540000186 ], [ -77.257049418999884, 38.511407645000034 ], [ -77.247758262999952, 38.523244902000059 ], [ -77.238840298999975, 38.537665106000119 ], [ -77.227528449999909, 38.556870835000055 ], [ -77.20913001699995, 38.555718346 ], [ -77.18637350599991, 38.556815084000064 ], [ -77.168080206999946, 38.576971747000115 ], [ -77.175597126999918, 38.578256890000134 ], [ -77.189358968999926, 38.569099363000035 ], [ -77.20592691799996, 38.566058663 ], [ -77.204436590999904, 38.57499805300013 ], [ -77.193524462999875, 38.59164737100015 ], [ -77.184437628999973, 38.604966539000131 ], [ -77.178944464999944, 38.60761139500012 ], [ -77.172596808999913, 38.609523830000072 ], [ -77.164947068999879, 38.614813544000143 ], [ -77.158314581999917, 38.616522528000147 ], [ -77.136341925999886, 38.615545966000084 ], [ -77.126454230999883, 38.617905992000047 ], [ -77.121001756999931, 38.623765367000161 ], [ -77.11481686099998, 38.640855210000112 ], [ -77.10606848899991, 38.657131252000156 ], [ -77.102406378999945, 38.673895575000174 ], [ -77.096343553999958, 38.682806708000115 ], [ -77.088693813999924, 38.689195054000137 ], [ -77.080799933999856, 38.694037177000112 ], [ -77.061869019999904, 38.697392534000087 ], [ -77.045638013999877, 38.700696371000063 ], [ -77.03734193899993, 38.696186182000119 ], [ -77.021858536999929, 38.695498175000026 ], [ -77.012466891999935, 38.697355469000129 ], [ -77.015561796999947, 38.700629659000143 ], [ -77.024125828999843, 38.699790516000078 ], [ -77.030669523999933, 38.703331044000109 ], [ -77.034677683999917, 38.708259924000075 ], [ -77.030159870999853, 38.715698017000179 ], [ -77.029729465999964, 38.731442541000106 ], [ -77.024728969999927, 38.740790106000091 ], [ -77.018422003999888, 38.743963934000149 ], [ -77.011161464999901, 38.743824806000092 ], [ -77.011680071999933, 38.747165551000123 ], [ -77.019533375999913, 38.751720510000055 ], [ -77.024337618999965, 38.754652946000036 ], [ -77.028061244999947, 38.765308087000122 ], [ -77.026210828999865, 38.776392240000106 ], [ -77.021227169999918, 38.782839352000011 ], [ -77.017997386999923, 38.790595449000037 ], [ -77.021148114999846, 38.795900647000153 ], [ -77.027387426999979, 38.819906384000078 ], [ -77.021496748999908, 38.836723267000181 ], [ -77.017841282999882, 38.845179560000147 ], [ -77.015932182999848, 38.854279484000173 ], [ -77.019577713999951, 38.861274602000108 ], [ -77.025934762999952, 38.872594094000121 ], [ -77.03607145099997, 38.879823073000139 ], [ -77.049630977999925, 38.888312384000088 ], [ -77.060083943999899, 38.899067862000138 ], [ -77.068332790999932, 38.901937596000081 ], [ -77.063687004999849, 38.891255191000042 ], [ -77.051814638999957, 38.881092938000151 ], [ -77.045243379999903, 38.876192925000069 ], [ -77.03901702099995, 38.868269890000178 ], [ -77.034951311999919, 38.860972798000105 ], [ -77.033039242999905, 38.85397047700009 ], [ -77.032801022999905, 38.845266666000057 ], [ -77.036952107999895, 38.839840201000143 ], [ -77.043821334999933, 38.839392799000066 ], [ -77.043279718999969, 38.835382697000099 ], [ -77.040048807999881, 38.827398977000072 ], [ -77.037571376999892, 38.815050405000093 ], [ -77.038353689999951, 38.796282775000137 ], [ -77.042959544999945, 38.791852943 ], [ -77.049748169999958, 38.788726534000133 ], [ -77.052617097999899, 38.783655209000088 ], [ -77.047693895999885, 38.776368119000054 ], [ -77.046589448999896, 38.767685749000023 ], [ -77.044751841999897, 38.747972456000085 ], [ -77.042527270999869, 38.728907994000096 ], [ -77.04777148799991, 38.715723534000162 ], [ -77.069956255999898, 38.710663832000122 ], [ -77.089222785999908, 38.710394598000121 ], [ -77.099354620999861, 38.706854559000149 ], [ -77.109445766999926, 38.707505601000108 ], [ -77.117258266999926, 38.706244208 ], [ -77.124012824999852, 38.687201239 ], [ -77.131035706999882, 38.677191406000119 ], [ -77.142403775999895, 38.676993583000083 ], [ -77.149054338999861, 38.685727080000063 ], [ -77.158297095999899, 38.691627542000148 ], [ -77.167785816999924, 38.688958693000032 ], [ -77.169333265999882, 38.679336560000067 ], [ -77.154296247999866, 38.663649438000093 ], [ -77.137996410999932, 38.650436947000131 ], [ -77.134865142999928, 38.636283075 ], [ -77.162924623999885, 38.631529249000053 ], [ -77.187163951999935, 38.620799528000092 ], [ -77.200888647999903, 38.623750638000033 ], [ -77.209287493999909, 38.63105833600018 ], [ -77.204973200999916, 38.638949803000045 ], [ -77.195423956999917, 38.655747789000159 ], [ -77.201771613999938, 38.665025132000139 ], [ -77.215891079999892, 38.664943752000156 ], [ -77.229888475999957, 38.656683661000059 ], [ -77.236317511999857, 38.641791083000115 ], [ -77.239369269999941, 38.626410223000065 ], [ -77.24742591099988, 38.609279690000122 ], [ -77.258656378999888, 38.593939520000092 ], [ -77.271717902999882, 38.583807684000035 ], [ -77.266957160999965, 38.580755927000141 ], [ -77.262928839999915, 38.57453034100017 ], [ -77.258046027999939, 38.569525458000143 ], [ -77.276478644999969, 38.559271552000112 ], [ -77.284779425999943, 38.556463934000149 ], [ -77.284779425999943, 38.549017645000092 ], [ -77.287342902999853, 38.530178127000127 ], [ -77.305383797999895, 38.502152550000133 ], [ -77.326592474999927, 38.450933675000144 ], [ -77.314250038999944, 38.4061286230001 ], [ -77.334700373999851, 38.416707976000154 ], [ -77.351828530999882, 38.432825036000096 ], [ -77.358716239999893, 38.429264964000041 ], [ -77.350225181999889, 38.409553772 ], [ -77.323379207999892, 38.390187873000016 ], [ -77.309055646999951, 38.379491343000055 ], [ -77.297357538999904, 38.368742998000172 ], [ -77.290779980999844, 38.353784626000092 ], [ -77.302160023999875, 38.354260637000138 ], [ -77.323897202999945, 38.350424368000134 ], [ -77.343070492999885, 38.348691042000084 ], [ -77.338511249999868, 38.342610785000076 ], [ -77.292131466999933, 38.340737020000105 ], [ -77.248978846999961, 38.329884729000028 ], [ -77.185414191999939, 38.343573309000035 ], [ -77.166737433999856, 38.347886460000112 ], [ -77.133534308999856, 38.367132880000085 ], [ -77.085649580999927, 38.3684115 ], [ -77.058461066999911, 38.394191799000012 ], [ -77.040841057999899, 38.395909955000079 ], [ -77.020369888999937, 38.384585805000043 ], [ -77.014780627999869, 38.372328363000165 ], [ -77.016954847999898, 38.355142367000084 ], [ -77.014000543999884, 38.343524214000141 ], [ -77.014475063999896, 38.330511786000145 ], [ -77.022997048999883, 38.320051459000084 ], [ -77.038862887999898, 38.322548884000142 ], [ -77.052035704999952, 38.32302757500004 ], [ -77.052738307999903, 38.316842403000138 ], [ -77.038593897999931, 38.312947387000108 ], [ -77.030131514999908, 38.307682062000183 ], [ -77.000476233999905, 38.27730818300013 ], [ -76.97492428299995, 38.270697333 ], [ -76.965443488999938, 38.267238674000097 ], [ -76.959819209999893, 38.260142505000132 ], [ -76.955118190999968, 38.247185987000037 ], [ -76.9565685849999, 38.235503717000043 ], [ -76.96136630299992, 38.218281619 ], [ -76.954171220999854, 38.210167718000108 ], [ -76.912867890999848, 38.199167541000165 ], [ -76.881773206999952, 38.177026676000182 ], [ -76.830033024999864, 38.165468837000091 ], [ -76.796981020999937, 38.169404907000157 ], [ -76.775124732999956, 38.166985947000015 ], [ -76.756418423999918, 38.160956122000087 ], [ -76.750355597999913, 38.14838288 ], [ -76.739328579999977, 38.136704820000105 ], [ -76.715199347999942, 38.14191315300009 ], [ -76.691477016999869, 38.153143622000087 ], [ -76.681467251999948, 38.159247137000179 ], [ -76.670033331999917, 38.15741608300003 ], [ -76.661936001999891, 38.152899481000148 ], [ -76.655100063999953, 38.147894598 ], [ -76.647328253999973, 38.144964911 ], [ -76.635365363999938, 38.145005601 ], [ -76.614613410999937, 38.150376695000134 ], [ -76.607168360999879, 38.143451553000105 ], [ -76.60144412899993, 38.132539124000132 ], [ -76.60715299099985, 38.112956789000108 ], [ -76.59531675, 38.105068056 ], [ -76.581266742999844, 38.097602095000084 ], [ -76.561135115999946, 38.089453468 ], [ -76.534423357999941, 38.075170823000136 ], [ -76.528714210999908, 38.064256008000157 ], [ -76.520741339999859, 38.052801825000117 ], [ -76.533111131999902, 38.042669989000061 ], [ -76.531890428999873, 38.038723049000069 ], [ -76.53062903599988, 38.025132554000109 ], [ -76.525624152999939, 38.022691148 ], [ -76.504482290999903, 38.023635889 ], [ -76.485134992999861, 38.021790564000085 ], [ -76.470527412999871, 38.016265823000126 ], [ -76.463071323999969, 38.01491766200003 ], [ -76.454416469999899, 38.006170966000113 ], [ -76.461781378999916, 38.002346096000096 ], [ -76.469146287999905, 38.00096263200011 ], [ -76.458648240999935, 37.995550848000065 ], [ -76.40818012, 37.969616697 ], [ -76.373036261999943, 37.960598049000154 ], [ -76.291241668999874, 37.924996808000131 ], [ -76.262002538999923, 37.914303811000096 ], [ -76.247908898999896, 37.903471013000157 ], [ -76.242453440999896, 37.881594977000034 ], [ -76.235829230999911, 37.859605210000112 ], [ -76.239613410999908, 37.836086330000072 ], [ -76.250070766999897, 37.822821356000034 ], [ -76.267893032999979, 37.824448960000055 ], [ -76.299387173999889, 37.850897528000061 ], [ -76.315256313999924, 37.857611395000092 ], [ -76.324859178999901, 37.84870026200015 ], [ -76.317860480999911, 37.828802802000055 ], [ -76.297840949999852, 37.796128648000106 ], [ -76.293853318999965, 37.780666408000101 ], [ -76.294097459999904, 37.771429755000142 ], [ -76.297840949999852, 37.761379299000154 ], [ -76.304676886999857, 37.747748114000117 ], [ -76.309152798999918, 37.746405341000028 ], [ -76.316029425999943, 37.747748114000117 ], [ -76.322377081999974, 37.748277085 ], [ -76.325184699999909, 37.744330145 ], [ -76.317046678999901, 37.732245184000092 ], [ -76.285511847999913, 37.710923570000134 ], [ -76.284169074999909, 37.699286200000031 ], [ -76.292225714999944, 37.694566148000106 ], [ -76.30370032499988, 37.694037177000141 ], [ -76.315663214999915, 37.696112372000144 ], [ -76.325184699999909, 37.699286200000031 ], [ -76.319732225999871, 37.685492255000113 ], [ -76.325306769999884, 37.679510809000092 ], [ -76.334136522999955, 37.675767320000077 ], [ -76.338856574999852, 37.668890692000062 ], [ -76.335438605999855, 37.659125067000119 ], [ -76.321115688999953, 37.643988348000121 ], [ -76.317860480999911, 37.637193101000022 ], [ -76.304676886999857, 37.637884833000143 ], [ -76.321115688999953, 37.624009507000054 ], [ -76.349436001999919, 37.627997137000037 ], [ -76.404652472999913, 37.644680080000072 ], [ -76.408802863999966, 37.649969794000143 ], [ -76.419300910999937, 37.66010163 ], [ -76.430083787999934, 37.666896877000127 ], [ -76.435047980999883, 37.661769924000012 ], [ -76.438628709999961, 37.662909247000144 ], [ -76.446441209999961, 37.670843817000033 ], [ -76.453765428999958, 37.683539130000085 ], [ -76.456125454999921, 37.692450262000122 ], [ -76.468902147999955, 37.708644924000069 ], [ -76.478667772999898, 37.695054429000109 ], [ -76.489613410999965, 37.658351955000015 ], [ -76.504994269999912, 37.656927802000141 ], [ -76.516916469999842, 37.668931382000054 ], [ -76.523915167999917, 37.687892971000068 ], [ -76.524403449999909, 37.699286200000031 ], [ -76.535511847999942, 37.715521552000084 ], [ -76.571359829999949, 37.75128815300009 ], [ -76.579009568999879, 37.771307684000149 ], [ -76.58348548099994, 37.777289130000085 ], [ -76.613148566999882, 37.796128648000106 ], [ -76.61778723899991, 37.803859768000123 ], [ -76.621937628999945, 37.813910223 ], [ -76.628570115999906, 37.818426825000145 ], [ -76.640492316999939, 37.809149481000091 ], [ -76.649566209999932, 37.813055731000091 ], [ -76.657826300999943, 37.818996486000046 ], [ -76.662668423999918, 37.828517971000124 ], [ -76.661529100999871, 37.843329169000086 ], [ -76.67414303299995, 37.832993882 ], [ -76.687652147999927, 37.831610419000114 ], [ -76.700917120999861, 37.836900132 ], [ -76.712757941999911, 37.84707265800013 ], [ -76.750355597999913, 37.895168361000103 ], [ -76.769528281999897, 37.914496255000032 ], [ -76.832261934999906, 37.942972161000071 ], [ -76.850295356999936, 37.981958341000123 ], [ -76.880068455999918, 37.990956927000113 ], [ -76.895737179999884, 38.007308822000098 ], [ -76.915394660999937, 38.069891669000143 ], [ -76.9349666009999, 38.093695380000057 ], [ -76.947092251999891, 38.103338934000121 ], [ -76.96263587099989, 38.110825914000188 ], [ -77.007435675999915, 38.118109442 ], [ -77.017201300999972, 38.117010809000149 ], [ -77.026600714999887, 38.128851630000113 ], [ -77.036203579999977, 38.145209052000141 ], [ -77.047596808999941, 38.159816799000154 ], [ -77.062570766999869, 38.166001695000105 ], [ -77.107167120999947, 38.174953518000152 ], [ -77.125884568999908, 38.176011460000026 ], [ -77.133941209999961, 38.166001695000105 ], [ -77.126698370999918, 38.155462958000058 ], [ -77.109445766999926, 38.148993231000148 ], [ -77.07591712099989, 38.144964911 ], [ -77.06314042899993, 38.149847723000065 ], [ -77.055490688999896, 38.149644273000106 ], [ -77.051991339999915, 38.141831773000106 ], [ -77.050892706999974, 38.128851630000113 ], [ -77.047352667999888, 38.118963934000092 ], [ -77.041005011999857, 38.111029364000146 ], [ -77.03156490799995, 38.103949286000088 ], [ -76.960560675999972, 38.089585679000109 ], [ -76.948963995999861, 38.079779364000089 ], [ -76.944691535999937, 38.074530341000084 ], [ -76.925892706999889, 38.058823960000112 ], [ -76.921701626999976, 38.052801825000117 ], [ -76.926414787999931, 37.996716461000133 ], [ -76.922613680999945, 37.980833409000027 ], [ -76.905798020999924, 37.975791766000057 ], [ -76.891713019999912, 37.974310614000089 ], [ -76.880238410999965, 37.969671942000062 ], [ -76.877445945999938, 37.956363301000138 ], [ -76.865920432999928, 37.941977236000085 ], [ -76.847035285999937, 37.928941148 ], [ -76.831166144999912, 37.918361721000124 ], [ -76.816455915999938, 37.903551999000101 ], [ -76.795286413999861, 37.89195732400016 ], [ -76.787890057999846, 37.88323062500011 ], [ -76.777800841999948, 37.862091024 ], [ -76.766890752999899, 37.842040419000128 ], [ -76.752675062999913, 37.822626235000158 ], [ -76.741730309999923, 37.809965091 ], [ -76.729119597999841, 37.799465396000144 ], [ -76.716244537999927, 37.788097022000116 ], [ -76.70303453899993, 37.786955171000145 ], [ -76.68797766799986, 37.789496161000059 ], [ -76.683990037999877, 37.78925202 ], [ -76.67992102799991, 37.789699611000017 ], [ -76.675200975999928, 37.788723049000126 ], [ -76.67442786399991, 37.785101630000085 ], [ -76.676014777999939, 37.771877346000124 ], [ -76.675200975999928, 37.768215236000074 ], [ -76.668658754999853, 37.755501546000104 ], [ -76.631935527999929, 37.750427883000057 ], [ -76.613400520999846, 37.739539010000087 ], [ -76.601722292999938, 37.719650339000012 ], [ -76.579986131999959, 37.69818756700009 ], [ -76.579009568999879, 37.695868231000119 ], [ -76.577219204999892, 37.688177802 ], [ -76.574029980999882, 37.673245908000084 ], [ -76.5708052519999, 37.6532445160001 ], [ -76.55198222899989, 37.62675763600005 ], [ -76.522221118999909, 37.614880813000141 ], [ -76.46349036399991, 37.618557033000016 ], [ -76.443023240999935, 37.618597723 ], [ -76.428212042999888, 37.624212958 ], [ -76.404286261999914, 37.594183661000059 ], [ -76.367583787999905, 37.584214585000055 ], [ -76.325266079999892, 37.580633856000091 ], [ -76.284169074999909, 37.56956614800005 ], [ -76.301909959999904, 37.557928778000061 ], [ -76.319243943999908, 37.552923895 ], [ -76.366118943999936, 37.549058335 ], [ -76.392974412999934, 37.542181708 ], [ -76.393381313999924, 37.533148505000085 ], [ -76.377674933999884, 37.525213934000121 ], [ -76.356516079999949, 37.521795966000113 ], [ -76.322661912999905, 37.501288153000147 ], [ -76.30125891799986, 37.493841864000089 ], [ -76.291656053999873, 37.504380601000136 ], [ -76.28981346799992, 37.519404105 ], [ -76.2700617, 37.51735554800014 ], [ -76.262772283999936, 37.502927826000089 ], [ -76.263905066999968, 37.487302114000144 ], [ -76.267648891999841, 37.481024481000034 ], [ -76.277211066999911, 37.470445054 ], [ -76.277414516999869, 37.459702867000161 ], [ -76.267404751999891, 37.453192450000174 ], [ -76.255726691999882, 37.453273830000157 ], [ -76.244536912999877, 37.449530341000028 ], [ -76.24463721199993, 37.430586257000144 ], [ -76.245442736999877, 37.398187 ], [ -76.249206488999903, 37.36342859600002 ], [ -76.257640131999949, 37.335510348000028 ], [ -76.280703764999885, 37.321351358000115 ], [ -76.298251264999863, 37.33506919100013 ], [ -76.318959113999966, 37.370917059000121 ], [ -76.321644660999937, 37.386297919000143 ], [ -76.33356686099998, 37.384955145000063 ], [ -76.348052537999934, 37.379950262000037 ], [ -76.366118943999936, 37.384588934000149 ], [ -76.396595831999889, 37.42959219000015 ], [ -76.415150519999912, 37.442694403000118 ], [ -76.428212042999888, 37.418158270000092 ], [ -76.416818813999924, 37.414984442000119 ], [ -76.409291144999941, 37.407782294000086 ], [ -76.404611782999922, 37.398911851000051 ], [ -76.401478644999969, 37.39081452000012 ], [ -76.411691860999895, 37.394924221000068 ], [ -76.422515428999901, 37.39752838700015 ], [ -76.433176235999923, 37.396714585000055 ], [ -76.442494269999969, 37.39081452000012 ], [ -76.447580532999893, 37.379868882000054 ], [ -76.442738410999908, 37.372015692000062 ], [ -76.415882941999939, 37.35569896000014 ], [ -76.408558722999913, 37.353664455000015 ], [ -76.403431769999912, 37.349798895 ], [ -76.401478644999969, 37.339911200000088 ], [ -76.40648352799991, 37.337713934000092 ], [ -76.435047980999883, 37.32933177300005 ], [ -76.435047980999883, 37.32314687700007 ], [ -76.402658657999893, 37.325018622000144 ], [ -76.394032355999883, 37.32314687700007 ], [ -76.386097785999908, 37.315130927000141 ], [ -76.376861131999959, 37.301214911000059 ], [ -76.371896938999896, 37.288031317 ], [ -76.378504947999886, 37.272332388000123 ], [ -76.457430166999956, 37.261052619000125 ], [ -76.496029407999856, 37.249114840000132 ], [ -76.509352490999902, 37.269565839 ], [ -76.540007106999923, 37.293235775000042 ], [ -76.554680493999854, 37.307945059000119 ], [ -76.561634894999912, 37.32314687700007 ], [ -76.574289516999869, 37.32518138200011 ], [ -76.582020636999886, 37.330471096000096 ], [ -76.642486131999902, 37.409002997000115 ], [ -76.658192511999857, 37.418158270000092 ], [ -76.680897589999887, 37.427476304000137 ], [ -76.700103318999936, 37.449408270000063 ], [ -76.729847785999965, 37.494452216000028 ], [ -76.781076626999919, 37.535467841000141 ], [ -76.790272589999887, 37.532700914000159 ], [ -76.795399542999888, 37.52558014500012 ], [ -76.797678188999953, 37.515611070000134 ], [ -76.79816646999987, 37.504380601000136 ], [ -76.794097459999904, 37.498277085000055 ], [ -76.784779425999943, 37.494452216000028 ], [ -76.773671027999939, 37.491359768000152 ], [ -76.764637824999909, 37.487005927000055 ], [ -76.721994594999899, 37.427232164000188 ], [ -76.690785285999908, 37.411078192000119 ], [ -76.676380988999938, 37.394924221000068 ], [ -76.654774542999945, 37.36351146000014 ], [ -76.606223636999886, 37.295789101000096 ], [ -76.533526468999895, 37.255504661000103 ], [ -76.50433652799984, 37.231813782000032 ], [ -76.468073376999939, 37.213966286000087 ], [ -76.432298759999895, 37.222423945000102 ], [ -76.402984178999901, 37.23383209800015 ], [ -76.385609503999945, 37.232489325000145 ], [ -76.373605923999918, 37.220160223 ], [ -76.375803188999896, 37.217759507000082 ], [ -76.378407355999911, 37.20726146 ], [ -76.38023841099988, 37.194566148000135 ], [ -76.379750128999888, 37.185370184000149 ], [ -76.373158331999917, 37.17597077000012 ], [ -76.361724412999962, 37.166571356000119 ], [ -76.35106360599994, 37.164211330000157 ], [ -76.346262173999946, 37.175482489000146 ], [ -76.317250128999945, 37.159491278000147 ], [ -76.298207160999965, 37.144598700000088 ], [ -76.291656053999873, 37.13011302300005 ], [ -76.303212042999917, 37.125921942000119 ], [ -76.325591600999928, 37.114081122000144 ], [ -76.338612433999913, 37.101711330000043 ], [ -76.322092251999919, 37.095933335000055 ], [ -76.281605597999913, 37.10415273600016 ], [ -76.270375128999916, 37.097642320000077 ], [ -76.269886847999913, 37.069281317000119 ], [ -76.274525519999941, 37.048041083000143 ], [ -76.28294837099989, 37.028225002000127 ], [ -76.296213344999927, 37.013576565000122 ], [ -76.315256313999924, 37.007879950000031 ], [ -76.339711066999939, 37.007391669000143 ], [ -76.357045050999943, 37.004828192000147 ], [ -76.371449347999913, 36.998521226000108 ], [ -76.399525519999912, 36.978338934000178 ], [ -76.415435350999928, 36.97256094 ], [ -76.429188605999855, 36.976304429000052 ], [ -76.440297003999973, 37.015773830000015 ], [ -76.452992316999939, 37.03017812700007 ], [ -76.52394065099989, 37.057669850000039 ], [ -76.546063567999909, 37.089407448000131 ], [ -76.563191258999979, 37.085757128000168 ], [ -76.611187582999889, 37.119442192000079 ], [ -76.618596180999958, 37.130785731000017 ], [ -76.619984503999888, 37.144435940000122 ], [ -76.610829230999911, 37.172552802000112 ], [ -76.617339647999898, 37.199164130000085 ], [ -76.634022589999944, 37.220689195 ], [ -76.654774542999945, 37.23383209800015 ], [ -76.66930091099988, 37.227118231000091 ], [ -76.710804816999882, 37.224025783000016 ], [ -76.729847785999965, 37.220160223 ], [ -76.735218878999916, 37.213202216000028 ], [ -76.738758917999917, 37.20331452 ], [ -76.743763800999943, 37.197495835000055 ], [ -76.753773566999939, 37.203070380000057 ], [ -76.758452928999958, 37.21124909100017 ], [ -76.762074347999913, 37.221421617000104 ], [ -76.766672329999949, 37.230129299000012 ], [ -76.774240688999896, 37.23383209800015 ], [ -76.791818813999924, 37.236965236000017 ], [ -76.828968878999916, 37.25104401200015 ], [ -76.842844204999921, 37.254299221000011 ], [ -76.855580206999974, 37.262437242000132 ], [ -76.857411261999857, 37.281887111000046 ], [ -76.856312628999916, 37.304673570000048 ], [ -76.860218878999888, 37.32314687700007 ], [ -76.869862433999884, 37.315497137000065 ], [ -76.873524542999917, 37.305161851000136 ], [ -76.873199022999898, 37.278469143000038 ], [ -76.878163214999944, 37.268988348 ], [ -76.889230923999889, 37.259182033000073 ], [ -76.908029751999919, 37.247463283000101 ], [ -76.931467251999919, 37.245266018 ], [ -76.94395911399991, 37.256048895 ], [ -76.953033006999931, 37.27362702000012 ], [ -76.98192298099994, 37.312404690000065 ], [ -76.990549282999922, 37.320257880000142 ], [ -77.003570115999935, 37.32314687700007 ], [ -77.014515753999888, 37.318752346000096 ], [ -77.04552161399991, 37.298407294000114 ], [ -77.051991339999915, 37.29181549700003 ], [ -77.055490688999896, 37.287176825000088 ], [ -77.062896287999905, 37.297023830000043 ], [ -77.070179816999911, 37.310288804000052 ], [ -77.072499152999882, 37.316351630000057 ], [ -77.082753058999913, 37.324408270000092 ], [ -77.091053839999887, 37.327826239 ], [ -77.100331183999941, 37.327093817000062 ], [ -77.113433397999898, 37.32314687700007 ], [ -77.134429490999935, 37.316880601000136 ], [ -77.144439256999931, 37.316351630000057 ], [ -77.155262824999909, 37.318345445 ], [ -77.172678188999981, 37.32733795800003 ], [ -77.178334113999881, 37.32933177300005 ], [ -77.220082160999908, 37.328517971000124 ], [ -77.234974738999966, 37.33417389500012 ], [ -77.250599738999938, 37.349839585 ], [ -77.277943488999938, 37.32933177300005 ], [ -77.274322068999965, 37.316351630000057 ], [ -77.264881964999859, 37.311183986000131 ], [ -77.255116339999915, 37.309271552 ], [ -77.250599738999938, 37.306097723000121 ], [ -77.239572719999899, 37.308661200000031 ], [ -77.174916144999969, 37.288397528000118 ], [ -77.089222785999908, 37.288397528000118 ], [ -77.08332271999987, 37.283270575000117 ], [ -77.076161261999914, 37.273260809000121 ], [ -77.067128058999913, 37.266506252000099 ], [ -77.055409308999913, 37.27138906500015 ], [ -77.025257941999911, 37.291978257 ], [ -77.017201300999972, 37.295233466000056 ], [ -76.995187954999949, 37.288072007 ], [ -76.986154751999948, 37.268988348 ], [ -76.981678839999887, 37.249172268 ], [ -76.973215298999946, 37.239976304000109 ], [ -76.950672980999883, 37.23517487200003 ], [ -76.913563605999855, 37.212836005000028 ], [ -76.893706834999932, 37.206488348000065 ], [ -76.801869269999912, 37.206488348000065 ], [ -76.787709113999881, 37.200100002000156 ], [ -76.762808420999903, 37.164255385000061 ], [ -76.739668037999905, 37.156574285000104 ], [ -76.717994977999894, 37.150013821000144 ], [ -76.689116990999906, 37.188625393 ], [ -76.669972192999921, 37.185007347000166 ], [ -76.666284340999965, 37.147296565000133 ], [ -76.655337124999846, 37.105121347000093 ], [ -76.673148543999929, 37.067138127000177 ], [ -76.659743361999915, 37.043310108000028 ], [ -76.638166951999921, 37.039028946000187 ], [ -76.571603969999899, 37.027736721000124 ], [ -76.571603969999899, 37.021470445 ], [ -76.581206834999875, 37.01585521 ], [ -76.584095831999889, 37.013739325000174 ], [ -76.585845506999902, 37.007879950000031 ], [ -76.579660610999923, 37.00397370000006 ], [ -76.566477016999869, 37.002915757 ], [ -76.55793209499987, 37.000433661000059 ], [ -76.551096157999922, 36.996649481000034 ], [ -76.537464972999885, 36.986761786000116 ], [ -76.513543922999872, 36.96518702200008 ], [ -76.494721874999954, 36.953985981000116 ], [ -76.492909308999913, 36.943426825000145 ], [ -76.491037563999924, 36.933172919000029 ], [ -76.481597459999932, 36.921535549000041 ], [ -76.475982225999928, 36.907904364000089 ], [ -76.481922980999855, 36.898586330000128 ], [ -76.495838995999918, 36.887355861000131 ], [ -76.524403449999909, 36.870672919000086 ], [ -76.524403449999909, 36.863226630000113 ], [ -76.49738521999987, 36.865220445000048 ], [ -76.475982225999928, 36.875189520000148 ], [ -76.456532355999911, 36.88788483300003 ], [ -76.435047980999883, 36.898016669000143 ], [ -76.408843553999958, 36.902044989000117 ], [ -76.380686001999976, 36.900620835000055 ], [ -76.354074673999918, 36.894354559000121 ], [ -76.33263098899991, 36.883734442000062 ], [ -76.334950324999852, 36.871812242000132 ], [ -76.32481848899991, 36.860500393000152 ], [ -76.308338995999918, 36.852240302000055 ], [ -76.291656053999873, 36.849554755000085 ], [ -76.309966600999928, 36.870428778000147 ], [ -76.317738410999937, 36.883530992000104 ], [ -76.315256313999924, 36.894598700000145 ], [ -76.30101477799991, 36.911607164000102 ], [ -76.306263800999886, 36.917629299000126 ], [ -76.328366099999897, 36.929285965000034 ], [ -76.330425853999969, 36.949787475 ], [ -76.310014525999918, 36.959612052000026 ], [ -76.268901347999901, 36.961415367000129 ], [ -76.168771938999924, 36.928412177000112 ], [ -76.1259856, 36.916252417000138 ], [ -76.078114386999886, 36.911607164000102 ], [ -76.05579919699997, 36.918246442000012 ], [ -76.035469161999885, 36.934849333 ], [ -76.00459196599985, 36.932358398000147 ], [ -75.988930089999911, 36.91195854200005 ], [ -75.960240790999904, 36.806753559000029 ], [ -75.86343339799987, 36.590562242000104 ], [ -75.853098110999952, 36.54901764500012 ], [ -75.852853969999927, 36.547919012000179 ], [ -75.811879035999908, 36.383449611000131 ], [ -75.796986456999946, 36.342840887000037 ], [ -75.792388475999928, 36.322170315000122 ], [ -75.79076087099989, 36.298081773000106 ], [ -75.786366339999915, 36.281968492000132 ], [ -75.757232225999957, 36.232611395000148 ], [ -75.7142634759999, 36.129828192000147 ], [ -75.563954230999883, 35.895331122000115 ], [ -75.553944464999915, 35.853664455000157 ], [ -75.523833787999877, 35.794378973000065 ], [ -75.53160559799997, 35.798407294000057 ], [ -75.551258917999917, 35.805121161000088 ], [ -75.557972785999965, 35.808661200000145 ], [ -75.560658331999946, 35.815619208000058 ], [ -75.560414191999911, 35.824693101000051 ], [ -75.561634894999912, 35.832586981000034 ], [ -75.583607550999943, 35.843817450000031 ], [ -75.589466925999886, 35.862046617000104 ], [ -75.592152472999942, 35.89744700700011 ], [ -75.607004360999923, 35.923814195000105 ], [ -75.675363735999895, 35.99990469 ], [ -75.681548631999874, 35.99990469 ], [ -75.694488084999875, 35.993557033000073 ], [ -75.709787563999924, 35.997788804 ], [ -75.719471808999884, 36.009995835000083 ], [ -75.715687628999973, 36.027167059000092 ], [ -75.707427537999877, 36.01650625200007 ], [ -75.698963995999947, 36.014960028000033 ], [ -75.675363735999895, 36.020941473000121 ], [ -75.679798956999974, 36.036688544000086 ], [ -75.687163865999878, 36.050034898000106 ], [ -75.696929490999906, 36.055609442000119 ], [ -75.708851691999939, 36.048285223 ], [ -75.723540818999936, 36.058823960000083 ], [ -75.730783657999979, 36.074896552000055 ], [ -75.735585089999859, 36.092962958000086 ], [ -75.742990688999953, 36.109767971000096 ], [ -75.742990688999953, 36.116522528000118 ], [ -75.738636847999942, 36.141180731000119 ], [ -75.749012824999852, 36.171616929000081 ], [ -75.763172980999883, 36.201239325000117 ], [ -75.773671027999853, 36.234035549000126 ], [ -75.801665818999879, 36.279038804000109 ], [ -75.815297003999916, 36.291245835 ], [ -75.818470831999889, 36.29677969 ], [ -75.81700598899991, 36.300238348 ], [ -75.813832160999965, 36.301743882000054 ], [ -75.811879035999908, 36.301499742000104 ], [ -75.818674282999922, 36.328843492000161 ], [ -75.824859178999901, 36.394273179000137 ], [ -75.828114386999857, 36.407538153000175 ], [ -75.842152472999913, 36.432033596000011 ], [ -75.845366990999963, 36.449204820000134 ], [ -75.85968990799995, 36.473456122000115 ], [ -75.867095506999931, 36.507554429000109 ], [ -75.880848761999857, 36.542547919000029 ], [ -75.880116339999915, 36.547919012000179 ], [ -75.880645311999899, 36.549261786000088 ], [ -75.885731574999909, 36.562445380000113 ], [ -75.883900519999941, 36.574042059000035 ], [ -75.88023841099988, 36.584702867000161 ], [ -75.880116339999915, 36.596340236000074 ], [ -75.884022589999915, 36.604478257 ], [ -75.895619269999941, 36.616766669000143 ], [ -75.900624152999882, 36.624253648000106 ], [ -75.917668238999852, 36.679663950000091 ], [ -75.92788652299987, 36.706203518000152 ], [ -75.935170050999972, 36.712103583 ], [ -75.946888800999972, 36.718451239000117 ], [ -75.957834438999924, 36.719427802 ], [ -75.962717251999891, 36.709295966000056 ], [ -75.975697394999912, 36.606268622000172 ], [ -75.968251105999911, 36.551662502000013 ], [ -75.966908331999917, 36.549790757000054 ], [ -75.961984829999977, 36.542954820000134 ], [ -75.949818488999881, 36.543361721000124 ], [ -75.942982550999972, 36.549627997000087 ], [ -75.942209438999953, 36.550360419000029 ], [ -75.949045376999948, 36.561590887000122 ], [ -75.932240363999938, 36.570379950000088 ], [ -75.91429602799991, 36.575873114000117 ], [ -75.908965623999848, 36.549424546000054 ], [ -75.908802863999881, 36.548651434000121 ], [ -75.908070441999939, 36.521226304000052 ], [ -75.905344204999977, 36.51190827000012 ], [ -75.901112433999856, 36.502875067 ], [ -75.901112433999856, 36.49603913 ], [ -75.911203579999921, 36.493312893000123 ], [ -75.952137824999852, 36.493312893000123 ], [ -75.972889777999853, 36.499701239000146 ], [ -75.976673956999974, 36.513820705000072 ], [ -75.978423631999874, 36.527899481000119 ], [ -76.006581183999856, 36.541815497000087 ], [ -76.013254360999895, 36.550156968000167 ], [ -76.044585740999963, 36.589504299000154 ], [ -76.043934699999909, 36.575751044000143 ], [ -76.039906378999945, 36.567328192 ], [ -76.034820115999906, 36.559556382 ], [ -76.031727667999917, 36.550279039000046 ], [ -76.030913865999906, 36.547919012000179 ], [ -76.030913865999906, 36.535874742000161 ], [ -76.036936001999919, 36.516750393 ], [ -76.037180141999869, 36.500799872000087 ], [ -76.029042120999861, 36.480292059000035 ], [ -76.011708136999857, 36.460598049000097 ], [ -75.989898240999906, 36.443793036000088 ], [ -75.968251105999911, 36.432521877000099 ], [ -75.985829230999855, 36.425279039000159 ], [ -75.973703579999949, 36.401068427000084 ], [ -75.94871985599994, 36.375189520000063 ], [ -75.92788652299987, 36.363592841000141 ], [ -75.93687903599988, 36.372219143000152 ], [ -75.943104620999947, 36.379584052000141 ], [ -75.946888800999972, 36.387518622000115 ], [ -75.949045376999948, 36.39769114800005 ], [ -75.945383266999926, 36.396958726000108 ], [ -75.939076300999972, 36.408677476000108 ], [ -75.931304490999878, 36.428697007000082 ], [ -75.91856848899991, 36.429348049000126 ], [ -75.916371222999913, 36.402655341000113 ], [ -75.921742316999882, 36.356756903000033 ], [ -75.912831183999856, 36.341294664000102 ], [ -75.880441860999952, 36.30068594 ], [ -75.873361782999979, 36.284735419000086 ], [ -75.869943813999953, 36.272202867000189 ], [ -75.816151495999918, 36.15615469000015 ], [ -75.811879035999908, 36.140773830000015 ], [ -75.804025844999927, 36.121323960000112 ], [ -75.790353969999899, 36.099269924000012 ], [ -75.785511847999913, 36.081610419000086 ], [ -75.804432745999918, 36.075588283000101 ], [ -75.821156378999945, 36.08266836100016 ], [ -75.837961391999869, 36.097805080000157 ], [ -75.863392706999889, 36.127101955000072 ], [ -75.868397589999915, 36.136664130000057 ], [ -75.866444464999887, 36.145453192000119 ], [ -75.862049933999913, 36.153713283000016 ], [ -75.85968990799995, 36.161566473 ], [ -75.862212693999965, 36.171779690000122 ], [ -75.868072068999908, 36.18301015800013 ], [ -75.880116339999915, 36.19912344 ], [ -75.90257727799991, 36.214300848000093 ], [ -75.908070441999939, 36.219631252000156 ], [ -75.910308397999927, 36.226141669000143 ], [ -75.911040818999965, 36.240383205000157 ], [ -75.91429602799991, 36.246893622000144 ], [ -75.928456183999941, 36.255275783000016 ], [ -75.942982550999972, 36.260443427000112 ], [ -75.948231574999852, 36.269110419000114 ], [ -75.934722459999875, 36.287827867000161 ], [ -75.961740688999924, 36.306952216000141 ], [ -75.976551886999914, 36.314032294000114 ], [ -75.996205206999946, 36.315171617000047 ], [ -75.987172003999945, 36.299872137000179 ], [ -75.976144985999895, 36.293036200000174 ], [ -75.966664191999882, 36.284369208000086 ], [ -75.958363410999908, 36.246771552000084 ], [ -75.951079881999902, 36.227606512000122 ], [ -75.949696417999917, 36.212062893 ], [ -75.962717251999891, 36.205959377000042 ], [ -75.937163865999906, 36.185044664000159 ], [ -75.923003709999904, 36.17682526200015 ], [ -75.908070441999939, 36.171820380000113 ], [ -75.908070441999939, 36.164984442 ], [ -75.97887122299997, 36.183172919000086 ], [ -75.999623175999943, 36.185451565000065 ], [ -76.020415818999936, 36.191473700000174 ], [ -76.037464972999913, 36.205796617000075 ], [ -76.061675584999904, 36.23631419500002 ], [ -76.06965084499987, 36.24152252800009 ], [ -76.087798631999959, 36.245591539000046 ], [ -76.096099412999934, 36.250637111000074 ], [ -76.113596157999979, 36.267320054000109 ], [ -76.13341223899991, 36.281683661 ], [ -76.149484829999977, 36.28896719 ], [ -76.202259894999969, 36.301499742000104 ], [ -76.193430141999897, 36.305812893 ], [ -76.18614661399991, 36.312933661000059 ], [ -76.186105923999918, 36.319647528000118 ], [ -76.198841925999943, 36.322658596000011 ], [ -76.208566860999895, 36.317124742000189 ], [ -76.217396613999966, 36.305243231000063 ], [ -76.222157355999855, 36.293280341000113 ], [ -76.21934973899991, 36.287827867000161 ], [ -76.19676673099994, 36.283392645 ], [ -76.174387173999918, 36.272650458 ], [ -76.154855923999946, 36.259182033000016 ], [ -76.140858527999882, 36.246893622000144 ], [ -76.124745245999918, 36.223130601000051 ], [ -76.114409959999904, 36.21112702000012 ], [ -76.090158657999922, 36.200588283000158 ], [ -76.080230272999898, 36.177150783000101 ], [ -76.068511522999927, 36.171820380000113 ], [ -76.057362433999913, 36.16876862200003 ], [ -76.06346594999988, 36.162014065000093 ], [ -76.085560675999972, 36.150702216000113 ], [ -76.0970759759999, 36.147284247000087 ], [ -76.13341223899991, 36.144476630000057 ], [ -76.13341223899991, 36.13703034100017 ], [ -76.126576300999886, 36.13703034100017 ], [ -76.126576300999886, 36.130804755000113 ], [ -76.158070441999882, 36.129828192000147 ], [ -76.16812089799987, 36.130804755000113 ], [ -76.177967902999882, 36.134019273000078 ], [ -76.209380662999905, 36.149725653000033 ], [ -76.226185675999915, 36.172756252000013 ], [ -76.232655402999939, 36.177964585 ], [ -76.241769985999923, 36.18097565300009 ], [ -76.269886847999913, 36.19912344 ], [ -76.285267706999946, 36.21181875200007 ], [ -76.291981574999909, 36.212713934000149 ], [ -76.291656053999873, 36.19912344 ], [ -76.287220831999917, 36.190375067000119 ], [ -76.279123501999976, 36.181463934000092 ], [ -76.269276495999861, 36.174546617000189 ], [ -76.25999915299991, 36.171820380000113 ], [ -76.248646613999938, 36.163397528000175 ], [ -76.21385657499988, 36.123236395000063 ], [ -76.195423956999946, 36.109767971000096 ], [ -76.195423956999946, 36.103501695000134 ], [ -76.220122850999928, 36.09951406500015 ], [ -76.244496222999885, 36.103949286000116 ], [ -76.349436001999919, 36.141994533000044 ], [ -76.377430792999917, 36.156236070000134 ], [ -76.394032355999883, 36.177964585 ], [ -76.41038977799991, 36.174302476000051 ], [ -76.427723761999886, 36.18301015800013 ], [ -76.445423956999889, 36.19619375200007 ], [ -76.463002081999917, 36.205959377000042 ], [ -76.449940558999856, 36.18260325700011 ], [ -76.442372199999909, 36.172308661000031 ], [ -76.435047980999883, 36.164984442 ], [ -76.399159308999913, 36.148627020000092 ], [ -76.394032355999883, 36.140773830000015 ], [ -76.383127407999922, 36.130113023000078 ], [ -76.357899542999945, 36.11737702000012 ], [ -76.330148891999869, 36.107001044000029 ], [ -76.31151282499988, 36.103501695000134 ], [ -76.31151282499988, 36.096096096000153 ], [ -76.411732550999886, 36.08295319200009 ], [ -76.428212042999888, 36.075588283000101 ], [ -76.428212042999888, 36.068101304000109 ], [ -76.424916144999941, 36.067775783000101 ], [ -76.414540167999945, 36.068101304000109 ], [ -76.435943162999877, 36.048163153000033 ], [ -76.467640753999945, 36.030910549000126 ], [ -76.500314907999893, 36.018622137000179 ], [ -76.524403449999909, 36.013495184000149 ], [ -76.558705206999974, 36.011419989000146 ], [ -76.577259894999884, 36.012396552000112 ], [ -76.5892634759999, 36.017238674000097 ], [ -76.617543097999942, 36.053697007000054 ], [ -76.626820441999911, 36.06195709800015 ], [ -76.643666144999912, 36.03839752800009 ], [ -76.666656053999901, 36.03839752800009 ], [ -76.687001105999883, 36.056097723 ], [ -76.701039191999939, 36.110541083 ], [ -76.724517381999902, 36.155340887000037 ], [ -76.729847785999965, 36.181708075000031 ], [ -76.716175910999937, 36.226385809000092 ], [ -76.710804816999882, 36.236761786 ], [ -76.696522589999887, 36.250433661000116 ], [ -76.688872850999957, 36.259914455000128 ], [ -76.679554816999911, 36.287543036000145 ], [ -76.688343878999973, 36.305161851000079 ], [ -76.707590298999918, 36.315863348000093 ], [ -76.729847785999965, 36.322658596000011 ], [ -76.723703579999892, 36.311102606000091 ], [ -76.705677863999966, 36.294134833000115 ], [ -76.701975063999924, 36.284735419000086 ], [ -76.704213019999912, 36.27155182500006 ], [ -76.710072394999941, 36.263373114000117 ], [ -76.726144985999923, 36.250637111000074 ], [ -76.742909308999856, 36.231634833000086 ], [ -76.75230872299997, 36.214016018000152 ], [ -76.756418423999918, 36.193304755000057 ], [ -76.757191535999937, 36.127101955000072 ], [ -76.753977016999897, 36.116115627000013 ], [ -76.739898240999935, 36.093329169000086 ], [ -76.733550584999904, 36.065090236000017 ], [ -76.726063605999855, 36.056219794000171 ], [ -76.717111782999922, 36.049139716000113 ], [ -76.709339972999913, 36.040838934000035 ], [ -76.706654425999943, 36.028794664000131 ], [ -76.70738684799997, 36.017157294000114 ], [ -76.703968878999945, 36.008856512000037 ], [ -76.688872850999957, 36.006659247000144 ], [ -76.694976365999935, 35.992499091000028 ], [ -76.729847785999965, 35.952704169000029 ], [ -76.729847785999965, 35.945257880000057 ], [ -76.591623501999948, 35.944728908000073 ], [ -76.565337693999936, 35.938421942000119 ], [ -76.55793209499987, 35.938421942000119 ], [ -76.525624152999939, 35.955145575000145 ], [ -76.473011847999913, 35.972357489000089 ], [ -76.420236782999922, 35.98126862200003 ], [ -76.387277798999946, 35.973130601000108 ], [ -76.383168097999913, 35.963120835000112 ], [ -76.384429490999906, 35.953070380000142 ], [ -76.387033657999893, 35.94440338700015 ], [ -76.387277798999946, 35.938421942000119 ], [ -76.380197719999899, 35.932033596000011 ], [ -76.373036261999943, 35.93496328300013 ], [ -76.364369269999941, 35.941351630000057 ], [ -76.353138800999943, 35.945257880000057 ], [ -76.331654425999915, 35.941839911000145 ], [ -76.289214647999927, 35.925848700000145 ], [ -76.263742641999841, 35.924750067 ], [ -76.276966925999972, 35.937486070000048 ], [ -76.297922329999921, 35.947211005 ], [ -76.30679277299987, 35.957831122000144 ], [ -76.284169074999909, 35.973130601000108 ], [ -76.195423956999946, 35.993638414000074 ], [ -76.099842902999882, 35.99990469 ], [ -76.075917120999918, 35.995021877000127 ], [ -76.048329230999883, 35.983710028000147 ], [ -76.029367641999869, 35.968695380000113 ], [ -76.030913865999906, 35.952704169000029 ], [ -76.053089972999885, 35.962632554000137 ], [ -76.064035610999952, 35.9532738300001 ], [ -76.071929490999935, 35.918524481000034 ], [ -76.037668423999946, 35.929103908000101 ], [ -76.023548956999917, 35.931586005000113 ], [ -76.032460089999859, 35.909654039000188 ], [ -76.045887824999852, 35.888617255000057 ], [ -76.063588019999941, 35.873683986000017 ], [ -76.085560675999972, 35.870103257000054 ], [ -76.085560675999972, 35.863267320000134 ], [ -76.063140428999958, 35.848049221000153 ], [ -76.051136847999942, 35.819240627000013 ], [ -76.056304490999935, 35.793402411 ], [ -76.085560675999972, 35.786932684000092 ], [ -76.112456834999932, 35.794582424000126 ], [ -76.124175584999932, 35.794582424000126 ], [ -76.1166072259999, 35.783880927 ], [ -76.104969855999883, 35.777167059000149 ], [ -76.089222785999937, 35.771795966000084 ], [ -76.07262122299997, 35.768377997000087 ], [ -76.058257615999906, 35.76776764500012 ], [ -76.065093553999901, 35.76776764500012 ], [ -76.056752081999946, 35.761542059000149 ], [ -76.047271287999934, 35.749457098000065 ], [ -76.042469855999855, 35.737697658000101 ], [ -76.048003709999961, 35.732367255000113 ], [ -76.058257615999906, 35.726467190000093 ], [ -76.053537563999981, 35.713812567000119 ], [ -76.04328365799995, 35.702053127000127 ], [ -76.037180141999869, 35.698797919000086 ], [ -76.054269985999923, 35.683905341000056 ], [ -76.084543423999918, 35.688910223000093 ], [ -76.117054816999882, 35.698879299000069 ], [ -76.140858527999882, 35.698797919000086 ], [ -76.123605923999975, 35.673529364000146 ], [ -76.099964972999942, 35.665187893000066 ], [ -76.072743292999945, 35.666734117000104 ], [ -76.044585740999963, 35.671535549000012 ], [ -76.04539954299986, 35.668280341000141 ], [ -76.04450436099998, 35.66396719000015 ], [ -76.041818813999896, 35.658351955000157 ], [ -76.037180141999869, 35.651027736000131 ], [ -76.030913865999906, 35.651027736000131 ], [ -75.994862433999856, 35.730292059000092 ], [ -75.98997962099989, 35.763983466000113 ], [ -75.98997962099989, 35.886908270000063 ], [ -75.982411261999943, 35.89581940300009 ], [ -75.949208136999914, 35.914374091000113 ], [ -75.941558397999898, 35.921616929000109 ], [ -75.934925910999937, 35.92487213700015 ], [ -75.920399542999888, 35.912746486000074 ], [ -75.900624152999882, 35.89004140800013 ], [ -75.876291469999899, 35.879136460000055 ], [ -75.870228644999912, 35.877590236000017 ], [ -75.861439581999946, 35.880682684000092 ], [ -75.859242316999939, 35.887518622000115 ], [ -75.862456834999904, 35.894354559000035 ], [ -75.882557745999861, 35.901800848 ], [ -75.893788214999859, 35.912502346000124 ], [ -75.902658657999893, 35.925848700000145 ], [ -75.908070441999939, 35.938421942000119 ], [ -75.887277798999946, 35.934027411000059 ], [ -75.866037563999981, 35.926499742000189 ], [ -75.844960089999859, 35.92324453300013 ], [ -75.824859178999901, 35.931586005000113 ], [ -75.834055141999869, 35.938625393000095 ], [ -75.84406490799995, 35.942938544000086 ], [ -75.85496985599994, 35.945054429000024 ], [ -75.867095506999931, 35.945257880000057 ], [ -75.8607478509999, 35.952785549000012 ], [ -75.856312628999916, 35.961004950000117 ], [ -75.853667772999927, 35.970119533000101 ], [ -75.852853969999927, 35.979966539000131 ], [ -75.818918423999975, 35.960516669000029 ], [ -75.790516730999855, 35.932521877000013 ], [ -75.742990688999953, 35.870103257000054 ], [ -75.742990688999953, 35.856878973 ], [ -75.726144985999952, 35.836086330000015 ], [ -75.721831834999932, 35.829169012000122 ], [ -75.722035285999908, 35.810736395000092 ], [ -75.729562954999949, 35.79629140800013 ], [ -75.738433397999898, 35.782863674000126 ], [ -75.742990688999953, 35.76776764500012 ], [ -75.740101691999911, 35.758286851000108 ], [ -75.726226365999935, 35.740383205000072 ], [ -75.721831834999932, 35.726141669000143 ], [ -75.72085527299987, 35.705023505000057 ], [ -75.724924282999922, 35.69822825700011 ], [ -75.749826626999976, 35.698797919000086 ], [ -75.773426886999914, 35.696926174000126 ], [ -75.77358964799987, 35.689764716000084 ], [ -75.763417120999918, 35.671535549000012 ], [ -75.740956183999913, 35.643011786 ], [ -75.739613410999937, 35.632635809000092 ], [ -75.753814256999931, 35.611802476000108 ], [ -75.758290167999917, 35.607245184000178 ], [ -75.764393683999913, 35.603908596000153 ], [ -75.773345506999931, 35.60260651200015 ], [ -75.782338019999941, 35.599188544000143 ], [ -75.783355272999898, 35.591131903000118 ], [ -75.782053188999924, 35.582220770000063 ], [ -75.783924933999884, 35.575913804000137 ], [ -75.795033331999917, 35.570949611000074 ], [ -75.808338995999918, 35.568833726000079 ], [ -75.839182094999899, 35.568508205000128 ], [ -75.839182094999899, 35.575913804000137 ], [ -75.825917120999861, 35.580877997000172 ], [ -75.818674282999922, 35.582098700000088 ], [ -75.819569464999915, 35.586127020000063 ], [ -75.82091223899991, 35.589544989000089 ], [ -75.822621222999913, 35.592678127000156 ], [ -75.824859178999901, 35.595770575000031 ], [ -75.849476691999911, 35.587062893000152 ], [ -75.866444464999887, 35.595648505000057 ], [ -75.878041144999912, 35.614732164000046 ], [ -75.886341925999972, 35.637355861000017 ], [ -75.894398566999911, 35.622015692000062 ], [ -75.895334438999896, 35.604559637000094 ], [ -75.894520636999886, 35.588934637000122 ], [ -75.897206183999856, 35.579046942 ], [ -75.954457160999908, 35.530340887000179 ], [ -75.959339972999885, 35.52822500200007 ], [ -75.97789466099988, 35.525213934000149 ], [ -75.979400193999936, 35.51972077000012 ], [ -75.976551886999914, 35.512925523000106 ], [ -75.975697394999912, 35.507025458000086 ], [ -75.97280839799987, 35.502142645 ], [ -75.973215298999975, 35.49713776200015 ], [ -75.979156053999901, 35.489691473000093 ], [ -75.985422329999949, 35.486151434000092 ], [ -76.010568813999924, 35.479071356000034 ], [ -76.0033259759999, 35.465033270000092 ], [ -76.008859829999921, 35.456040757000082 ], [ -76.018422003999916, 35.449164130000057 ], [ -76.023548956999917, 35.441229559000092 ], [ -76.024647589999887, 35.427313544000029 ], [ -76.028228318999936, 35.419338283000158 ], [ -76.034779425999915, 35.41815827000012 ], [ -76.044585740999963, 35.424505927000084 ], [ -76.037180141999869, 35.431341864000089 ], [ -76.056141730999883, 35.44147370000006 ], [ -76.071034308999941, 35.427232164000046 ], [ -76.075998501999891, 35.404852606000119 ], [ -76.065093553999901, 35.390326239000089 ], [ -76.065093553999901, 35.384182033000101 ], [ -76.079741990999906, 35.382961330000072 ], [ -76.118275519999912, 35.372788804000137 ], [ -76.129994269999884, 35.366156317000062 ], [ -76.142445441999911, 35.352484442000119 ], [ -76.150380011999886, 35.347154039000159 ], [ -76.218129035999908, 35.348863023000078 ], [ -76.235747850999928, 35.353216864000061 ], [ -76.246449347999942, 35.372015692000119 ], [ -76.253488735999923, 35.373724677000112 ], [ -76.260487433999884, 35.37002187700007 ], [ -76.263742641999841, 35.359320380000057 ], [ -76.268706834999904, 35.348374742000189 ], [ -76.280181443999936, 35.350734768000123 ], [ -76.310658331999974, 35.367661851000108 ], [ -76.324330206999917, 35.393744208 ], [ -76.33263098899991, 35.403998114000117 ], [ -76.355336066999939, 35.413478908000016 ], [ -76.363514777999853, 35.405218817000119 ], [ -76.363758917999888, 35.39142487200003 ], [ -76.363026495999861, 35.384182033000101 ], [ -76.35562089799987, 35.377671617000104 ], [ -76.352406378999916, 35.36359284100017 ], [ -76.357167120999918, 35.349514065000122 ], [ -76.373605923999918, 35.343166408000101 ], [ -76.379628058999913, 35.353257554000052 ], [ -76.394032355999883, 35.362453518000123 ], [ -76.40294348899991, 35.365179755 ], [ -76.410267706999917, 35.364325262000094 ], [ -76.41616777299987, 35.366034247000087 ], [ -76.420765753999888, 35.376695054000137 ], [ -76.379750128999888, 35.376695054000137 ], [ -76.379750128999888, 35.384182033000101 ], [ -76.388498501999948, 35.392320054000109 ], [ -76.392689581999889, 35.409002997000144 ], [ -76.394032355999883, 35.441229559000092 ], [ -76.402333136999857, 35.459621486000131 ], [ -76.41832434799997, 35.464504299000012 ], [ -76.428863084999932, 35.457017320000048 ], [ -76.420765753999888, 35.438177802000027 ], [ -76.442494269999969, 35.403998114000117 ], [ -76.454009568999908, 35.41014232 ], [ -76.465565558999941, 35.411281643000123 ], [ -76.475819464999859, 35.40729401200015 ], [ -76.483469204999892, 35.397772528000147 ], [ -76.476429816999911, 35.394435940000122 ], [ -76.470692511999943, 35.389797268 ], [ -76.46617591099988, 35.383856512000179 ], [ -76.463002081999917, 35.376695054000137 ], [ -76.49836178299995, 35.391343492000047 ], [ -76.511830206999917, 35.401027736000103 ], [ -76.524403449999909, 35.417669989000146 ], [ -76.515451626999891, 35.419094143000123 ], [ -76.510650193999908, 35.421291408000016 ], [ -76.507679816999882, 35.42503489800005 ], [ -76.503895636999857, 35.431341864000089 ], [ -76.546050584999904, 35.445217190000065 ], [ -76.560129360999952, 35.455877997000115 ], [ -76.544911261999886, 35.46605052300005 ], [ -76.544911261999886, 35.472235419000029 ], [ -76.564442511999857, 35.483872789000131 ], [ -76.57518469999988, 35.497463283000073 ], [ -76.570668097999913, 35.508612372000115 ], [ -76.544911261999886, 35.513251044000029 ], [ -76.494699673999889, 35.506781317000119 ], [ -76.47789466099988, 35.513861395000092 ], [ -76.463002081999917, 35.541164455000072 ], [ -76.48892167899993, 35.536810614000089 ], [ -76.511708136999857, 35.537665106000176 ], [ -76.55793209499987, 35.548041083000086 ], [ -76.584950324999909, 35.549709377000099 ], [ -76.605946417999945, 35.542466539000159 ], [ -76.647328253999973, 35.52069733300003 ], [ -76.631988084999904, 35.51748281500015 ], [ -76.620757615999906, 35.510809637000094 ], [ -76.612619594999899, 35.502142645 ], [ -76.606312628999945, 35.492743231000176 ], [ -76.616322394999941, 35.471136786000088 ], [ -76.619984503999888, 35.46605052300005 ], [ -76.605783657999979, 35.45246002800009 ], [ -76.599191860999895, 35.447739976 ], [ -76.592681443999908, 35.444322007 ], [ -76.592681443999908, 35.438177802000027 ], [ -76.59825598899991, 35.435492255000113 ], [ -76.601063605999883, 35.432359117000047 ], [ -76.603016730999911, 35.428656317 ], [ -76.606312628999945, 35.424505927000084 ], [ -76.596302863999881, 35.42112864800005 ], [ -76.588449673999889, 35.416896877000127 ], [ -76.58267167899993, 35.411281643000123 ], [ -76.579009568999879, 35.403998114000117 ], [ -76.59976152299987, 35.395086981000176 ], [ -76.628773566999968, 35.399969794000143 ], [ -76.650013800999943, 35.41535065300009 ], [ -76.647328253999973, 35.438177802000027 ], [ -76.656605597999913, 35.436672268000152 ], [ -76.664214647999955, 35.434230861000017 ], [ -76.670399542999917, 35.430365302000112 ], [ -76.675200975999928, 35.424505927000084 ], [ -76.704335089999887, 35.430365302000112 ], [ -76.758412238999966, 35.41885000200007 ], [ -76.781076626999919, 35.4278832050001 ], [ -76.801991339999887, 35.444891669000143 ], [ -76.82184811099998, 35.453029690000065 ], [ -76.873199022999898, 35.458644924000069 ], [ -76.901275193999908, 35.465521552000084 ], [ -76.948963995999861, 35.487982489000089 ], [ -76.994048631999931, 35.497056382000082 ], [ -77.014149542999888, 35.50775788 ], [ -77.051991339999915, 35.534369208000143 ], [ -77.035796678999873, 35.503851630000028 ], [ -77.025502081999946, 35.491522528000147 ], [ -77.014149542999888, 35.486558335000112 ], [ -76.994496222999913, 35.481594143000152 ], [ -76.98501542899993, 35.469224351000108 ], [ -76.976307745999918, 35.438177802000027 ], [ -76.945139126999948, 35.45246002800009 ], [ -76.903920050999886, 35.443915106000176 ], [ -76.862904425999972, 35.424017645000092 ], [ -76.832264777999882, 35.403998114000117 ], [ -76.817046678999901, 35.396307684000092 ], [ -76.757191535999937, 35.384182033000101 ], [ -76.694081183999856, 35.353664455000157 ], [ -76.611643032999922, 35.337713934000149 ], [ -76.520985480999911, 35.313137111000131 ], [ -76.497059699999852, 35.31150950700011 ], [ -76.494252081999889, 35.300970770000063 ], [ -76.487619594999927, 35.291489976000051 ], [ -76.472645636999886, 35.277411200000117 ], [ -76.470366990999906, 35.270575262000094 ], [ -76.480458136999886, 35.253322658000073 ], [ -76.483469204999892, 35.242905992000189 ], [ -76.49282792899993, 35.230169989000146 ], [ -76.515288865999935, 35.23037344 ], [ -76.565337693999936, 35.239488023 ], [ -76.565337693999936, 35.233303127000013 ], [ -76.54165605399993, 35.224351304 ], [ -76.529611782999922, 35.217678127000127 ], [ -76.524403449999909, 35.208482164000159 ], [ -76.530262824999852, 35.199937242000047 ], [ -76.544056769999969, 35.201849677 ], [ -76.571603969999899, 35.211615302000141 ], [ -76.588286912999934, 35.209133205000015 ], [ -76.600412563999924, 35.201890367000189 ], [ -76.609364386999857, 35.194525458 ], [ -76.61656653599988, 35.191107489000089 ], [ -76.631988084999904, 35.190252997000172 ], [ -76.64858964799987, 35.187160549000097 ], [ -76.663929816999911, 35.18089427300005 ], [ -76.675200975999928, 35.170599677000112 ], [ -76.661854620999918, 35.166815497000115 ], [ -76.619984503999888, 35.164455471000153 ], [ -76.608021613999966, 35.159084377000099 ], [ -76.598296678999901, 35.152329820000048 ], [ -76.587310350999957, 35.149725653000147 ], [ -76.571603969999899, 35.156968492000161 ], [ -76.576527472999942, 35.158880927000141 ], [ -76.581206834999875, 35.162258205000157 ], [ -76.585845506999902, 35.164455471000153 ], [ -76.585845506999902, 35.170599677000112 ], [ -76.571603969999899, 35.178045966000113 ], [ -76.55483964799987, 35.149725653000147 ], [ -76.560536261999857, 35.124416408000016 ], [ -76.582102016999869, 35.105454820000105 ], [ -76.613148566999882, 35.096136786000059 ], [ -76.607980923999975, 35.079820054000137 ], [ -76.643299933999913, 35.058050848000065 ], [ -76.687611456999946, 35.0372582050001 ], [ -76.709339972999913, 35.023504950000174 ], [ -76.72594153599988, 35.000555731000176 ], [ -76.764475063999953, 34.989203192 ], [ -76.807769334999932, 34.987250067000062 ], [ -76.839100714999887, 34.992499091000141 ], [ -76.873646613999881, 35.008693752000099 ], [ -76.901193813999924, 35.02724844 ], [ -76.94627844999988, 35.06858958500014 ], [ -76.959543423999918, 35.075018622000144 ], [ -76.996245897999927, 35.087632554000137 ], [ -77.043365037999905, 35.14362213700015 ], [ -77.079335089999887, 35.156968492000161 ], [ -77.036732550999943, 35.099310614000117 ], [ -77.03490149599989, 35.088690497000087 ], [ -77.01537024599989, 35.080877997000087 ], [ -76.999379035999908, 35.062160549000126 ], [ -76.976307745999918, 35.01976146000014 ], [ -76.940256313999981, 34.979803778000175 ], [ -76.899159308999884, 34.964056708000115 ], [ -76.854074673999918, 34.957424221000068 ], [ -76.805572068999936, 34.944728908000101 ], [ -76.770822719999899, 34.924221096000153 ], [ -76.766102667999888, 34.917222398000078 ], [ -76.761952277999939, 34.91242096600017 ], [ -76.757191535999937, 34.909898179000052 ], [ -76.749989386999914, 34.911566473000065 ], [ -76.739979620999918, 34.92177969 ], [ -76.713368292999888, 34.92987702000012 ], [ -76.695708787999877, 34.943345445000105 ], [ -76.678944464999859, 34.959377346000011 ], [ -76.661529100999871, 34.972601630000057 ], [ -76.642445441999911, 34.98383209800015 ], [ -76.631825324999852, 34.987046617000104 ], [ -76.619984503999888, 34.986273505 ], [ -76.610585089999887, 34.980454820000134 ], [ -76.602609829999921, 34.971014716000028 ], [ -76.597401495999918, 34.962225653000147 ], [ -76.596099412999934, 34.958319403000147 ], [ -76.578480597999913, 34.950425523 ], [ -76.555327928999958, 34.936712958000058 ], [ -76.539865688999924, 34.932074286000116 ], [ -76.544911261999886, 34.951483466000056 ], [ -76.566477016999869, 34.979193427000112 ], [ -76.568592902999882, 34.993231512000179 ], [ -76.5482478509999, 34.999335028000147 ], [ -76.533599412999877, 34.99941640800013 ], [ -76.518299933999913, 34.997300523000135 ], [ -76.503244594999899, 34.989569403000033 ], [ -76.489613410999965, 34.972601630000057 ], [ -76.483631964999859, 34.987127997000087 ], [ -76.482899542999917, 35.001654364000117 ], [ -76.483998175999972, 35.015285549000069 ], [ -76.483469204999892, 35.02724844 ], [ -76.476958787999905, 35.041083075000088 ], [ -76.465158657999922, 35.059800523000078 ], [ -76.453765428999958, 35.073391018000123 ], [ -76.44871985599994, 35.071600653000033 ], [ -76.446522589999944, 35.067206122000144 ], [ -76.437163865999906, 35.05491771 ], [ -76.435047980999883, 35.051174221000068 ], [ -76.43618730399993, 35.041449286000116 ], [ -76.441314256999931, 35.025620835000083 ], [ -76.442494269999969, 35.01666901200015 ], [ -76.42446855399993, 34.995917059000149 ], [ -76.418853318999936, 34.98651764500012 ], [ -76.424143032999922, 34.980861721000124 ], [ -76.450306769999969, 34.969549872000144 ], [ -76.457834438999924, 34.970160223000036 ], [ -76.464344855999911, 34.968451239000032 ], [ -76.469146287999905, 34.958319403000147 ], [ -76.469553188999896, 34.949937242000189 ], [ -76.466664191999882, 34.944281317 ], [ -76.461822068999908, 34.940578518000066 ], [ -76.456125454999921, 34.937892971000096 ], [ -76.439768032999893, 34.938666083 ], [ -76.396107550999915, 34.950140692000147 ], [ -76.387277798999946, 34.94806549700003 ], [ -76.37755286399991, 34.96580638200011 ], [ -76.356271938999924, 34.97199127800009 ], [ -76.334868943999879, 34.973089911000145 ], [ -76.325184699999909, 34.975734768000123 ], [ -76.328236456999917, 34.991156317000062 ], [ -76.345041469999927, 35.012274481000148 ], [ -76.353138800999943, 35.02724844 ], [ -76.322173631999902, 35.019924221000011 ], [ -76.306630011999914, 35.003119208 ], [ -76.293527798999946, 34.984808661000116 ], [ -76.269886847999913, 34.972601630000057 ], [ -76.269886847999913, 34.96515534100017 ], [ -76.279408331999917, 34.959662177000141 ], [ -76.293527798999946, 34.943793036000116 ], [ -76.304676886999857, 34.937892971000096 ], [ -76.320464647999898, 34.93748607 ], [ -76.332020636999943, 34.941148179000137 ], [ -76.340402798999889, 34.939683335000083 ], [ -76.346262173999946, 34.924221096000153 ], [ -76.344105597999942, 34.914048570000105 ], [ -76.337757941999911, 34.907782294000143 ], [ -76.33568274599989, 34.89948151200015 ], [ -76.346262173999946, 34.883246161000116 ], [ -76.354847785999937, 34.877427476000079 ], [ -76.394032355999883, 34.862738348000065 ], [ -76.395904100999957, 34.86815013200011 ], [ -76.400257941999939, 34.877590236000131 ], [ -76.401478644999969, 34.883246161000116 ], [ -76.407785610999895, 34.883246161000116 ], [ -76.411203579999921, 34.875677802000084 ], [ -76.411732550999886, 34.858710028000118 ], [ -76.414540167999945, 34.849066473000121 ], [ -76.420643683999913, 34.839544989000146 ], [ -76.426584438999953, 34.833726304 ], [ -76.442494269999969, 34.821763414000074 ], [ -76.475982225999928, 34.787054755 ], [ -76.483021613999881, 34.782619533000016 ], [ -76.490142381999931, 34.779242255 ], [ -76.497181769999912, 34.774603583000086 ], [ -76.503895636999857, 34.766546942000119 ], [ -76.503895636999857, 34.761175848000093 ], [ -76.500640428999901, 34.755113023 ], [ -76.499094204999977, 34.748114325000088 ], [ -76.503895636999857, 34.739813544000029 ], [ -76.512766079999921, 34.73436107 ], [ -76.522775844999899, 34.731919664000046 ], [ -76.544911261999886, 34.732407945000134 ], [ -76.566232876999919, 34.738511460000112 ], [ -76.583566860999923, 34.751288153000147 ], [ -76.588246222999942, 34.76658763200011 ], [ -76.571603969999899, 34.780829169000029 ], [ -76.593332485999952, 34.796779690000122 ], [ -76.607533331999974, 34.813910223000065 ], [ -76.615956183999913, 34.816066799000069 ], [ -76.622181769999884, 34.731024481000148 ], [ -76.632964647999898, 34.709173895000035 ], [ -76.658192511999857, 34.721869208000086 ], [ -76.665109829999949, 34.741522528000033 ], [ -76.666981574999909, 34.767767645000148 ], [ -76.671213344999842, 34.790838934000121 ], [ -76.685210740999906, 34.800726630000113 ], [ -76.709787563999924, 34.796576239000089 ], [ -76.734608527999882, 34.785874742000161 ], [ -76.756174282999979, 34.770819403000147 ], [ -76.770822719999899, 34.753485419000143 ], [ -76.754790818999908, 34.754136460000112 ], [ -76.745716925999886, 34.756577867000047 ], [ -76.737416144999912, 34.760687567 ], [ -76.729847785999965, 34.766546942000119 ], [ -76.708078579999921, 34.73826732 ], [ -76.701975063999924, 34.72557200700011 ], [ -76.896107550999886, 34.739203192000062 ], [ -76.928537563999981, 34.721869208000086 ], [ -77.072865363999881, 34.686265367000104 ], [ -77.082427537999877, 34.680853583000058 ], [ -77.093251105999883, 34.676988023000078 ], [ -77.102650519999884, 34.683254299000012 ], [ -77.102691209999875, 34.694322007000054 ], [ -77.085519985999952, 34.705145575000145 ], [ -77.107248501999919, 34.732407945000134 ], [ -77.11359615799995, 34.755764065000122 ], [ -77.113433397999898, 34.759711005000113 ], [ -77.131703253999973, 34.762396552 ], [ -77.131988084999904, 34.747626044000114 ], [ -77.12474524599989, 34.73037344 ], [ -77.120269334999904, 34.72557200700011 ], [ -77.121896938999924, 34.708319403000118 ], [ -77.127756313999981, 34.693304755 ], [ -77.13687089799987, 34.682359117000104 ], [ -77.148264126999948, 34.677191473000036 ], [ -77.154774542999917, 34.67991771 ], [ -77.160267706999946, 34.68695709800015 ], [ -77.166411912999934, 34.692572333000058 ], [ -77.174916144999969, 34.691473700000117 ], [ -77.175770636999886, 34.684963283000016 ], [ -77.166981574999909, 34.667141018000123 ], [ -77.171498175999943, 34.663519598000093 ], [ -77.201527472999913, 34.650702216000141 ], [ -77.253570115999963, 34.594387111000074 ], [ -77.281361456999946, 34.581529039000046 ], [ -77.293446417999945, 34.57843659100017 ], [ -77.318023240999935, 34.564276434000064 ], [ -77.336537238999966, 34.561102606000176 ], [ -77.356841600999871, 34.57709381700009 ], [ -77.360463019999941, 34.578192450000031 ], [ -77.365712042999917, 34.582017320000048 ], [ -77.401478644999941, 34.589056708000115 ], [ -77.386870897999927, 34.603501695000077 ], [ -77.343129035999937, 34.631293036000145 ], [ -77.333159959999932, 34.64984772300015 ], [ -77.340443488999966, 34.660956122000172 ], [ -77.378407355999883, 34.701320705000128 ], [ -77.394602016999841, 34.711900132 ], [ -77.394602016999841, 34.71816640800013 ], [ -77.378041144999969, 34.718654690000122 ], [ -77.375111456999946, 34.724310614000032 ], [ -77.381906704999949, 34.73232656500015 ], [ -77.394602016999841, 34.739813544000029 ], [ -77.403472459999875, 34.740057684000149 ], [ -77.413726365999906, 34.737860419000171 ], [ -77.424672003999973, 34.74013906500015 ], [ -77.435617641999841, 34.753485419000143 ], [ -77.428456183999884, 34.701239325000145 ], [ -77.421986456999889, 34.68455638200011 ], [ -77.409169074999852, 34.690904039000046 ], [ -77.396799282999922, 34.683783270000092 ], [ -77.386789516999841, 34.670111395000148 ], [ -77.380970831999889, 34.656683661000059 ], [ -77.382435675999943, 34.632025458000058 ], [ -77.397043423999946, 34.620021877000127 ], [ -77.413889126999948, 34.616929429000052 ], [ -77.421986456999889, 34.619126695000048 ], [ -77.426136847999942, 34.623236395 ], [ -77.435454881999874, 34.622503973000065 ], [ -77.444976365999878, 34.617580471000011 ], [ -77.449818488999938, 34.608872789000131 ], [ -77.446197068999879, 34.600816148 ], [ -77.437082485999895, 34.589422919000029 ], [ -77.426503058999856, 34.579169012000094 ], [ -77.418568488999881, 34.574774481000119 ], [ -77.400624152999939, 34.571112372000144 ], [ -77.383208787999962, 34.562241929000109 ], [ -77.375599738999938, 34.551092841000084 ], [ -77.387196417999945, 34.540676174000012 ], [ -77.387196417999945, 34.533840236000103 ], [ -77.38182532499988, 34.530503648000078 ], [ -77.378895636999857, 34.527167059000035 ], [ -77.387928839999887, 34.522650458000086 ], [ -77.404042120999947, 34.517645575000031 ], [ -77.455637173999918, 34.505316473000093 ], [ -77.535878058999941, 34.468573309000092 ], [ -77.668324347999885, 34.376166083000086 ], [ -77.730458136999914, 34.315863348000121 ], [ -77.785023566999882, 34.246405341000113 ], [ -77.81655839799987, 34.222357489000089 ], [ -77.832671678999958, 34.207017320000134 ], [ -77.844471808999913, 34.174994208000143 ], [ -77.867095506999874, 34.138413804000024 ], [ -77.8744197259999, 34.122259833000143 ], [ -77.893137173999946, 34.012030341000141 ], [ -77.911122199999909, 33.958156643000038 ], [ -77.94204667899993, 33.93048737200003 ], [ -77.933745897999955, 33.948919989000061 ], [ -77.932281053999901, 33.957749742000104 ], [ -77.93586178299995, 33.965236721000068 ], [ -77.93586178299995, 33.971421617000047 ], [ -77.921254035999937, 34.001044012000094 ], [ -77.929554816999939, 34.079820054000052 ], [ -77.921620245999861, 34.108587958 ], [ -77.940663214999859, 34.147650458000058 ], [ -77.956288214999944, 34.191148179 ], [ -77.962554490999906, 34.191148179 ], [ -77.962880011999914, 34.163153387000179 ], [ -77.952300584999961, 34.091742255 ], [ -77.94204667899993, 34.067613023 ], [ -77.948557094999842, 34.05369700700011 ], [ -77.95051021999987, 34.037176825000031 ], [ -77.94945227799991, 34.002752997000087 ], [ -77.953195766999869, 33.989488023000078 ], [ -77.972157355999883, 33.952622789000188 ], [ -78.008941209999961, 33.904689846000096 ], [ -78.01781165299991, 33.896307684000035 ], [ -78.032338019999941, 33.892279364000061 ], [ -78.049305792999917, 33.89386627800009 ], [ -78.139556443999936, 33.915187893000066 ], [ -78.158680792999917, 33.916815497000087 ], [ -78.213978644999912, 33.915472723 ], [ -78.226918097999913, 33.920599677000112 ], [ -78.252512173999889, 33.925116278000147 ], [ -78.333485480999855, 33.910101630000142 ], [ -78.367258266999841, 33.916815497000087 ], [ -78.362375454999949, 33.924221096000068 ], [ -78.361724412999905, 33.932359117000189 ], [ -78.367258266999841, 33.950913804 ], [ -78.374663865999906, 33.950913804 ], [ -78.384917772999955, 33.922593492000047 ], [ -78.408273891999841, 33.910549221000124 ], [ -78.470855272999955, 33.896307684000035 ], [ -78.558990037999962, 33.869045315000122 ], [ -78.550119594999927, 33.879787502000156 ], [ -78.545399542999917, 33.883286851000051 ], [ -78.545399542999917, 33.889553127000099 ], [ -78.600005662999877, 33.875881252000156 ], [ -78.600005662999877, 33.869045315000122 ], [ -78.590443488999881, 33.867621161000059 ], [ -78.582875128999945, 33.863714911000088 ], [ -78.577219204999949, 33.857163804 ], [ -78.573312954999949, 33.847967841000028 ], [ -78.615061001999891, 33.845770575000031 ], [ -78.656971808999884, 33.831935940000122 ], [ -78.763335740999878, 33.778550523 ], [ -78.86750240799995, 33.704535223 ], [ -78.93797766799986, 33.642075914000159 ], [ -79.03148352799991, 33.533596096000068 ], [ -79.133127407999893, 33.41742584800015 ], [ -79.156117316999968, 33.375555731000063 ], [ -79.14867102799991, 33.368801174000012 ], [ -79.156117316999968, 33.357814846000153 ], [ -79.182606574999852, 33.241278387000122 ], [ -79.183461066999939, 33.217922268000123 ], [ -79.189605272999927, 33.217922268000123 ], [ -79.197377081999917, 33.232326565000093 ], [ -79.198638475999928, 33.268459377000127 ], [ -79.203277147999955, 33.286810614000089 ], [ -79.213693813999953, 33.300685940000065 ], [ -79.226877407999893, 33.306301174000069 ], [ -79.268462693999879, 33.306708075000174 ], [ -79.272043423999946, 33.317287502000127 ], [ -79.263172980999911, 33.340277411000031 ], [ -79.237172003999916, 33.386542059000092 ], [ -79.200998501999891, 33.422105210000083 ], [ -79.189605272999927, 33.430853583000143 ], [ -79.189605272999927, 33.436997789000131 ], [ -79.212025519999941, 33.428371486000017 ], [ -79.232289191999939, 33.412095445 ], [ -79.27708899599989, 33.359116929000052 ], [ -79.288238084999904, 33.33926015800013 ], [ -79.296376105999911, 33.317775783000016 ], [ -79.299468553999901, 33.296779690000065 ], [ -79.291411912999962, 33.277736721000096 ], [ -79.272043423999946, 33.261460679000052 ], [ -79.248280402999853, 33.250148830000072 ], [ -79.214019334999875, 33.242499091000056 ], [ -79.211333787999905, 33.233954169000114 ], [ -79.212391730999855, 33.222723700000117 ], [ -79.210113084999875, 33.21112702 ], [ -79.202951626999919, 33.192938544000114 ], [ -79.197255011999857, 33.187892971000068 ], [ -79.183461066999939, 33.18378327000012 ], [ -79.195912238999966, 33.175197658000016 ], [ -79.210194464999859, 33.167792059000035 ], [ -79.22288977799991, 33.157945054000109 ], [ -79.230580206999946, 33.142238674000126 ], [ -79.239328579999921, 33.149725653000118 ], [ -79.247222459999904, 33.166815497000144 ], [ -79.255116339999859, 33.170152085000083 ], [ -79.268910285999965, 33.166083075000031 ], [ -79.270008917999917, 33.156561591000028 ], [ -79.262806769999884, 33.145249742000047 ], [ -79.251698370999861, 33.135972398 ], [ -79.256337042999888, 33.130601304000137 ], [ -79.260894334999932, 33.126695054000137 ], [ -79.265980597999942, 33.124090887000037 ], [ -79.272206183999913, 33.12230052300005 ], [ -79.279204881999902, 33.139349677000112 ], [ -79.297271287999905, 33.149115302000055 ], [ -79.319894985999952, 33.153876044000143 ], [ -79.34044348899991, 33.155829169000086 ], [ -79.32982337099989, 33.142482815000093 ], [ -79.307606574999909, 33.13751862200003 ], [ -79.289865688999924, 33.130031643000066 ], [ -79.292632615999878, 33.10871002800009 ], [ -79.307687954999892, 33.095404364000089 ], [ -79.351796027999882, 33.078843492000104 ], [ -79.371490037999934, 33.064032294000057 ], [ -79.378732876999948, 33.046332098000121 ], [ -79.379790818999908, 33.029730536000088 ], [ -79.387033657999922, 33.017320054000052 ], [ -79.412464972999942, 33.012437242000161 ], [ -79.435373501999948, 33.010972398000106 ], [ -79.45763098899991, 33.006740627000099 ], [ -79.477040167999917, 33.00006745000006 ], [ -79.491322394999912, 32.991400458000143 ], [ -79.495716925999886, 33.001898505000113 ], [ -79.509022589999915, 33.021673895000148 ], [ -79.511830206999946, 33.029242255 ], [ -79.52000891799986, 33.04120514500012 ], [ -79.538644985999952, 33.036281643000066 ], [ -79.570139126999948, 33.019273179 ], [ -79.584828253999945, 33.013820705000157 ], [ -79.597157355999911, 33.000474351000051 ], [ -79.622914191999939, 32.955308335 ], [ -79.624501105999883, 32.943833726000051 ], [ -79.61945553299995, 32.932196356000148 ], [ -79.607411261999943, 32.91624583500014 ], [ -79.602162238999938, 32.924139716000113 ], [ -79.594471808999913, 32.930121161000116 ], [ -79.584868943999936, 32.934393622000059 ], [ -79.573841925999915, 32.936753648 ], [ -79.581410285999937, 32.921698309000178 ], [ -79.588734503999945, 32.914129950000031 ], [ -79.637806769999912, 32.890692450000145 ], [ -79.645253058999884, 32.888902085000083 ], [ -79.653716600999928, 32.885809637000179 ], [ -79.658192511999886, 32.878729559000121 ], [ -79.6615291009999, 32.871649481000148 ], [ -79.666371222999885, 32.86847565300009 ], [ -79.693023240999906, 32.860093492000132 ], [ -79.71222896999987, 32.840399481000091 ], [ -79.727935350999928, 32.817531643000095 ], [ -79.744536912999905, 32.79962799700003 ], [ -79.798654751999976, 32.773098049000069 ], [ -79.82872473899991, 32.76276276200015 ], [ -79.850982225999871, 32.75861237200003 ], [ -79.862131313999896, 32.764064846000153 ], [ -79.870838995999861, 32.776027736000103 ], [ -79.881662563999868, 32.787990627000042 ], [ -79.89907792899993, 32.793402411000059 ], [ -79.906239386999886, 32.800441799000126 ], [ -79.897450324999909, 32.816148179000109 ], [ -79.874867316999939, 32.841213283000016 ], [ -79.89232337099989, 32.854803778000147 ], [ -79.899159308999913, 32.851752020000063 ], [ -79.903431769999912, 32.844916083000143 ], [ -79.904693162999934, 32.837958075000145 ], [ -79.90282141799986, 32.834377346000096 ], [ -79.93809973899991, 32.854071356000034 ], [ -79.943755662999905, 32.851467190000122 ], [ -79.941639777999882, 32.837551174000154 ], [ -79.932240363999966, 32.812201239000117 ], [ -79.930083787999962, 32.796454169000143 ], [ -79.934071417999945, 32.783433335000083 ], [ -79.943959113999938, 32.782375393000123 ], [ -79.957427537999934, 32.78904857 ], [ -79.971669074999937, 32.79962799700003 ], [ -79.967640753999973, 32.785223700000145 ], [ -79.957427537999934, 32.772040106000119 ], [ -79.943104620999947, 32.76235586100016 ], [ -79.907785610999923, 32.755519924000126 ], [ -79.899159308999913, 32.748032945000077 ], [ -79.893055792999917, 32.739081122000059 ], [ -79.878977016999897, 32.731390692000119 ], [ -79.87596594999988, 32.732245184000121 ], [ -79.874867316999939, 32.738104559000149 ], [ -79.868031378999916, 32.738104559000149 ], [ -79.871408657999922, 32.708319403000147 ], [ -79.887318488999938, 32.688137111000131 ], [ -79.945708787999934, 32.653265692 ], [ -79.955922003999973, 32.649359442 ], [ -79.981312628999916, 32.648749091000141 ], [ -80.005970831999889, 32.65314362200003 ], [ -80.016672329999921, 32.653713283000101 ], [ -80.025705532999922, 32.648749091000141 ], [ -80.025705532999922, 32.642523505 ], [ -80.002797003999916, 32.629461981000119 ], [ -79.995472785999937, 32.619045315000122 ], [ -80.005116339999887, 32.611558335000055 ], [ -80.05793209499987, 32.603989976000108 ], [ -80.104237433999856, 32.590806382000054 ], [ -80.125640428999901, 32.587958075000117 ], [ -80.149077928999873, 32.581447658000016 ], [ -80.163075324999937, 32.570257880000113 ], [ -80.17711341099988, 32.56704336100016 ], [ -80.200754360999923, 32.584214585000083 ], [ -80.232329881999902, 32.612982489000117 ], [ -80.251291469999927, 32.623765367000132 ], [ -80.265939907999922, 32.62140534100017 ], [ -80.253977016999897, 32.608547268000152 ], [ -80.207427537999877, 32.57322825700011 ], [ -80.201771613999881, 32.571519273000106 ], [ -80.200754360999923, 32.569403387000094 ], [ -80.204457160999965, 32.56061432500006 ], [ -80.211293097999885, 32.552069403000118 ], [ -80.220936652999853, 32.546820380000142 ], [ -80.231556769999884, 32.54242584800015 ], [ -80.303456183999856, 32.49795156500015 ], [ -80.315663214999915, 32.494452216000141 ], [ -80.32323157499988, 32.488430080000128 ], [ -80.331206834999932, 32.486395575000117 ], [ -80.344471808999856, 32.494818427000084 ], [ -80.349964972999885, 32.505194403000147 ], [ -80.351389126999948, 32.516669012000122 ], [ -80.355376756999931, 32.526922919000057 ], [ -80.368967251999891, 32.533351955000157 ], [ -80.366037563999868, 32.516913153000147 ], [ -80.369252081999917, 32.498765367000047 ], [ -80.378163214999859, 32.484116929000052 ], [ -80.392567511999914, 32.478094794000057 ], [ -80.409331834999932, 32.481105861000131 ], [ -80.418812628999945, 32.48826732 ], [ -80.427845831999946, 32.497259833 ], [ -80.443430141999869, 32.505357164000131 ], [ -80.462269660999908, 32.509222723000121 ], [ -80.475738084999875, 32.509751695000105 ], [ -80.48786373599998, 32.512355861000017 ], [ -80.525013800999972, 32.540187893000066 ], [ -80.532582160999937, 32.547837632 ], [ -80.539662238999881, 32.56061432500006 ], [ -80.547108527999882, 32.56061432500006 ], [ -80.547271287999934, 32.548895575000145 ], [ -80.544178839999944, 32.537909247000087 ], [ -80.538929816999939, 32.527899481000119 ], [ -80.532826300999972, 32.519029039000159 ], [ -80.557972785999937, 32.516343492000189 ], [ -80.629017706999917, 32.525864976 ], [ -80.660064256999931, 32.525864976 ], [ -80.669789191999968, 32.521144924000069 ], [ -80.677967902999882, 32.511460679000109 ], [ -80.67747962099989, 32.49795156500015 ], [ -80.659413214999887, 32.506008205000072 ], [ -80.57095292899993, 32.491685289000188 ], [ -80.559193488999966, 32.492661851000079 ], [ -80.540842251999919, 32.49697500200007 ], [ -80.529408331999946, 32.49795156500015 ], [ -80.516102667999945, 32.495428778000033 ], [ -80.491851365999935, 32.482977606000119 ], [ -80.478179490999906, 32.478094794000057 ], [ -80.478179490999906, 32.470648505000057 ], [ -80.505279100999928, 32.472357489000061 ], [ -80.53490149599989, 32.470770575000031 ], [ -80.563547329999949, 32.46564362200003 ], [ -80.587473110999923, 32.456935940000122 ], [ -80.495228644999969, 32.450751044000171 ], [ -80.469838019999941, 32.442124742000161 ], [ -80.458363410999908, 32.423163153000147 ], [ -80.46349036399991, 32.404120184000149 ], [ -80.506743943999908, 32.388739325000117 ], [ -80.530384894999941, 32.373521226000136 ], [ -80.547678188999839, 32.357123114000117 ], [ -80.547108527999882, 32.34711334800015 ], [ -80.528309699999909, 32.348944403000033 ], [ -80.501535610999923, 32.358832098000121 ], [ -80.476918097999913, 32.371527411 ], [ -80.464507615999878, 32.381903387000094 ], [ -80.449370897999898, 32.393988348 ], [ -80.441639777999882, 32.401271877000013 ], [ -80.43724524599989, 32.409816799000126 ], [ -80.429798956999917, 32.409816799000126 ], [ -80.433664516999926, 32.390204169000171 ], [ -80.441070115999906, 32.366115627000156 ], [ -80.45164954299986, 32.350043036000088 ], [ -80.464507615999878, 32.354559637000037 ], [ -80.470773891999841, 32.354559637000037 ], [ -80.470285610999952, 32.349310614000146 ], [ -80.472035285999937, 32.348089911000116 ], [ -80.475005662999934, 32.348293361000074 ], [ -80.478179490999906, 32.34711334800015 ], [ -80.459868943999936, 32.337307033000016 ], [ -80.470773891999841, 32.322739976 ], [ -80.553293423999918, 32.278794664000159 ], [ -80.564198370999918, 32.277167059000035 ], [ -80.580189581999917, 32.279120184000178 ], [ -80.587473110999923, 32.278794664000159 ], [ -80.626047329999892, 32.262600002000013 ], [ -80.636830206999889, 32.266791083000143 ], [ -80.642689581999946, 32.293117580000128 ], [ -80.642201300999943, 32.319240627000013 ], [ -80.629017706999917, 32.381903387000094 ], [ -80.664418097999913, 32.36823151200015 ], [ -80.669992641999926, 32.373602606000119 ], [ -80.651193813999868, 32.445542710000083 ], [ -80.657297329999949, 32.462713934000092 ], [ -80.683664516999869, 32.464422919000114 ], [ -80.680978969999899, 32.456488348000121 ], [ -80.679351365999963, 32.454575914000159 ], [ -80.676503058999913, 32.455755927000112 ], [ -80.669992641999926, 32.456935940000122 ], [ -80.668853318999879, 32.453802802000055 ], [ -80.663156704999921, 32.450751044000171 ], [ -80.67284094999988, 32.439113674000154 ], [ -80.676909959999932, 32.425685940000065 ], [ -80.67747962099989, 32.357652085000112 ], [ -80.675200975999928, 32.349920966000113 ], [ -80.66539466099988, 32.333970445 ], [ -80.663156704999921, 32.32355377800009 ], [ -80.667469855999911, 32.305365302000112 ], [ -80.678293423999918, 32.302720445000134 ], [ -80.691761847999885, 32.309637762000122 ], [ -80.759348110999952, 32.360785223000093 ], [ -80.784413214999944, 32.416245835000055 ], [ -80.796009894999969, 32.453273830000072 ], [ -80.796945766999841, 32.474351304000109 ], [ -80.783029751999948, 32.491685289000188 ], [ -80.785552537999877, 32.496730861000046 ], [ -80.798085089999887, 32.4981957050001 ], [ -80.814035610999895, 32.505357164000131 ], [ -80.822499152999939, 32.518133856000176 ], [ -80.82750403599988, 32.531398830000015 ], [ -80.835926886999914, 32.540106512000179 ], [ -80.854969855999911, 32.539496161000116 ], [ -80.854969855999911, 32.533351955000157 ], [ -80.842762824999852, 32.524237372000144 ], [ -80.82843990799995, 32.495672919000171 ], [ -80.820790167999917, 32.484849351000079 ], [ -80.820790167999917, 32.478094794000057 ], [ -80.828928188999839, 32.45526764500012 ], [ -80.81578528599988, 32.419256903000147 ], [ -80.796945766999841, 32.382554429000052 ], [ -80.787342902999882, 32.357652085000112 ], [ -80.798573370999861, 32.333644924000069 ], [ -80.798939581999889, 32.319728908000101 ], [ -80.783558722999942, 32.313625393 ], [ -80.775786912999934, 32.305731512000037 ], [ -80.745106574999852, 32.258978583000143 ], [ -80.727040167999917, 32.265936591000056 ], [ -80.712147589999887, 32.263006903000118 ], [ -80.700184699999937, 32.254461981000091 ], [ -80.691070115999935, 32.244696356000148 ], [ -80.677316860999923, 32.225327867000132 ], [ -80.677845831999917, 32.214748440000093 ], [ -80.704701300999886, 32.19065989800005 ], [ -80.737131313999896, 32.152085679 ], [ -80.820790167999917, 32.108140367000047 ], [ -80.811594204999949, 32.1446800800001 ], [ -80.777211066999911, 32.207261460000112 ], [ -80.779855923999889, 32.244696356000148 ], [ -80.787993943999908, 32.235825914000102 ], [ -80.790598110999923, 32.224310614000061 ], [ -80.791127081999889, 32.211004950000145 ], [ -80.793527798999946, 32.196926174000012 ], [ -80.800770636999857, 32.186224677 ], [ -80.823475714999915, 32.165757554000109 ], [ -80.828236456999917, 32.15908437700007 ], [ -80.832142706999889, 32.134344794000086 ], [ -80.841908331999946, 32.115952867000047 ], [ -80.887562628999973, 32.069403387000122 ], [ -80.894520636999857, 32.058823960000083 ], [ -80.895985480999911, 32.046698309000178 ], [ -80.890288865999935, 32.032660223000121 ], [ -80.889393683999856, 32.030422268000123 ], [ -80.879017706999946, 32.026516018000152 ], [ -80.865223761999943, 32.026516018000152 ], [ -80.848133917999888, 32.022162177000055 ], [ -80.83568274599989, 32.00291575700011 ], [ -80.853911912999962, 31.982163804000109 ], [ -80.903391079999921, 31.950506903000033 ], [ -80.912668423999946, 31.955877997000087 ], [ -80.91950436099998, 31.965236721000124 ], [ -80.923451300999972, 31.974025783000101 ], [ -80.923817511999886, 31.977769273000135 ], [ -80.937367316999939, 31.976467190000122 ], [ -80.944325324999937, 31.969183661000116 ], [ -80.948638475999928, 31.961127020000092 ], [ -80.954660610999952, 31.957342841000141 ], [ -80.964751756999902, 31.948797919000029 ], [ -80.963124152999882, 31.930650132000139 ], [ -80.949533657999922, 31.913723049000154 ], [ -80.923817511999886, 31.908880927000084 ], [ -80.958159959999932, 31.879339911 ], [ -80.980458136999886, 31.865383205000128 ], [ -80.995228644999941, 31.86448802300005 ], [ -81.012603318999936, 31.874457098000121 ], [ -81.057687954999892, 31.881903387000122 ], [ -81.07469641799986, 31.888413804000109 ], [ -81.080677863999881, 31.896633205000015 ], [ -81.086822068999965, 31.90766022300015 ], [ -81.095326300999886, 31.916001695000105 ], [ -81.108225063999896, 31.916327216000141 ], [ -81.118234829999892, 31.90766022300015 ], [ -81.111805792999888, 31.898016669000086 ], [ -81.091420050999886, 31.884995835 ], [ -81.09032141799986, 31.875718492000047 ], [ -81.130197719999927, 31.866766669000114 ], [ -81.142974412999962, 31.85492584800015 ], [ -81.087717251999948, 31.847479559000178 ], [ -81.081898566999911, 31.84398021 ], [ -81.061024542999917, 31.82697174700003 ], [ -81.04515540299991, 31.827826239000117 ], [ -81.039906378999916, 31.82697174700003 ], [ -81.049549933999884, 31.813544012000037 ], [ -81.060902472999942, 31.788153387000094 ], [ -81.091379360999895, 31.754339911000116 ], [ -81.105539516999841, 31.742661851000136 ], [ -81.119048631999902, 31.73761627800009 ], [ -81.171376105999883, 31.736639716000028 ], [ -81.204579230999911, 31.741441148000106 ], [ -81.228627081999946, 31.754950262000094 ], [ -81.238636847999913, 31.763088283000016 ], [ -81.253163214999859, 31.770249742000047 ], [ -81.266590949999852, 31.772406317000147 ], [ -81.273304816999911, 31.76552969000015 ], [ -81.269195115999963, 31.751695054000052 ], [ -81.256214972999942, 31.744777736000131 ], [ -81.225493943999965, 31.73761627800009 ], [ -81.196278449999937, 31.71759674700003 ], [ -81.198963995999918, 31.69944896000014 ], [ -81.239125128999916, 31.663072007000054 ], [ -81.251938655999879, 31.647172896000043 ], [ -81.258865060999938, 31.632098470000059 ], [ -81.300933397999898, 31.570786851000108 ], [ -81.318269957999945, 31.565552930000038 ], [ -81.331091363999946, 31.552431020000128 ], [ -81.333365813999933, 31.54439652700016 ], [ -81.320196419999917, 31.522446919000103 ], [ -81.328237185999853, 31.502342330000189 ], [ -81.327021733999942, 31.498342383000178 ], [ -81.326973157999902, 31.493331351000066 ], [ -81.326905228999891, 31.486315816000015 ], [ -81.331432518999918, 31.467234350000027 ], [ -81.365276672999869, 31.437886972000015 ], [ -81.363899323999959, 31.415830010000136 ], [ -81.348369366999918, 31.388867310000151 ], [ -81.335230204999903, 31.36690560600006 ], [ -81.325657267999929, 31.34892851400015 ], [ -81.33618268099994, 31.342820021000122 ], [ -81.428863084999904, 31.352850653000147 ], [ -81.450795050999915, 31.361476955000157 ], [ -81.470936652999882, 31.372870184000121 ], [ -81.479969855999883, 31.374212958 ], [ -81.49242102799991, 31.367661851000108 ], [ -81.467030402999882, 31.347805080000015 ], [ -81.426503058999856, 31.332953192000147 ], [ -81.381988084999961, 31.323675848 ], [ -81.34471594999988, 31.32050202000012 ], [ -81.328277147999898, 31.315252997000144 ], [ -81.285064256999874, 31.287665106000034 ], [ -81.269886847999885, 31.274847723 ], [ -81.267689581999917, 31.258734442000119 ], [ -81.274647589999887, 31.235541083 ], [ -81.288563605999883, 31.220933335000083 ], [ -81.307484503999888, 31.230454820000077 ], [ -81.343169725999928, 31.180650132 ], [ -81.367543097999885, 31.153550523000078 ], [ -81.385975714999915, 31.141750393 ], [ -81.409250454999949, 31.143255927000055 ], [ -81.417958136999914, 31.148993231000034 ], [ -81.418568488999881, 31.160589911000145 ], [ -81.415516730999883, 31.207220770000148 ], [ -81.423003709999961, 31.21963125200007 ], [ -81.44465084499987, 31.216782945000134 ], [ -81.45482337099989, 31.206000067000119 ], [ -81.456532355999911, 31.190415757000139 ], [ -81.448638475999928, 31.150946356000176 ], [ -81.446929490999935, 31.130845445000134 ], [ -81.451730923999918, 31.11709219 ], [ -81.48729407499988, 31.133612372000087 ], [ -81.495838995999918, 31.126206773000021 ], [ -81.492583787999962, 31.113674221000011 ], [ -81.464019334999875, 31.10260651200015 ], [ -81.440988735999895, 31.081366278000175 ], [ -81.430287238999881, 31.073431708000115 ], [ -81.430897589999944, 31.093207098000121 ], [ -81.424916144999912, 31.104722398000078 ], [ -81.403675910999937, 31.12128327000012 ], [ -81.405384894999941, 31.09479401200015 ], [ -81.424143032999893, 31.025051174000012 ], [ -81.430287238999881, 31.025051174000012 ], [ -81.443023240999935, 31.044745184000149 ], [ -81.463449673999889, 31.067328192000119 ], [ -81.488107876999891, 31.085842190000122 ], [ -81.513539191999911, 31.093329169000114 ], [ -81.49937903599988, 31.074611721000124 ], [ -81.459136522999898, 31.038641669000143 ], [ -81.450795050999915, 31.021918036000116 ], [ -81.456776495999947, 31.001654364000117 ], [ -81.472482876999919, 30.991888739000089 ], [ -81.519683397999898, 30.984076239 ], [ -81.519683397999898, 30.976629950000117 ], [ -81.499256964999915, 30.968207098000065 ], [ -81.464100714999859, 30.968451239 ], [ -81.450795050999915, 30.963568427000141 ], [ -81.462310350999871, 30.948675848000093 ], [ -81.492990688999868, 30.918524481000148 ], [ -81.499256964999915, 30.905585028000147 ], [ -81.500355597999942, 30.900051174000126 ], [ -81.505116339999859, 30.88617584800015 ], [ -81.506011522999955, 30.881659247000087 ], [ -81.502797003999888, 30.871975002000127 ], [ -81.497547980999911, 30.86615631700009 ], [ -81.493153449999937, 30.859442450000031 ], [ -81.49242102799991, 30.846869208000143 ], [ -81.501576300999972, 30.850775458000143 ], [ -81.511708136999943, 30.853338934000064 ], [ -81.522328253999973, 30.854437567 ], [ -81.533355272999927, 30.853705145000063 ], [ -81.533355272999927, 30.846869208000143 ], [ -81.51903235599994, 30.841782945000105 ], [ -81.514881964999887, 30.83201732 ], [ -81.515044725999957, 30.819484768000095 ], [ -81.513539191999911, 30.805975653000118 ], [ -81.508656378999945, 30.796779690000122 ], [ -81.496734178999901, 30.783351955000128 ], [ -81.49242102799991, 30.771795966000028 ], [ -81.494781053999958, 30.749212958000143 ], [ -81.501291469999842, 30.724351304 ], [ -81.500030076999934, 30.712184963000098 ], [ -81.499256964999915, 30.704331773000135 ], [ -81.475656704999977, 30.696030992000047 ], [ -81.469349738999938, 30.697170315000093 ], [ -81.455637173999918, 30.701808986000017 ], [ -81.447743292999945, 30.702866929000081 ], [ -81.440256313999868, 30.700751044000143 ], [ -81.438221808999941, 30.696030992000047 ], [ -81.437611456999974, 30.691351630000142 ], [ -81.434071417999888, 30.689195054000137 ], [ -81.428578253999973, 30.681708075000145 ], [ -81.430531378999916, 30.664740302 ], [ -81.437814907999922, 30.637762762000037 ], [ -81.441517706999974, 30.553045966000141 ], [ -81.437814907999922, 30.524115302000141 ], [ -81.453846808999913, 30.534491278000033 ], [ -81.461903449999852, 30.548529364000089 ], [ -81.464711066999911, 30.566839911000145 ], [ -81.46507727799991, 30.589911200000117 ], [ -81.466949022999898, 30.600002346000068 ], [ -81.472035285999908, 30.610052802000055 ], [ -81.479644334999961, 30.617865302000141 ], [ -81.489003058999884, 30.620998440000037 ], [ -81.497954881999902, 30.617661851 ], [ -81.499989386999943, 30.609361070000105 ], [ -81.499256964999915, 30.586818752000127 ], [ -81.50153561099998, 30.56928131700009 ], [ -81.50031490799995, 30.551255601000051 ], [ -81.492583787999962, 30.5372582050001 ], [ -81.475656704999977, 30.531561591000113 ], [ -81.47492428299995, 30.527655341000028 ], [ -81.447743292999945, 30.508002020000063 ], [ -81.441639777999853, 30.500148830000072 ], [ -81.435129360999952, 30.484849351000108 ], [ -81.430287238999881, 30.476996161000145 ], [ -81.42446855399993, 30.471584377000099 ], [ -81.419545050999943, 30.469305731000119 ], [ -81.414947068999936, 30.465725002000156 ], [ -81.409820115999906, 30.456488348000093 ], [ -81.406361456999917, 30.443589585000083 ], [ -81.409820115999906, 30.411444403000118 ], [ -81.406605597999942, 30.405829169000114 ], [ -81.399566209999875, 30.400539455000128 ], [ -81.392567511999914, 30.393866278000175 ], [ -81.389393683999941, 30.384222723 ], [ -81.396148240999878, 30.33978913 ], [ -81.394927537999962, 30.298570054000137 ], [ -81.362660285999937, 30.188950914000102 ], [ -81.353993292999917, 30.170803127000013 ], [ -81.328286301999924, 30.052830108000038 ], [ -81.287668423999975, 29.926174221000011 ], [ -81.293812628999945, 29.894110419000029 ], [ -81.287993943999908, 29.893011786 ], [ -81.279385368999868, 29.89954946200011 ], [ -81.273761001999901, 29.889873650000041 ], [ -81.271852206999881, 29.876151150000098 ], [ -81.266468878999888, 29.853216864 ], [ -81.261626756999902, 29.839016018000095 ], [ -81.255848761999943, 29.789455471000153 ], [ -81.250130113999916, 29.769591599000179 ], [ -81.2388792, 29.737301167000098 ], [ -81.225493943999965, 29.709784247000087 ], [ -81.209966568999874, 29.666519134000126 ], [ -81.189076300999886, 29.624172268 ], [ -81.184641079999921, 29.60374583500014 ], [ -81.178293423999889, 29.585516669000143 ], [ -81.137960962999927, 29.50508321100007 ], [ -81.071914374999892, 29.363031525000039 ], [ -81.00628734299994, 29.23526970800016 ], [ -80.962667580999948, 29.152056322000121 ], [ -80.932122595999971, 29.101178684 ], [ -80.914549851999936, 29.087450487000112 ], [ -80.922108527999882, 29.068304755000142 ], [ -80.909331834999932, 29.05695221600017 ], [ -80.891753709999904, 29.045558986000017 ], [ -80.882883266999869, 29.027655341000141 ], [ -80.877674933999856, 29.008490302 ], [ -80.743225017999862, 28.80690990300009 ], [ -80.680043097999913, 28.71702708500014 ], [ -80.627064581999946, 28.650864976000051 ], [ -80.567616339999915, 28.557806708 ], [ -80.543080206999889, 28.492499091000113 ], [ -80.528228318999936, 28.472601630000028 ], [ -80.5404353509999, 28.451605536000059 ], [ -80.558420376999948, 28.433335679 ], [ -80.567616339999915, 28.431830145000148 ], [ -80.569691535999937, 28.426418361000103 ], [ -80.575266079999949, 28.417954820000048 ], [ -80.582753058999913, 28.410305080000043 ], [ -80.590891079999921, 28.406927802000027 ], [ -80.594064907999893, 28.401597398000135 ], [ -80.594715949999852, 28.303859768000152 ], [ -80.601714647999927, 28.29092031500015 ], [ -80.594309048999946, 28.284084377000127 ], [ -80.596831834999961, 28.262640692 ], [ -80.592193162999934, 28.207912502000156 ], [ -80.571115688999896, 28.106146552000112 ], [ -80.556630011999857, 28.07754140800013 ], [ -80.553293423999918, 28.061590887000122 ], [ -80.532338019999884, 28.018784898000135 ], [ -80.451893683999913, 27.90940989800005 ], [ -80.450917120999918, 27.866359768 ], [ -80.475005662999934, 27.907904364 ], [ -80.478179490999906, 27.917222398000135 ], [ -80.482329881999959, 27.924261786 ], [ -80.51231848899991, 27.955145575000145 ], [ -80.521595831999974, 27.990179755000057 ], [ -80.580637173999918, 28.085435289000102 ], [ -80.61066646999987, 28.164943752000013 ], [ -80.619943813999896, 28.206976630000085 ], [ -80.617909308999884, 28.379339911 ], [ -80.587880011999914, 28.505764065000122 ], [ -80.587066209999904, 28.545355536000059 ], [ -80.594309048999946, 28.585109768000066 ], [ -80.600412563999839, 28.600287177000055 ], [ -80.609445766999841, 28.610174872000172 ], [ -80.623036261999886, 28.614569403000147 ], [ -80.642689581999946, 28.613023179000109 ], [ -80.646066860999952, 28.614406643000095 ], [ -80.65086829299986, 28.617865302 ], [ -80.656646287999905, 28.620754299000041 ], [ -80.663156704999921, 28.620510158000073 ], [ -80.663807745999861, 28.616848049000126 ], [ -80.662505662999962, 28.602362372000172 ], [ -80.663156704999921, 28.598781643 ], [ -80.675038214999859, 28.595607815000122 ], [ -80.683949347999885, 28.595200914000131 ], [ -80.747792120999918, 28.604925848000093 ], [ -80.765939907999922, 28.612290757000082 ], [ -80.779855923999889, 28.626654364000061 ], [ -80.784250454999977, 28.641669012000179 ], [ -80.784250454999977, 28.661281643000123 ], [ -80.780384894999884, 28.680731512000037 ], [ -80.77301998599998, 28.694973049000126 ], [ -80.765614386999886, 28.688706773 ], [ -80.75715084499987, 28.703802802 ], [ -80.749256964999887, 28.724107164000102 ], [ -80.752349412999962, 28.741929429000081 ], [ -80.795277472999942, 28.755601304000109 ], [ -80.828928188999839, 28.783026434000149 ], [ -80.848133917999888, 28.790594794000114 ], [ -80.831939256999931, 28.699367580000128 ], [ -80.820790167999917, 28.675116278000033 ], [ -80.820790167999917, 28.667669989000061 ], [ -80.828236456999917, 28.66144440300009 ], [ -80.79747473899991, 28.608303127000013 ], [ -80.793527798999946, 28.588853257000025 ], [ -80.789662238999938, 28.547837632 ], [ -80.766102667999888, 28.451076565000093 ], [ -80.756825324999937, 28.430853583000058 ], [ -80.738270636999914, 28.373480536000145 ], [ -80.708811001999948, 28.320461330000015 ], [ -80.701242641999897, 28.296616929000137 ], [ -80.54110673699995, 27.981350002000099 ], [ -80.380970831999917, 27.666083075000145 ], [ -80.345366990999935, 27.514593817000033 ], [ -80.197824673999889, 27.195990302000141 ], [ -80.19701087099989, 27.18048737200003 ], [ -80.205799933999856, 27.200344143000123 ], [ -80.217152472999913, 27.209418036000145 ], [ -80.257232225999957, 27.218573309000121 ], [ -80.27961178299995, 27.228908596000124 ], [ -80.28648841099988, 27.233791408000101 ], [ -80.292713995999947, 27.239488023 ], [ -80.30101477799991, 27.243353583000086 ], [ -80.314320441999939, 27.242580471000068 ], [ -80.308420376999891, 27.234320380000085 ], [ -80.283029751999976, 27.207831122000115 ], [ -80.275949673999918, 27.205877997000144 ], [ -80.260161912999877, 27.196966864000117 ], [ -80.251616990999935, 27.194159247000172 ], [ -80.228993292999888, 27.200384833000115 ], [ -80.221262173999975, 27.201605536000145 ], [ -80.183338995999947, 27.163763739 ], [ -80.176991339999915, 27.150702216000028 ], [ -80.148793097999942, 27.138251044000114 ], [ -80.142404751999919, 27.122137762000037 ], [ -80.139271613999938, 27.107652085 ], [ -80.115101691999939, 27.063788153000033 ], [ -80.094593878999888, 27.009751695000048 ], [ -80.075550910999908, 26.973211981000091 ], [ -80.074126756999931, 26.961371161000145 ], [ -80.081288214999859, 26.950425523000078 ], [ -80.09154212099989, 26.947251695000105 ], [ -80.103382941999939, 26.946030992000189 ], [ -80.115101691999939, 26.940904039000159 ], [ -80.115101691999939, 26.934719143 ], [ -80.102406378999973, 26.929510809000121 ], [ -80.080311652999882, 26.923570054 ], [ -80.070708787999905, 26.91697825700011 ], [ -80.064320441999882, 26.906683661 ], [ -80.038238084999932, 26.811183986000103 ], [ -80.038400844999899, 26.784247137000037 ], [ -80.053618943999965, 26.769598700000031 ], [ -80.053618943999965, 26.762152411000145 ], [ -80.040516730999911, 26.746405341000084 ], [ -80.03453528599988, 26.715318101 ], [ -80.032378709999875, 26.587347723 ], [ -80.03807532499988, 26.558539130000057 ], [ -80.053618943999965, 26.556708075000088 ], [ -80.062082485999923, 26.42088450700011 ], [ -80.071888800999943, 26.390448309000149 ], [ -80.074126756999931, 26.375474351000136 ], [ -80.073150193999936, 26.341009833 ], [ -80.075062628999916, 26.32420482000019 ], [ -80.080922003999945, 26.30963776200015 ], [ -80.077707485999895, 26.287583726000079 ], [ -80.102650519999912, 26.139960028000033 ], [ -80.112131313999839, 26.11017487200003 ], [ -80.128773566999882, 26.098618882 ], [ -80.128773566999882, 26.091213283000016 ], [ -80.112782355999883, 26.068833726 ], [ -80.128773566999882, 25.775295315000122 ], [ -80.135568813999896, 25.775295315000122 ], [ -80.135568813999896, 25.816839911000031 ], [ -80.128773566999882, 25.86212799700003 ], [ -80.12926184799997, 25.887884833000058 ], [ -80.132435675999915, 25.90127187700007 ], [ -80.140614386999943, 25.900824286000088 ], [ -80.176584438999924, 25.858384507 ], [ -80.182728644999884, 25.822088934000092 ], [ -80.195464647999927, 25.795843817000062 ], [ -80.196197068999879, 25.75381094 ], [ -80.210682745999918, 25.734930731000148 ], [ -80.221262173999975, 25.731105861000131 ], [ -80.230946417999917, 25.731187242000132 ], [ -80.240712042999888, 25.729559637000094 ], [ -80.251616990999935, 25.720607815000093 ], [ -80.255197719999927, 25.711086330000072 ], [ -80.256906704999921, 25.68683502800009 ], [ -80.277577277999939, 25.644232489000061 ], [ -80.306874152999853, 25.61823151200015 ], [ -80.310414191999939, 25.598944403000033 ], [ -80.311350063999924, 25.54979075700011 ], [ -80.317453579999921, 25.532904364000117 ], [ -80.333973761999886, 25.511908270000092 ], [ -80.34243730399993, 25.493638414000102 ], [ -80.344309048999889, 25.47524648600016 ], [ -80.341053839999859, 25.453762111000131 ], [ -80.336496548999918, 25.44822825700011 ], [ -80.329457160999937, 25.444037177 ], [ -80.325672980999911, 25.438666083000115 ], [ -80.333729620999947, 25.424790757000139 ], [ -80.341053839999859, 25.405951239 ], [ -80.332915818999936, 25.398016669000029 ], [ -80.320423956999917, 25.391546942000119 ], [ -80.31309973899991, 25.383490302 ], [ -80.314320441999939, 25.371161200000145 ], [ -80.350738084999904, 25.342230536000145 ], [ -80.395863410999965, 25.295396226 ], [ -80.400624152999882, 25.28790924700003 ], [ -80.402495897999927, 25.279364325000088 ], [ -80.405913865999935, 25.270168361000017 ], [ -80.423003709999875, 25.252386786000145 ], [ -80.424183722999913, 25.241441148000078 ], [ -80.426909959999875, 25.221747137000037 ], [ -80.414784308999884, 25.206854559000178 ], [ -80.401966925999943, 25.19554271 ], [ -80.402495897999927, 25.186224677000055 ], [ -80.417551235999952, 25.197414455000157 ], [ -80.437123175999915, 25.223374742000047 ], [ -80.450917120999918, 25.227769273000135 ], [ -80.450795050999943, 25.242987372000115 ], [ -80.466420050999943, 25.241766669000086 ], [ -80.486195441999968, 25.233343817000147 ], [ -80.498646613999881, 25.220363674000154 ], [ -80.476918097999913, 25.218573309000149 ], [ -80.458729620999918, 25.20917389500012 ], [ -80.446644660999908, 25.193589585000055 ], [ -80.443430141999869, 25.173163153000175 ], [ -80.450917120999918, 25.173163153000175 ], [ -80.454009568999908, 25.195257880000057 ], [ -80.469146287999905, 25.208075262000094 ], [ -80.48892167899993, 25.210353908000073 ], [ -80.506174282999922, 25.200506903000061 ], [ -80.509266730999911, 25.20722077 ], [ -80.513661261999914, 25.212836005 ], [ -80.519195115999935, 25.217189846000096 ], [ -80.525990363999938, 25.220363674000154 ], [ -80.522368943999879, 25.226792710000055 ], [ -80.519602016999841, 25.230780341000056 ], [ -80.515004035999908, 25.233058986000017 ], [ -80.506174282999922, 25.234605210000055 ], [ -80.507150844999899, 25.23891836100016 ], [ -80.508371548999918, 25.241766669000086 ], [ -80.51231848899991, 25.248277085 ], [ -80.525257941999911, 25.246527411 ], [ -80.565500454999921, 25.245998440000037 ], [ -80.580637173999918, 25.241441148000078 ], [ -80.590443488999938, 25.225327867000104 ], [ -80.597482876999919, 25.20343659100017 ], [ -80.606516079999921, 25.188666083 ], [ -80.622222459999875, 25.193670966000028 ], [ -80.619048631999902, 25.195746161000145 ], [ -80.61754309799997, 25.19554271 ], [ -80.616525844999899, 25.196030992000161 ], [ -80.614735480999911, 25.200506903000061 ], [ -80.651356574999937, 25.193060614000061 ], [ -80.656971808999941, 25.189927476 ], [ -80.654937303999901, 25.180568752000156 ], [ -80.651600714999887, 25.174017645000063 ], [ -80.65099036399991, 25.16787344 ], [ -80.656971808999941, 25.159491278000033 ], [ -80.663156704999921, 25.159491278000033 ], [ -80.678130662999934, 25.16787344 ], [ -80.691151495999918, 25.162746486000074 ], [ -80.710926886999857, 25.145249742000132 ], [ -80.723052537999934, 25.143133856000034 ], [ -80.739816860999952, 25.143784898000078 ], [ -80.755848761999857, 25.148749091000028 ], [ -80.765614386999886, 25.159491278000033 ], [ -80.767811652999882, 25.155462958000058 ], [ -80.769927537999905, 25.152777411 ], [ -80.771717902999882, 25.149847723000065 ], [ -80.77301998599998, 25.145249742000132 ], [ -80.777821417999888, 25.148260809000035 ], [ -80.78294837099989, 25.150620835 ], [ -80.788238084999961, 25.153957424000012 ], [ -80.793527798999946, 25.159491278000033 ], [ -80.797027147999927, 25.151312567000119 ], [ -80.800282355999883, 25.148382880000028 ], [ -80.805246548999918, 25.149115302000141 ], [ -80.814035610999895, 25.152085679000052 ], [ -80.814035610999895, 25.159491278000033 ], [ -80.810536261999914, 25.167792059000121 ], [ -80.840240037999934, 25.173407294000029 ], [ -80.854969855999911, 25.186224677000055 ], [ -80.882883266999869, 25.169501044000029 ], [ -80.88719641799986, 25.168361721000096 ], [ -80.910227016999841, 25.145249742000132 ], [ -80.928781704999921, 25.142157294000143 ], [ -80.967152472999942, 25.141546942 ], [ -80.999582485999952, 25.135077216000084 ], [ -81.039906378999916, 25.131577867000189 ], [ -81.086537238999938, 25.121405341000141 ], [ -81.101958787999962, 25.124741929 ], [ -81.149159308999941, 25.165716864 ], [ -81.165516730999855, 25.19725169500019 ], [ -81.177113410999965, 25.227769273000135 ], [ -81.175770636999886, 25.259019273000106 ], [ -81.164865688999896, 25.298081773000078 ], [ -81.148345506999931, 25.331203518 ], [ -81.129953579999977, 25.344468492000132 ], [ -81.136097785999965, 25.330226955000043 ], [ -81.124012824999852, 25.327948309000149 ], [ -81.112131313999896, 25.320746161000116 ], [ -81.10191809799997, 25.31171295800003 ], [ -81.095122850999928, 25.303534247000087 ], [ -81.077870245999918, 25.272853908000016 ], [ -81.07469641799986, 25.272447007 ], [ -81.061756964999859, 25.264227606000091 ], [ -80.985259568999965, 25.234605210000055 ], [ -80.985259568999965, 25.227769273000135 ], [ -80.990834113999881, 25.226141669000114 ], [ -81.000111456999917, 25.222072658000158 ], [ -81.005767381999931, 25.220363674000154 ], [ -81.005767381999931, 25.214178778000175 ], [ -80.988026495999918, 25.207505601000108 ], [ -80.966297980999855, 25.206854559000178 ], [ -80.94465084499987, 25.212307033000016 ], [ -80.927235480999883, 25.224066473 ], [ -80.917225714999915, 25.245754299000069 ], [ -80.924143032999922, 25.26357656500015 ], [ -80.980783657999893, 25.318304755 ], [ -80.999134894999941, 25.327053127000156 ], [ -81.034291144999912, 25.332464911 ], [ -81.051665818999908, 25.342230536000145 ], [ -81.057281053999901, 25.344468492000132 ], [ -81.095122850999928, 25.351304429000052 ], [ -81.141346808999941, 25.384751695000105 ], [ -81.149159308999941, 25.395412502000127 ], [ -81.150380011999857, 25.405951239 ], [ -81.155425584999875, 25.42658112200003 ], [ -81.156605597999913, 25.436346747000144 ], [ -81.170887824999909, 25.474839585000055 ], [ -81.203439907999979, 25.508002020000092 ], [ -81.214670376999976, 25.527573960000055 ], [ -81.195952928999901, 25.538885809000035 ], [ -81.189930792999888, 25.545355536000145 ], [ -81.186105923999889, 25.553168036000116 ], [ -81.187652147999927, 25.560207424000012 ], [ -81.197255011999914, 25.564276434000149 ], [ -81.220041469999842, 25.559271552000112 ], [ -81.231678839999944, 25.563625393 ], [ -81.235422329999977, 25.573146877000013 ], [ -81.245961066999939, 25.61823151200015 ], [ -81.266713019999941, 25.652818101000079 ], [ -81.266468878999888, 25.666652736000074 ], [ -81.27472896999987, 25.674709377000013 ], [ -81.278431769999912, 25.685980536 ], [ -81.279530402999882, 25.704169012000179 ], [ -81.313140428999901, 25.706203518 ], [ -81.3216853509999, 25.707586981000091 ], [ -81.328358527999882, 25.716050523000135 ], [ -81.340240037999905, 25.742865302000112 ], [ -81.34471594999988, 25.748521226000108 ], [ -81.357248501999976, 25.753485419000171 ], [ -81.347971157999922, 25.764634507 ], [ -81.3216853509999, 25.782700914000102 ], [ -81.329335089999944, 25.790472723 ], [ -81.348459438999924, 25.816839911000031 ], [ -81.372141079999921, 25.836127020000148 ], [ -81.396148240999878, 25.851629950000145 ], [ -81.409047003999888, 25.85635000200007 ], [ -81.438343878999916, 25.861314195000105 ], [ -81.450795050999915, 25.86587148600016 ], [ -81.462147589999915, 25.874497789000159 ], [ -81.475209113999881, 25.891017971000124 ], [ -81.485585089999887, 25.899400132000025 ], [ -81.498768683999913, 25.886704820000048 ], [ -81.509510870999947, 25.89081452 ], [ -81.521066860999952, 25.901068427000112 ], [ -81.541574673999918, 25.908921617000104 ], [ -81.555287238999938, 25.918361721000011 ], [ -81.564076300999915, 25.920477606000034 ], [ -81.568226691999939, 25.918646552000055 ], [ -81.579904751999948, 25.909857489000089 ], [ -81.588002081999974, 25.906887111000074 ], [ -81.583811001999948, 25.914374091000056 ], [ -81.583973761999914, 25.917303778000147 ], [ -81.58617102799991, 25.919826565000065 ], [ -81.588002081999974, 25.926092841000028 ], [ -81.596424933999913, 25.923773505000057 ], [ -81.607411261999886, 25.927394924000126 ], [ -81.617421027999882, 25.935532945000048 ], [ -81.622710740999935, 25.94717031500015 ], [ -81.632801886999914, 25.940008856000091 ], [ -81.640370245999861, 25.926255601 ], [ -81.650054490999906, 25.920477606000034 ], [ -81.66242428299995, 25.918198960000055 ], [ -81.674305792999917, 25.919907945000048 ], [ -81.684315558999884, 25.925116278000147 ], [ -81.691029425999943, 25.93353913 ], [ -81.694447394999941, 25.927923895 ], [ -81.697865363999938, 25.920477606000034 ], [ -81.700306769999884, 25.918443101 ], [ -81.705799933999913, 25.913763739000089 ], [ -81.705311652999939, 25.906887111000074 ], [ -81.711496548999889, 25.906887111000074 ], [ -81.71849524599989, 25.908107815000093 ], [ -81.722238735999923, 25.910060940000122 ], [ -81.732004360999952, 25.920477606000034 ], [ -81.735829230999883, 25.928371486000103 ], [ -81.742543097999913, 25.957464911000059 ], [ -81.728586391999841, 25.962713934000149 ], [ -81.716664191999911, 25.955959377000013 ], [ -81.705677863999938, 25.945705471000096 ], [ -81.694447394999941, 25.940375067000119 ], [ -81.685047980999911, 25.945013739000146 ], [ -81.675404425999943, 25.956244208000058 ], [ -81.667795376999919, 25.969712632000139 ], [ -81.664377407999893, 25.981350002000127 ], [ -81.679188605999883, 25.981838283000044 ], [ -81.701975063999896, 25.979234117000132 ], [ -81.711496548999889, 25.981350002000127 ], [ -81.722482876999948, 25.989081122000144 ], [ -81.731678839999915, 26.000637111000074 ], [ -81.734364386999914, 26.01276276200015 ], [ -81.725738084999904, 26.022284247000144 ], [ -81.754383917999888, 26.042059637000094 ], [ -81.770090298999946, 26.06777578300013 ], [ -81.787220831999974, 26.139593817000119 ], [ -81.791493292999888, 26.13019440300009 ], [ -81.793690558999884, 26.120184637000094 ], [ -81.794178839999859, 26.109605210000055 ], [ -81.793446417999917, 26.098618882 ], [ -81.800892706999917, 26.098618882 ], [ -81.81899980399993, 26.170314846000011 ], [ -81.827544725999928, 26.24884674700003 ], [ -81.821359829999977, 26.282945054000052 ], [ -81.821400519999969, 26.289618231000091 ], [ -81.822132941999882, 26.29287344000015 ], [ -81.851796027999939, 26.341986395000092 ], [ -81.855539516999869, 26.358710028000118 ], [ -81.848703579999949, 26.358710028000118 ], [ -81.848703579999949, 26.351874091000084 ], [ -81.841867641999926, 26.351874091000084 ], [ -81.843861456999946, 26.414211330000072 ], [ -81.848703579999949, 26.43378327000012 ], [ -81.85594641799986, 26.448879299000126 ], [ -81.875843878999945, 26.480292059000149 ], [ -81.882801886999857, 26.495835679000081 ], [ -81.882435675999943, 26.481187242000161 ], [ -81.878488735999952, 26.456244208000143 ], [ -81.882801886999857, 26.447455145000063 ], [ -81.88731848899991, 26.444769598 ], [ -81.894032355999855, 26.447495835000055 ], [ -81.898671027999882, 26.452093817 ], [ -81.903309699999909, 26.454901434000064 ], [ -81.923736131999874, 26.454901434000064 ], [ -81.978382941999939, 26.482163804000137 ], [ -81.99156653599988, 26.476019598000065 ], [ -81.994699673999946, 26.477240302000084 ], [ -82.000111456999917, 26.482163804000137 ], [ -82.00633704299986, 26.474798895000148 ], [ -82.008656378999916, 26.4845238300001 ], [ -82.008859829999977, 26.499335028000147 ], [ -82.006174282999893, 26.514064846000153 ], [ -82.000111456999917, 26.523179429000052 ], [ -81.995961066999968, 26.522772528000033 ], [ -81.989247199999909, 26.511704820000105 ], [ -81.982085740999878, 26.508937893000123 ], [ -81.974476691999939, 26.510443427 ], [ -81.97004146999987, 26.514146226000136 ], [ -81.965728318999965, 26.518866278000061 ], [ -81.93846594999988, 26.535467841000113 ], [ -81.911773240999935, 26.558661200000031 ], [ -81.893055792999888, 26.586127020000092 ], [ -81.897084113999938, 26.611273505000057 ], [ -81.885568813999924, 26.624172268000066 ], [ -81.841867641999926, 26.66315338700015 ], [ -81.838124152999882, 26.672430731000091 ], [ -81.829172329999949, 26.681382554000137 ], [ -81.817982550999943, 26.685451565 ], [ -81.807728644999912, 26.680243231000091 ], [ -81.797678188999868, 26.686753648 ], [ -81.790109829999892, 26.694077867000189 ], [ -81.784535285999908, 26.703070380000113 ], [ -81.780384894999941, 26.714992580000157 ], [ -81.795318162999905, 26.709702867000161 ], [ -81.819203253999973, 26.697007554000109 ], [ -81.838124152999882, 26.694525458 ], [ -81.854603644999884, 26.688421942 ], [ -81.873890753999916, 26.674058335000112 ], [ -81.906727667999917, 26.642645575000088 ], [ -81.917591925999915, 26.626654364 ], [ -81.947743292999917, 26.548895575000088 ], [ -81.951730923999889, 26.543646552000112 ], [ -81.959787563999839, 26.539862372000087 ], [ -81.983225063999924, 26.533758856000091 ], [ -81.992665167999917, 26.529364325000117 ], [ -81.992665167999917, 26.543646552000112 ], [ -82.012766079999977, 26.535956122000087 ], [ -82.02668209499987, 26.528021552000112 ], [ -82.039051886999886, 26.527899481000148 ], [ -82.054758266999869, 26.543646552000112 ], [ -82.063099738999938, 26.560980536 ], [ -82.061268683999856, 26.573431708000115 ], [ -82.05614173099994, 26.587876695000162 ], [ -82.054758266999869, 26.611273505000057 ], [ -82.059681769999912, 26.629461981000148 ], [ -82.077259894999941, 26.664984442000119 ], [ -82.082102016999841, 26.680243231000091 ], [ -82.081288214999915, 26.702704169000086 ], [ -82.056874152999882, 26.818915106000091 ], [ -82.054758266999869, 26.841253973000121 ], [ -82.057036912999934, 26.865790106000148 ], [ -82.064564581999889, 26.874945380000142 ], [ -82.078114386999857, 26.881089585000112 ], [ -82.098500128999945, 26.896551825000031 ], [ -82.096994594999899, 26.909369208000086 ], [ -82.077504035999908, 26.922919012000037 ], [ -82.027577277999853, 26.949693101000051 ], [ -82.005726691999911, 26.953802802 ], [ -81.99640865799995, 26.958238023000078 ], [ -81.990834113999938, 26.965562242000161 ], [ -81.978382941999939, 26.996161200000088 ], [ -81.99510657499988, 26.991522528000147 ], [ -82.016835089999944, 26.972967841000141 ], [ -82.057443813999839, 26.965318101000108 ], [ -82.07457434799997, 26.958929755 ], [ -82.092681443999879, 26.955633856000148 ], [ -82.115589972999885, 26.961371161000145 ], [ -82.119943813999868, 26.945461330000015 ], [ -82.131988084999875, 26.941839911000059 ], [ -82.144520636999886, 26.940415757 ], [ -82.150298631999931, 26.930975653000175 ], [ -82.155181443999908, 26.92763906500015 ], [ -82.166086391999897, 26.936183986000074 ], [ -82.184437628999945, 26.955145575000174 ], [ -82.180734829999892, 26.972357489 ], [ -82.190988735999923, 26.969387111000074 ], [ -82.207386847999942, 26.961818752000127 ], [ -82.222320115999878, 26.965155341000141 ], [ -82.242014126999919, 26.99551015800013 ], [ -82.253285285999908, 27.00682200700011 ], [ -82.273833787999962, 27.016017971000096 ], [ -82.270904100999928, 27.00771719 ], [ -82.259144660999965, 26.989243882 ], [ -82.230213995999861, 26.956854559000178 ], [ -82.219227667999888, 26.947739976 ], [ -82.211781378999916, 26.955145575000174 ], [ -82.201283331999946, 26.94415924700003 ], [ -82.187326626999976, 26.913153387000094 ], [ -82.181019660999937, 26.906805731000148 ], [ -82.175689256999874, 26.89923737200003 ], [ -82.159901495999918, 26.86225006700009 ], [ -82.150949673999889, 26.818019924000012 ], [ -82.150257941999939, 26.803168036000059 ], [ -82.156564907999893, 26.790025132 ], [ -82.165598110999895, 26.785793361000074 ], [ -82.169016079999921, 26.814113674000012 ], [ -82.177642381999931, 26.824855861000131 ], [ -82.178578253999916, 26.821275132000054 ], [ -82.184315558999884, 26.814276434000178 ], [ -82.191883917999917, 26.807074286000145 ], [ -82.198109503999888, 26.803127346000068 ], [ -82.201079881999902, 26.804999091000028 ], [ -82.210764126999948, 26.815090236000103 ], [ -82.215484178999958, 26.817368882000054 ], [ -82.218617316999939, 26.81631094 ], [ -82.220448370999918, 26.813950914000046 ], [ -82.223215298999975, 26.811672268000095 ], [ -82.229156053999901, 26.810532945000048 ], [ -82.23607337099989, 26.812079169000086 ], [ -82.2455134759999, 26.82050202000012 ], [ -82.253407355999883, 26.824855861000131 ], [ -82.267648891999897, 26.829575914000046 ], [ -82.274566209999904, 26.830715236000074 ], [ -82.283802863999938, 26.831000067 ], [ -82.313832160999908, 26.849351304000052 ], [ -82.342925584999875, 26.934881903000147 ], [ -82.370025193999908, 26.961371161000145 ], [ -82.366932745999918, 26.945624091000084 ], [ -82.353627081999889, 26.922105210000112 ], [ -82.34894771999987, 26.906805731000148 ], [ -82.360991990999878, 26.913275458000058 ], [ -82.365956183999941, 26.916815497000144 ], [ -82.370025193999908, 26.920396226000108 ], [ -82.376616990999878, 26.940334377000013 ], [ -82.467152472999913, 27.102036851 ], [ -82.477202928999901, 27.137518622000172 ], [ -82.500884568999908, 27.179022528000175 ], [ -82.506581183999884, 27.201605536000145 ], [ -82.501820441999911, 27.190334377000156 ], [ -82.498199022999927, 27.185248114000117 ], [ -82.492990688999839, 27.18048737200003 ], [ -82.492990688999839, 27.197211005000057 ], [ -82.496327277999882, 27.211493231000148 ], [ -82.503163214999887, 27.222357489000146 ], [ -82.513417120999918, 27.228908596000124 ], [ -82.513417120999918, 27.215277411000088 ], [ -82.52086341099988, 27.215277411000088 ], [ -82.532622850999871, 27.236883856000176 ], [ -82.549183722999942, 27.256577867000132 ], [ -82.561838344999899, 27.27627187700007 ], [ -82.561879035999908, 27.29779694200009 ], [ -82.55760657499988, 27.294378973000065 ], [ -82.554066535999908, 27.292425848000121 ], [ -82.550892706999946, 27.289496161 ], [ -82.547596808999913, 27.283514716000084 ], [ -82.54076087099989, 27.283514716000084 ], [ -82.541900193999908, 27.30853913 ], [ -82.56273352799991, 27.346828518000123 ], [ -82.573638475999871, 27.395086981000148 ], [ -82.587880011999886, 27.408189195000134 ], [ -82.606760219999899, 27.417059637000179 ], [ -82.645415818999965, 27.442938544000086 ], [ -82.682728644999941, 27.448716539000074 ], [ -82.698394334999904, 27.454820054000052 ], [ -82.709828253999945, 27.469387111000074 ], [ -82.729156053999901, 27.514715887000179 ], [ -82.732533331999917, 27.530585028000118 ], [ -82.725697394999884, 27.530585028000118 ], [ -82.710519985999895, 27.497503973000065 ], [ -82.705230272999927, 27.48956940300009 ], [ -82.69481360599994, 27.482896226000051 ], [ -82.668365037999962, 27.471625067000062 ], [ -82.657460089999887, 27.461655992000161 ], [ -82.65013587099989, 27.46865469000015 ], [ -82.645497199999852, 27.476629950000088 ], [ -82.643666144999969, 27.485744533000101 ], [ -82.644398566999911, 27.495835679000052 ], [ -82.650624152999853, 27.495835679000052 ], [ -82.657704230999911, 27.491522528000147 ], [ -82.664906378999945, 27.49241771000014 ], [ -82.671783006999959, 27.496893622000115 ], [ -82.677886522999955, 27.503241278000033 ], [ -82.66075598899991, 27.520331122000087 ], [ -82.63630123599998, 27.513902085000083 ], [ -82.610503709999932, 27.502101955000015 ], [ -82.58918209499987, 27.503241278000033 ], [ -82.599476691999911, 27.511175848 ], [ -82.610422329999949, 27.517157294000029 ], [ -82.622547980999855, 27.521307684000149 ], [ -82.63695227799991, 27.523749091000084 ], [ -82.621408657999922, 27.531195380000085 ], [ -82.59203040299991, 27.538478908000073 ], [ -82.578602667999917, 27.547308661000145 ], [ -82.572417772999955, 27.559515692000119 ], [ -82.588205532999893, 27.557196356000148 ], [ -82.600982225999957, 27.552394924000069 ], [ -82.604196743999893, 27.55109284100017 ], [ -82.622670050999915, 27.544175523000078 ], [ -82.617787238999966, 27.552557684000035 ], [ -82.615142381999874, 27.555812893000066 ], [ -82.611317511999857, 27.5548363300001 ], [ -82.605702277999853, 27.552883205000157 ], [ -82.603423631999874, 27.552923895000148 ], [ -82.601185675999915, 27.553900458000115 ], [ -82.58918209499987, 27.564683335000112 ], [ -82.591867641999869, 27.568345445000162 ], [ -82.596018032999893, 27.577704169000114 ], [ -82.574574347999942, 27.590725002000099 ], [ -82.56460527299987, 27.608954169000171 ], [ -82.557443813999924, 27.629624742000189 ], [ -82.544178839999887, 27.650051174000069 ], [ -82.516672329999949, 27.669907945000162 ], [ -82.513417120999918, 27.677679755000085 ], [ -82.51012122299997, 27.689398505000057 ], [ -82.50218665299991, 27.694403387000094 ], [ -82.493072068999908, 27.697088934000178 ], [ -82.486154751999919, 27.701239325000117 ], [ -82.470366990999878, 27.72931549700003 ], [ -82.465646938999868, 27.736029364000061 ], [ -82.437733527999939, 27.75336334800015 ], [ -82.430490688999896, 27.763739325000145 ], [ -82.39818274599989, 27.796047268000066 ], [ -82.389963344999899, 27.811102606000091 ], [ -82.392689581999946, 27.834051825000174 ], [ -82.41246497299997, 27.875718492000047 ], [ -82.421742316999939, 27.917181708000143 ], [ -82.433745897999955, 27.929144598000065 ], [ -82.451161261999914, 27.930731512000094 ], [ -82.471831834999932, 27.920355536000031 ], [ -82.480702277999882, 27.908433335000083 ], [ -82.484852667999917, 27.892564195000048 ], [ -82.486154751999919, 27.855780341000141 ], [ -82.479807094999899, 27.841498114000061 ], [ -82.47809811099998, 27.831284898000106 ], [ -82.482736782999922, 27.821356512000122 ], [ -82.518299933999884, 27.822658596000039 ], [ -82.527088995999947, 27.824774481000034 ], [ -82.539621548999946, 27.84398021 ], [ -82.540923631999931, 27.868801174000126 ], [ -82.534535285999937, 27.917222398000135 ], [ -82.541127081999889, 27.942775783000016 ], [ -82.55882727799991, 27.955796617000104 ], [ -82.584950324999852, 27.960638739000089 ], [ -82.616444464999887, 27.961330471000124 ], [ -82.616444464999887, 27.968736070000105 ], [ -82.596018032999893, 27.975572007000139 ], [ -82.596018032999893, 27.983058986000103 ], [ -82.623524542999917, 27.996527411000088 ], [ -82.636219855999883, 28.005804755000142 ], [ -82.644398566999911, 28.016546942000147 ], [ -82.650624152999853, 28.016546942000147 ], [ -82.650949673999889, 28.013251044000114 ], [ -82.650624152999853, 28.002915757000025 ], [ -82.690988735999923, 28.037665106000148 ], [ -82.688343878999916, 28.028998114000061 ], [ -82.679798956999917, 28.013251044000114 ], [ -82.677886522999955, 28.006293036000116 ], [ -82.679107225999871, 27.998439846000124 ], [ -82.684152798999889, 27.98729075700011 ], [ -82.684722459999875, 27.983058986000103 ], [ -82.690541144999912, 27.975531317000147 ], [ -82.690337693999965, 27.970851955000043 ], [ -82.681304490999963, 27.968736070000105 ], [ -82.644398566999911, 27.968736070000105 ], [ -82.65684973899991, 27.956244208 ], [ -82.702748175999886, 27.944728908000073 ], [ -82.718861456999974, 27.927801825000088 ], [ -82.680246548999918, 27.914129950000145 ], [ -82.643218553999873, 27.89476146000014 ], [ -82.604725714999887, 27.881496486000103 ], [ -82.561879035999908, 27.886175848000121 ], [ -82.570790167999945, 27.87982819200009 ], [ -82.602853969999927, 27.862982489000089 ], [ -82.60130774599989, 27.851141669000029 ], [ -82.595814581999946, 27.829982815000122 ], [ -82.596018032999893, 27.817938544000114 ], [ -82.600168423999946, 27.807928778000033 ], [ -82.613636847999913, 27.792710679000052 ], [ -82.616444464999887, 27.787502346000153 ], [ -82.617909308999941, 27.780991929000052 ], [ -82.630116339999915, 27.750311591000141 ], [ -82.623117641999926, 27.734035549000126 ], [ -82.626576300999915, 27.715806382000054 ], [ -82.637766079999921, 27.701117255000142 ], [ -82.654042120999861, 27.695054429000052 ], [ -82.67247473899991, 27.695054429000052 ], [ -82.679269985999923, 27.696844794000029 ], [ -82.684722459999875, 27.701239325000117 ], [ -82.687082485999923, 27.709865627000042 ], [ -82.68602454299986, 27.731634833000086 ], [ -82.687855597999942, 27.736029364000061 ], [ -82.70921790299991, 27.738430080000015 ], [ -82.721506313999868, 27.745103257000082 ], [ -82.739369269999912, 27.769517320000105 ], [ -82.757191535999908, 27.787665106000119 ], [ -82.795969204999921, 27.815334377000013 ], [ -82.815093553999901, 27.83222077 ], [ -82.818837042999917, 27.818182684000149 ], [ -82.810699022999927, 27.804429429000137 ], [ -82.751332160999937, 27.746568101000136 ], [ -82.739369269999912, 27.728583075000088 ], [ -82.724680141999926, 27.694077867000161 ], [ -82.718006964999859, 27.672064520000063 ], [ -82.718861456999974, 27.659654039000046 ], [ -82.731312628999888, 27.662054755 ], [ -82.742543097999885, 27.679754950000088 ], [ -82.750559048999918, 27.702093817000119 ], [ -82.753651495999918, 27.718654690000093 ], [ -82.767486131999902, 27.751532294000171 ], [ -82.828521287999905, 27.804999091000113 ], [ -82.842396613999881, 27.828517971000068 ], [ -82.844553188999896, 27.841864325000174 ], [ -82.853911912999905, 27.870347398 ], [ -82.85606848899991, 27.889960028000061 ], [ -82.852284308999884, 27.908189195000134 ], [ -82.8431697259999, 27.925441799000126 ], [ -82.832020636999886, 27.939398505 ], [ -82.821888800999915, 27.948309637000037 ], [ -82.831369594999842, 27.935126044000086 ], [ -82.838490363999881, 27.918198960000112 ], [ -82.840728318999965, 27.900702216000141 ], [ -82.835560675999943, 27.886175848000121 ], [ -82.802235480999883, 27.966620184000092 ], [ -82.780344204999949, 28.058172919000114 ], [ -82.779042120999947, 28.084702867000161 ], [ -82.776234503999888, 28.096828518000066 ], [ -82.767323370999861, 28.105902411000059 ], [ -82.776682094999899, 28.120306708000143 ], [ -82.782460089999859, 28.135443427000141 ], [ -82.78774980399993, 28.160549221000124 ], [ -82.788482225999957, 28.174017645 ], [ -82.78734290299991, 28.193752346000124 ], [ -82.782826300999972, 28.207017320000162 ], [ -82.773508266999926, 28.201564846000124 ], [ -82.75991777299987, 28.214667059000092 ], [ -82.753814256999874, 28.227972723000121 ], [ -82.746205206999946, 28.256170966000084 ], [ -82.72492428299995, 28.28416575700011 ], [ -82.716786261999857, 28.298325914000046 ], [ -82.718861456999974, 28.311428127000013 ], [ -82.722645636999886, 28.308254299000126 ], [ -82.725493943999936, 28.306708075000088 ], [ -82.732533331999917, 28.304592190000093 ], [ -82.6966853509999, 28.388861395000092 ], [ -82.684722459999875, 28.400783596000124 ], [ -82.684722459999875, 28.406927802000027 ], [ -82.685902472999885, 28.41429271 ], [ -82.664214647999927, 28.447943427000112 ], [ -82.66307532499988, 28.501898505000113 ], [ -82.660796678999901, 28.513739325000088 ], [ -82.650502081999889, 28.543646552000055 ], [ -82.647124803999873, 28.629584052000084 ], [ -82.63695227799991, 28.647162177000112 ], [ -82.640777147999927, 28.653794664000159 ], [ -82.643788214999944, 28.662502346000153 ], [ -82.644357876999919, 28.671332098000036 ], [ -82.640695766999869, 28.678534247000144 ], [ -82.632435675999972, 28.688421942000062 ], [ -82.631947394999884, 28.695298570000162 ], [ -82.634999152999882, 28.702134507 ], [ -82.63695227799991, 28.712062893000095 ], [ -82.63695227799991, 28.746486721000124 ], [ -82.640207485999952, 28.75495026200015 ], [ -82.647206183999856, 28.756415106000034 ], [ -82.654204881999931, 28.756252346000068 ], [ -82.657460089999887, 28.760158596000153 ], [ -82.662220831999974, 28.773260809000035 ], [ -82.682036912999905, 28.795843817 ], [ -82.684722459999875, 28.804836330000015 ], [ -82.671009894999941, 28.820217190000065 ], [ -82.655018683999941, 28.811957098000065 ], [ -82.630116339999915, 28.784369208000058 ], [ -82.637521938999896, 28.814154364000061 ], [ -82.638539191999939, 28.824693101000108 ], [ -82.631092902999882, 28.872992255000142 ], [ -82.633615688999896, 28.887640692000062 ], [ -82.644398566999911, 28.900376695000105 ], [ -82.651234503999916, 28.902980861000017 ], [ -82.670277472999913, 28.905422268000123 ], [ -82.677886522999955, 28.907904364000061 ], [ -82.685170050999972, 28.913072007000082 ], [ -82.727162238999938, 28.959173895 ], [ -82.732289191999968, 28.97646719 ], [ -82.725697394999884, 28.996649481000034 ], [ -82.737782355999883, 28.997626044000114 ], [ -82.749338344999927, 29.002264716000028 ], [ -82.755116339999887, 29.010158596000011 ], [ -82.749908006999874, 29.02049388200011 ], [ -82.747181769999912, 29.030422268 ], [ -82.747059699999852, 29.060614325000031 ], [ -82.746205206999946, 29.064886786000145 ], [ -82.783355272999927, 29.090969143 ], [ -82.794748501999919, 29.108058986000131 ], [ -82.773508266999926, 29.119533596000096 ], [ -82.790516730999883, 29.127427476000079 ], [ -82.798491990999935, 29.139064846000068 ], [ -82.800852016999897, 29.154689846000153 ], [ -82.800852016999897, 29.174750067000033 ], [ -82.820708787999905, 29.16592031500015 ], [ -82.828724738999938, 29.161118882000082 ], [ -82.833363410999965, 29.166652736000074 ], [ -82.844634568999965, 29.176499742000104 ], [ -82.849232550999886, 29.182196356000091 ], [ -82.868885870999947, 29.169623114 ], [ -82.891957160999908, 29.170355536000116 ], [ -82.914296027999939, 29.178656317 ], [ -82.931752081999889, 29.188421942000147 ], [ -82.94351152299987, 29.185126044000114 ], [ -82.971831834999932, 29.184515692000147 ], [ -82.986398891999869, 29.182196356000091 ], [ -83.004221157999922, 29.176174221000096 ], [ -83.011138475999928, 29.17503489800005 ], [ -83.023915167999888, 29.174750067000033 ], [ -83.040679490999906, 29.180121161000059 ], [ -83.045277472999913, 29.191839911000059 ], [ -83.046050584999932, 29.203558661000145 ], [ -83.051584438999868, 29.208929755 ], [ -83.065825975999871, 29.211574611000103 ], [ -83.073719855999855, 29.218247789000046 ], [ -83.072987433999913, 29.22736237200003 ], [ -83.06151282499988, 29.236802476000051 ], [ -83.068959113999938, 29.245754299000069 ], [ -83.075672980999883, 29.259507554 ], [ -83.084787563999896, 29.272202867000075 ], [ -83.0990291009999, 29.277777411000059 ], [ -83.114409959999932, 29.280503648000135 ], [ -83.132313605999883, 29.287258205000072 ], [ -83.148264126999891, 29.296087958000115 ], [ -83.157704230999911, 29.305121161000145 ], [ -83.161244269999884, 29.311590887000037 ], [ -83.163563605999855, 29.321682033000016 ], [ -83.165150519999884, 29.342678127000156 ], [ -83.167876756999959, 29.344305731000176 ], [ -83.185047980999883, 29.373968817 ], [ -83.215687628999888, 29.410589911000116 ], [ -83.232818162999934, 29.427069403000118 ], [ -83.25328528599988, 29.442287502000099 ], [ -83.278187628999916, 29.43854401200015 ], [ -83.305734829999949, 29.457953192000062 ], [ -83.356312628999945, 29.510565497000087 ], [ -83.366607225999871, 29.509263414000188 ], [ -83.379505988999881, 29.51508209800015 ], [ -83.404774542999917, 29.531683661000031 ], [ -83.399891730999855, 29.540920315000065 ], [ -83.40099036399991, 29.555121161000088 ], [ -83.405629035999937, 29.569525458000058 ], [ -83.411529100999871, 29.57949453300013 ], [ -83.401112433999884, 29.590562242000161 ], [ -83.394642706999974, 29.610541083000058 ], [ -83.392974412999962, 29.633734442 ], [ -83.397287563999868, 29.654527085000083 ], [ -83.408924933999884, 29.667303778000033 ], [ -83.425933397999927, 29.672023830000128 ], [ -83.44591223899991, 29.674750067 ], [ -83.466175910999908, 29.681830145000063 ], [ -83.47484290299991, 29.687567450000031 ], [ -83.486643032999979, 29.697699286 ], [ -83.493519660999908, 29.702337958000115 ], [ -83.527658657999893, 29.716009833000058 ], [ -83.543812628999945, 29.728094794000143 ], [ -83.562001105999855, 29.745754299000069 ], [ -83.576771613999938, 29.764960028000033 ], [ -83.582875128999916, 29.781805731000034 ], [ -83.583851691999882, 29.791978257000082 ], [ -83.589100714999887, 29.815904039000131 ], [ -83.593373175999886, 29.826157945000077 ], [ -83.602772589999915, 29.832505601 ], [ -83.612131313999839, 29.837307033000073 ], [ -83.616363084999961, 29.842596747000144 ], [ -83.624908006999902, 29.864325262000037 ], [ -83.662464972999885, 29.898667710000083 ], [ -83.671009894999912, 29.911566473 ], [ -83.680572068999908, 29.92129140800013 ], [ -83.724476691999939, 29.950140692000062 ], [ -83.736805792999888, 29.956203518000066 ], [ -83.754139777999882, 29.959865627000013 ], [ -83.766468878999916, 29.968817450000145 ], [ -83.78770911399991, 29.989691473000036 ], [ -83.811594204999977, 29.98533763200011 ], [ -83.856434699999909, 30.002386786000088 ], [ -83.950591600999928, 30.054429429000137 ], [ -84.02403723899991, 30.106594143000066 ], [ -84.04356848899991, 30.105169989 ], [ -84.075754360999952, 30.093329169000029 ], [ -84.147613084999932, 30.087876695 ], [ -84.168202277999853, 30.076361395000063 ], [ -84.17833411399991, 30.072821356000176 ], [ -84.183664516999869, 30.081610419000143 ], [ -84.18814042899993, 30.093573309000178 ], [ -84.195790167999888, 30.099554755 ], [ -84.19880123599998, 30.10077545800003 ], [ -84.200428839999887, 30.103338934000121 ], [ -84.203195766999869, 30.105902411000116 ], [ -84.209136522999898, 30.107082424000154 ], [ -84.215565558999884, 30.104966539000046 ], [ -84.221262173999975, 30.095770575000145 ], [ -84.22716223899991, 30.093329169000029 ], [ -84.247670050999972, 30.093329169000029 ], [ -84.247222459999875, 30.094916083000058 ], [ -84.250396287999934, 30.097601630000142 ], [ -84.255360480999883, 30.099676825000145 ], [ -84.260650193999965, 30.099554755 ], [ -84.269642706999974, 30.09267812700007 ], [ -84.277943488999966, 30.081284898000106 ], [ -84.283680792999917, 30.070746161000059 ], [ -84.285227016999869, 30.066066799000126 ], [ -84.316883917999945, 30.067816473000121 ], [ -84.328521287999962, 30.065985419000143 ], [ -84.364369269999941, 30.048529364 ], [ -84.370716925999886, 30.040472723000065 ], [ -84.370513475999928, 30.02448151200015 ], [ -84.377064581999917, 30.027289130000113 ], [ -84.379790818999879, 30.028957424000126 ], [ -84.383615688999896, 30.031927802000141 ], [ -84.391021287999905, 30.02448151200015 ], [ -84.387277798999946, 30.01642487200003 ], [ -84.386708136999886, 30.014146226000051 ], [ -84.388254360999923, 30.011908270000063 ], [ -84.391021287999905, 30.0040550800001 ], [ -84.387847459999932, 29.99892812700007 ], [ -84.383615688999896, 29.989691473000036 ], [ -84.380726691999968, 29.993597723 ], [ -84.373605923999918, 30.000392971000124 ], [ -84.370513475999928, 30.0040550800001 ], [ -84.364125128999916, 29.99502187700007 ], [ -84.343861456999917, 29.97402578300013 ], [ -84.346302863999938, 29.969875393 ], [ -84.360218878999916, 29.971991278000118 ], [ -84.385121222999942, 29.981390692000119 ], [ -84.419056769999912, 29.989976304000052 ], [ -84.438303188999868, 30.00120677300005 ], [ -84.453521287999934, 30.005194403000033 ], [ -84.466135219999899, 29.989691473000036 ], [ -84.449940558999856, 29.988836981000119 ], [ -84.446441209999961, 29.979315497000115 ], [ -84.445179816999939, 29.968329169000143 ], [ -84.435699022999955, 29.963039455000072 ], [ -84.373931443999936, 29.956203518000066 ], [ -84.343006964999915, 29.946763414000046 ], [ -84.336089647999898, 29.925360419000114 ], [ -84.348988410999908, 29.902044989 ], [ -84.377349412999962, 29.887355861000103 ], [ -84.367827928999958, 29.898098049000012 ], [ -84.363677537999905, 29.901556708000115 ], [ -84.363677537999905, 29.907782294000171 ], [ -84.401356574999909, 29.91860586100016 ], [ -84.442534959999875, 29.922064520000063 ], [ -84.462066209999932, 29.918646552000055 ], [ -84.481068488999938, 29.912909247000087 ], [ -84.497181769999912, 29.911810614000146 ], [ -84.508371548999918, 29.922064520000063 ], [ -84.562977667999888, 29.894110419000029 ], [ -84.604359503999916, 29.86469147300015 ], [ -84.653187628999916, 29.852769273000106 ], [ -84.683216925999972, 29.833929755000057 ], [ -84.733631964999915, 29.791693427000141 ], [ -84.746164516999897, 29.785834052 ], [ -84.772938605999911, 29.782782294000086 ], [ -84.788238084999961, 29.77871328300013 ], [ -84.8119197259999, 29.762762762000037 ], [ -84.82787024599989, 29.754380601000079 ], [ -84.847238735999923, 29.750799872000087 ], [ -84.860991990999935, 29.744289455000015 ], [ -84.875355597999913, 29.733221747000172 ], [ -84.886626756999902, 29.730047919000114 ], [ -84.89126542899993, 29.74738190300009 ], [ -84.88695227799991, 29.755601304 ], [ -84.857167120999918, 29.797919012000094 ], [ -84.873280402999882, 29.804632880000142 ], [ -84.886463995999918, 29.799139716000113 ], [ -84.899403449999937, 29.789780992000161 ], [ -84.914865688999868, 29.784898179000109 ], [ -84.928130662999905, 29.778469143 ], [ -84.945790167999917, 29.752834377000127 ], [ -84.970936652999882, 29.749579169000086 ], [ -84.991078253999916, 29.722845770000063 ], [ -85.00426184799997, 29.716009833000058 ], [ -85.083648240999906, 29.72345612200003 ], [ -85.124256964999915, 29.721828518 ], [ -85.24071204299986, 29.688706773000078 ], [ -85.262318488999938, 29.689357815000122 ], [ -85.28563391799986, 29.692816473000121 ], [ -85.307850714999915, 29.693426825000174 ], [ -85.346099412999962, 29.67837148600016 ], [ -85.36583411399991, 29.686346747000115 ], [ -85.382150844999927, 29.701564846000096 ], [ -85.391590949999937, 29.716009833000058 ], [ -85.410633917999917, 29.80011627800009 ], [ -85.413482225999871, 29.851385809000121 ], [ -85.398426886999857, 29.873602606000176 ], [ -85.395741339999887, 29.863714911000059 ], [ -85.398426886999857, 29.794826565 ], [ -85.395863410999937, 29.771877346000124 ], [ -85.388783331999889, 29.749212958000058 ], [ -85.377797003999916, 29.728176174000126 ], [ -85.351470506999931, 29.693426825000174 ], [ -85.343983527999853, 29.689113674000069 ], [ -85.330148891999869, 29.688706773000078 ], [ -85.320546027999882, 29.693304755000028 ], [ -85.308949347999942, 29.702704169000029 ], [ -85.301869269999912, 29.711859442000033 ], [ -85.305572068999936, 29.716009833000058 ], [ -85.306548631999902, 29.727728583000143 ], [ -85.302154100999928, 29.797919012000094 ], [ -85.311675584999932, 29.819525458 ], [ -85.343617316999939, 29.855780341000113 ], [ -85.350575324999937, 29.87018463700015 ], [ -85.356516079999949, 29.888739325000174 ], [ -85.370838995999947, 29.906968492000075 ], [ -85.388742641999897, 29.923244533000101 ], [ -85.405181443999879, 29.935126044000143 ], [ -85.519764777999882, 29.981756903000147 ], [ -85.54918372299997, 30.0040550800001 ], [ -85.55426998599998, 30.010199286000059 ], [ -85.557850714999859, 30.015936591000141 ], [ -85.560536261999943, 30.022691148 ], [ -85.562855597999913, 30.031927802000141 ], [ -85.555490688999896, 30.031927802000141 ], [ -85.544016079999949, 30.015326239000089 ], [ -85.523426886999914, 29.996893622000144 ], [ -85.500152147999898, 29.983832098000065 ], [ -85.480336066999911, 29.983547268000123 ], [ -85.607899542999888, 30.07444896 ], [ -85.621205206999889, 30.079738674000069 ], [ -85.670887824999909, 30.122951565000065 ], [ -85.679554816999882, 30.134344794000057 ], [ -85.671538865999935, 30.136379299000069 ], [ -85.610666469999842, 30.126898505000057 ], [ -85.611439581999946, 30.108465887000037 ], [ -85.546009894999912, 30.091009833000058 ], [ -85.5287166009999, 30.076361395000063 ], [ -85.512684699999909, 30.055324611000046 ], [ -85.477528449999852, 30.032863674000126 ], [ -85.44237219999988, 30.02016836100016 ], [ -85.426340298999889, 30.028225002000099 ], [ -85.418324347999942, 30.035793361000131 ], [ -85.402251756999874, 30.039699611000131 ], [ -85.390492316999882, 30.044745184000178 ], [ -85.395008917999945, 30.05556875200007 ], [ -85.402007615999935, 30.05878327000012 ], [ -85.418365037999934, 30.05784739800005 ], [ -85.426340298999889, 30.058661200000145 ], [ -85.430531378999916, 30.063055731000034 ], [ -85.43000240799995, 30.068264065000122 ], [ -85.430978969999927, 30.070502020000035 ], [ -85.440012173999918, 30.066066799000126 ], [ -85.451975063999868, 30.043605861000131 ], [ -85.462066209999932, 30.034898179000052 ], [ -85.476918097999885, 30.041571356000119 ], [ -85.485910610999895, 30.058172919000171 ], [ -85.483876105999883, 30.092108466000113 ], [ -85.487782355999883, 30.107082424000154 ], [ -85.505604620999947, 30.099269924000154 ], [ -85.512684699999909, 30.108343817000062 ], [ -85.508941209999875, 30.123602606000034 ], [ -85.494618292999888, 30.134344794000057 ], [ -85.494618292999888, 30.14057038 ], [ -85.513498501999919, 30.139349677000084 ], [ -85.528879360999952, 30.132391669000086 ], [ -85.544260219999899, 30.128078518000095 ], [ -85.562855597999913, 30.134344794000057 ], [ -85.563303188999896, 30.127590236000103 ], [ -85.565174933999856, 30.123032945000048 ], [ -85.567616339999887, 30.119086005000085 ], [ -85.569691535999908, 30.11391836100016 ], [ -85.58332271999987, 30.124212958000086 ], [ -85.60521399599989, 30.136867580000157 ], [ -85.628285285999965, 30.144598700000145 ], [ -85.645415818999908, 30.14057038 ], [ -85.653065558999913, 30.152167059000121 ], [ -85.662587042999917, 30.158758856000091 ], [ -85.697377081999974, 30.173651434000035 ], [ -85.705433722999913, 30.17902252800009 ], [ -85.712717251999919, 30.185939846000011 ], [ -85.720529751999919, 30.195786851000108 ], [ -85.699208136999943, 30.206529039000131 ], [ -85.657297329999949, 30.2521019550001 ], [ -85.6419978509999, 30.254136460000112 ], [ -85.618072068999908, 30.245835679000137 ], [ -85.579213019999912, 30.28611888200011 ], [ -85.555490688999896, 30.285142320000048 ], [ -85.567941860999923, 30.30939362200003 ], [ -85.576975063999839, 30.321193752000099 ], [ -85.586781378999945, 30.326117255000057 ], [ -85.596506313999924, 30.318264065000065 ], [ -85.620757615999906, 30.282049872000144 ], [ -85.638579881999874, 30.271470445000105 ], [ -85.643381313999868, 30.285101630000057 ], [ -85.65489661399991, 30.283596096000011 ], [ -85.66942298099994, 30.276068427000141 ], [ -85.683257615999935, 30.271470445000105 ], [ -85.694732225999871, 30.266017971000068 ], [ -85.701730923999946, 30.255031643 ], [ -85.708648240999963, 30.247015692000062 ], [ -85.720529751999919, 30.250433661000088 ], [ -85.720326300999943, 30.267564195000105 ], [ -85.729400193999965, 30.282416083000086 ], [ -85.742543097999913, 30.298407294000171 ], [ -85.754709438999896, 30.319281317000147 ], [ -85.765980597999885, 30.30158112200003 ], [ -85.77757727799991, 30.294419664000188 ], [ -85.809234178999873, 30.291408596000096 ], [ -85.825550910999908, 30.287176825000174 ], [ -85.843902147999955, 30.278225002000127 ], [ -85.854359503999945, 30.264837958000143 ], [ -85.847157355999911, 30.247300523000021 ], [ -85.831776495999861, 30.235907294000029 ], [ -85.820464647999898, 30.236029364 ], [ -85.807199673999946, 30.241115627000127 ], [ -85.785715298999918, 30.244208075000117 ], [ -85.767241990999906, 30.240545966000141 ], [ -85.755970831999917, 30.231594143000123 ], [ -85.746693488999938, 30.220282294000143 ], [ -85.734201626999948, 30.209418036000059 ], [ -85.749134894999884, 30.190497137000037 ], [ -85.741363084999904, 30.178371486000131 ], [ -85.723011847999942, 30.168158270000035 ], [ -85.706288214999915, 30.154852606000091 ], [ -85.713734503999888, 30.14057038 ], [ -85.726389126999948, 30.152167059000121 ], [ -85.734445766999897, 30.150213934000149 ], [ -85.728342251999891, 30.143866278000033 ], [ -85.720529751999919, 30.134344794000057 ], [ -85.744252081999917, 30.139471747000144 ], [ -85.864491339999887, 30.216253973000093 ], [ -85.950062628999888, 30.253078518000066 ], [ -86.065988735999952, 30.306057033000101 ], [ -86.192860480999911, 30.33978913 ], [ -86.364816860999895, 30.380764065 ], [ -86.48497473899991, 30.39276764500012 ], [ -86.510894334999904, 30.407619533000101 ], [ -86.509755011999857, 30.409125067000147 ], [ -86.509877081999946, 30.411810614000117 ], [ -86.50877844999988, 30.414943752000013 ], [ -86.493031378999945, 30.410467841000056 ], [ -86.412668423999918, 30.408107815000093 ], [ -86.347157355999883, 30.395005601000108 ], [ -86.334828253999945, 30.400091864000146 ], [ -86.327219204999921, 30.412014065000093 ], [ -86.321888800999943, 30.425604559000035 ], [ -86.316395636999914, 30.435980536000116 ], [ -86.311675584999904, 30.436468817000119 ], [ -86.310414191999911, 30.434963283000073 ], [ -86.309559699999909, 30.435980536000116 ], [ -86.305490688999839, 30.424465236000103 ], [ -86.298166469999842, 30.413234768 ], [ -86.287180141999869, 30.404689846000068 ], [ -86.241932745999947, 30.395005601000108 ], [ -86.235747850999871, 30.398993231000091 ], [ -86.229237433999884, 30.405707098000121 ], [ -86.226307745999861, 30.412054755000085 ], [ -86.231068488999966, 30.414943752000013 ], [ -86.246490037999905, 30.417303778000147 ], [ -86.25845292899993, 30.423041083000115 ], [ -86.260894334999961, 30.429999091000028 ], [ -86.248158331999917, 30.435980536000116 ], [ -86.234445766999869, 30.43447500200007 ], [ -86.220082160999908, 30.426743882000082 ], [ -86.192860480999911, 30.408107815000093 ], [ -86.14517167899993, 30.396063544000171 ], [ -86.13512122299997, 30.391302802000084 ], [ -86.117421027999853, 30.379339911000145 ], [ -86.107777472999885, 30.386704820000134 ], [ -86.106597459999961, 30.40058014500012 ], [ -86.114369269999969, 30.408107815000093 ], [ -86.115305141999869, 30.413316148 ], [ -86.145659959999932, 30.442206122000087 ], [ -86.151478644999884, 30.457261460000112 ], [ -86.146311001999976, 30.461737372000172 ], [ -86.13898678299995, 30.466742255000113 ], [ -86.138254360999923, 30.483140367000104 ], [ -86.164418097999885, 30.472072658000073 ], [ -86.182036912999905, 30.468817450000031 ], [ -86.194935675999915, 30.478216864000061 ], [ -86.207142706999889, 30.504868882 ], [ -86.223255988999966, 30.492254950000117 ], [ -86.243316209999932, 30.490952867000104 ], [ -86.286000128999945, 30.497463283000016 ], [ -86.305287238999881, 30.495184637000037 ], [ -86.348540818999879, 30.485419012000094 ], [ -86.367909308999884, 30.483140367000104 ], [ -86.38219153599988, 30.478420315 ], [ -86.394683397999898, 30.468817450000031 ], [ -86.408355272999927, 30.461411851000051 ], [ -86.426258917999888, 30.463324286 ], [ -86.439808722999942, 30.476141669000057 ], [ -86.435210740999906, 30.490912177000112 ], [ -86.412668423999918, 30.517971096000153 ], [ -86.436634894999884, 30.518255927 ], [ -86.446400519999912, 30.516343492000132 ], [ -86.45360266799986, 30.51113515800013 ], [ -86.460438605999883, 30.500230210000055 ], [ -86.469838019999912, 30.501695054000109 ], [ -86.479807094999899, 30.51113515800013 ], [ -86.488352016999926, 30.524115302000141 ], [ -86.487619594999899, 30.51235586100016 ], [ -86.482533331999946, 30.487494208000115 ], [ -86.484608527999882, 30.480047919000029 ], [ -86.494984503999888, 30.473089911000145 ], [ -86.506906704999921, 30.467759507000082 ], [ -86.519764777999853, 30.464504299000126 ], [ -86.532704230999855, 30.463324286 ], [ -86.541656053999873, 30.46002838700015 ], [ -86.554066535999908, 30.44550202000012 ], [ -86.566517706999917, 30.442206122000087 ], [ -86.589914516999926, 30.44521719 ], [ -86.591175910999908, 30.440822658000016 ], [ -86.590728318999936, 30.425482489000061 ], [ -86.602284308999856, 30.418280341000028 ], [ -86.680083787999934, 30.422308661 ], [ -86.761382615999935, 30.414740302000055 ], [ -86.782541469999842, 30.422308661 ], [ -86.804595506999931, 30.412543036000059 ], [ -86.832915818999879, 30.408514716000084 ], [ -86.888986782999893, 30.408107815000093 ], [ -87.044504360999923, 30.389593817000062 ], [ -87.1439509759999, 30.365708726 ], [ -87.194081183999913, 30.360296942000147 ], [ -87.190052863999938, 30.37132396 ], [ -87.183583136999914, 30.375718492000161 ], [ -87.175445115999906, 30.377427476 ], [ -87.138091600999957, 30.392645575000145 ], [ -87.077748175999915, 30.40688711100016 ], [ -87.023101365999963, 30.407375393000152 ], [ -87.005238410999908, 30.410223700000088 ], [ -86.940174933999856, 30.456488348000093 ], [ -86.926991339999915, 30.451727606000091 ], [ -86.908355272999927, 30.442775783000158 ], [ -86.893788214999887, 30.43891022300015 ], [ -86.892404751999919, 30.449652411000059 ], [ -86.90453040299991, 30.461615302 ], [ -86.925200975999928, 30.470160223000121 ], [ -86.94758053299995, 30.475246486000131 ], [ -86.964426235999952, 30.476996161000145 ], [ -86.973378058999884, 30.481350002000127 ], [ -86.98680579299986, 30.500555731000091 ], [ -86.991363084999904, 30.504868882 ], [ -87.001210089999915, 30.505031643000152 ], [ -87.008697068999908, 30.506577867000189 ], [ -87.013539191999882, 30.511297919000114 ], [ -87.015288865999878, 30.521063544000143 ], [ -87.009348110999952, 30.535386460000112 ], [ -86.994740363999938, 30.54612864800005 ], [ -86.960682745999918, 30.559515692000147 ], [ -86.961496548999918, 30.564154364000061 ], [ -86.962717251999948, 30.567043361000103 ], [ -86.96812903599988, 30.57318756700009 ], [ -86.987212693999965, 30.562567450000031 ], [ -86.997547980999883, 30.575873114000061 ], [ -87.008452928999958, 30.596421617000104 ], [ -87.02961178299995, 30.607326565000093 ], [ -87.020130988999938, 30.589667059000149 ], [ -87.02122962099989, 30.579657294000086 ], [ -87.026437954999892, 30.572455145000148 ], [ -87.047840949999937, 30.518133856000119 ], [ -87.060454881999931, 30.494859117000104 ], [ -87.067534959999875, 30.460598049000126 ], [ -87.077381964999915, 30.449652411000059 ], [ -87.092925584999904, 30.448919989000146 ], [ -87.098378058999941, 30.460516669000143 ], [ -87.096750454999921, 30.47687409100017 ], [ -87.090972459999961, 30.490627346000096 ], [ -87.097727016999897, 30.503892320000105 ], [ -87.101185675999886, 30.521714585 ], [ -87.109608527999853, 30.535956122000087 ], [ -87.131337042999917, 30.538397528000033 ], [ -87.129505988999938, 30.543198960000112 ], [ -87.127023891999926, 30.554754950000145 ], [ -87.125111456999946, 30.559515692000147 ], [ -87.142241990999906, 30.561835028000118 ], [ -87.149281378999945, 30.57054271 ], [ -87.154408331999974, 30.580552476000079 ], [ -87.166127081999974, 30.586818752000127 ], [ -87.180572068999936, 30.584662177000112 ], [ -87.184193488999881, 30.574123440000065 ], [ -87.180409308999856, 30.542141018000066 ], [ -87.176136847999942, 30.529933986000103 ], [ -87.157338019999912, 30.504584052000055 ], [ -87.153065558999884, 30.486883856000148 ], [ -87.156809048999918, 30.474514065000037 ], [ -87.180409308999856, 30.435980536000116 ], [ -87.186634894999912, 30.435980536000116 ], [ -87.188791469999927, 30.438421942000062 ], [ -87.189849412999877, 30.43935781500015 ], [ -87.194081183999913, 30.442206122000087 ], [ -87.202381964999887, 30.418931382000082 ], [ -87.221547003999945, 30.412787177 ], [ -87.244130011999914, 30.411078192 ], [ -87.262928839999859, 30.40127187700007 ], [ -87.26537024599989, 30.39158763200011 ], [ -87.262359178999901, 30.367010809000092 ], [ -87.266021287999934, 30.357163804000081 ], [ -87.274769660999937, 30.353013414000131 ], [ -87.299916144999912, 30.349676825000117 ], [ -87.310129360999952, 30.346625067000033 ], [ -87.306548631999874, 30.328558661 ], [ -87.328846808999913, 30.31972890800013 ], [ -87.471058722999913, 30.293687242000161 ], [ -87.488270636999914, 30.285142320000048 ], [ -87.496408657999922, 30.287502346000096 ], [ -87.518462693999936, 30.282171942000119 ], [ -87.529204881999931, 30.277736721000153 ], [ -87.529204881999931, 30.285142320000048 ], [ -87.517648891999926, 30.2892113300001 ], [ -87.510731574999909, 30.294501044000171 ], [ -87.504750128999916, 30.30023834800015 ], [ -87.495716925999886, 30.305650132 ], [ -87.484242316999939, 30.308661200000088 ], [ -87.447336391999897, 30.31313711100016 ], [ -87.464426235999923, 30.320868231000176 ], [ -87.482045050999943, 30.326117255000057 ], [ -87.469838019999884, 30.330226955000015 ], [ -87.445057745999918, 30.329738674000041 ], [ -87.4330134759999, 30.332342841000028 ], [ -87.42145748599998, 30.34003327000012 ], [ -87.413929816999911, 30.350165106000091 ], [ -87.414540167999888, 30.360256252000156 ], [ -87.426828579999921, 30.367743231000034 ], [ -87.426828579999921, 30.374579169000143 ], [ -87.397368943999936, 30.405340887000122 ], [ -87.378773566999939, 30.417466539000102 ], [ -87.354847785999908, 30.422308661 ], [ -87.345611131999931, 30.427679755000057 ], [ -87.344838019999912, 30.439886786000116 ], [ -87.350087042999888, 30.453599351000051 ], [ -87.358509894999941, 30.463324286 ], [ -87.367095506999959, 30.465277411000059 ], [ -87.387074347999942, 30.463283596000011 ], [ -87.395741339999915, 30.466376044000086 ], [ -87.402699347999913, 30.471340236000131 ], [ -87.426828579999921, 30.483140367000104 ], [ -87.426828579999921, 30.476996161000145 ], [ -87.419585740999906, 30.46808502800009 ], [ -87.411936001999976, 30.461086330000043 ], [ -87.402943488999966, 30.455064195000105 ], [ -87.392079230999883, 30.449652411000059 ], [ -87.399525519999941, 30.449652411000059 ], [ -87.401112433999884, 30.440130927000084 ], [ -87.443918423999975, 30.404689846000068 ], [ -87.45441646999987, 30.388373114000146 ], [ -87.461577928999901, 30.371975002000127 ], [ -87.473703579999977, 30.359198309000092 ], [ -87.498850063999868, 30.354071356000091 ], [ -87.513579881999959, 30.348211981000063 ], [ -87.522531704999977, 30.335638739000061 ], [ -87.534087693999908, 30.323553778000147 ], [ -87.557199673999946, 30.319281317000147 ], [ -87.572865363999938, 30.321519273000106 ], [ -87.577259894999912, 30.325425523000106 ], [ -87.578236456999889, 30.331447658000044 ], [ -87.583851691999911, 30.33978913 ], [ -87.601226365999878, 30.353705145000063 ], [ -87.605580206999974, 30.360296942000147 ], [ -87.611805792999917, 30.360296942000147 ], [ -87.609974738999938, 30.343573309000121 ], [ -87.603260870999918, 30.332831122000115 ], [ -87.599273240999935, 30.322211005000057 ], [ -87.605580206999974, 30.305650132 ], [ -87.594471808999941, 30.304877020000063 ], [ -87.583607550999943, 30.305975653000118 ], [ -87.573597785999965, 30.308783270000063 ], [ -87.564564581999946, 30.31313711100016 ], [ -87.590158657999922, 30.275376695000105 ], [ -87.654530402999939, 30.2521019550001 ], [ -87.786488410999908, 30.236761786000145 ], [ -87.910308397999955, 30.236761786000145 ], [ -87.998402472999942, 30.223618882000082 ], [ -88.030140753999916, 30.223781643000123 ], [ -88.018177863999881, 30.233832098000036 ], [ -87.995757615999963, 30.242336330000128 ], [ -87.957508917999917, 30.250433661000088 ], [ -87.948841925999915, 30.254706122000087 ], [ -87.942941860999895, 30.262152411000059 ], [ -87.935780402999853, 30.264593817 ], [ -87.91454016799986, 30.247870184000149 ], [ -87.875070766999897, 30.241522528000033 ], [ -87.838205532999922, 30.252183335000083 ], [ -87.792347785999937, 30.262884833 ], [ -87.764230923999946, 30.27952708500014 ], [ -87.776234503999973, 30.31313711100016 ], [ -87.823475714999944, 30.351792710000112 ], [ -87.830881313999924, 30.363999742000189 ], [ -87.82835852799991, 30.374945380000057 ], [ -87.819569464999944, 30.397040106000063 ], [ -87.821278449999852, 30.404689846000068 ], [ -87.83039303299995, 30.412543036000059 ], [ -87.834462042999888, 30.412502346000068 ], [ -87.837880011999914, 30.407660223000093 ], [ -87.851144985999923, 30.393500067000062 ], [ -87.849598761999886, 30.388657945 ], [ -87.850738084999932, 30.386704820000134 ], [ -87.865630662999877, 30.387600002000127 ], [ -87.877105272999927, 30.389593817000062 ], [ -87.887033657999922, 30.393255927000112 ], [ -87.895741339999915, 30.398382880000142 ], [ -87.903472459999932, 30.404689846000068 ], [ -87.911366339999915, 30.413560289000131 ], [ -87.916574673999889, 30.423325914000159 ], [ -87.919341600999957, 30.434068101000079 ], [ -87.920277472999942, 30.445949611000046 ], [ -87.92332923099994, 30.458197333 ], [ -87.930083787999962, 30.468817450000031 ], [ -87.937123175999943, 30.477280992000161 ], [ -87.940744594999899, 30.483140367000104 ], [ -87.938832160999937, 30.499823309000149 ], [ -87.930653449999937, 30.519110419000086 ], [ -87.919992641999897, 30.536851304 ], [ -87.910308397999955, 30.548976955000072 ], [ -87.90689042899993, 30.563666083000086 ], [ -87.912464972999942, 30.583726304000137 ], [ -87.942534959999904, 30.659735419000143 ], [ -87.953846808999884, 30.672430731000119 ], [ -87.975493943999965, 30.682440497000087 ], [ -87.988189256999931, 30.684312242000161 ], [ -87.998890753999945, 30.684515692000119 ], [ -88.006255662999934, 30.687811591000141 ], [ -88.009022589999915, 30.699530341000141 ], [ -88.008697068999879, 30.71385325700011 ], [ -88.009877081999917, 30.726629950000174 ], [ -88.015980597999885, 30.735337632000054 ], [ -88.030140753999916, 30.737697658000016 ], [ -88.022816535999908, 30.72357819200009 ], [ -88.023019985999952, 30.709377346000068 ], [ -88.030140753999916, 30.697211005000085 ], [ -88.043812628999945, 30.689195054000137 ], [ -88.037668423999975, 30.675197658000073 ], [ -88.043283657999979, 30.665187893000095 ], [ -88.052561001999919, 30.654364325000088 ], [ -88.057443813999896, 30.637762762000037 ], [ -88.058745897999898, 30.617824611000131 ], [ -88.062896287999934, 30.604478257000139 ], [ -88.070301886999914, 30.594142971000124 ], [ -88.081044074999937, 30.583156643000066 ], [ -88.08458411399991, 30.576157945 ], [ -88.085560675999886, 30.567084052 ], [ -88.084787563999868, 30.548976955000072 ], [ -88.086822068999908, 30.540961005000142 ], [ -88.09630286399991, 30.529730536000145 ], [ -88.098378058999913, 30.521063544000143 ], [ -88.100493943999936, 30.504787502000013 ], [ -88.109934048999946, 30.470892645000148 ], [ -88.112049933999856, 30.453070380000085 ], [ -88.110218878999973, 30.41120026200015 ], [ -88.120106574999909, 30.338324286000116 ], [ -88.126332160999937, 30.326117255000057 ], [ -88.137684699999937, 30.319769598000121 ], [ -88.142241990999963, 30.32257721600017 ], [ -88.14391028599988, 30.328802802000141 ], [ -88.146148240999963, 30.332342841000028 ], [ -88.166859503999973, 30.332831122000115 ], [ -88.16730709499987, 30.332342841000028 ], [ -88.184071417999888, 30.333970445000048 ], [ -88.194081183999884, 30.337103583000115 ], [ -88.195668097999913, 30.346625067000033 ], [ -88.187123175999886, 30.367743231000034 ], [ -88.21629798099994, 30.377264716000028 ], [ -88.277943488999966, 30.389064846000096 ], [ -88.303822394999969, 30.40127187700007 ], [ -88.30532792899993, 30.393622137000037 ], [ -88.307118292999917, 30.389593817000062 ], [ -88.308990037999877, 30.386216539000046 ], [ -88.311268683999856, 30.380764065 ], [ -88.317494269999912, 30.380764065 ], [ -88.335438605999855, 30.403876044000143 ], [ -88.355336066999939, 30.403753973000093 ], [ -88.377756313999868, 30.393866278000175 ], [ -88.403146938999896, 30.387600002000127 ], [ -88.407338019999912, 30.382391669000029 ], [ -88.406564907999893, 30.370835679000109 ], [ -88.40754146999987, 30.359320380000085 ], [ -88.4173884759999, 30.354071356000091 ], [ -88.430531378999945, 30.351996161000059 ], [ -88.436756964999915, 30.346625067000033 ], [ -88.440907355999855, 30.339585679000137 ], [ -88.447824673999946, 30.332342841000028 ], [ -88.470570441999882, 30.323879299000069 ], [ -88.487700975999928, 30.329982815000065 ], [ -88.506255662999934, 30.340806382000054 ], [ -88.533192511999886, 30.346625067000033 ], [ -88.546131964999915, 30.346747137000179 ], [ -88.558461066999939, 30.348456122000087 ], [ -88.567738410999908, 30.353583075000088 ], [ -88.574289516999897, 30.374660549000126 ], [ -88.587554490999906, 30.383612372000144 ], [ -88.591216600999871, 30.395005601000108 ], [ -88.598703579999921, 30.395005601000108 ], [ -88.616932745999918, 30.370347398000106 ], [ -88.662220831999946, 30.354559637000179 ], [ -88.711659308999884, 30.350287177000055 ], [ -88.742054816999968, 30.354071356000091 ], [ -88.845855272999927, 30.422593492000132 ], [ -88.927642381999902, 30.442206122000087 ], [ -88.951893683999913, 30.432359117000161 ], [ -88.966053839999915, 30.428900458000086 ], [ -88.982289191999968, 30.428534247000144 ], [ -88.982289191999968, 30.422308661 ], [ -88.859364386999914, 30.408107815000093 ], [ -88.876088019999941, 30.395209052000084 ], [ -88.907134568999965, 30.392808335000112 ], [ -88.968617316999939, 30.395005601000108 ], [ -88.982329881999959, 30.390936591000141 ], [ -89.013417120999861, 30.377427476 ], [ -89.026966925999915, 30.374579169000143 ], [ -89.043568488999881, 30.372748114000061 ], [ -89.114735480999911, 30.352362372000087 ], [ -89.177886522999898, 30.33722565300009 ], [ -89.240223761999886, 30.320746161 ], [ -89.253488735999895, 30.319281317000147 ], [ -89.270985480999855, 30.322821356000119 ], [ -89.273345506999902, 30.330796617000161 ], [ -89.264881964999859, 30.339992580000128 ], [ -89.249745245999861, 30.346625067000033 ], [ -89.267974412999934, 30.355210679000109 ], [ -89.300160285999908, 30.376532294000086 ], [ -89.321766730999911, 30.380764065 ], [ -89.331939256999931, 30.377142645000148 ], [ -89.344960089999944, 30.368638414000102 ], [ -89.35480709499987, 30.358587958000143 ], [ -89.355580206999974, 30.350327867000047 ], [ -89.347279425999886, 30.347479559000121 ], [ -89.32359778599988, 30.346421617000075 ], [ -89.318674282999922, 30.343207098 ], [ -89.318348761999886, 30.323960679000052 ], [ -89.320546027999882, 30.312079169000114 ], [ -89.330230272999927, 30.302883205000128 ], [ -89.421050584999932, 30.257798570000077 ], [ -89.41380774599989, 30.244696356000091 ], [ -89.418080206999917, 30.234116929000052 ], [ -89.434722459999961, 30.216253973000093 ], [ -89.43781490799995, 30.205755927000112 ], [ -89.438588019999969, 30.197333075000145 ], [ -89.442534959999961, 30.189764716000113 ], [ -89.455189581999917, 30.181545315000037 ], [ -89.462025519999941, 30.188950914000102 ], [ -89.456776495999861, 30.194647528000175 ], [ -89.459543423999918, 30.197170315 ], [ -89.468251105999911, 30.2032738300001 ], [ -89.476877407999893, 30.193345445 ], [ -89.491078253999916, 30.188666083000058 ], [ -89.505930141999897, 30.189439195 ], [ -89.516672329999892, 30.195786851000108 ], [ -89.523508266999926, 30.195786851000108 ], [ -89.525990363999938, 30.192775783000016 ], [ -89.536366339999944, 30.180324611000103 ], [ -89.565500454999892, 30.163478908000101 ], [ -89.595936652999853, 30.155910549000154 ], [ -89.612904425999915, 30.168524481000034 ], [ -89.603179490999878, 30.168646552 ], [ -89.596913214999915, 30.170396226 ], [ -89.585560675999943, 30.175279039000159 ], [ -89.596018032999922, 30.186997789000046 ], [ -89.609771287999934, 30.185736395000148 ], [ -89.625843878999916, 30.179185289000159 ], [ -89.643299933999884, 30.175279039000159 ], [ -89.676380988999938, 30.180609442000119 ], [ -89.692250128999945, 30.181301174000069 ], [ -89.708404100999928, 30.175279039000159 ], [ -89.71544348899991, 30.179429429000109 ], [ -89.736073370999918, 30.184963283000044 ], [ -89.743234829999949, 30.188950914000102 ], [ -89.748158331999917, 30.197211005 ], [ -89.747547980999883, 30.203680731000091 ], [ -89.744862433999884, 30.210516669000114 ], [ -89.743234829999949, 30.220038153000118 ], [ -89.751454230999855, 30.237372137000094 ], [ -89.770334438999896, 30.239691473000065 ], [ -89.804676886999943, 30.229925848000121 ], [ -89.826242641999869, 30.231594143000123 ], [ -89.862049933999884, 30.25800202000012 ], [ -89.883778449999937, 30.26471588700015 ], [ -89.89476477799991, 30.263576565000122 ], [ -89.91356360599994, 30.258978583 ], [ -89.924427863999938, 30.257798570000077 ], [ -89.969146287999877, 30.26471588700015 ], [ -89.978505011999914, 30.275376695000105 ], [ -89.999826626999976, 30.313055731000176 ], [ -90.003895636999943, 30.322699286000145 ], [ -90.012684699999909, 30.326239325000031 ], [ -90.058501756999902, 30.360296942000147 ], [ -90.096018032999922, 30.373724677000141 ], [ -90.143462693999936, 30.385077216000113 ], [ -90.189442511999914, 30.390814520000092 ], [ -90.22240149599989, 30.387600002000127 ], [ -90.222405442450878, 30.387597628561437 ], [ -90.245472785999937, 30.373724677000141 ], [ -90.268422003999916, 30.352687893 ], [ -90.305572068999936, 30.305650132 ], [ -90.331166144999912, 30.276027736000131 ], [ -90.405018683999913, 30.220160223000093 ], [ -90.428456183999884, 30.188950914000102 ], [ -90.432972785999937, 30.143296617000161 ], [ -90.414051886999914, 30.106594143000066 ], [ -90.379994269999912, 30.080389716000028 ], [ -90.339100714999859, 30.066066799000126 ], [ -90.266224738999938, 30.060126044000114 ], [ -90.231027798999975, 30.039740302000141 ], [ -90.168365037999877, 30.02448151200015 ], [ -90.14517167899993, 30.023830471000011 ], [ -90.10448157499988, 30.035060940000037 ], [ -90.036976691999882, 30.040269273000106 ], [ -90.016265428999873, 30.044582424000012 ], [ -89.99644934799997, 30.052435614 ], [ -89.927316860999952, 30.095526434000121 ], [ -89.899525519999884, 30.122748114000117 ], [ -89.880441860999923, 30.154852606000091 ], [ -89.857289191999968, 30.151190497000059 ], [ -89.849273240999935, 30.145331122000087 ], [ -89.846262173999918, 30.130601304000109 ], [ -89.840728318999908, 30.120266018 ], [ -89.82762610599994, 30.111070054000109 ], [ -89.811675584999932, 30.103908596000096 ], [ -89.797840949999937, 30.099554755 ], [ -89.788807745999918, 30.09886302300005 ], [ -89.786244269999912, 30.103094794000171 ], [ -89.78351803299995, 30.111558335000112 ], [ -89.761586066999911, 30.136542059000035 ], [ -89.752837693999936, 30.149115302000112 ], [ -89.746937628999916, 30.161851304000081 ], [ -89.743234829999949, 30.175279039000159 ], [ -89.736398891999841, 30.175279039000159 ], [ -89.728911912999877, 30.161688544000114 ], [ -89.73924719999988, 30.14931875200007 ], [ -89.750355597999913, 30.123358466000084 ], [ -89.756906704999892, 30.11391836100016 ], [ -89.754139777999939, 30.111395575000145 ], [ -89.750314907999922, 30.108872789000131 ], [ -89.746408657999922, 30.105292059000149 ], [ -89.743234829999949, 30.099554755 ], [ -89.729562954999921, 30.123480536000059 ], [ -89.728911912999877, 30.126898505000057 ], [ -89.722808397999898, 30.127508856000119 ], [ -89.707671678999901, 30.125433661 ], [ -89.702259894999941, 30.126898505000057 ], [ -89.688465949999937, 30.135239976000136 ], [ -89.683420376999919, 30.140041408000016 ], [ -89.68114173099994, 30.148016669000171 ], [ -89.683583136999886, 30.154242255000142 ], [ -89.689116990999878, 30.155585028000033 ], [ -89.694162563999924, 30.153143622000087 ], [ -89.694813605999883, 30.148016669000171 ], [ -89.698557094999899, 30.147894598 ], [ -89.706450975999871, 30.150213934000149 ], [ -89.711984829999892, 30.154771226000108 ], [ -89.708404100999928, 30.161688544000114 ], [ -89.68114173099994, 30.168524481000034 ], [ -89.667388475999928, 30.164007880000085 ], [ -89.650013800999943, 30.146429755000142 ], [ -89.639556443999965, 30.14057038 ], [ -89.652943488999966, 30.123480536000059 ], [ -89.666493292999917, 30.113592841000141 ], [ -89.676909959999904, 30.101223049000012 ], [ -89.68114173099994, 30.076361395000063 ], [ -89.710519985999923, 30.067531643 ], [ -89.718983527999882, 30.062323309000092 ], [ -89.72199459499987, 30.051825262000037 ], [ -89.718617316999968, 30.04222239800005 ], [ -89.717925584999932, 30.033270575000031 ], [ -89.728911912999877, 30.02448151200015 ], [ -89.747670050999943, 30.041001695000048 ], [ -89.773589647999927, 30.050482489000146 ], [ -89.800445115999935, 30.051214911000088 ], [ -89.822092251999919, 30.041571356000119 ], [ -89.835113084999904, 30.026312567000147 ], [ -89.840402798999975, 30.011419989000089 ], [ -89.838937954999921, 29.995347398000106 ], [ -89.831939256999931, 29.976711330000015 ], [ -89.821929490999935, 29.957342841000113 ], [ -89.811146613999938, 29.94717031500015 ], [ -89.794341600999928, 29.943264065000065 ], [ -89.766835089999915, 29.942572333000115 ], [ -89.751210089999915, 29.946844794000029 ], [ -89.716623501999919, 29.960516669000171 ], [ -89.708404100999928, 29.956203518000066 ], [ -89.710926886999943, 29.949937242000104 ], [ -89.72524980399993, 29.933417059000035 ], [ -89.728911912999877, 29.922064520000063 ], [ -89.705311652999939, 29.897894598000065 ], [ -89.68651282499988, 29.882554429000109 ], [ -89.664540167999888, 29.875474351000051 ], [ -89.64159094999988, 29.875148830000043 ], [ -89.619699673999946, 29.879868882000139 ], [ -89.602406378999945, 29.890773830000015 ], [ -89.586903449999937, 29.909125067000062 ], [ -89.575591600999957, 29.931057033000073 ], [ -89.571278449999852, 29.952460028000033 ], [ -89.571197068999879, 29.98847077 ], [ -89.565581834999875, 30.000921942000119 ], [ -89.551421678999958, 30.011419989000089 ], [ -89.54161536399991, 30.014878648 ], [ -89.521148240999963, 30.019354559000149 ], [ -89.510487433999913, 30.02448151200015 ], [ -89.503081834999932, 30.030747789000102 ], [ -89.498890753999916, 30.037095445000048 ], [ -89.495432094999899, 30.044134833000115 ], [ -89.48997962099989, 30.052435614 ], [ -89.488270636999886, 30.057806708000058 ], [ -89.489328579999921, 30.070542710000026 ], [ -89.486236131999931, 30.076361395000063 ], [ -89.479074673999889, 30.079982815000122 ], [ -89.473622199999852, 30.07831452 ], [ -89.468251105999911, 30.07290273600016 ], [ -89.457183397999955, 30.071112372000172 ], [ -89.434722459999961, 30.062567450000145 ], [ -89.42731686099998, 30.058661200000145 ], [ -89.42731686099998, 30.052435614 ], [ -89.434722459999961, 30.052435614 ], [ -89.434722459999961, 30.044989325000117 ], [ -89.431223110999952, 30.042792059000035 ], [ -89.430083787999934, 30.042710679000052 ], [ -89.429351365999906, 30.042059637000094 ], [ -89.42731686099998, 30.03807200700011 ], [ -89.421050584999932, 30.03807200700011 ], [ -89.415028449999909, 30.043646552000112 ], [ -89.393706834999961, 30.05654531500015 ], [ -89.386341925999943, 30.058661200000145 ], [ -89.372547980999855, 30.05467357 ], [ -89.366037563999868, 30.048651434000149 ], [ -89.36815344999988, 30.040838934000178 ], [ -89.380116339999887, 30.031927802000141 ], [ -89.393706834999961, 30.029120184000092 ], [ -89.421945766999926, 30.031236070000105 ], [ -89.434722459999961, 30.02448151200015 ], [ -89.440581834999904, 30.014227606000034 ], [ -89.438832160999908, 30.006089585000112 ], [ -89.4349666009999, 29.998439846000096 ], [ -89.434722459999961, 29.989691473000036 ], [ -89.442209438999924, 29.983058986000131 ], [ -89.451893683999884, 29.979641018000123 ], [ -89.454701300999943, 29.976385809000092 ], [ -89.44155839799987, 29.969875393 ], [ -89.428944464999887, 29.968695380000085 ], [ -89.400746222999913, 29.973049221000068 ], [ -89.386341925999943, 29.969875393 ], [ -89.370228644999884, 29.950751044000029 ], [ -89.381743943999908, 29.935532945000048 ], [ -89.400786912999905, 29.932114976000136 ], [ -89.407460089999887, 29.948797919000171 ], [ -89.434722459999961, 29.935126044000143 ], [ -89.434722459999961, 29.928900458000086 ], [ -89.420480923999946, 29.912014065000093 ], [ -89.413644985999923, 29.907782294000171 ], [ -89.415028449999909, 29.907131252000042 ], [ -89.413319464999915, 29.90615469000015 ], [ -89.413644985999923, 29.901556708000115 ], [ -89.407460089999887, 29.901556708000115 ], [ -89.401682094999899, 29.909125067000062 ], [ -89.390451626999919, 29.916449286000059 ], [ -89.378244594999927, 29.920558986000017 ], [ -89.369536912999934, 29.918646552000055 ], [ -89.366688605999911, 29.908026434000121 ], [ -89.374256964999859, 29.899074611000074 ], [ -89.393788214999944, 29.887355861000103 ], [ -89.393788214999944, 29.879868882000139 ], [ -89.378773566999911, 29.88377513200011 ], [ -89.372873501999976, 29.887396552 ], [ -89.366444464999859, 29.894110419000029 ], [ -89.359852667999888, 29.890082098000065 ], [ -89.331695115999906, 29.879868882000139 ], [ -89.352447068999908, 29.869289455000072 ], [ -89.358998175999886, 29.866848049000126 ], [ -89.353016730999883, 29.863714911000059 ], [ -89.350331183999884, 29.86078522300015 ], [ -89.34862219999988, 29.857407945000134 ], [ -89.345326300999943, 29.853216864 ], [ -89.357899542999945, 29.851874091000113 ], [ -89.367543097999913, 29.846828518000066 ], [ -89.374745245999947, 29.839992580000157 ], [ -89.380116339999887, 29.83331940300009 ], [ -89.372181769999941, 29.821844794000143 ], [ -89.366200324999909, 29.809719143000066 ], [ -89.358509894999912, 29.798976955000157 ], [ -89.345326300999943, 29.791693427000141 ], [ -89.35562089799987, 29.792425848000065 ], [ -89.378895636999886, 29.79783763200011 ], [ -89.386341925999943, 29.797919012000094 ], [ -89.394642706999946, 29.790838934000035 ], [ -89.404286261999914, 29.771307684000149 ], [ -89.413644985999923, 29.764390367000047 ], [ -89.411732550999972, 29.771144924000097 ], [ -89.409738735999952, 29.785101630000057 ], [ -89.407460089999887, 29.791693427000141 ], [ -89.420033331999946, 29.791978257000082 ], [ -89.427235480999883, 29.798041083000058 ], [ -89.438140428999873, 29.815904039000131 ], [ -89.446400519999941, 29.823187567000147 ], [ -89.456776495999861, 29.829250393000152 ], [ -89.469064907999922, 29.832912502000099 ], [ -89.482533331999889, 29.83331940300009 ], [ -89.478098110999923, 29.815659898 ], [ -89.487172003999916, 29.80292389500012 ], [ -89.502430792999888, 29.791693427000141 ], [ -89.516672329999892, 29.77871328300013 ], [ -89.527251756999931, 29.760728257000025 ], [ -89.532541469999927, 29.755845445000134 ], [ -89.544585740999935, 29.750799872000087 ], [ -89.554310675999886, 29.749823309000035 ], [ -89.576283331999889, 29.752590236000074 ], [ -89.585560675999943, 29.750799872000087 ], [ -89.601470506999874, 29.734849351 ], [ -89.603830532999922, 29.716253973 ], [ -89.596994594999899, 29.69940827 ], [ -89.585560675999943, 29.688706773000078 ], [ -89.565663214999859, 29.685939846000011 ], [ -89.542551235999895, 29.688218492000161 ], [ -89.52212480399993, 29.687323309000092 ], [ -89.510487433999913, 29.675034898000135 ], [ -89.517241990999963, 29.676336981000034 ], [ -89.52212480399993, 29.676011460000112 ], [ -89.526275193999965, 29.675197658000101 ], [ -89.530913865999906, 29.675034898000135 ], [ -89.516021287999934, 29.667303778000033 ], [ -89.482533331999889, 29.64085521000014 ], [ -89.482533331999889, 29.634100653000118 ], [ -89.499908006999874, 29.635484117000189 ], [ -89.513824022999955, 29.643988348000121 ], [ -89.525746222999885, 29.654364325000117 ], [ -89.537180141999869, 29.661363023000021 ], [ -89.568186001999976, 29.66722239800005 ], [ -89.595814581999974, 29.66885000200007 ], [ -89.623768683999913, 29.67462799700003 ], [ -89.67251542899993, 29.701483466000113 ], [ -89.702259894999941, 29.709784247000087 ], [ -89.69351152299987, 29.698797919000029 ], [ -89.667225714999859, 29.685003973000121 ], [ -89.653879360999952, 29.675034898000135 ], [ -89.65794837099989, 29.673732815000122 ], [ -89.667469855999911, 29.66885000200007 ], [ -89.647043423999918, 29.661363023000021 ], [ -89.646595831999917, 29.656561591000113 ], [ -89.647043423999918, 29.654527085000083 ], [ -89.645415818999908, 29.650091864 ], [ -89.619699673999946, 29.627264716000084 ], [ -89.639068162999962, 29.620266018 ], [ -89.722238735999923, 29.639878648000078 ], [ -89.756906704999892, 29.634100653000118 ], [ -89.73265540299991, 29.628119208 ], [ -89.722767706999889, 29.623195705000128 ], [ -89.715931769999884, 29.613592841000141 ], [ -89.725738084999904, 29.613959052000084 ], [ -89.728911912999877, 29.613592841000141 ], [ -89.723255988999881, 29.601629950000031 ], [ -89.694813605999883, 29.572007554000081 ], [ -89.68960527299987, 29.560288804 ], [ -89.683745897999927, 29.537990627000156 ], [ -89.67804928299995, 29.527899481000176 ], [ -89.668365037999905, 29.521795966000084 ], [ -89.640980597999913, 29.513657945000162 ], [ -89.617543097999942, 29.500555731000119 ], [ -89.592437303999958, 29.50287506700009 ], [ -89.578114386999886, 29.497503973000121 ], [ -89.582630988999938, 29.494452216000028 ], [ -89.583241339999887, 29.493353583000086 ], [ -89.585560675999943, 29.490057684000035 ], [ -89.569162563999868, 29.484605210000026 ], [ -89.541574673999918, 29.4708519550001 ], [ -89.523508266999926, 29.46963125200007 ], [ -89.523508266999926, 29.46279531500015 ], [ -89.53368079299986, 29.449123440000037 ], [ -89.537424282999893, 29.435003973000093 ], [ -89.532460089999944, 29.427801825000145 ], [ -89.516672329999892, 29.434800523000135 ], [ -89.518950975999871, 29.418158270000092 ], [ -89.528797980999883, 29.411566473 ], [ -89.539621548999975, 29.409979559000178 ], [ -89.544585740999935, 29.408148505 ], [ -89.539865688999924, 29.39777252800009 ], [ -89.529164191999911, 29.39321523600016 ], [ -89.515777147999898, 29.392523505000113 ], [ -89.456125454999921, 29.403509833000086 ], [ -89.433949347999942, 29.403469143000095 ], [ -89.413644985999923, 29.39386627800009 ], [ -89.410633917999945, 29.390773830000015 ], [ -89.400990363999966, 29.392482815000122 ], [ -89.39273027299987, 29.391791083000086 ], [ -89.386341925999943, 29.387640692000147 ], [ -89.380116339999887, 29.387640692000147 ], [ -89.372141079999949, 29.392645575000088 ], [ -89.361643032999979, 29.394354559000092 ], [ -89.350168423999918, 29.392645575000088 ], [ -89.336781378999916, 29.390570380000057 ], [ -89.337025519999969, 29.385239976000022 ], [ -89.343576626999948, 29.381293036000116 ], [ -89.351796027999853, 29.380194403000147 ], [ -89.362700975999928, 29.380194403000147 ], [ -89.373524542999917, 29.377020575000088 ], [ -89.379790818999965, 29.370021877000042 ], [ -89.380930141999897, 29.362941799000154 ], [ -89.376372850999957, 29.359767971000096 ], [ -89.367746548999946, 29.357611395 ], [ -89.353179490999935, 29.348211981000148 ], [ -89.34227454299986, 29.346096096000153 ], [ -89.334095831999946, 29.347154039000102 ], [ -89.319203253999888, 29.35179271000014 ], [ -89.298247850999928, 29.35447825700011 ], [ -89.290028449999852, 29.357123114 ], [ -89.281361456999946, 29.357611395 ], [ -89.270253058999913, 29.352932033000073 ], [ -89.264068162999962, 29.345282294000143 ], [ -89.26105709499987, 29.326320705000128 ], [ -89.257191535999937, 29.318793036000088 ], [ -89.244455532999893, 29.315985419000029 ], [ -89.227121548999918, 29.322211005 ], [ -89.211048956999917, 29.335272528000147 ], [ -89.201975063999924, 29.352932033000073 ], [ -89.197092251999948, 29.353461005000057 ], [ -89.195668097999885, 29.352036851 ], [ -89.19554602799991, 29.349351304000109 ], [ -89.194488084999961, 29.346096096000153 ], [ -89.189930792999917, 29.346380927 ], [ -89.18773352799991, 29.340399481000176 ], [ -89.187367316999911, 29.330389716000084 ], [ -89.188343878999973, 29.318793036000088 ], [ -89.17804928299995, 29.322984117000104 ], [ -89.174061652999882, 29.325628973 ], [ -89.168771938999896, 29.316229559000149 ], [ -89.162180141999841, 29.310126044000086 ], [ -89.156361456999974, 29.30296458500014 ], [ -89.153553839999915, 29.290838934000064 ], [ -89.143625454999921, 29.29584381700009 ], [ -89.139881964999887, 29.298285223000121 ], [ -89.13044186099998, 29.287502346000039 ], [ -89.126942511999886, 29.276516018000066 ], [ -89.123158331999946, 29.267889716000141 ], [ -89.112619594999899, 29.264146226000108 ], [ -89.118560350999928, 29.255438544000057 ], [ -89.12653561099998, 29.249701239000061 ], [ -89.136138475999957, 29.245917059000035 ], [ -89.147368943999965, 29.243068752000013 ], [ -89.147368943999965, 29.236802476000051 ], [ -89.105783657999979, 29.226263739 ], [ -89.100249803999958, 29.214585679 ], [ -89.087147589999887, 29.206935940000065 ], [ -89.071359829999949, 29.202826239000117 ], [ -89.057972785999937, 29.20209381700009 ], [ -89.060943162999962, 29.20612213700015 ], [ -89.06480872299997, 29.216376044000171 ], [ -89.046986456999889, 29.218451239 ], [ -89.032460089999859, 29.216620184000121 ], [ -89.020415818999936, 29.209458726 ], [ -89.010161912999905, 29.195868231000034 ], [ -89.03062903599988, 29.195868231000034 ], [ -89.03062903599988, 29.188421942000147 ], [ -89.021473761999886, 29.186835028000118 ], [ -89.017404751999948, 29.184515692000147 ], [ -89.010161912999905, 29.174750067000033 ], [ -89.031890428999901, 29.180080471000068 ], [ -89.038929816999939, 29.177923895000092 ], [ -89.043690558999856, 29.16791413 ], [ -89.051136847999942, 29.16791413 ], [ -89.051014777999853, 29.174709377000042 ], [ -89.052072719999927, 29.182562567 ], [ -89.051136847999942, 29.188421942000147 ], [ -89.065256313999868, 29.18496328300013 ], [ -89.083119269999941, 29.173651434000149 ], [ -89.096994594999927, 29.159613348000036 ], [ -89.09894771999987, 29.147406317000147 ], [ -89.0892634759999, 29.148627020000063 ], [ -89.02318274599989, 29.147406317000147 ], [ -89.051584438999924, 29.097357489000117 ], [ -89.06480872299997, 29.086004950000145 ], [ -89.065541144999912, 29.101141669000143 ], [ -89.071522589999915, 29.112494208000115 ], [ -89.082630988999938, 29.119045315 ], [ -89.09894771999987, 29.119533596000096 ], [ -89.092762824999909, 29.110907294000086 ], [ -89.087513800999915, 29.101060289000159 ], [ -89.084380662999934, 29.090155341000084 ], [ -89.084624803999873, 29.078558661000088 ], [ -89.096302863999881, 29.086859442000147 ], [ -89.101307745999918, 29.091864325000088 ], [ -89.105783657999979, 29.099676825000088 ], [ -89.111073370999861, 29.08612702000012 ], [ -89.123605923999946, 29.072088934000149 ], [ -89.150502081999946, 29.048163153000118 ], [ -89.153431769999941, 29.029933986000046 ], [ -89.133656378999945, 28.996242580000043 ], [ -89.147368943999965, 28.990423895000063 ], [ -89.157785610999952, 28.99746328300013 ], [ -89.18814042899993, 29.030462958 ], [ -89.194488084999961, 29.041327216000084 ], [ -89.199859178999901, 29.053127346000153 ], [ -89.224761522999955, 29.091457424000097 ], [ -89.232411261999886, 29.099676825000088 ], [ -89.242787238999881, 29.106105861000103 ], [ -89.247670050999943, 29.105902411000145 ], [ -89.249745245999861, 29.095933335000055 ], [ -89.248036261999857, 29.086371161000059 ], [ -89.245228644999912, 29.079169012000037 ], [ -89.24461829299986, 29.072699286000116 ], [ -89.249745245999861, 29.064886786000145 ], [ -89.265533006999902, 29.059393622000115 ], [ -89.288685675999943, 29.056463934000178 ], [ -89.309559699999937, 29.05019765800013 ], [ -89.318674282999922, 29.034409898 ], [ -89.321034308999884, 29.021551825000145 ], [ -89.327056443999879, 29.008449611000103 ], [ -89.374012824999909, 28.947455145000035 ], [ -89.391672329999921, 28.933986721000124 ], [ -89.413644985999923, 28.928371486000131 ], [ -89.410145636999943, 28.960109768000095 ], [ -89.407460089999887, 28.969305731000148 ], [ -89.4017634759999, 28.974920966000141 ], [ -89.383900519999912, 28.987616278000118 ], [ -89.377186652999882, 28.997626044000114 ], [ -89.355580206999974, 29.02049388200011 ], [ -89.350575324999937, 29.03070709800015 ], [ -89.350697394999912, 29.042181708 ], [ -89.352365688999924, 29.052150783000073 ], [ -89.352162238999966, 29.058050848000121 ], [ -89.343332485999923, 29.064357815000065 ], [ -89.32091223899991, 29.068426825000117 ], [ -89.311838344999899, 29.072333075000117 ], [ -89.29442298099994, 29.106512762000094 ], [ -89.287220831999889, 29.117580471000124 ], [ -89.278065558999913, 29.140448309000149 ], [ -89.276193813999868, 29.16010163 ], [ -89.290679490999906, 29.161118882000082 ], [ -89.292713995999918, 29.153957424000126 ], [ -89.293080206999946, 29.141180731000176 ], [ -89.295765753999916, 29.129828192 ], [ -89.304351365999935, 29.126939195000162 ], [ -89.310943162999905, 29.133978583000143 ], [ -89.312896287999962, 29.146673895 ], [ -89.311838344999899, 29.171332098 ], [ -89.314930792999888, 29.181341864000089 ], [ -89.321766730999911, 29.181952216000141 ], [ -89.328602667999917, 29.175482489000146 ], [ -89.331695115999906, 29.164496161000088 ], [ -89.330148891999869, 29.152777411 ], [ -89.324452277999882, 29.131537177000112 ], [ -89.324859178999901, 29.119533596000096 ], [ -89.337513800999943, 29.103461005000113 ], [ -89.360991990999935, 29.091701565000122 ], [ -89.383656378999973, 29.087836005000113 ], [ -89.393788214999944, 29.095933335000055 ], [ -89.404896613999966, 29.122870184000121 ], [ -89.403960740999878, 29.130357164000188 ], [ -89.398508266999841, 29.141913153000118 ], [ -89.406239386999857, 29.148138739000061 ], [ -89.42731686099998, 29.154933986000103 ], [ -89.482533331999889, 29.243068752000013 ], [ -89.473866339999915, 29.243353583000143 ], [ -89.455189581999917, 29.250474351 ], [ -89.474476691999968, 29.259182033000073 ], [ -89.49510657499988, 29.259507554 ], [ -89.506092902999939, 29.250148830000157 ], [ -89.496205206999917, 29.22939687700007 ], [ -89.555002407999922, 29.248439846000153 ], [ -89.581857876999919, 29.250474351 ], [ -89.608225063999896, 29.256048895 ], [ -89.617014126999976, 29.269354559000121 ], [ -89.622670050999972, 29.285142320000162 ], [ -89.635607016999927, 29.29323713100014 ], [ -89.662004150999934, 29.300930209000043 ], [ -89.669017202999839, 29.294730067000117 ], [ -89.686687299999846, 29.296306510000093 ], [ -89.732349125999889, 29.306103064000112 ], [ -89.794997990999974, 29.312683680000063 ], [ -89.818145920999882, 29.316159960000093 ], [ -89.793531412999954, 29.328088121000079 ], [ -89.774627241999895, 29.332415119000174 ], [ -89.757705104999872, 29.343163106000034 ], [ -89.74978699299993, 29.355809356000023 ], [ -89.743805579999929, 29.369842817000134 ], [ -89.745219227999911, 29.384948827000173 ], [ -89.75009984499988, 29.392195228000119 ], [ -89.76305091099988, 29.39386627800009 ], [ -89.768299933999856, 29.389105536 ], [ -89.771717902999882, 29.387152411000059 ], [ -89.774403449999852, 29.384995835000055 ], [ -89.777333136999886, 29.380194403000147 ], [ -89.781809048999946, 29.391669012000122 ], [ -89.778879360999923, 29.398871161000145 ], [ -89.773426886999886, 29.404689846000011 ], [ -89.770578579999921, 29.411566473 ], [ -89.775502081999889, 29.42080312700007 ], [ -89.786976691999939, 29.418524481000091 ], [ -89.808420376999976, 29.408148505 ], [ -89.814523891999869, 29.410834052000084 ], [ -89.81981360599994, 29.417059637000037 ], [ -89.823801235999923, 29.423976955000128 ], [ -89.825795050999943, 29.428615627000156 ], [ -89.827381964999887, 29.43048737200003 ], [ -89.829823370999918, 29.432440497000172 ], [ -89.831857876999948, 29.435858466000084 ], [ -89.831939256999931, 29.442287502000099 ], [ -89.8294978509999, 29.447333075000031 ], [ -89.824859178999873, 29.452785549000069 ], [ -89.820301886999914, 29.456366278000033 ], [ -89.818267381999902, 29.455959377000127 ], [ -89.813872850999928, 29.468166408000016 ], [ -89.816314256999959, 29.474351304000081 ], [ -89.839914516999897, 29.479437567 ], [ -89.847401495999861, 29.482407945000105 ], [ -89.851714647999955, 29.480047919000143 ], [ -89.853098110999923, 29.466213283000158 ], [ -89.860259568999879, 29.443752346000153 ], [ -89.876942511999914, 29.448919989000061 ], [ -89.907704230999911, 29.477036851000051 ], [ -89.941639777999853, 29.464422919000171 ], [ -89.971180792999917, 29.473374742000104 ], [ -90.080393032999922, 29.537258205000015 ], [ -90.099476691999911, 29.544663804000109 ], [ -90.116200324999852, 29.547023830000157 ], [ -90.129709438999924, 29.544663804000109 ], [ -90.133168097999913, 29.539129950000088 ], [ -90.119984503999973, 29.531683661000031 ], [ -90.127430792999945, 29.52423737200003 ], [ -90.143625454999892, 29.537420966000084 ], [ -90.166859503999916, 29.567694403000175 ], [ -90.182036912999905, 29.57949453300013 ], [ -90.18785559799997, 29.569281317 ], [ -90.202992316999968, 29.552313544000029 ], [ -90.209339972999885, 29.53847890800013 ], [ -90.18879146999987, 29.537827867000189 ], [ -90.182036912999905, 29.53847890800013 ], [ -90.182036912999905, 29.531683661000031 ], [ -90.197824673999946, 29.525783596000068 ], [ -90.205922003999888, 29.524115302000055 ], [ -90.215565558999856, 29.52423737200003 ], [ -90.21027584499987, 29.515122789000046 ], [ -90.206044074999852, 29.511419989 ], [ -90.201568162999905, 29.512437242000161 ], [ -90.195708787999934, 29.518011786000088 ], [ -90.186105923999975, 29.5118675800001 ], [ -90.143462693999936, 29.476792710000112 ], [ -90.133452928999958, 29.471625067 ], [ -90.12368730399993, 29.46963125200007 ], [ -90.094960089999859, 29.467271226000108 ], [ -90.069813605999883, 29.460028387000094 ], [ -90.046620245999947, 29.447251695000048 ], [ -90.02375240799995, 29.428615627000156 ], [ -90.039173956999974, 29.422756252000013 ], [ -90.047352667999888, 29.416815497000087 ], [ -90.050526495999947, 29.407294012000094 ], [ -90.051096157999922, 29.390773830000015 ], [ -90.045155402999882, 29.38556549700003 ], [ -90.040598110999952, 29.380438544000114 ], [ -90.037424282999979, 29.373968817 ], [ -90.036284959999932, 29.365871486000074 ], [ -90.037424282999979, 29.33926015800013 ], [ -90.040516730999883, 29.346869208000086 ], [ -90.044545050999943, 29.353094794000057 ], [ -90.050282355999911, 29.357489325000031 ], [ -90.058501756999902, 29.359767971000096 ], [ -90.05638587099989, 29.341131903000118 ], [ -90.04751542899993, 29.32501862200003 ], [ -90.034006313999868, 29.312689520000092 ], [ -90.017567511999886, 29.305121161000145 ], [ -90.017567511999886, 29.298285223000121 ], [ -90.037424282999979, 29.290838934000064 ], [ -90.050892706999946, 29.30756256700009 ], [ -90.067453579999921, 29.310126044000086 ], [ -90.075795050999915, 29.301459052 ], [ -90.06476803299995, 29.284613348000093 ], [ -90.095041469999842, 29.28384023600016 ], [ -90.099964972999913, 29.253851630000028 ], [ -90.083851691999939, 29.225409247000087 ], [ -90.051096157999922, 29.22939687700007 ], [ -90.057443813999868, 29.213446356000148 ], [ -90.08023027299987, 29.174709377000042 ], [ -90.085845506999874, 29.16791413 ], [ -90.100209113999938, 29.157945054000024 ], [ -90.113880988999881, 29.144191799000097 ], [ -90.130767381999874, 29.132025458 ], [ -90.147287563999868, 29.126939195000162 ], [ -90.198475714999915, 29.098293361000017 ], [ -90.229237433999884, 29.086655992000189 ], [ -90.244048631999959, 29.091498114000089 ], [ -90.237700975999928, 29.096828518000152 ], [ -90.235951300999943, 29.106594143000095 ], [ -90.23668372299997, 29.119533596000096 ], [ -90.239735480999855, 29.131822007000054 ], [ -90.246001756999902, 29.140366929000081 ], [ -90.267404751999948, 29.158026434000178 ], [ -90.271311001999948, 29.167425848 ], [ -90.267160610999923, 29.17763906500015 ], [ -90.260568813999839, 29.188299872000172 ], [ -90.257150844999927, 29.198919989000117 ], [ -90.256214972999942, 29.210760809000178 ], [ -90.25169837099989, 29.22479889500012 ], [ -90.250355597999913, 29.236802476000051 ], [ -90.251088019999941, 29.24738190300009 ], [ -90.254465298999946, 29.259914455000015 ], [ -90.260812954999977, 29.26947663 ], [ -90.27082271999987, 29.270982164000046 ], [ -90.272084113999966, 29.26357656500015 ], [ -90.279286261999914, 29.247300523000106 ], [ -90.287464972999913, 29.23517487200003 ], [ -90.291249152999939, 29.239935614000117 ], [ -90.300689256999959, 29.257554429000052 ], [ -90.337513800999943, 29.293605861000017 ], [ -90.339100714999859, 29.305121161000145 ], [ -90.339100714999859, 29.311265367000104 ], [ -90.351429816999911, 29.308539130000057 ], [ -90.35985266799986, 29.303371486000131 ], [ -90.364816860999923, 29.294623114000061 ], [ -90.366363084999961, 29.281195380000085 ], [ -90.369943813999924, 29.270900783000158 ], [ -90.393706834999932, 29.243068752000013 ], [ -90.393706834999932, 29.298285223000121 ], [ -90.399566209999875, 29.311590887000037 ], [ -90.419545050999943, 29.340562242000047 ], [ -90.425038214999887, 29.346096096000153 ], [ -90.425892706999974, 29.350409247000144 ], [ -90.434437628999916, 29.357245184000178 ], [ -90.444243943999936, 29.357652085 ], [ -90.448963995999947, 29.342678127000156 ], [ -90.452015753999945, 29.327134507000054 ], [ -90.459950324999909, 29.314113674000154 ], [ -90.483062303999958, 29.290838934000064 ], [ -90.496449347999942, 29.306138414000102 ], [ -90.506255662999877, 29.304510809000178 ], [ -90.515614386999914, 29.29596588700015 ], [ -90.527455206999974, 29.290838934000064 ], [ -90.562001105999883, 29.300726630000057 ], [ -90.571848110999895, 29.305121161000145 ], [ -90.558216925999943, 29.311265367000104 ], [ -90.558216925999943, 29.318793036000088 ], [ -90.56932532499988, 29.320705471000124 ], [ -90.578114386999857, 29.31952545800003 ], [ -90.583648240999963, 29.314520575000145 ], [ -90.585519985999923, 29.305121161000145 ], [ -90.594960089999859, 29.308335679 ], [ -90.602772589999944, 29.30756256700009 ], [ -90.607411261999886, 29.301988023000078 ], [ -90.607248501999919, 29.290838934000064 ], [ -90.602447068999908, 29.287827867000047 ], [ -90.579253709999904, 29.284613348000093 ], [ -90.581288214999915, 29.266302802000112 ], [ -90.592193162999905, 29.254787502000099 ], [ -90.598215298999889, 29.244330145 ], [ -90.585519985999923, 29.22939687700007 ], [ -90.59528561099998, 29.218573309000149 ], [ -90.603098110999952, 29.222316799000012 ], [ -90.610829230999883, 29.232977606000034 ], [ -90.620228644999912, 29.243068752000013 ], [ -90.627023891999841, 29.235744533000101 ], [ -90.63239498599998, 29.225287177000112 ], [ -90.640736456999946, 29.20209381700009 ], [ -90.636057094999842, 29.197821356000176 ], [ -90.633900519999941, 29.195868231000034 ], [ -90.640858527999939, 29.157416083000115 ], [ -90.640736456999946, 29.140611070000105 ], [ -90.647043423999889, 29.153713283000073 ], [ -90.652414516999869, 29.162298895 ], [ -90.663685675999943, 29.164618231000148 ], [ -90.674875454999949, 29.161118882000082 ], [ -90.676869269999912, 29.154771226000136 ], [ -90.675445115999935, 29.145697333000143 ], [ -90.67638098899991, 29.137396552000055 ], [ -90.690297003999888, 29.131537177000112 ], [ -90.693592902999939, 29.126654364000146 ], [ -90.697865363999938, 29.121771552000084 ], [ -90.705922003999973, 29.119533596000096 ], [ -90.711537238999966, 29.123724677000112 ], [ -90.727121548999975, 29.130357164000188 ], [ -90.743234829999949, 29.130845445000162 ], [ -90.750599738999938, 29.116400458000115 ], [ -90.757964647999927, 29.115912177000112 ], [ -90.793080206999917, 29.12620677300005 ], [ -90.805246548999889, 29.126939195000162 ], [ -90.796945766999897, 29.138820705000128 ], [ -90.780751105999855, 29.142767645000035 ], [ -90.769846157999979, 29.149115302000141 ], [ -90.777251756999959, 29.16791413 ], [ -90.795318162999877, 29.160630601 ], [ -90.812082485999895, 29.166245835000083 ], [ -90.828602667999888, 29.176336981000063 ], [ -90.846180792999917, 29.182196356000091 ], [ -90.839914516999869, 29.166245835000083 ], [ -90.844146287999877, 29.15729401200015 ], [ -90.866688605999883, 29.147406317000147 ], [ -90.869862433999941, 29.143703518 ], [ -90.870594855999883, 29.139146226000051 ], [ -90.873646613999966, 29.135402736000017 ], [ -90.884022589999859, 29.133775132 ], [ -90.929921027999939, 29.171291408000016 ], [ -90.955189581999889, 29.185736395000063 ], [ -90.982329881999902, 29.191555080000043 ], [ -91.010650193999936, 29.182196356000091 ], [ -91.011219855999911, 29.193304755000113 ], [ -91.007883266999897, 29.201564846000011 ], [ -91.000803188999839, 29.206773179000024 ], [ -90.990142381999902, 29.208929755 ], [ -90.999256964999887, 29.218085028000175 ], [ -91.015492316999939, 29.223537502000042 ], [ -91.030995245999947, 29.224310614000146 ], [ -91.037953253999945, 29.219794012000179 ], [ -91.041249152999882, 29.204657294000086 ], [ -91.050119594999927, 29.197007554000052 ], [ -91.063343878999945, 29.194810289000159 ], [ -91.079579230999911, 29.195868231000034 ], [ -91.089019334999904, 29.200669664000102 ], [ -91.112294074999937, 29.219061591000141 ], [ -91.123931443999936, 29.223211981000091 ], [ -91.228586391999926, 29.238592841000056 ], [ -91.285145636999914, 29.260891018000066 ], [ -91.327992316999911, 29.294867255000113 ], [ -91.339670376999919, 29.33926015800013 ], [ -91.329497850999957, 29.323919989 ], [ -91.312123175999886, 29.319322007000054 ], [ -91.293120897999898, 29.323228257000054 ], [ -91.278187628999945, 29.33307526200015 ], [ -91.266590949999909, 29.350816148000078 ], [ -91.258615688999868, 29.36709219 ], [ -91.24657141799986, 29.378119208000143 ], [ -91.222971157999922, 29.380194403000147 ], [ -91.227162238999938, 29.363511460000112 ], [ -91.214914516999897, 29.343329169000086 ], [ -91.191314256999931, 29.33144765800013 ], [ -91.161488410999937, 29.33926015800013 ], [ -91.162180141999897, 29.305812893000095 ], [ -91.166167772999955, 29.290920315000122 ], [ -91.175770636999943, 29.277777411000059 ], [ -91.165272589999887, 29.274969794000029 ], [ -91.157704230999911, 29.269761460000112 ], [ -91.153675910999937, 29.26170482000019 ], [ -91.154042120999861, 29.250474351 ], [ -91.132394985999895, 29.257391669000086 ], [ -91.122222459999932, 29.26300690300009 ], [ -91.113107876999948, 29.270982164000046 ], [ -91.117990688999924, 29.275783596000124 ], [ -91.122547980999855, 29.282131252000156 ], [ -91.127349412999934, 29.284613348000093 ], [ -91.127349412999934, 29.290838934000064 ], [ -91.109852667999888, 29.3165550800001 ], [ -91.121571417999888, 29.338120835000026 ], [ -91.177113410999937, 29.379339911000059 ], [ -91.208607550999943, 29.395697333000086 ], [ -91.219838019999941, 29.404445705000157 ], [ -91.222401495999947, 29.411607164000188 ], [ -91.221058722999942, 29.428290106000034 ], [ -91.222971157999922, 29.434800523000135 ], [ -91.228016730999855, 29.438381252000013 ], [ -91.241118943999908, 29.441717841000028 ], [ -91.247425910999965, 29.445705471000011 ], [ -91.262562628999945, 29.469061591000113 ], [ -91.267486131999902, 29.495794989000117 ], [ -91.263295050999886, 29.522284247000087 ], [ -91.250843878999973, 29.544663804000109 ], [ -91.240467902999882, 29.55304596600017 ], [ -91.22911536399991, 29.559881903000175 ], [ -91.22008216099988, 29.569403387000179 ], [ -91.216704881999959, 29.585638739000117 ], [ -91.220041469999899, 29.598863023000078 ], [ -91.228382941999968, 29.608058986000131 ], [ -91.241200324999909, 29.612982489 ], [ -91.257679816999882, 29.613592841000141 ], [ -91.24779212099989, 29.590521552 ], [ -91.253163214999915, 29.576320705000072 ], [ -91.281890428999873, 29.55556875200007 ], [ -91.286122199999909, 29.546047268000095 ], [ -91.28449459499987, 29.535467841000028 ], [ -91.280506964999915, 29.527085679000081 ], [ -91.278187628999945, 29.52423737200003 ], [ -91.282378709999961, 29.513820705000128 ], [ -91.294422980999883, 29.494330145000148 ], [ -91.298654751999891, 29.483832098000093 ], [ -91.320912238999938, 29.496649481000119 ], [ -91.363514777999882, 29.512111721000124 ], [ -91.387440558999856, 29.518011786000088 ], [ -91.411854620999918, 29.518947658000158 ], [ -91.423898891999926, 29.521185614000146 ], [ -91.429025844999927, 29.527899481000176 ], [ -91.424387173999918, 29.538397528000147 ], [ -91.416737433999884, 29.54791901200015 ], [ -91.415150519999941, 29.556830145000092 ], [ -91.429025844999927, 29.565822658000016 ], [ -91.452504035999908, 29.551581122000115 ], [ -91.493234829999977, 29.539618231000176 ], [ -91.534331834999961, 29.534002997000172 ], [ -91.559315558999884, 29.53847890800013 ], [ -91.545399542999888, 29.548814195000048 ], [ -91.541249152999853, 29.569037177000055 ], [ -91.545155402999853, 29.591864325000174 ], [ -91.555653449999937, 29.609849351000108 ], [ -91.558827277999882, 29.619208075000145 ], [ -91.558990037999962, 29.631659247000172 ], [ -91.560780402999939, 29.642482815000065 ], [ -91.568959113999938, 29.647121486000103 ], [ -91.579701300999943, 29.645209052000141 ], [ -91.601796027999853, 29.636623440000122 ], [ -91.613352016999869, 29.634100653000118 ], [ -91.639719204999977, 29.635484117000189 ], [ -91.644154425999943, 29.645168361000131 ], [ -91.638295050999915, 29.662095445000134 ], [ -91.633859829999921, 29.685288804000052 ], [ -91.630441860999923, 29.728827216000084 ], [ -91.637928839999887, 29.742092190000037 ], [ -91.661732550999972, 29.750799872000087 ], [ -91.684681769999969, 29.753119208000058 ], [ -91.778431769999969, 29.748480536000145 ], [ -91.795725063999868, 29.742377020000148 ], [ -91.833078579999921, 29.72345612200003 ], [ -91.858469204999949, 29.719061591000141 ], [ -91.86668860599994, 29.729396877000156 ], [ -91.86750240799995, 29.743638414000074 ], [ -91.87059485599994, 29.750799872000087 ], [ -91.877919074999852, 29.759344794000029 ], [ -91.874419725999957, 29.778143622000172 ], [ -91.864654100999928, 29.796942450000031 ], [ -91.853586391999869, 29.805365302000084 ], [ -91.846058722999913, 29.798773505 ], [ -91.837066209999904, 29.787665106000148 ], [ -91.829457160999965, 29.784409898000106 ], [ -91.826283331999889, 29.801703192000119 ], [ -91.828684048999946, 29.81533437700007 ], [ -91.835804816999882, 29.82526276200015 ], [ -91.847523566999882, 29.831244208000086 ], [ -91.893950975999928, 29.837632554000109 ], [ -91.906727667999888, 29.837103583000115 ], [ -91.933501756999874, 29.819403387000122 ], [ -91.945139126999891, 29.821844794000143 ], [ -91.955555792999888, 29.82916901200015 ], [ -91.966867641999869, 29.83331940300009 ], [ -91.984445766999897, 29.831976630000113 ], [ -91.986317511999857, 29.827378648 ], [ -91.984486456999974, 29.818793036000059 ], [ -91.990712042999945, 29.805365302000084 ], [ -92.000477667999888, 29.798895575000174 ], [ -92.086415167999888, 29.771470445000105 ], [ -92.099964972999942, 29.764390367000047 ], [ -92.122466600999957, 29.743882554000024 ], [ -92.134632941999939, 29.736151434000092 ], [ -92.148996548999918, 29.736476955000015 ], [ -92.136463995999918, 29.745306708000086 ], [ -92.134144660999937, 29.75682200700011 ], [ -92.141468878999945, 29.766913153000175 ], [ -92.158314581999946, 29.771226304000081 ], [ -92.161976691999911, 29.768296617000047 ], [ -92.170236782999893, 29.754624742000104 ], [ -92.175689256999931, 29.750799872000087 ], [ -92.180897589999915, 29.751939195000134 ], [ -92.202381964999859, 29.764390367000047 ], [ -92.198801235999895, 29.746730861000131 ], [ -92.191029425999886, 29.723781643000152 ], [ -92.181507941999882, 29.704006252000127 ], [ -92.172271287999934, 29.69550202 ], [ -92.164662238999881, 29.697739976 ], [ -92.150217251999919, 29.707505601000108 ], [ -92.126535610999923, 29.711371161000116 ], [ -92.117176886999886, 29.713934637000037 ], [ -92.108794725999928, 29.714422919000029 ], [ -92.099964972999942, 29.709784247000087 ], [ -92.12926184799997, 29.692613023000078 ], [ -92.141509568999936, 29.688706773000078 ], [ -92.113596157999893, 29.63764069200009 ], [ -92.107411261999943, 29.620428778000175 ], [ -92.099964972999942, 29.620428778000175 ], [ -92.084462042999945, 29.630316473000093 ], [ -92.060170050999972, 29.636948960000055 ], [ -92.037017381999931, 29.637030341000028 ], [ -92.02489173099994, 29.627264716000084 ], [ -92.05528723899991, 29.621527411000116 ], [ -92.067372199999909, 29.616156317000062 ], [ -92.073312954999921, 29.606146552000084 ], [ -92.052805141999869, 29.599920966000028 ], [ -92.06590735599994, 29.587836005000113 ], [ -92.093373175999886, 29.587144273000078 ], [ -92.136865015999973, 29.58686246000012 ], [ -92.173865834999873, 29.576188691000183 ], [ -92.241160982999901, 29.545530647000149 ], [ -92.27649313299986, 29.533836437000062 ], [ -92.314307326999938, 29.534368574000112 ], [ -92.465072621999923, 29.560103938000069 ], [ -92.489761759999908, 29.562993557000155 ], [ -92.514399866999923, 29.566359096000085 ], [ -92.546213344999899, 29.571682033000158 ], [ -92.683057945999877, 29.604132864000078 ], [ -92.795338378999929, 29.644241026000074 ], [ -92.852660586999917, 29.66741492400017 ], [ -92.915670895999881, 29.692979464000089 ], [ -93.026844855999855, 29.732855536000059 ], [ -93.094450357999904, 29.751526132000052 ], [ -93.199592949999925, 29.772811188000119 ], [ -93.25353181299991, 29.776355247000154 ], [ -93.308514496999862, 29.769151067000152 ], [ -93.34549494599986, 29.76204483400015 ], [ -93.385427650999901, 29.767576766 ], [ -93.420810218999947, 29.768261434000166 ], [ -93.453396357999878, 29.770424944000027 ], [ -93.497425910999937, 29.769191799000126 ], [ -93.558513092999874, 29.763120991 ], [ -93.64081646, 29.750313051000049 ], [ -93.701185458999959, 29.742633382000051 ], [ -93.739379842999938, 29.737247514 ], [ -93.766957744999928, 29.726333316000151 ], [ -93.792936488999942, 29.717555222000115 ], [ -93.821375855999889, 29.709450505000106 ], [ -93.831027826999929, 29.700134882000086 ], [ -93.850972209999895, 29.723283778000066 ], [ -93.87915518399987, 29.749883544000127 ], [ -93.893697093999947, 29.79081447300014 ], [ -93.888238390999931, 29.807175275000176 ], [ -93.857355005999892, 29.818852076000056 ], [ -93.820667818999908, 29.824213748000048 ], [ -93.78194133199986, 29.856514911000133 ], [ -93.772084113999881, 29.904689846000096 ], [ -93.759952353999921, 29.960576139000111 ], [ -93.769366039999881, 29.978315924000086 ], [ -93.788900959999893, 29.985065849000094 ], [ -93.818646052999895, 29.9867553670001 ], [ -93.834597684999892, 29.98362132900003 ], [ -93.854074673999918, 29.98655833500014 ], [ -93.85802161399991, 29.968247789000159 ], [ -93.867543097999913, 29.950018622000087 ], [ -93.924398587999917, 29.865621589000099 ], [ -93.938111949999922, 29.805902690000138 ], [ -93.932711711999843, 29.776194375000088 ], [ -93.875843878999973, 29.723374742000047 ], [ -93.859934048999946, 29.692572333000086 ], [ -93.875803188999896, 29.675034898000135 ], [ -93.88731848899991, 29.674546617000047 ], [ -93.916737433999913, 29.681830145000063 ], [ -94.037587042999945, 29.684027411000059 ], [ -94.060129360999838, 29.681830145000063 ], [ -94.101958787999934, 29.670599677000055 ], [ -94.13145911399991, 29.658880927000084 ], [ -94.215972459999961, 29.617499091000141 ], [ -94.33527584499987, 29.578192450000145 ], [ -94.654286261999914, 29.451890367000161 ], [ -94.690744594999899, 29.428615627000156 ], [ -94.742421027999939, 29.374660549000154 ], [ -94.762766079999921, 29.366522528000033 ], [ -94.786203579999892, 29.370306708000058 ], [ -94.790638800999972, 29.380031643 ], [ -94.782053188999868, 29.393377997000115 ], [ -94.700998501999919, 29.46279531500015 ], [ -94.675160285999908, 29.474798895000063 ], [ -94.651600714999944, 29.478257554000081 ], [ -94.640126105999911, 29.481431382000139 ], [ -94.630034959999932, 29.485663153000147 ], [ -94.622425910999908, 29.490057684000035 ], [ -94.592600063999896, 29.517564195000162 ], [ -94.580881313999924, 29.52423737200003 ], [ -94.572132941999939, 29.526434637000122 ], [ -94.521880662999962, 29.523993231000091 ], [ -94.504465298999889, 29.526027736000017 ], [ -94.491810675999915, 29.534125067000147 ], [ -94.485259568999936, 29.552150783000073 ], [ -94.485951300999886, 29.566107489000146 ], [ -94.494943813999896, 29.55878327000012 ], [ -94.510121222999885, 29.549017645 ], [ -94.52965247299997, 29.55556875200007 ], [ -94.54552161399991, 29.568426825000117 ], [ -94.561431443999908, 29.574611721000068 ], [ -94.605448177999904, 29.552650016000158 ], [ -94.695232459999971, 29.538958957000048 ], [ -94.736819334999893, 29.528477289000122 ], [ -94.755235444999897, 29.524271247000101 ], [ -94.779050171999899, 29.529876915 ], [ -94.787429412999899, 29.54071392800013 ], [ -94.785080435999873, 29.546933688000152 ], [ -94.773754470999876, 29.541801409000144 ], [ -94.761274074999932, 29.543918331000057 ], [ -94.749457597999935, 29.56103790300007 ], [ -94.735778778999958, 29.579235245000078 ], [ -94.716138389999912, 29.611408156000138 ], [ -94.703110390999939, 29.650437504000095 ], [ -94.692740893999968, 29.696340139000156 ], [ -94.695470327999914, 29.718122638000168 ], [ -94.702143978999914, 29.73530648500018 ], [ -94.703531807999923, 29.75136155200012 ], [ -94.710175682999932, 29.760517824000189 ], [ -94.719493652999887, 29.77655053800008 ], [ -94.734054998999881, 29.782240880000145 ], [ -94.744626804999911, 29.782205729000097 ], [ -94.760457555999949, 29.776416445000066 ], [ -94.773654627999889, 29.772927863000078 ], [ -94.794792360999907, 29.771705170000175 ], [ -94.806743235999932, 29.78198929600002 ], [ -94.826490230999894, 29.768144031000034 ], [ -94.826385918999875, 29.749786788000122 ], [ -94.848660794999944, 29.717577818000123 ], [ -94.862984139999867, 29.683106243000125 ], [ -94.876076243999904, 29.665842342000175 ], [ -94.906409530999866, 29.657682431000026 ], [ -94.919596500999944, 29.655327353000033 ], [ -94.931555765999917, 29.66674091 ], [ -94.938316759999879, 29.689652621000093 ], [ -94.948914997999879, 29.694190100000085 ], [ -94.966172105999902, 29.704433957000063 ], [ -94.999175584999904, 29.716009833000058 ], [ -95.015502401999868, 29.720300111000128 ], [ -95.0267449319999, 29.736093650000029 ], [ -95.033992771999891, 29.748461307000142 ], [ -95.052280231999902, 29.749748170000132 ], [ -95.064076300999886, 29.712876695000162 ], [ -95.050328483999891, 29.707025646000105 ], [ -95.036812351999856, 29.70434292 ], [ -95.028824080999897, 29.697496674000107 ], [ -95.018488186999917, 29.695483536000083 ], [ -95.008946785999882, 29.693465439000178 ], [ -94.998579619999902, 29.686629898 ], [ -94.985801383999899, 29.674985390000032 ], [ -95.008696001999908, 29.659713857000057 ], [ -95.015723264999849, 29.644522457000065 ], [ -95.010031173999892, 29.625952994 ], [ -94.984518507999894, 29.606120190000027 ], [ -94.98919473299992, 29.594386967000091 ], [ -95.005441860999866, 29.578599351000051 ], [ -95.015980597999913, 29.568915106000091 ], [ -95.023915167999888, 29.542181708000086 ], [ -94.983911111999902, 29.513819470000115 ], [ -94.907798281999931, 29.4963099940001 ], [ -94.914873307999926, 29.488005564000062 ], [ -94.923506217999943, 29.475557837000068 ], [ -94.936390753999945, 29.480047919000143 ], [ -94.950591600999957, 29.473781643 ], [ -94.96507727799991, 29.46963125200007 ], [ -94.96507727799991, 29.46279531500015 ], [ -94.948231574999909, 29.451971747000144 ], [ -94.947092251999948, 29.435370184000092 ], [ -94.942941860999923, 29.4220238300001 ], [ -94.91730709499987, 29.421128648 ], [ -94.91730709499987, 29.428615627000156 ], [ -94.921498175999886, 29.432114976000051 ], [ -94.921986456999974, 29.433986721000039 ], [ -94.921783006999931, 29.436509507000139 ], [ -94.919585740999935, 29.436509507000139 ], [ -94.918324347999913, 29.436997789000131 ], [ -94.918202277999853, 29.440090236000017 ], [ -94.91730709499987, 29.442287502000099 ], [ -94.889556443999879, 29.400824286 ], [ -94.878773566999968, 29.39386627800009 ], [ -94.865793423999975, 29.391750393000095 ], [ -94.821115688999924, 29.373968817 ], [ -94.824940558999941, 29.372788804 ], [ -94.828277147999955, 29.372259833 ], [ -94.831288214999859, 29.370754299000154 ], [ -94.834095831999917, 29.366522528000033 ], [ -94.849436001999948, 29.375962632000054 ], [ -94.870350714999915, 29.380845445000105 ], [ -94.888824022999955, 29.375962632000054 ], [ -94.896799282999893, 29.356350002000099 ], [ -94.901356574999852, 29.334621486000017 ], [ -94.912912563999868, 29.315578518000123 ], [ -94.928212042999945, 29.30756256700009 ], [ -94.943959113999881, 29.318793036000088 ], [ -94.950795050999915, 29.318793036000088 ], [ -94.955148891999897, 29.306341864000061 ], [ -94.964466925999943, 29.297796942000119 ], [ -94.984934048999918, 29.284613348000093 ], [ -94.987863735999838, 29.283880927000055 ], [ -94.996205206999889, 29.285223700000145 ], [ -94.999175584999904, 29.284613348000093 ], [ -94.999867316999939, 29.281968492000189 ], [ -94.998646613999938, 29.273749091000113 ], [ -94.999175584999904, 29.270982164000046 ], [ -95.065174933999941, 29.204169012000094 ], [ -95.088368292999888, 29.188625393 ], [ -95.115874803999901, 29.174750067000033 ], [ -95.124256964999859, 29.193548895000063 ], [ -95.137196417999888, 29.198919989000117 ], [ -95.153146938999896, 29.200873114000061 ], [ -95.170521613999966, 29.208929755 ], [ -95.162912563999924, 29.200628973000121 ], [ -95.150013800999915, 29.174750067000033 ], [ -95.15916907499988, 29.152411200000174 ], [ -95.158111131999931, 29.130926825000145 ], [ -95.150013800999915, 29.089097398000135 ], [ -95.149647589999887, 29.07217031500015 ], [ -95.151234503999916, 29.058498440000037 ], [ -95.158924933999941, 29.045721747000172 ], [ -95.231516079999949, 28.995510158000101 ], [ -95.259999152999853, 28.981756903000175 ], [ -95.3138728509999, 28.928371486000131 ], [ -95.367746548999918, 28.887152411000059 ], [ -95.379383917999917, 28.880560614 ], [ -95.401722785999937, 28.878363348 ], [ -95.419178839999915, 28.872300523000106 ], [ -95.487172003999973, 28.829657294000171 ], [ -95.601918097999913, 28.763861395 ], [ -95.64488684799997, 28.745917059000149 ], [ -95.6888728509999, 28.736314195000162 ], [ -95.733957485999866, 28.73358795800003 ], [ -95.780018683999913, 28.735907294000171 ], [ -95.81737219999988, 28.732489325000145 ], [ -95.951975063999924, 28.688706773 ], [ -95.945790167999945, 28.676459052000112 ], [ -95.947132941999939, 28.666245835 ], [ -95.950998501999948, 28.656968492000047 ], [ -95.952381964999915, 28.640326239 ], [ -95.954945441999911, 28.636379299000012 ], [ -95.955922003999888, 28.632635809000149 ], [ -95.951975063999924, 28.626654364000061 ], [ -95.947255011999914, 28.62531159100017 ], [ -95.940174933999941, 28.625718492000161 ], [ -95.933705206999946, 28.627590236000131 ], [ -95.930816209999904, 28.630072333000058 ], [ -95.793446417999888, 28.699448960000112 ], [ -95.754953579999921, 28.712469794000086 ], [ -95.719227667999888, 28.715480861000103 ], [ -95.837147589999887, 28.646470445000162 ], [ -95.902414516999897, 28.617865302 ], [ -96.005116339999915, 28.59650299700003 ], [ -96.066273566999968, 28.553859768 ], [ -96.123687303999873, 28.536810614000146 ], [ -96.188221808999941, 28.501654364000089 ], [ -96.218861456999946, 28.489488023000021 ], [ -96.194569464999887, 28.515570380000057 ], [ -96.160878058999884, 28.537258205000128 ], [ -96.017241990999906, 28.602240302000027 ], [ -95.996001756999931, 28.606187242000189 ], [ -95.984934048999889, 28.613104559000092 ], [ -95.981353318999908, 28.628607489 ], [ -95.987782355999911, 28.644842841000141 ], [ -96.006581183999884, 28.653998114000117 ], [ -96.026437954999977, 28.651027736000017 ], [ -96.064768032999922, 28.631333726000079 ], [ -96.077951626999948, 28.626654364000061 ], [ -96.098378058999941, 28.62327708500014 ], [ -96.157378709999875, 28.598781643 ], [ -96.204904751999976, 28.586655992000104 ], [ -96.226470506999902, 28.587144273000021 ], [ -96.222279425999943, 28.602484442000147 ], [ -96.204741990999906, 28.610581773000078 ], [ -96.158924933999913, 28.615139065000122 ], [ -96.143137173999975, 28.626654364000061 ], [ -96.136870897999927, 28.626654364000061 ], [ -96.136870897999927, 28.633530992000161 ], [ -96.153920050999972, 28.635199286000088 ], [ -96.16828365799995, 28.632554429 ], [ -96.181385870999918, 28.628648179 ], [ -96.194935675999886, 28.626654364000061 ], [ -96.215443488999938, 28.629380601000108 ], [ -96.22044837099989, 28.6368675800001 ], [ -96.215443488999938, 28.647894598000121 ], [ -96.192250128999916, 28.680894273000106 ], [ -96.188059048999975, 28.690863348 ], [ -96.195057745999861, 28.694484768000152 ], [ -96.215443488999938, 28.694973049000126 ], [ -96.230824347999885, 28.69281647300015 ], [ -96.244536912999905, 28.687567450000145 ], [ -96.266672329999977, 28.675116278000033 ], [ -96.26040605399993, 28.688706773 ], [ -96.28140214799987, 28.679754950000145 ], [ -96.308094855999911, 28.651068427000027 ], [ -96.32872473899991, 28.639715887000037 ], [ -96.345773891999869, 28.635321356000148 ], [ -96.349842902999939, 28.637396552000084 ], [ -96.350209113999938, 28.644110419000114 ], [ -96.356027798999918, 28.653998114000117 ], [ -96.385161912999962, 28.679348049000154 ], [ -96.390207485999895, 28.688706773 ], [ -96.380034959999932, 28.700262762000122 ], [ -96.377593553999901, 28.714911200000031 ], [ -96.383290167999888, 28.730047919000029 ], [ -96.397613084999875, 28.743394273000135 ], [ -96.403716600999871, 28.738755601000108 ], [ -96.413075324999909, 28.73383209800015 ], [ -96.416859503999916, 28.729722398000106 ], [ -96.435047980999911, 28.755682684000092 ], [ -96.438588019999912, 28.763861395 ], [ -96.444813605999855, 28.763861395 ], [ -96.443959113999938, 28.749253648 ], [ -96.438384568999936, 28.731756903000033 ], [ -96.43097896999987, 28.716498114000061 ], [ -96.424305792999917, 28.708644924000069 ], [ -96.417103644999969, 28.710679429000109 ], [ -96.408273891999926, 28.716945705000157 ], [ -96.400786912999934, 28.719875393000095 ], [ -96.397613084999875, 28.712062893000095 ], [ -96.400298631999959, 28.702582098000093 ], [ -96.406483527999939, 28.696763414000131 ], [ -96.412993943999908, 28.69281647300015 ], [ -96.416859503999916, 28.688706773 ], [ -96.416371222999942, 28.680975653000175 ], [ -96.412709113999881, 28.673773505000057 ], [ -96.410308397999927, 28.66632721600017 ], [ -96.413726365999935, 28.657700914000159 ], [ -96.416818813999839, 28.643703518 ], [ -96.403431769999941, 28.635565497000087 ], [ -96.369699673999946, 28.626654364000061 ], [ -96.427642381999931, 28.595404364000089 ], [ -96.462513800999943, 28.583197333000115 ], [ -96.493234829999949, 28.578924872000087 ], [ -96.477894660999908, 28.591620184000149 ], [ -96.459828253999888, 28.593329169000171 ], [ -96.444813605999855, 28.597357489000117 ], [ -96.438588019999912, 28.616766669000143 ], [ -96.447132941999911, 28.63564687700007 ], [ -96.484689907999922, 28.61261627800009 ], [ -96.493234829999949, 28.63662344000015 ], [ -96.497385219999899, 28.644761460000055 ], [ -96.507476365999963, 28.64345937700007 ], [ -96.51976477799991, 28.640448309000149 ], [ -96.530425584999932, 28.64345937700007 ], [ -96.536284959999904, 28.646063544000143 ], [ -96.549875454999949, 28.645493882 ], [ -96.554676886999943, 28.647162177000112 ], [ -96.559478318999908, 28.654282945000077 ], [ -96.560292120999918, 28.660711981000176 ], [ -96.5599666009999, 28.667222398000078 ], [ -96.561512824999852, 28.675116278000033 ], [ -96.565785285999965, 28.68891022300015 ], [ -96.567250128999916, 28.696519273 ], [ -96.570179816999939, 28.702622789000159 ], [ -96.578521287999905, 28.712062893000095 ], [ -96.590443488999938, 28.720363674000069 ], [ -96.60383053299995, 28.723700262000094 ], [ -96.617502407999893, 28.722072658000073 ], [ -96.630360480999911, 28.715480861000103 ], [ -96.634510870999861, 28.720851955000157 ], [ -96.639149542999888, 28.724188544000086 ], [ -96.650868292999888, 28.729722398000106 ], [ -96.649810350999928, 28.704820054000081 ], [ -96.645659959999875, 28.687079169000171 ], [ -96.637196417999945, 28.671616929000052 ], [ -96.6087947259999, 28.637762762000179 ], [ -96.6048884759999, 28.630560614000146 ], [ -96.602447068999879, 28.620510158000073 ], [ -96.603098110999838, 28.610174872000172 ], [ -96.608509894999969, 28.586167710000112 ], [ -96.608631964999944, 28.578924872000087 ], [ -96.599842902999882, 28.568345445000048 ], [ -96.591908331999917, 28.569647528000147 ], [ -96.581939256999931, 28.578924872000087 ], [ -96.570179816999939, 28.575384833000115 ], [ -96.541005011999886, 28.557806708 ], [ -96.520375128999973, 28.549221096000068 ], [ -96.513661261999914, 28.544134833000058 ], [ -96.506581183999856, 28.536851304000137 ], [ -96.501291469999899, 28.529120184000035 ], [ -96.493234829999949, 28.510646877000013 ], [ -96.545521613999938, 28.487738348 ], [ -96.554676886999943, 28.486070054 ], [ -96.547596808999884, 28.469305731000148 ], [ -96.531564907999979, 28.469468492000132 ], [ -96.514230923999889, 28.477972723000065 ], [ -96.503488735999895, 28.486070054 ], [ -96.473500128999916, 28.493557033000158 ], [ -96.435658331999974, 28.48135000200007 ], [ -96.406809048999946, 28.458726304000109 ], [ -96.403797980999855, 28.434881903000033 ], [ -96.475819464999887, 28.400783596000124 ], [ -96.495106574999909, 28.396470445000134 ], [ -96.529164191999939, 28.377752997000144 ], [ -96.544748501999919, 28.373480536000145 ], [ -96.6537166009999, 28.319484768000123 ], [ -96.671376105999911, 28.331854559000178 ], [ -96.687733527999939, 28.327378648000106 ], [ -96.698312954999892, 28.335882880000142 ], [ -96.703846808999913, 28.351792710000055 ], [ -96.705922003999916, 28.388495184000149 ], [ -96.709217902999882, 28.39984772300015 ], [ -96.718495245999918, 28.405462958000143 ], [ -96.736480272999955, 28.406927802000027 ], [ -96.741769985999838, 28.410589911000059 ], [ -96.743560350999928, 28.419094143000095 ], [ -96.744374152999939, 28.428452867000132 ], [ -96.746449347999942, 28.434881903000033 ], [ -96.751291469999842, 28.438666083000058 ], [ -96.762277798999889, 28.444322007000054 ], [ -96.766957160999908, 28.447943427000112 ], [ -96.784657355999911, 28.472601630000028 ], [ -96.793324347999913, 28.47972239800005 ], [ -96.801665818999879, 28.475246486000103 ], [ -96.810129360999923, 28.467840887000094 ], [ -96.813303188999896, 28.457993882 ], [ -96.810658331999889, 28.451849677000112 ], [ -96.801665818999879, 28.455389716000084 ], [ -96.777455206999974, 28.43740469000015 ], [ -96.769764777999853, 28.426214911000145 ], [ -96.766957160999908, 28.410711981000034 ], [ -96.775135870999918, 28.400458075000088 ], [ -96.793853318999879, 28.408189195000105 ], [ -96.814523891999897, 28.421698309000178 ], [ -96.82835852799991, 28.428697007000082 ], [ -96.844471808999884, 28.415594794000086 ], [ -96.825103318999936, 28.387925523000106 ], [ -96.795562303999901, 28.35651276200015 ], [ -96.781158006999931, 28.331854559000178 ], [ -96.787464972999942, 28.314276434000064 ], [ -96.797108527999939, 28.296942450000145 ], [ -96.80125891799986, 28.279120184000178 ], [ -96.782338019999941, 28.241603908000158 ], [ -96.792388475999928, 28.228664455000157 ], [ -96.82835852799991, 28.208970445000105 ], [ -96.845122850999928, 28.19326406500015 ], [ -96.88023841099988, 28.150620835000112 ], [ -96.895904100999871, 28.140814520000092 ], [ -96.928212042999888, 28.133246161000145 ], [ -96.94505774599989, 28.126450914000102 ], [ -96.933461066999968, 28.162909247000172 ], [ -96.924549933999941, 28.179185289000102 ], [ -96.910308397999927, 28.19525788 ], [ -96.924712693999908, 28.214097398000135 ], [ -96.918934699999937, 28.232123114000061 ], [ -96.908802863999881, 28.248765367000104 ], [ -96.910308397999927, 28.263617255000085 ], [ -96.921945766999841, 28.263332424000126 ], [ -96.935780402999939, 28.248277085000112 ], [ -96.959339972999885, 28.215765692000147 ], [ -96.946115688999839, 28.205145575000088 ], [ -96.943430141999869, 28.19135163 ], [ -96.94871985599994, 28.174221096000153 ], [ -96.959339972999885, 28.153753973 ], [ -96.973011847999913, 28.133937893000095 ], [ -96.984364386999886, 28.129543361000103 ], [ -97.020171678999901, 28.140082098000065 ], [ -97.016265428999901, 28.142279364000146 ], [ -97.012928839999887, 28.144964911000116 ], [ -97.009755011999914, 28.148667710000083 ], [ -97.006499803999873, 28.153753973 ], [ -97.013050910999937, 28.164007880000113 ], [ -97.007435675999943, 28.194525458000058 ], [ -97.013986782999922, 28.208970445000105 ], [ -97.020171678999901, 28.208970445000105 ], [ -97.036203579999892, 28.187648830000157 ], [ -97.071359829999949, 28.168117580000072 ], [ -97.110218878999973, 28.153631903000033 ], [ -97.137521938999868, 28.147528387000037 ], [ -97.130848761999886, 28.157782294000143 ], [ -97.138579881999902, 28.165594794000143 ], [ -97.15265865799995, 28.169256903000118 ], [ -97.164784308999941, 28.16738515800013 ], [ -97.173247850999871, 28.159002997000172 ], [ -97.177316860999838, 28.148016669000029 ], [ -97.17320716099988, 28.138373114000061 ], [ -97.157338019999969, 28.133856512000094 ], [ -97.198597785999908, 28.096828518000066 ], [ -97.217518683999941, 28.074774481000176 ], [ -97.208851691999939, 28.065008856000034 ], [ -97.186675584999875, 28.062486070000105 ], [ -97.168446417999888, 28.055609442 ], [ -97.154286261999886, 28.044623114000146 ], [ -97.14427649599989, 28.03021881700009 ], [ -97.144398566999939, 28.019761460000026 ], [ -97.148671027999882, 28.010199286000116 ], [ -97.149077928999873, 28.005519924000012 ], [ -97.137521938999868, 28.009711005000113 ], [ -97.129872199999909, 28.016750393 ], [ -97.123117641999897, 28.02830638200011 ], [ -97.118234829999921, 28.041734117000104 ], [ -97.116363084999932, 28.054388739 ], [ -97.10610917899993, 28.07094961100016 ], [ -97.057443813999896, 28.088812567000119 ], [ -97.041249152999939, 28.105902411000059 ], [ -97.044911261999886, 28.110419012000122 ], [ -97.046457485999923, 28.113714911000059 ], [ -97.04539954299986, 28.114813544000114 ], [ -97.04165605399993, 28.116603908000101 ], [ -97.034413214999915, 28.119574286 ], [ -97.024077928999901, 28.111802476000108 ], [ -97.021066860999895, 28.100327867000075 ], [ -97.027658657999979, 28.061590887000122 ], [ -97.026275193999908, 28.047674872000144 ], [ -97.024973110999895, 28.041449286000088 ], [ -97.027495897999898, 28.036688544000086 ], [ -97.037912563999896, 28.027085679000109 ], [ -97.044585740999963, 28.019110419000143 ], [ -97.06114661399991, 27.989243882000082 ], [ -97.066070115999878, 27.988674221000011 ], [ -97.067453579999949, 27.990139065000065 ], [ -97.067534959999932, 27.992824611000131 ], [ -97.06859290299991, 27.99603913 ], [ -97.105336066999911, 27.936997789000074 ], [ -97.184071417999888, 27.836615302 ], [ -97.206288214999944, 27.821722723000121 ], [ -97.232492641999869, 27.824774481000034 ], [ -97.232492641999869, 27.83222077 ], [ -97.211984829999921, 27.83222077 ], [ -97.22325598899991, 27.849066473 ], [ -97.235910610999895, 27.863836981000091 ], [ -97.25031490799995, 27.874579169000114 ], [ -97.267201300999943, 27.879380601 ], [ -97.290842251999948, 27.876654364000117 ], [ -97.331369594999899, 27.861070054000137 ], [ -97.355946417999888, 27.859564520000092 ], [ -97.348988410999908, 27.864935614000117 ], [ -97.346506313999896, 27.868719794000143 ], [ -97.345326300999943, 27.872748114000117 ], [ -97.34227454299986, 27.879380601 ], [ -97.36815344999988, 27.873236395000035 ], [ -97.424387173999946, 27.875189520000063 ], [ -97.452137824999937, 27.873195705000043 ], [ -97.457590298999975, 27.869818427000027 ], [ -97.460194464999887, 27.860663153000033 ], [ -97.46580969999988, 27.859564520000092 ], [ -97.473378058999913, 27.861029364000146 ], [ -97.481190558999913, 27.864569403000118 ], [ -97.486927863999881, 27.866359768 ], [ -97.488270636999886, 27.868638414000159 ], [ -97.489125128999973, 27.872951565000093 ], [ -97.492298956999946, 27.877183335 ], [ -97.50059973899991, 27.879380601 ], [ -97.504546678999901, 27.878851630000113 ], [ -97.521066860999895, 27.873195705000043 ], [ -97.504872199999937, 27.849025783000016 ], [ -97.487049933999856, 27.83527252800009 ], [ -97.463978644999912, 27.831732489000117 ], [ -97.431711391999869, 27.838446356000148 ], [ -97.42218990799995, 27.832709052 ], [ -97.409820115999935, 27.83234284100017 ], [ -97.398182745999918, 27.83690013200011 ], [ -97.390736456999946, 27.845892645000148 ], [ -97.385609503999945, 27.830064195000105 ], [ -97.394032355999883, 27.801703192000062 ], [ -97.390736456999946, 27.791245835 ], [ -97.371815558999913, 27.755316473 ], [ -97.356068488999966, 27.741766669000057 ], [ -97.267201300999943, 27.708075262000037 ], [ -97.259592251999891, 27.695054429000052 ], [ -97.262806769999941, 27.679266669000114 ], [ -97.272531704999892, 27.663397528000175 ], [ -97.284291144999884, 27.650051174000069 ], [ -97.28929602799991, 27.64199453300013 ], [ -97.292591925999943, 27.630926825000088 ], [ -97.295155402999882, 27.608791408000016 ], [ -97.298817511999914, 27.60057200700011 ], [ -97.329335089999859, 27.549627997000115 ], [ -97.346424933999913, 27.50576406500015 ], [ -97.349761522999927, 27.485825914000159 ], [ -97.3529353509999, 27.475734768 ], [ -97.367054816999939, 27.460760809000149 ], [ -97.408314581999974, 27.357367255 ], [ -97.411203579999921, 27.33502838700015 ], [ -97.422352667999917, 27.327785549000126 ], [ -97.486927863999881, 27.304022528000061 ], [ -97.50841223899991, 27.282416083000143 ], [ -97.522572394999941, 27.278509833000143 ], [ -97.541574673999946, 27.290350653000118 ], [ -97.505279100999928, 27.30760325700011 ], [ -97.493153449999852, 27.317694403000175 ], [ -97.498687303999873, 27.320786851000079 ], [ -97.50129146999987, 27.323919989000146 ], [ -97.503244594999899, 27.327378648000135 ], [ -97.506743943999908, 27.331284898000135 ], [ -97.486805792999917, 27.330226955000072 ], [ -97.476389126999919, 27.331488348000093 ], [ -97.469227667999888, 27.33502838700015 ], [ -97.461293097999913, 27.343654690000065 ], [ -97.460926886999914, 27.345770575000174 ], [ -97.465484178999958, 27.34674713700015 ], [ -97.472645636999886, 27.35175202 ], [ -97.474191860999838, 27.348374742000161 ], [ -97.481353318999879, 27.347072658000073 ], [ -97.489369269999912, 27.35065338700015 ], [ -97.493153449999852, 27.362046617000104 ], [ -97.491200324999909, 27.381496486000017 ], [ -97.486927863999881, 27.400213934000178 ], [ -97.506174282999922, 27.392523505000057 ], [ -97.529204881999902, 27.372137762000179 ], [ -97.541574673999946, 27.365464585000112 ], [ -97.534087693999879, 27.35175202 ], [ -97.544911261999886, 27.348089911000145 ], [ -97.55308997299997, 27.343817450000031 ], [ -97.568837042999917, 27.331284898000135 ], [ -97.575103318999879, 27.345648505000113 ], [ -97.584706183999856, 27.341782945000105 ], [ -97.603016730999911, 27.317694403000175 ], [ -97.599720831999889, 27.310939846000124 ], [ -97.600656704999949, 27.304510809000035 ], [ -97.606190558999884, 27.299709377000127 ], [ -97.61693274599989, 27.29779694200009 ], [ -97.630238410999908, 27.300238348000121 ], [ -97.634103969999927, 27.306545315000065 ], [ -97.634510870999918, 27.315130927000084 ], [ -97.637766079999977, 27.324448960000112 ], [ -97.717640753999888, 27.427435614000089 ], [ -97.742909308999856, 27.449693101000136 ], [ -97.774281378999888, 27.468491929 ], [ -97.77049719999988, 27.444566148000106 ], [ -97.736439581999946, 27.414129950000145 ], [ -97.725900844999899, 27.393377997000144 ], [ -97.740142381999902, 27.393377997000144 ], [ -97.703765428999901, 27.361070054000137 ], [ -97.691761847999885, 27.340480861000017 ], [ -97.712228969999842, 27.331284898000135 ], [ -97.710560675999943, 27.324164130000085 ], [ -97.709095831999974, 27.321356512000037 ], [ -97.706654425999943, 27.317694403000175 ], [ -97.687082485999866, 27.325140692000062 ], [ -97.672230597999913, 27.321356512000037 ], [ -97.667632615999963, 27.310858466000141 ], [ -97.678700324999909, 27.29779694200009 ], [ -97.700698032999952, 27.285942942000091 ], [ -97.7247244859999, 27.287669315000031 ], [ -97.749989386999914, 27.297308661 ], [ -97.774281378999888, 27.29779694200009 ], [ -97.760568813999868, 27.279120184000092 ], [ -97.715199869999907, 27.267359579000029 ], [ -97.678708221999841, 27.274019982000183 ], [ -97.658885318999893, 27.27412188900017 ], [ -97.642153348999898, 27.266802172 ], [ -97.629522356999928, 27.244660935000169 ], [ -97.598236218999887, 27.242959479000078 ], [ -97.559661022999904, 27.234805008000123 ], [ -97.521127373999917, 27.232190847000183 ], [ -97.501398366999922, 27.243362016000063 ], [ -97.476475518999877, 27.256395665000142 ], [ -97.440117637999975, 27.272232046000127 ], [ -97.42609615799995, 27.263657945000162 ], [ -97.427154100999928, 27.249986070000048 ], [ -97.434071417999917, 27.239243882000139 ], [ -97.445952928999873, 27.235093492000189 ], [ -97.44383704299986, 27.224188544000029 ], [ -97.443470831999946, 27.205715236000103 ], [ -97.44505774599989, 27.188218492000047 ], [ -97.449086066999939, 27.18048737200003 ], [ -97.458363410999908, 27.174790757000054 ], [ -97.45543372299997, 27.161322333000058 ], [ -97.448597785999965, 27.145493882000139 ], [ -97.445952928999873, 27.132717190000093 ], [ -97.453114386999914, 27.120754299000154 ], [ -97.46580969999988, 27.112372137000094 ], [ -97.481312628999888, 27.107570705000015 ], [ -97.496896938999896, 27.106024481000148 ], [ -97.49819902299987, 27.100734768000095 ], [ -97.488189256999902, 27.088324286000059 ], [ -97.481556769999941, 27.074286200000117 ], [ -97.493153449999852, 27.063788153000033 ], [ -97.480946417999888, 27.038723049000126 ], [ -97.480702277999939, 27.021958726000108 ], [ -97.494496222999942, 27.012640692000062 ], [ -97.550200975999928, 27.009182033000073 ], [ -97.560943162999962, 27.004868882000082 ], [ -97.562814907999922, 26.993719794000143 ], [ -97.5599666009999, 26.950751044000086 ], [ -97.554310675999886, 26.933050848 ], [ -97.545521613999938, 26.918646552000112 ], [ -97.534087693999879, 26.906805731000148 ], [ -97.494536912999934, 26.890529690000122 ], [ -97.481312628999888, 26.877630927000112 ], [ -97.493153449999852, 26.85834381700009 ], [ -97.537709113999938, 26.89557526200015 ], [ -97.548410610999866, 26.899888414000159 ], [ -97.555246548999975, 26.890204169000114 ], [ -97.560047980999883, 26.871405341000141 ], [ -97.562489386999914, 26.851385809000092 ], [ -97.562001105999911, 26.837876695000105 ], [ -97.554758266999897, 26.825140692000062 ], [ -97.543690558999856, 26.822211005000142 ], [ -97.529652472999913, 26.822007554 ], [ -97.513661261999914, 26.817368882000054 ], [ -97.50129146999987, 26.806626695000048 ], [ -97.493031378999973, 26.791734117000189 ], [ -97.488392706999946, 26.775091864000146 ], [ -97.481516079999949, 26.73135000200007 ], [ -97.457630988999966, 26.667222398000106 ], [ -97.447255011999886, 26.601304429000081 ], [ -97.424916144999941, 26.534898179000137 ], [ -97.418609178999901, 26.50202057500006 ], [ -97.422271287999934, 26.508978583000115 ], [ -97.428863084999932, 26.517726955000015 ], [ -97.431711391999869, 26.523179429000052 ], [ -97.43683834499987, 26.509914455000015 ], [ -97.446034308999856, 26.502875067000147 ], [ -97.472645636999886, 26.495835679000081 ], [ -97.438547329999977, 26.485296942000033 ], [ -97.43968665299991, 26.476467190000065 ], [ -97.44481360599994, 26.461371161000059 ], [ -97.447987433999913, 26.433335679000137 ], [ -97.450428839999944, 26.423895575000031 ], [ -97.447865363999938, 26.420152085 ], [ -97.435129360999866, 26.419501044000057 ], [ -97.417062954999949, 26.415187893000123 ], [ -97.411936001999948, 26.404527085000026 ], [ -97.410796678999901, 26.391180731000091 ], [ -97.405018683999941, 26.378566799000012 ], [ -97.398060675999943, 26.376288153000033 ], [ -97.376372850999871, 26.374416408000073 ], [ -97.370228644999884, 26.372300523000078 ], [ -97.369862433999884, 26.364081122000144 ], [ -97.378814256999902, 26.343980210000112 ], [ -97.377064581999917, 26.337591864 ], [ -97.370106574999909, 26.33681875200007 ], [ -97.363270636999914, 26.340155341000113 ], [ -97.358062303999901, 26.344956773 ], [ -97.355946417999888, 26.348456122000087 ], [ -97.351918097999942, 26.353827216000056 ], [ -97.344390428999873, 26.349351304000081 ], [ -97.340199347999942, 26.341620184000149 ], [ -97.346058722999885, 26.337591864 ], [ -97.355295376999948, 26.327948309000035 ], [ -97.361073370999918, 26.306870835000026 ], [ -97.361073370999918, 26.285793361000074 ], [ -97.352894660999908, 26.276109117000132 ], [ -97.343739386999914, 26.277980861000103 ], [ -97.336537238999881, 26.281154690000065 ], [ -97.329823370999947, 26.281724351000108 ], [ -97.321848110999895, 26.276109117000132 ], [ -97.315785285999908, 26.264878648000106 ], [ -97.319162563999924, 26.257147528000118 ], [ -97.325672980999911, 26.250392971000068 ], [ -97.329253709999875, 26.242010809000121 ], [ -97.327626105999855, 26.23041413 ], [ -97.32290605399993, 26.221502997000144 ], [ -97.308745897999927, 26.201076565000093 ], [ -97.313954230999911, 26.180121161000145 ], [ -97.315256313999924, 26.150132554 ], [ -97.310536261999914, 26.123277085 ], [ -97.298247850999957, 26.111639716000084 ], [ -97.292713995999918, 26.109605210000055 ], [ -97.285633917999888, 26.105169989000089 ], [ -97.276234503999945, 26.100653387000037 ], [ -97.263783331999917, 26.098618882 ], [ -97.236439581999946, 26.098089911000116 ], [ -97.223866339999859, 26.09589264500012 ], [ -97.211984829999921, 26.091213283000016 ], [ -97.215402798999918, 26.076320705000157 ], [ -97.222157355999855, 26.067084052 ], [ -97.232533331999946, 26.064764716000028 ], [ -97.246693488999881, 26.070705471000068 ], [ -97.248036261999886, 26.053168036000116 ], [ -97.259836391999841, 26.029120184000178 ], [ -97.26036536399991, 26.015448309000064 ], [ -97.255604620999918, 25.99892812700007 ], [ -97.252023891999869, 25.992987372000144 ], [ -97.246693488999881, 25.988755601000108 ], [ -97.236236131999902, 25.984198309000178 ], [ -97.233225063999896, 25.985541083000058 ], [ -97.231760219999842, 25.989976304000052 ], [ -97.226226365999906, 25.99502187700007 ], [ -97.201730923999889, 26.005072333000058 ], [ -97.192616339999887, 26.011542059000149 ], [ -97.18529212099989, 26.022284247000144 ], [ -97.181467251999976, 26.038031317000119 ], [ -97.179554816999911, 26.05605703300013 ], [ -97.175363735999895, 26.070868231000034 ], [ -97.164784308999941, 26.076890367000132 ], [ -97.15184485599994, 26.075018622000144 ], [ -97.143177863999938, 26.04775625200007 ], [ -97.140736456999917, 26.019191799000069 ], [ -97.137521938999868, 25.974514065000122 ], [ -97.139267462366405, 25.965827043004154 ], [ -97.204940551999897, 25.960638733000124 ], [ -97.253051309999961, 25.963480937 ], [ -97.266357991999882, 25.960638733000124 ], [ -97.269200194999939, 25.944360657000018 ], [ -97.287648681999968, 25.928651021000135 ], [ -97.31098059099989, 25.922088114000147 ], [ -97.328447224999934, 25.933301900000018 ], [ -97.351107340999818, 25.918419088000164 ], [ -97.355112263999899, 25.91278635700003 ], [ -97.352270060999928, 25.894492899000156 ], [ -97.345164550999897, 25.871703593000163 ], [ -97.345732991999853, 25.852221578000169 ], [ -97.365990152999956, 25.843901673000019 ], [ -97.376015381999878, 25.846743877000094 ], [ -97.380123657999974, 25.853203431000125 ], [ -97.383120890999891, 25.860541484000052 ], [ -97.389890503999851, 25.865657451000018 ], [ -97.397822835999904, 25.865812480000059 ], [ -97.399476481999955, 25.861161601 ], [ -97.399889892999965, 25.855115459000061 ], [ -97.404179036999835, 25.851394756000147 ], [ -97.425418050999809, 25.854857076000187 ], [ -97.435727499, 25.869274801000117 ], [ -97.441308553999903, 25.884932760000154 ], [ -97.448259033, 25.892322490000154 ], [ -97.469420532999948, 25.892942607000137 ], [ -97.486318725999951, 25.895733134000082 ], [ -97.502209228999874, 25.90188263000006 ], [ -97.520270141999873, 25.91278635700003 ], [ -97.565176961999867, 25.954747620000134 ], [ -97.594322468999877, 25.966374818000091 ], [ -97.604786946999923, 25.979965719000077 ], [ -97.613055176999978, 25.995985413000042 ], [ -97.622641154999968, 26.009059550000089 ], [ -97.641451374999889, 26.022495423000137 ], [ -97.65987402399989, 26.030660299000047 ], [ -97.679614420999968, 26.034639385000119 ], [ -97.766947590999905, 26.03965199800011 ], [ -97.78030594899991, 26.043217672000154 ], [ -97.782321329999974, 26.058617249000136 ], [ -97.802010050999911, 26.063733215000141 ], [ -97.878181111999908, 26.063733215000141 ], [ -97.941665609999944, 26.056808574000158 ], [ -97.99923315399991, 26.064301656000012 ], [ -98.013056599999942, 26.063681539000029 ], [ -98.044165812999921, 26.048798726000186 ], [ -98.065456502999979, 26.042184143 ], [ -98.075145833999841, 26.046628317000099 ], [ -98.083310710999939, 26.070916240000187 ], [ -98.10310278399993, 26.074947001000098 ], [ -98.150231689999941, 26.063681539000029 ], [ -98.185061604999902, 26.065231832000151 ], [ -98.222656209999911, 26.075412089000011 ], [ -98.300429240999932, 26.111430562000109 ], [ -98.309808512999894, 26.121094056000047 ], [ -98.333037069, 26.153030090000115 ], [ -98.339264078999889, 26.159851380000148 ], [ -98.365774088999899, 26.160161438000145 ], [ -98.37727209499991, 26.163572083000147 ], [ -98.37727209499991, 26.173648987000107 ], [ -98.369339762999971, 26.194009502000043 ], [ -98.397193359999932, 26.201140849000083 ], [ -98.428845174999935, 26.21772898400009 ], [ -98.456543741999866, 26.225945536000111 ], [ -98.472382568999961, 26.207652079000141 ], [ -98.492949788999937, 26.230596415 ], [ -98.521526855999923, 26.240931702000083 ], [ -98.552791096999897, 26.248321431000093 ], [ -98.581626545999853, 26.262274068000082 ], [ -98.640563517999965, 26.241810201000035 ], [ -98.653663492999925, 26.244290670000012 ], [ -98.664696411999927, 26.250646871000029 ], [ -98.685289469999901, 26.268475240000086 ], [ -98.693325154999883, 26.270542298000052 ], [ -98.702239338999902, 26.271627503000119 ], [ -98.70425472099987, 26.276640117000099 ], [ -98.691464803999878, 26.29023101900016 ], [ -98.701412517, 26.299119365000095 ], [ -98.71316890499989, 26.303356833000137 ], [ -98.726217203999937, 26.304390360000028 ], [ -98.739911458999956, 26.303253479000105 ], [ -98.735932372999883, 26.320048320000083 ], [ -98.746396850999901, 26.332140605000077 ], [ -98.780839192999878, 26.35167429600007 ], [ -98.795851196999934, 26.368314108 ], [ -98.801328898999941, 26.372138163000145 ], [ -98.810294759999962, 26.372448222000017 ], [ -98.817322753999889, 26.368520813000046 ], [ -98.825022542999974, 26.366453756000098 ], [ -98.836081298999972, 26.372138163000145 ], [ -98.842334147999878, 26.36583363900003 ], [ -98.850834920999986, 26.364076640000135 ], [ -98.860524251999919, 26.366298727000142 ], [ -98.870213581999948, 26.372138163000145 ], [ -98.893028727999948, 26.367849020000065 ], [ -98.929899861999871, 26.392240295000093 ], [ -98.945376953999968, 26.378287659000094 ], [ -98.954136108999947, 26.39394561800016 ], [ -98.962843587999927, 26.399526673000182 ], [ -98.986950643999961, 26.400095114000052 ], [ -99.004055541999918, 26.393842265000117 ], [ -99.010515095999963, 26.392602031000095 ], [ -99.016432047999885, 26.394462383000089 ], [ -99.022994954999959, 26.403350729000024 ], [ -99.027878377999897, 26.406244609000012 ], [ -99.04764461299996, 26.406968079000094 ], [ -99.066351480999941, 26.404745993000105 ], [ -99.0854976, 26.407639872000075 ], [ -99.106426554999928, 26.423039450000161 ], [ -99.108907023999905, 26.434253235000099 ], [ -99.102524983999885, 26.446965637000076 ], [ -99.093739990999978, 26.459781393000142 ], [ -99.089373332999898, 26.47115020800014 ], [ -99.091492065999972, 26.484017639000129 ], [ -99.102990071999898, 26.512077942000147 ], [ -99.115108195, 26.525617167000135 ], [ -99.140946410999916, 26.5314049280001 ], [ -99.1648726, 26.540448303000076 ], [ -99.171280476999954, 26.563961080000141 ], [ -99.178385986999885, 26.613673808000058 ], [ -99.181124837999931, 26.62990020800008 ], [ -99.221354939999955, 26.73573354100013 ], [ -99.234093179999917, 26.783637594000041 ], [ -99.24827836199988, 26.827097473000052 ], [ -99.26279943899992, 26.844047343000156 ], [ -99.27967179399991, 26.859653625000092 ], [ -99.293960327999898, 26.876293437000029 ], [ -99.325973877999886, 26.911536763000086 ], [ -99.336980956999966, 26.92476593 ], [ -99.37684932499991, 26.953756409000064 ], [ -99.386176920999944, 26.962231344000159 ], [ -99.390362711999884, 26.973135071000129 ], [ -99.390156005999927, 26.993598938 ], [ -99.392791504999934, 27.004761048000134 ], [ -99.39932857299992, 27.012667542000159 ], [ -99.407312581999889, 27.014527893 ], [ -99.416045898999954, 27.014889628000091 ], [ -99.424650025, 27.017886862000083 ], [ -99.43986873399993, 27.028945618000094 ], [ -99.443744466999973, 27.034578349000029 ], [ -99.461727864999972, 27.056954244000011 ], [ -99.442039143999921, 27.089613749000179 ], [ -99.439403645999903, 27.098347067000148 ], [ -99.441419026999952, 27.107493795000138 ], [ -99.445734008999921, 27.114728496000012 ], [ -99.450178182999935, 27.120464579000057 ], [ -99.452451945999954, 27.125012106 ], [ -99.450333211999876, 27.145165914000174 ], [ -99.435786295999918, 27.188419088000117 ], [ -99.43198807799989, 27.20759104400004 ], [ -99.434029297999942, 27.226969706000105 ], [ -99.440902262999913, 27.244798075000134 ], [ -99.451831827999882, 27.261179504 ], [ -99.466120361999955, 27.276527405000152 ], [ -99.468962565999931, 27.278232727000116 ], [ -99.48040889499994, 27.283297018000113 ], [ -99.482941039999929, 27.28670766300003 ], [ -99.484878906999953, 27.294820862000122 ], [ -99.486584228999931, 27.297611389000011 ], [ -99.493198811999918, 27.301280416000097 ], [ -99.521362467999964, 27.311253967000098 ], [ -99.51479956099989, 27.321795960000159 ], [ -99.497591308999915, 27.338797506000091 ], [ -99.494025634999943, 27.348202617000041 ], [ -99.492888753999935, 27.358847961000137 ], [ -99.487721110999928, 27.371870422000157 ], [ -99.484620523999894, 27.39176584900018 ], [ -99.475706339999959, 27.414761862000134 ], [ -99.472915812999915, 27.426647441000156 ], [ -99.473639281999908, 27.463802796000053 ], [ -99.472915812999915, 27.468298645000075 ], [ -99.476429809999871, 27.482509664000034 ], [ -99.48040889499994, 27.490777893000185 ], [ -99.488289551999898, 27.49465362600013 ], [ -99.503689128999881, 27.495583802000098 ], [ -99.509502726999955, 27.50002797400019 ], [ -99.510071166999907, 27.510518291000054 ], [ -99.50707393499998, 27.533436788000174 ], [ -99.507203124999933, 27.57377024400013 ], [ -99.515006265999943, 27.588601380000156 ], [ -99.535030883999895, 27.604827779000075 ], [ -99.555029662999928, 27.613509420000028 ], [ -99.572263754, 27.618470358000181 ], [ -99.578232381999925, 27.622811178000163 ], [ -99.59024715199989, 27.642060649000186 ], [ -99.600169026999978, 27.646427307000167 ], [ -99.612442178999927, 27.643636780000023 ], [ -99.633526163999946, 27.633068950000151 ], [ -99.64486914099993, 27.632733052000148 ], [ -99.64864151999987, 27.636918843 ], [ -99.658692585999887, 27.654023743000138 ], [ -99.664738729999925, 27.659398092000103 ], [ -99.700369629999912, 27.659191386000046 ], [ -99.70569230199996, 27.663170471000043 ], [ -99.710673654999908, 27.670116197000155 ], [ -99.723055582999876, 27.687380880000106 ], [ -99.730652018999933, 27.691825053000017 ], [ -99.734036824999961, 27.702031148000074 ], [ -99.736310587999967, 27.713606669000129 ], [ -99.740444702999909, 27.722159119000068 ], [ -99.747343505999964, 27.726009013000109 ], [ -99.765197713999925, 27.731176657 ], [ -99.774576985999971, 27.73582753500007 ], [ -99.78685013899991, 27.748488261000105 ], [ -99.795428426999933, 27.761924134000154 ], [ -99.806962776999953, 27.771423010000049 ], [ -99.808166666999909, 27.77241444900001 ], [ -99.832919677999925, 27.776755269 ], [ -99.832971354999941, 27.782181295000058 ], [ -99.844779418999948, 27.793575949000157 ], [ -99.858241129999911, 27.803523662000075 ], [ -99.863357097, 27.804660543000168 ], [ -99.864726522999959, 27.814324036000087 ], [ -99.861858479999896, 27.836079814000115 ], [ -99.863357097, 27.845665792000105 ], [ -99.870927693999946, 27.8544766240001 ], [ -99.880203613999967, 27.859230856000082 ], [ -99.888006754999893, 27.864811910000114 ], [ -99.891288208999896, 27.876025696000156 ], [ -99.882684082999944, 27.891580302000179 ], [ -99.8788083499999, 27.901838074000167 ], [ -99.881340495999979, 27.906463115000022 ], [ -99.896765909999971, 27.912922669000082 ], [ -99.914335896999944, 27.928244731000134 ], [ -99.929916341999885, 27.946331482000161 ], [ -99.939683187999933, 27.961085104000162 ], [ -99.928288533999932, 27.975761210000073 ], [ -99.940716715999912, 27.983254293000087 ], [ -99.961852376999872, 27.98749176000014 ], [ -99.976605997999869, 27.992452698000093 ], [ -99.991127075999913, 28.007800599000163 ], [ -100.000583862999889, 28.020409648000097 ], [ -100.007456827999945, 28.033561300000159 ], [ -100.014123087999863, 28.050459493000133 ], [ -100.013502970999895, 28.056970724000124 ], [ -100.010505737999978, 28.06361114500011 ], [ -100.010195678999892, 28.068882141000145 ], [ -100.017585408999906, 28.070949199000111 ], [ -100.031538045999895, 28.081801250000169 ], [ -100.045077270999883, 28.09528879900013 ], [ -100.048022826999883, 28.1025234990001 ], [ -100.048901326999911, 28.115959371000045 ], [ -100.056497761999964, 28.137921855000016 ], [ -100.074894572999966, 28.154406637000093 ], [ -100.172873087999903, 28.198538310000075 ], [ -100.189202839999936, 28.201328838000151 ], [ -100.197626098999919, 28.20716827400004 ], [ -100.201191772999977, 28.220345764000015 ], [ -100.202948771999871, 28.234427592000046 ], [ -100.205946004999973, 28.242876689000028 ], [ -100.212818969999944, 28.245072938000035 ], [ -100.240724243999935, 28.249697978000185 ], [ -100.257932494999906, 28.26052419100013 ], [ -100.275089071999872, 28.277241516000075 ], [ -100.284339152999891, 28.296516825000097 ], [ -100.277931274999943, 28.314887797 ], [ -100.278551391999912, 28.331088359000105 ], [ -100.293899291999978, 28.353412577000157 ], [ -100.322631388999895, 28.38689890600007 ], [ -100.331674764999946, 28.422013041000113 ], [ -100.336325643999913, 28.45857411700014 ], [ -100.340201375999953, 28.464258525000091 ], [ -100.348314575999964, 28.47025299100001 ], [ -100.355549275999934, 28.478185323000062 ], [ -100.35678951099996, 28.489321595 ], [ -100.351621867999953, 28.496711325000106 ], [ -100.322631388999895, 28.510405579000022 ], [ -100.364024210999929, 28.524797465000134 ], [ -100.38422969599992, 28.537173971000087 ], [ -100.397768920999908, 28.557586162000135 ], [ -100.398750773999964, 28.568644918000146 ], [ -100.397097127999913, 28.592726135000092 ], [ -100.401437947999895, 28.602260437000083 ], [ -100.411463175999927, 28.609314270000098 ], [ -100.434820922999876, 28.619132793000162 ], [ -100.446189738999948, 28.626496684000145 ], [ -100.444897826999906, 28.64378245000016 ], [ -100.481381388999921, 28.68605377300004 ], [ -100.493938761999928, 28.70837799100012 ], [ -100.519053507999857, 28.804961243000051 ], [ -100.524996297999877, 28.814831441000038 ], [ -100.529285441999932, 28.819947408000033 ], [ -100.534453084999939, 28.830231018000021 ], [ -100.538638875999965, 28.835631205000183 ], [ -100.545150105999937, 28.838990174000102 ], [ -100.559671183999896, 28.839377747000114 ], [ -100.566234090999885, 28.842504171000073 ], [ -100.56969641099991, 28.849609681000075 ], [ -100.563340210999897, 28.862089539000081 ], [ -100.566234090999885, 28.869789327000078 ], [ -100.571763468999876, 28.873199972000108 ], [ -100.586542927999901, 28.879788717000096 ], [ -100.589540161999906, 28.883457743000079 ], [ -100.594966186999883, 28.899322408 ], [ -100.606955119999938, 28.91012278200013 ], [ -100.618840698999961, 28.917925924000045 ], [ -100.6243184, 28.924721375 ], [ -100.624783487999977, 28.937769674000137 ], [ -100.626695515999899, 28.948337504 ], [ -100.630777954999914, 28.95668324800009 ], [ -100.63790930199994, 28.962884420000151 ], [ -100.628917602999906, 28.984330140000097 ], [ -100.63279333499996, 29.005155742000156 ], [ -100.652223673999941, 29.044817404000028 ], [ -100.660853637999978, 29.102669169000038 ], [ -100.668966837999889, 29.116208394000026 ], [ -100.678165242999896, 29.119412334000103 ], [ -100.690825968999931, 29.121014303000138 ], [ -100.702039754999973, 29.123649800000138 ], [ -100.706845662999882, 29.130186870000117 ], [ -100.70973954299987, 29.135561218000177 ], [ -100.76250118099999, 29.173775940000056 ], [ -100.770097616999962, 29.187289327000045 ], [ -100.762087768999976, 29.208657532000061 ], [ -100.783171753999923, 29.243074036000095 ], [ -100.796142537999941, 29.257672628000151 ], [ -100.816089640999863, 29.270772604000015 ], [ -100.863890340999944, 29.290616353000118 ], [ -100.871796834999984, 29.296455791000099 ], [ -100.891227172999976, 29.318547465 ], [ -100.91473994999987, 29.337047628000121 ], [ -100.98739701399991, 29.366322327 ], [ -100.998300740999966, 29.372471822000151 ], [ -101.008067585999925, 29.380585023000052 ], [ -101.016232462999938, 29.390067648000027 ], [ -101.022175252999958, 29.400480449000057 ], [ -101.025947631999969, 29.414355571000115 ], [ -101.02961665899997, 29.442984315000032 ], [ -101.037781535999898, 29.460063375000132 ], [ -101.06796057199999, 29.469494324000109 ], [ -101.13477819799995, 29.487658590000066 ], [ -101.163561971999883, 29.501301168000154 ], [ -101.182708088999874, 29.522359314000155 ], [ -101.19141556799994, 29.528147075000149 ], [ -101.201776692999957, 29.53065338200004 ], [ -101.212861287999957, 29.531583558000179 ], [ -101.22278316299996, 29.540781962 ], [ -101.22647802799996, 29.554450378000084 ], [ -101.217770548999908, 29.584190165000066 ], [ -101.219010782999931, 29.610286764000151 ], [ -101.233919433999887, 29.622663269000114 ], [ -101.258775797999945, 29.620156962000138 ], [ -101.283580484999888, 29.607806295 ], [ -101.300969604999906, 29.594137878000183 ], [ -101.312157551999945, 29.597858581000182 ], [ -101.310865641999897, 29.612767233000127 ], [ -101.302726603999972, 29.633851217000156 ], [ -101.301072957999935, 29.649509176000109 ], [ -101.309780435999897, 29.654547628 ], [ -101.336238769999895, 29.654315084000032 ], [ -101.349028686999958, 29.660102845000026 ], [ -101.357684489999912, 29.667440898 ], [ -101.364350749999929, 29.676665141000015 ], [ -101.376623901999963, 29.700643005000117 ], [ -101.383367675999892, 29.718497213000077 ], [ -101.399619914999917, 29.740718079000104 ], [ -101.406544555999901, 29.752887879000113 ], [ -101.409309244999946, 29.765781149000119 ], [ -101.405097615999907, 29.778441874000137 ], [ -101.414011799999926, 29.774411113000056 ], [ -101.424217895999902, 29.771413880000139 ], [ -101.435095784999945, 29.770121969000101 ], [ -101.446102864999943, 29.771052144000137 ], [ -101.455688843999937, 29.775909729000077 ], [ -101.462432617999966, 29.788932190000097 ], [ -101.47090755299989, 29.791516012000031 ], [ -101.490286214999941, 29.785547384 ], [ -101.505763306999953, 29.773894348000042 ], [ -101.521808838999917, 29.76593617800016 ], [ -101.542892822999931, 29.771052144000137 ], [ -101.539688883999958, 29.779191182000076 ], [ -101.530516317999883, 29.796476949000137 ], [ -101.528604289999947, 29.801437887000091 ], [ -101.531911580999946, 29.811101380000039 ], [ -101.539172119999932, 29.817974345 ], [ -101.546458496999904, 29.820144755000101 ], [ -101.549765787999902, 29.815700582000161 ], [ -101.553977416999942, 29.796683655000109 ], [ -101.564906982999915, 29.786477560000137 ], [ -101.580280720999895, 29.781568298000096 ], [ -101.632215535999904, 29.775651347000107 ], [ -101.794531209999917, 29.795856832000183 ], [ -101.80298030599991, 29.801437887000091 ], [ -101.805977539999915, 29.811928203000051 ], [ -101.812695474999941, 29.812031556000179 ], [ -101.824090128999941, 29.805184428000032 ], [ -101.85760229499995, 29.805184428000032 ], [ -101.877523559999958, 29.810842997000165 ], [ -101.887419596999948, 29.812289938000148 ], [ -101.895455281999929, 29.808620911000062 ], [ -101.902379923999916, 29.803246562000098 ], [ -101.910880696999925, 29.799887594 ], [ -101.920156616999947, 29.79818227100013 ], [ -101.929613403999909, 29.797717183000188 ], [ -101.942661702999956, 29.803608297 ], [ -101.957053588999969, 29.814046936000025 ], [ -101.972246460999983, 29.818181051000138 ], [ -101.98793025699986, 29.805184428000032 ], [ -102.014595295999911, 29.810998027000025 ], [ -102.10934403499995, 29.80210968100009 ], [ -102.145646728999907, 29.815700582000161 ], [ -102.157248087999875, 29.824537252000184 ], [ -102.203679362999978, 29.846138001000057 ], [ -102.239775349999974, 29.849135234000144 ], [ -102.253443765999904, 29.855284729000132 ], [ -102.258275513999919, 29.873474833000088 ], [ -102.276181396999888, 29.869547425000022 ], [ -102.289022990999868, 29.878125712000141 ], [ -102.30217464199994, 29.889391174000096 ], [ -102.321010701999953, 29.893938700000135 ], [ -102.330234944999958, 29.888926087000172 ], [ -102.33976924699995, 29.870632629000013 ], [ -102.351060547999921, 29.866601868000103 ], [ -102.363230346999927, 29.864276429000157 ], [ -102.370723429999956, 29.857765198000109 ], [ -102.374547485999912, 29.848101705000161 ], [ -102.376588704999861, 29.821488342000137 ], [ -102.380051025999904, 29.8113856 ], [ -102.404132242999935, 29.780793152000101 ], [ -102.406095947999887, 29.777279155000045 ], [ -102.515288248999937, 29.784720561000157 ], [ -102.523065551999949, 29.78231760700011 ], [ -102.531127075999947, 29.769915263000044 ], [ -102.541539876999977, 29.762473857000103 ], [ -102.543348551999969, 29.760122579000083 ], [ -102.546578328999942, 29.757874654000162 ], [ -102.553141235999931, 29.756737773000154 ], [ -102.558308879999927, 29.7590890500001 ], [ -102.562882242999976, 29.769346822000088 ], [ -102.566757975999934, 29.771052144000137 ], [ -102.585309814999874, 29.76469594400011 ], [ -102.62122493499993, 29.747280986000092 ], [ -102.638743245999976, 29.74371531200002 ], [ -102.676053629999927, 29.744490458000129 ], [ -102.683469197999941, 29.74371531200002 ], [ -102.691039794999895, 29.736816508000132 ], [ -102.69362361799999, 29.729400940000133 ], [ -102.694708821999981, 29.720615947000127 ], [ -102.697757731999928, 29.709557190000126 ], [ -102.726748209999897, 29.664495341000091 ], [ -102.731269897999923, 29.650594381000118 ], [ -102.735507364999975, 29.649509176000109 ], [ -102.751656249999968, 29.622456564000075 ], [ -102.751759602999897, 29.620156962000138 ], [ -102.761345580999986, 29.603413798000091 ], [ -102.767598429999907, 29.597290141000045 ], [ -102.779664876999888, 29.592303366000081 ], [ -102.774083821999952, 29.579616801000142 ], [ -102.776460937999914, 29.575947774000142 ], [ -102.785891886999963, 29.571813660000103 ], [ -102.780750081999969, 29.558248597000116 ], [ -102.786512003999931, 29.550497131000114 ], [ -102.795477864999881, 29.544270122000128 ], [ -102.827310547999929, 29.470502014000189 ], [ -102.833950968999929, 29.461355286000114 ], [ -102.839066935999924, 29.45195017500005 ], [ -102.841133992999886, 29.438307597000133 ], [ -102.838705200999925, 29.42693878200005 ], [ -102.834984497999912, 29.41569915800001 ], [ -102.835191202999866, 29.403839417000157 ], [ -102.844544636999913, 29.390532736000139 ], [ -102.845578165999981, 29.38471913700009 ], [ -102.838033406999941, 29.370533956000131 ], [ -102.837671671999942, 29.366322327 ], [ -102.846560018999952, 29.361748963000039 ], [ -102.853872233999937, 29.360999655000128 ], [ -102.859866699999969, 29.361154683000066 ], [ -102.864956827999947, 29.359526876000032 ], [ -102.876971598999916, 29.350871073000079 ], [ -102.883069417999963, 29.343765564000151 ], [ -102.885188151999941, 29.333378601000121 ], [ -102.885498209999938, 29.314800924000096 ], [ -102.89939917, 29.276095276000078 ], [ -102.899709228999981, 29.263899638000154 ], [ -102.892138630999938, 29.254391175000151 ], [ -102.867954060999963, 29.240386862000079 ], [ -102.858781493999885, 29.229147237000021 ], [ -102.869866088999885, 29.224780579000125 ], [ -102.896892862999934, 29.220284730000103 ], [ -102.942264770999955, 29.190209046000049 ], [ -102.947535766999891, 29.182018331 ], [ -102.969756632999932, 29.192844543000049 ], [ -102.988385986999887, 29.177134908000156 ], [ -103.015826171999947, 29.126776225000086 ], [ -103.024275268999943, 29.116156718000113 ], [ -103.032621012999911, 29.110213928000107 ], [ -103.072541055999949, 29.091403707 ], [ -103.080757609999893, 29.085202536000011 ], [ -103.0855893559999, 29.075719910000132 ], [ -103.091532144999917, 29.057865702000171 ], [ -103.095356201999948, 29.060294495000122 ], [ -103.104683797999982, 29.057865702000171 ], [ -103.109205484999919, 29.023371684 ], [ -103.12277054899991, 28.996474101 ], [ -103.147988647999952, 28.985105286000092 ], [ -103.187107706999981, 28.990221253000087 ], [ -103.241755534999925, 29.00350209600019 ], [ -103.301545166999887, 29.002365214000079 ], [ -103.316247111999971, 29.010065002000161 ], [ -103.3115144759999, 29.026042538000112 ], [ -103.309994262999879, 29.031174825000122 ], [ -103.324799560999892, 29.026808167000027 ], [ -103.330483968999943, 29.02373341900001 ], [ -103.342602091999936, 29.041225892000156 ], [ -103.351671305999901, 29.039417217000064 ], [ -103.360533813999908, 29.029831238000057 ], [ -103.372083496999934, 29.02373341900001 ], [ -103.386630411999903, 29.028797710000063 ], [ -103.414639037999905, 29.052413839000096 ], [ -103.423604899999944, 29.057865702000171 ], [ -103.435697184999924, 29.061121318000161 ], [ -103.478536946999867, 29.082050273000149 ], [ -103.52974829199988, 29.126776225000086 ], [ -103.535587727999967, 29.135121969000167 ], [ -103.538223226999975, 29.14240834500005 ], [ -103.541711385999932, 29.148816224000186 ], [ -103.55023799699994, 29.154655660000074 ], [ -103.558015299999951, 29.156205953 ], [ -103.584990396999899, 29.154655660000074 ], [ -103.673124552999937, 29.173569235000016 ], [ -103.702476766999908, 29.187857768000086 ], [ -103.749476481999892, 29.222971904000033 ], [ -103.759062459999981, 29.226847637000091 ], [ -103.770767171999964, 29.229844869000189 ], [ -103.77771765199995, 29.235296733000084 ], [ -103.769423584999899, 29.257543437000109 ], [ -103.774229492999908, 29.267516989000129 ], [ -103.78366044199997, 29.274803365000125 ], [ -103.794176595999929, 29.277593893000173 ], [ -103.864120646999936, 29.281366272000085 ], [ -103.928121907999923, 29.293019308000069 ], [ -104.019149943999949, 29.320330303000091 ], [ -104.057312988999925, 29.339037171000157 ], [ -104.105423746999904, 29.385675150000125 ], [ -104.139788573999937, 29.400583802000185 ], [ -104.161647705999968, 29.416758525 ], [ -104.194513916, 29.44892710400002 ], [ -104.212290608999936, 29.484661357000121 ], [ -104.218698486999969, 29.489829000000142 ], [ -104.22714758399988, 29.493032939000031 ], [ -104.251022094999954, 29.508587545000054 ], [ -104.267170979999946, 29.526570943000124 ], [ -104.292750813999902, 29.532823792000116 ], [ -104.320604411999952, 29.53225535100016 ], [ -104.338484456999922, 29.524012960000121 ], [ -104.349026448999894, 29.537578024000098 ], [ -104.430442667999912, 29.582794902 ], [ -104.437832397999912, 29.585430399000117 ], [ -104.444007731999889, 29.589202779000132 ], [ -104.448555257999928, 29.597677714000142 ], [ -104.452069254999884, 29.607108664000108 ], [ -104.455221517999931, 29.61338735000011 ], [ -104.469380859999973, 29.625402120000089 ], [ -104.51663895799993, 29.654315084000032 ], [ -104.530824137999886, 29.667905986000122 ], [ -104.535035766999925, 29.677802022000108 ], [ -104.535190795999966, 29.687853088000125 ], [ -104.537102824999891, 29.702115784000014 ], [ -104.54366573199988, 29.716430156000015 ], [ -104.561390747999894, 29.745420634000183 ], [ -104.570279093999986, 29.78751108900012 ], [ -104.583585774999918, 29.802574768000014 ], [ -104.601207437999904, 29.814770407000125 ], [ -104.619681762999917, 29.83306386400001 ], [ -104.623764200999929, 29.841487122000089 ], [ -104.63758764699989, 29.887995911000033 ], [ -104.656346191999972, 29.908201396000109 ], [ -104.660635335999942, 29.918433330000184 ], [ -104.663477539999917, 29.923084208000049 ], [ -104.676525838999879, 29.93683014 ], [ -104.680479085999934, 29.942307841000073 ], [ -104.682468628999885, 29.952126363000147 ], [ -104.680117349999946, 29.967784322000014 ], [ -104.680479085999934, 29.976465963000166 ], [ -104.6991084389999, 30.031449687000091 ], [ -104.701588907999877, 30.055324199 ], [ -104.69859167499996, 30.075271301000029 ], [ -104.684639037999972, 30.111134746000133 ], [ -104.680479085999934, 30.134130758000097 ], [ -104.678670410999942, 30.170355937000139 ], [ -104.68156429099993, 30.192938538000178 ], [ -104.695852823999914, 30.2084414670001 ], [ -104.715231486999883, 30.243994853000132 ], [ -104.724584920999931, 30.252211406000086 ], [ -104.742154907999904, 30.259859518000056 ], [ -104.749389608999962, 30.264458721000111 ], [ -104.76168859899991, 30.284199117000171 ], [ -104.774142619999893, 30.311587627000037 ], [ -104.788767048999958, 30.335927226000038 ], [ -104.807732300999916, 30.346417541000093 ], [ -104.812899943999923, 30.350706686000038 ], [ -104.814967000999886, 30.360576884000025 ], [ -104.816000528999865, 30.371997376000039 ], [ -104.818274291999884, 30.380523987000132 ], [ -104.824268757999917, 30.387190247000049 ], [ -104.837549601999925, 30.39406321200012 ], [ -104.844939330999921, 30.401039530000119 ], [ -104.853259236999889, 30.412149964000136 ], [ -104.855016235999955, 30.417472636000085 ], [ -104.853620972999892, 30.423983866000142 ], [ -104.852432413999864, 30.4388666790001 ], [ -104.854654500999956, 30.448736877000087 ], [ -104.864473022999931, 30.462017721000095 ], [ -104.866695109999938, 30.473024800000175 ], [ -104.865248169999944, 30.479897767000139 ], [ -104.85961543899991, 30.491111552000106 ], [ -104.859253703999912, 30.497261048000055 ], [ -104.863026082999937, 30.50237701500005 ], [ -104.879717570999887, 30.510851949000156 ], [ -104.882146362999933, 30.520928854000189 ], [ -104.884006714999941, 30.541857809000177 ], [ -104.886590535999943, 30.55188303700011 ], [ -104.898166056999898, 30.569401347000067 ], [ -104.928241739999962, 30.599528707000147 ], [ -104.934339559999913, 30.610535787000131 ], [ -104.941057495999942, 30.614049785000091 ], [ -104.972735148999945, 30.618028870000089 ], [ -104.982760375999973, 30.620716044000019 ], [ -104.989116577999908, 30.629552714000013 ], [ -104.991648722999898, 30.640301412000113 ], [ -104.992940633999936, 30.651463522000157 ], [ -104.995782837999911, 30.661747132000144 ], [ -105.008495239999959, 30.676991679000096 ], [ -105.027977254999954, 30.690117493000159 ], [ -105.049474650999898, 30.699264221000149 ], [ -105.06812984299988, 30.702674866000066 ], [ -105.087043416999904, 30.709806214000125 ], [ -105.13360388299995, 30.757916972000189 ], [ -105.140425170999919, 30.750475566000077 ], [ -105.153240926999899, 30.763187969000015 ], [ -105.157788452999924, 30.765720113000029 ], [ -105.160889037999965, 30.764118144000165 ], [ -105.162697712999957, 30.774918518 ], [ -105.167296916999916, 30.781171367000113 ], [ -105.174789998999941, 30.783961894000143 ], [ -105.185125284999955, 30.784633688000142 ], [ -105.195305542999918, 30.787940980000045 ], [ -105.204917358999936, 30.802410381000172 ], [ -105.212100382999978, 30.805717672000171 ], [ -105.218249878999956, 30.806802877000067 ], [ -105.22925695899994, 30.810213522000097 ], [ -105.232874308999925, 30.809128316000013 ], [ -105.239850626999925, 30.801531881000031 ], [ -105.243984741999853, 30.799103089000155 ], [ -105.24904903299992, 30.798844706000111 ], [ -105.25948767099996, 30.802978821000025 ], [ -105.26584387299998, 30.808404847000091 ], [ -105.270753133999918, 30.814347636000107 ], [ -105.27700598199992, 30.819411926 ], [ -105.334315145, 30.843803202000018 ], [ -105.363770711999905, 30.850366109 ], [ -105.376173055999956, 30.859564514000013 ], [ -105.415550496999955, 30.90245595400016 ], [ -105.496682495999906, 30.956509501000042 ], [ -105.530788940999884, 30.991701152000118 ], [ -105.555955363999914, 31.00260487900006 ], [ -105.565722208999958, 31.016660868000187 ], [ -105.578641316999978, 31.052162577000118 ], [ -105.590940307999915, 31.071437887000073 ], [ -105.605874796999885, 31.081928203000032 ], [ -105.62349645999987, 31.090351461000111 ], [ -105.64380529799989, 31.103683980000042 ], [ -105.668041544999966, 31.127868551000105 ], [ -105.675224568999923, 31.131950989000117 ], [ -105.692277791999956, 31.137635396000164 ], [ -105.768190470999883, 31.180010071000154 ], [ -105.777853963999902, 31.192722474000121 ], [ -105.784830281999902, 31.211015930000187 ], [ -105.861983194999965, 31.288375550000026 ], [ -105.880147461999897, 31.300881246000117 ], [ -105.896993978999973, 31.305997213000111 ], [ -105.897149007999914, 31.309511211000157 ], [ -105.908802042999895, 31.317004293000096 ], [ -105.928051513999918, 31.326461080000158 ], [ -105.934562743999976, 31.335504456000123 ], [ -105.941771606999936, 31.3523509730001 ], [ -105.948515381999968, 31.361239319000035 ], [ -105.961201945999917, 31.371006165000082 ], [ -106.004739338999954, 31.396947734000108 ], [ -106.021146606999906, 31.402167053000042 ], [ -106.046261352999935, 31.404647522000019 ], [ -106.065304118999904, 31.410952047000123 ], [ -106.099384724999965, 31.428883769 ], [ -106.141113444999903, 31.439167379000182 ], [ -106.16431616299991, 31.447797343000119 ], [ -106.17447058199987, 31.460251363000012 ], [ -106.209248819999914, 31.47730458600013 ], [ -106.215424154999894, 31.48391917000005 ], [ -106.21743953499994, 31.488725077000069 ], [ -106.218731444999989, 31.494616191000048 ], [ -106.22289139899992, 31.504589742000164 ], [ -106.232658243999978, 31.519937643000119 ], [ -106.274748698999915, 31.562622376000135 ], [ -106.286298380999952, 31.580140687 ], [ -106.312291626999922, 31.648611959 ], [ -106.331308553999889, 31.6821499630001 ], [ -106.358490356999965, 31.71754832000012 ], [ -106.391769979999907, 31.745918681000134 ], [ -106.428951172999916, 31.758476054000042 ], [ -106.473134521999924, 31.755065409000039 ], [ -106.492797404999962, 31.759044495000111 ], [ -106.501425247999904, 31.766343684000063 ], [ -106.506052409999953, 31.770258281000153 ], [ -106.517188679999975, 31.773823954000122 ], [ -106.55896907599994, 31.773875631000024 ], [ -106.584858968999967, 31.773927307000136 ], [ -106.610697184999893, 31.773978984000152 ], [ -106.63658707699993, 31.774082337 ], [ -106.662476969999958, 31.774134014000097 ], [ -106.688315185999883, 31.774237366000037 ], [ -106.714205077999921, 31.774237366000037 ], [ -106.740094970999948, 31.774289042000035 ], [ -106.765933187999877, 31.774392395000163 ], [ -106.791823079999915, 31.774444072000094 ], [ -106.817712972999942, 31.774495748 ], [ -106.843602864999966, 31.774547425000108 ], [ -106.869441080999906, 31.774599101000135 ], [ -106.895330973999933, 31.774702453000046 ], [ -106.921220865999956, 31.774702453000046 ], [ -106.947110758999898, 31.774754130000147 ], [ -106.973000651999939, 31.774857483000105 ], [ -106.998890543999963, 31.77490916 ], [ -107.02478043699999, 31.774960836000119 ], [ -107.050670328999942, 31.775012513000135 ], [ -107.076508544999953, 31.775064189000048 ], [ -107.102398437999895, 31.775167541000158 ], [ -107.128288329999933, 31.775167541000158 ], [ -107.154126546999947, 31.775219218000089 ], [ -107.180016439999889, 31.775374248000119 ], [ -107.205906331999913, 31.775374248000119 ], [ -107.231796224999954, 31.775425924000146 ], [ -107.257634440999965, 31.775477601000077 ], [ -107.283524332999903, 31.77552927700016 ], [ -107.309414225999944, 31.7756326290001 ], [ -107.33525244199987, 31.775684306000031 ], [ -107.361142333999894, 31.77578765900013 ], [ -107.387032226999935, 31.77578765900013 ], [ -107.412896281999949, 31.775839335000157 ], [ -107.438786173999901, 31.775942689000189 ], [ -107.464676065999925, 31.775994365000102 ], [ -107.490565958999952, 31.776097717000042 ], [ -107.516404175999881, 31.776149394000143 ], [ -107.542294067999919, 31.776201070000141 ], [ -107.568183960999946, 31.776252747000072 ], [ -107.594073852999983, 31.776304423000099 ], [ -107.619963745999925, 31.776407776000113 ], [ -107.645853638999952, 31.776459453000129 ], [ -107.671743530999976, 31.776459453000129 ], [ -107.697633423999918, 31.776562805000154 ], [ -107.723471639999943, 31.77661448200017 ], [ -107.749361531999881, 31.776666158000083 ], [ -107.775251424999908, 31.776717835000014 ], [ -107.801141316999946, 31.776769511000012 ], [ -107.826979532999957, 31.77687286400014 ], [ -107.852869425999899, 31.776924541000156 ], [ -107.878759317999936, 31.776924541000156 ], [ -107.904597534999951, 31.777027893000181 ], [ -107.930487427999978, 31.777079569000094 ], [ -107.95637732, 31.777131246000025 ], [ -107.982215535999941, 31.777182923000126 ], [ -108.008105428999883, 31.777234599000124 ], [ -108.033995320999921, 31.777337952000082 ], [ -108.059885213999948, 31.777389629000183 ], [ -108.08572342899997, 31.777389629000183 ], [ -108.111613321999911, 31.777544657000035 ], [ -108.137503214999938, 31.777544657000035 ], [ -108.163341430999949, 31.777648010000135 ], [ -108.18928, 31.777699687000066 ], [ -108.215121216999933, 31.777751364 ], [ -108.215121216999933, 31.770723369000066 ], [ -108.215121216999933, 31.763695374000164 ], [ -108.215121216999933, 31.756667379000149 ], [ -108.215121216999933, 31.749639384000048 ], [ -108.215121216999933, 31.742559713000119 ], [ -108.215121216999933, 31.73558339500012 ], [ -108.215121216999933, 31.728555400000019 ], [ -108.215121216999933, 31.721475728000186 ], [ -108.215121216999933, 31.714396057000059 ], [ -108.215121216999933, 31.707419739000088 ], [ -108.215121216999933, 31.700391744000157 ], [ -108.215121216999933, 31.693312073000058 ], [ -108.215121216999933, 31.686284079000032 ], [ -108.215121216999933, 31.67925608400013 ], [ -108.215121216999933, 31.672176412000098 ], [ -108.215069539999917, 31.665148418000101 ], [ -108.215017863999989, 31.658172099000083 ], [ -108.215017863999989, 31.651092428000155 ], [ -108.215017863999989, 31.644064433000054 ], [ -108.215017863999989, 31.637036438000152 ], [ -108.215017863999989, 31.630008443000136 ], [ -108.215017863999989, 31.622980449000025 ], [ -108.215017863999989, 31.615952454000123 ], [ -108.215017863999989, 31.608872782 ], [ -108.215017863999989, 31.601844788000093 ], [ -108.215017863999989, 31.594816793000078 ], [ -108.215017863999989, 31.587788798000147 ], [ -108.215017863999989, 31.580760803000075 ], [ -108.215017863999989, 31.573732808000145 ], [ -108.215017863999989, 31.56665313800012 ], [ -108.215017863999989, 31.559625143000019 ], [ -108.214966186999888, 31.552597148000117 ], [ -108.214966186999888, 31.545569153000187 ], [ -108.214966186999888, 31.538489482000088 ], [ -108.214966186999888, 31.531461487000158 ], [ -108.214966186999888, 31.524485169000073 ], [ -108.214966186999888, 31.517405498000144 ], [ -108.214966186999888, 31.510377503000043 ], [ -108.214966186999888, 31.50340118400014 ], [ -108.214966186999888, 31.496321513000012 ], [ -108.214966186999888, 31.489241842000084 ], [ -108.214966186999888, 31.482213847000182 ], [ -108.214966186999888, 31.475237529000182 ], [ -108.214966186999888, 31.468157857000065 ], [ -108.214966186999888, 31.461129862000135 ], [ -108.214966186999888, 31.454101868000137 ], [ -108.214966186999888, 31.447073873000036 ], [ -108.214914510999876, 31.440045878000134 ], [ -108.214862833999959, 31.432966208000025 ], [ -108.214862833999959, 31.425938213000094 ], [ -108.214862833999959, 31.418910218000079 ], [ -108.214862833999959, 31.411882223000177 ], [ -108.214862833999959, 31.404802552000049 ], [ -108.214862833999959, 31.39782623300006 ], [ -108.214862833999959, 31.390798239000148 ], [ -108.214862833999959, 31.383718567000031 ], [ -108.214862833999959, 31.376638896000188 ], [ -108.214862833999959, 31.369662578000103 ], [ -108.214862833999959, 31.362634583 ], [ -108.214862833999959, 31.355554911000169 ], [ -108.214862833999959, 31.348526917000143 ], [ -108.214862833999959, 31.341550598000154 ], [ -108.214862833999959, 31.33447092700014 ], [ -108.214811157999947, 31.327442932000125 ], [ -108.257573404999874, 31.327391256000013 ], [ -108.300335652999976, 31.327391256000013 ], [ -108.343020385999878, 31.327391256000013 ], [ -108.385730957999883, 31.327391256000013 ], [ -108.428441528999983, 31.327391256000013 ], [ -108.471152099999898, 31.327391256000013 ], [ -108.5138368329999, 31.327391256000013 ], [ -108.5565474039999, 31.327391256000013 ], [ -108.599309651999917, 31.327391256000013 ], [ -108.642020222999918, 31.327391256000013 ], [ -108.684756632999935, 31.327391256000013 ], [ -108.727467203999936, 31.327391256000013 ], [ -108.77017777599994, 31.327391256000013 ], [ -108.812914185999944, 31.327391256000013 ], [ -108.855624756999958, 31.327391256000013 ], [ -108.898335327999959, 31.327391256000013 ], [ -108.941045898999874, 31.327391256000013 ], [ -108.968281966999911, 31.327391256000013 ], [ -108.983730631999961, 31.327391256000013 ], [ -109.026492879999893, 31.327391256000013 ], [ -109.047430462999884, 31.327391256000013 ], [ -109.069203450999893, 31.327391256000013 ], [ -109.111914022999983, 31.327391256000013 ], [ -109.154598755999899, 31.327391256000013 ], [ -109.197361003999916, 31.327391256000013 ], [ -109.240071574999916, 31.327339580000015 ], [ -109.282782145999917, 31.327339580000015 ], [ -109.325518554999931, 31.327339580000015 ], [ -109.368229125999932, 31.327339580000015 ], [ -109.410913858999933, 31.327339580000015 ], [ -109.453650268999937, 31.327339580000015 ], [ -109.496386677999951, 31.327339580000015 ], [ -109.539071411999956, 31.327339580000015 ], [ -109.581807820999956, 31.327339580000015 ], [ -109.624492553999957, 31.327339580000015 ], [ -109.667177287999962, 31.327339580000015 ], [ -109.709965372999974, 31.327339580000015 ], [ -109.752650105999891, 31.327339580000015 ], [ -109.795334839999882, 31.327339580000015 ], [ -109.838122924999908, 31.327339580000015 ], [ -109.880807658999913, 31.327339580000015 ], [ -109.923595743999925, 31.327287903000084 ], [ -109.966280477999931, 31.327236227000171 ], [ -110.008965210999932, 31.327236227000171 ], [ -110.051701619999932, 31.327236227000171 ], [ -110.094386352999933, 31.327236227000171 ], [ -110.137071085999935, 31.327236227000171 ], [ -110.179807495999938, 31.327236227000171 ], [ -110.222543905999956, 31.327236227000171 ], [ -110.265228637999954, 31.327236227000171 ], [ -110.308016723999884, 31.327236227000171 ], [ -110.350753132999898, 31.327236227000171 ], [ -110.393489542999902, 31.327236227000171 ], [ -110.436174276999907, 31.327236227000171 ], [ -110.478859008999905, 31.327236227000171 ], [ -110.521595418999922, 31.327236227000171 ], [ -110.56428015199991, 31.327236227000171 ], [ -110.606964884999911, 31.327236227000171 ], [ -110.649727132999928, 31.327236227000171 ], [ -110.692437703999929, 31.327236227000171 ], [ -110.735199950999956, 31.327236227000171 ], [ -110.777884684999947, 31.327236227000171 ], [ -110.820595255999947, 31.327236227000171 ], [ -110.863357503999879, 31.327236227000171 ], [ -110.90606807499988, 31.327236227000171 ], [ -110.948752807999966, 31.327184550000155 ], [ -111.006268677999913, 31.327184550000155 ], [ -111.067117675999938, 31.333644104000101 ], [ -111.094454508999959, 31.342532451000025 ], [ -111.145924235999942, 31.359068909000129 ], [ -111.197445637999948, 31.375553690000103 ], [ -111.248863687999915, 31.392141826000014 ], [ -111.300333414999912, 31.408729960000116 ], [ -111.35180314199998, 31.425318095000122 ], [ -111.403298705999973, 31.441854554000102 ], [ -111.454768432999956, 31.458339335000105 ], [ -111.506238159999953, 31.474979147000013 ], [ -111.91546382699994, 31.601431376000065 ], [ -112.32471533199994, 31.727986959000148 ], [ -112.73396683799993, 31.854542542000146 ], [ -113.14321834299993, 31.981046448000129 ], [ -113.55244401099992, 32.107602031000013 ], [ -113.96169551699991, 32.234131775 ], [ -114.370921183999911, 32.360687358000163 ], [ -114.780146850999898, 32.487242940000058 ], [ -114.81678544199994, 32.49853424100003 ], [ -114.819373117999916, 32.499363302000162 ], [ -114.822108115, 32.500239563 ], [ -114.809447388999956, 32.511324158000022 ], [ -114.795546427999881, 32.552226054000116 ], [ -114.794202839999912, 32.574111024000061 ], [ -114.802677774999921, 32.594497375000103 ], [ -114.786813110999901, 32.621033224000101 ], [ -114.781542113999961, 32.628061218000127 ], [ -114.758804484999899, 32.644830221000078 ], [ -114.751156371999912, 32.652219951000077 ], [ -114.739477498999946, 32.669066468000054 ], [ -114.731209269999894, 32.686636454000123 ], [ -114.72387121699991, 32.711518657000099 ], [ -114.724284266999888, 32.712835255000144 ], [ -114.724284627999921, 32.712836405000147 ], [ -114.764540568999948, 32.709839173000134 ], [ -114.838076131999927, 32.704206442000029 ], [ -114.91161169499992, 32.698702902000107 ], [ -114.985198934999914, 32.693121847 ], [ -115.058734496999975, 32.687566630000092 ], [ -115.132270060999957, 32.68198557500007 ], [ -115.20580562399995, 32.676456197000064 ], [ -115.279289510999917, 32.67082346600013 ], [ -115.352850911999909, 32.665345765000055 ], [ -115.426386474999887, 32.659764710000118 ], [ -115.499922037999951, 32.654209493000124 ], [ -115.573535115999874, 32.648654277000034 ], [ -115.647019002999926, 32.643073222000098 ], [ -115.720528727999906, 32.637518006000093 ], [ -115.79406429099997, 32.63196278900007 ], [ -115.867599853999963, 32.626407573000066 ], [ -115.941212931999956, 32.620826518000158 ], [ -116.014748494999935, 32.615271302000124 ], [ -116.088232381999916, 32.609664408000029 ], [ -116.161742106999881, 32.604160869000125 ], [ -116.235329345999887, 32.598553975000087 ], [ -116.308890747999868, 32.59302459700011 ], [ -116.382426310999946, 32.587469381000076 ], [ -116.455961873999925, 32.581888326000168 ], [ -116.529471598999905, 32.576333110000164 ], [ -116.603007161999969, 32.570803732000158 ], [ -116.676542724999948, 32.565222677000136 ], [ -116.750104126999943, 32.559667460000028 ], [ -116.823639688999918, 32.554086406000025 ], [ -116.897201090999914, 32.548531189000116 ], [ -116.970736653999893, 32.542975973000111 ], [ -117.044220540999959, 32.537420756000088 ], [ -117.125121488972255, 32.531669490003665 ], [ -117.126128709999904, 32.539496161000116 ], [ -117.132191535999908, 32.568060614000117 ], [ -117.133948974999925, 32.592895686000091 ], [ -117.137006646999879, 32.615760699000035 ], [ -117.149810350999928, 32.646307684000121 ], [ -117.166371222999899, 32.669501044000143 ], [ -117.188384568999908, 32.682684637000094 ], [ -117.223974835999897, 32.684714441 ], [ -117.226186031999887, 32.697206661000124 ], [ -117.22002959199996, 32.706596241000128 ], [ -117.205813761999948, 32.71340310900014 ], [ -117.190956105999959, 32.713699247000037 ], [ -117.187859490999884, 32.70593556900009 ], [ -117.168058045999928, 32.698805086000121 ], [ -117.164173956999903, 32.68378327000012 ], [ -117.155853456999893, 32.672367021000028 ], [ -117.142796618999853, 32.653115941000138 ], [ -117.131277764999879, 32.630990883000138 ], [ -117.124085536999871, 32.606766157000109 ], [ -117.115089206999897, 32.600261543000087 ], [ -117.103384153999883, 32.606810452000147 ], [ -117.102311058999916, 32.620468257000155 ], [ -117.119891983999906, 32.652633962000053 ], [ -117.119016572999868, 32.670609972000065 ], [ -117.133208787999962, 32.689846096000124 ], [ -117.146325055999853, 32.694262023000121 ], [ -117.166574673999946, 32.706773179000109 ], [ -117.177343384999929, 32.715030606000155 ], [ -117.174638124999916, 32.726732120000136 ], [ -117.209857763999892, 32.725284143000138 ], [ -117.224243916999868, 32.718640552000139 ], [ -117.237833569999935, 32.707223084000034 ], [ -117.236561652999853, 32.669623114000117 ], [ -117.245279620999895, 32.67458421 ], [ -117.255279100999914, 32.69139232 ], [ -117.257476365999906, 32.701727606000176 ], [ -117.254727270999908, 32.746449669000171 ], [ -117.253877191999919, 32.76352008500011 ], [ -117.25755620799994, 32.784244680000157 ], [ -117.278793012999913, 32.822812478000131 ], [ -117.283597250999961, 32.837653985000131 ], [ -117.273789152999967, 32.851145690000081 ], [ -117.266038692999956, 32.847035410000089 ], [ -117.259873763999849, 32.854066839000112 ], [ -117.253640939999912, 32.88508136300014 ], [ -117.258065553999899, 32.908983319000086 ], [ -117.274769660999908, 32.993475653000147 ], [ -117.279564675999907, 33.007223916000115 ], [ -117.286040818999908, 33.023871161000116 ], [ -117.2980752389999, 33.035903980000072 ], [ -117.322161222999881, 33.108500616000086 ], [ -117.36191411699987, 33.165943481000014 ], [ -117.508844211999886, 33.335205337 ], [ -117.596302863999895, 33.390448309000092 ], [ -117.654367641999869, 33.441961981000176 ], [ -117.670725063999882, 33.452297268000095 ], [ -117.715199347999885, 33.474839585000083 ], [ -117.735218878999945, 33.484767971000068 ], [ -117.77651933499989, 33.529364325000145 ], [ -117.82457434799997, 33.561672268000066 ], [ -117.880251047999963, 33.592880177000112 ], [ -117.930220196999954, 33.607918492000138 ], [ -117.978505011999943, 33.635972398 ], [ -118.090536212999879, 33.73097720700018 ], [ -118.117387491999878, 33.743606546000095 ], [ -118.15258092499991, 33.758765400000144 ], [ -118.173639274999942, 33.763283160000114 ], [ -118.185533151999948, 33.757506898000102 ], [ -118.198966755999976, 33.764035657000122 ], [ -118.207209763999884, 33.763833569 ], [ -118.192498130999894, 33.752308925000179 ], [ -118.186618182999922, 33.741484335000095 ], [ -118.185188912999877, 33.732372421000051 ], [ -118.192862659999946, 33.731728564000079 ], [ -118.2024791649999, 33.739265809000031 ], [ -118.202745494999903, 33.746575200000152 ], [ -118.209734967999921, 33.742286855000046 ], [ -118.213827207999941, 33.749044833000099 ], [ -118.22150631399991, 33.770900783000158 ], [ -118.230702277999882, 33.769110419000171 ], [ -118.240335542999901, 33.767583137000187 ], [ -118.250091068999893, 33.763683542000123 ], [ -118.254551898999949, 33.765400526000164 ], [ -118.260365363999924, 33.760402736000074 ], [ -118.269514487999928, 33.753597021000175 ], [ -118.276770371999959, 33.756615928000102 ], [ -118.273791382999946, 33.750289208000041 ], [ -118.278316925999931, 33.738745878000188 ], [ -118.274471902999849, 33.723754604000035 ], [ -118.272206183999884, 33.715277411000116 ], [ -118.282441124999934, 33.716237389000142 ], [ -118.281725180999857, 33.711682553000131 ], [ -118.27608414699985, 33.70771156500011 ], [ -118.282689678999901, 33.707999821000058 ], [ -118.29130663299992, 33.7032082650001 ], [ -118.300881895999936, 33.709848763000096 ], [ -118.317518371999938, 33.713990356000025 ], [ -118.331460242999924, 33.720051438000056 ], [ -118.354816575999848, 33.726264817000086 ], [ -118.362286289999901, 33.735687043000141 ], [ -118.376078876999884, 33.737157499000105 ], [ -118.385001414999891, 33.740116127000036 ], [ -118.394188664999945, 33.736687222000015 ], [ -118.401357958999924, 33.735558976 ], [ -118.404808442999951, 33.740048560000147 ], [ -118.412040945999919, 33.741678190000144 ], [ -118.415216680999961, 33.754409512000066 ], [ -118.422782794999904, 33.763798883000064 ], [ -118.427568645999941, 33.773730759000088 ], [ -118.42181850199988, 33.783943880000109 ], [ -118.409302939999947, 33.791123914000181 ], [ -118.408635772999901, 33.798003189000141 ], [ -118.395715277999869, 33.805653987000156 ], [ -118.391799967999916, 33.817646759000084 ], [ -118.391388058999851, 33.835940991000129 ], [ -118.397211355999929, 33.844022862000102 ], [ -118.399673257999879, 33.851265028000071 ], [ -118.409916049999964, 33.873420343000092 ], [ -118.424945612999892, 33.905513410000097 ], [ -118.44465084499987, 33.949408270000148 ], [ -118.482655402999882, 33.999009507000054 ], [ -118.514068162999905, 34.022162177000027 ], [ -118.544056769999955, 34.038885809000035 ], [ -118.557303677999911, 34.037883194000031 ], [ -118.570624024999901, 34.041105571000017 ], [ -118.582627574999918, 34.036529339000097 ], [ -118.590738353999896, 34.039092740000015 ], [ -118.603400400999959, 34.038818418000162 ], [ -118.609265767999958, 34.035651389000023 ], [ -118.63694225699993, 34.036392435000053 ], [ -118.66658905099986, 34.038944518 ], [ -118.675664048999948, 34.038120742000061 ], [ -118.678199252999931, 34.03303037700006 ], [ -118.680136951999941, 34.030330386000131 ], [ -118.693160660999894, 34.031883725000128 ], [ -118.706780455999876, 34.029427262000112 ], [ -118.730526164999873, 34.032544976000125 ], [ -118.748392320999926, 34.03188851200018 ], [ -118.756144317999883, 34.025719679000119 ], [ -118.773018491999849, 34.023763951000106 ], [ -118.783398653999924, 34.021839237000123 ], [ -118.787929532999911, 34.019663922000078 ], [ -118.78920803199992, 34.014561763000174 ], [ -118.792751211999885, 34.011571329000091 ], [ -118.793703809999926, 34.007266866000109 ], [ -118.79661231999988, 34.006705704000026 ], [ -118.80276809, 34.004796187000053 ], [ -118.804060273999909, 34.001036196000157 ], [ -118.806969055999886, 33.999406269000033 ], [ -118.829814260999882, 34.020823634000109 ], [ -118.8526038279999, 34.033656929000031 ], [ -118.862662496999931, 34.03443339000016 ], [ -118.875719417999889, 34.037551203000092 ], [ -118.894220752999928, 34.038561363000113 ], [ -118.902671635999894, 34.040148941000027 ], [ -118.914693612999926, 34.040637403000019 ], [ -118.920903692999843, 34.044301679000156 ], [ -118.930006075999898, 34.045896262000113 ], [ -118.936807489999893, 34.043200309000056 ], [ -118.954036537999912, 34.047857995000143 ], [ -118.977503824999957, 34.059566000000146 ], [ -118.997366393999897, 34.065651406000043 ], [ -119.008079924999947, 34.066119549000163 ], [ -119.03825899899995, 34.083639885000096 ], [ -119.060904976999893, 34.08552960800013 ], [ -119.089698202999898, 34.10048386400014 ], [ -119.100158818999972, 34.102807020000071 ], [ -119.117051769999875, 34.106416041000088 ], [ -119.119778542999896, 34.106131528000063 ], [ -119.119594330999931, 34.103739206000014 ], [ -119.114328579999892, 34.101792710000083 ], [ -119.100651873999908, 34.098963103000173 ], [ -119.106481596999885, 34.094466109000152 ], [ -119.128652932999913, 34.100546906000105 ], [ -119.153757635999895, 34.116325435000093 ], [ -119.193701624999875, 34.141737849000052 ], [ -119.204379881999841, 34.144096672 ], [ -119.20575006999988, 34.145757407000119 ], [ -119.204198666999858, 34.148413816000172 ], [ -119.204664557999948, 34.149535727000099 ], [ -119.208322635999934, 34.152321691000125 ], [ -119.210135918999953, 34.152308076000153 ], [ -119.210994507999928, 34.147987264000122 ], [ -119.214822881999879, 34.145707164000115 ], [ -119.217087473999939, 34.145501819000103 ], [ -119.22079955199986, 34.153165538000124 ], [ -119.224697299999946, 34.157075251000052 ], [ -119.226080561999908, 34.159128338000116 ], [ -119.231160969999891, 34.167344259000075 ], [ -119.237164492999867, 34.17686509500011 ], [ -119.243967251999891, 34.190090236000131 ], [ -119.252674933999884, 34.203924872000059 ], [ -119.260194046999928, 34.217123971000134 ], [ -119.26336175, 34.226576832000134 ], [ -119.258858625999835, 34.233352932000074 ], [ -119.263905402999882, 34.235052802000141 ], [ -119.267160610999923, 34.244533596000124 ], [ -119.26929996199992, 34.254958566000099 ], [ -119.281158006999888, 34.268703518000152 ], [ -119.289915196999885, 34.274576033000116 ], [ -119.29602821499995, 34.274321504000014 ], [ -119.304416659999902, 34.272362253 ], [ -119.313392124999837, 34.277128270000091 ], [ -119.320690486999922, 34.282635808000137 ], [ -119.329118195999925, 34.285929556000085 ], [ -119.338595652999928, 34.290479935000079 ], [ -119.349488259999944, 34.304074965000055 ], [ -119.358768920999907, 34.310093898000062 ], [ -119.364698791999928, 34.315725688000114 ], [ -119.370858534999854, 34.319674523000074 ], [ -119.375191017999853, 34.320273405000151 ], [ -119.38206237599988, 34.319370141000107 ], [ -119.386887656999889, 34.318065223000147 ], [ -119.391482427999918, 34.31844489700002 ], [ -119.394106081999837, 34.322601149000107 ], [ -119.401077902999901, 34.330571524 ], [ -119.409823811999857, 34.336172815000012 ], [ -119.418316768999929, 34.342382299000164 ], [ -119.429952735999905, 34.353471507 ], [ -119.436617135999938, 34.355727688000101 ], [ -119.443236180999861, 34.354821571000073 ], [ -119.453033798999883, 34.368401221000127 ], [ -119.460229092999882, 34.374040410000148 ], [ -119.46623507699988, 34.375021825000161 ], [ -119.47020464699996, 34.375813771000153 ], [ -119.472972442999918, 34.37388862900012 ], [ -119.475242012999843, 34.372393252 ], [ -119.477797998999861, 34.372579345000148 ], [ -119.479622233999891, 34.374458883000145 ], [ -119.4835104389999, 34.378632981000081 ], [ -119.488167184999909, 34.38111570100007 ], [ -119.494862727999944, 34.383997103000084 ], [ -119.502514142999942, 34.384342201000052 ], [ -119.516806330999955, 34.386938072000149 ], [ -119.520691453999888, 34.390689084000101 ], [ -119.529428363999898, 34.394812854000165 ], [ -119.536839727999919, 34.395580416000158 ], [ -119.555694513999882, 34.410450530000119 ], [ -119.563175121999862, 34.414794513000103 ], [ -119.568009219999894, 34.413902574000119 ], [ -119.572854979999903, 34.412795620000097 ], [ -119.575893693999888, 34.411924226000011 ], [ -119.581791195999884, 34.412701418000111 ], [ -119.595855272999955, 34.418850002000013 ], [ -119.617159643999912, 34.420527172000149 ], [ -119.6211967509999, 34.418173190000132 ], [ -119.628860852999964, 34.418083970000126 ], [ -119.638511645999913, 34.415242456000115 ], [ -119.657928548999848, 34.416506244000161 ], [ -119.678060914999918, 34.41438500100007 ], [ -119.687699931999958, 34.410903108000085 ], [ -119.690207587999879, 34.408137910000093 ], [ -119.691693966999935, 34.405383909000037 ], [ -119.690897804999878, 34.40349819800015 ], [ -119.700804621999865, 34.400856304000158 ], [ -119.702036851999949, 34.398104939000135 ], [ -119.707879354999918, 34.395440856000064 ], [ -119.719895849999943, 34.395301310000079 ], [ -119.732947496999913, 34.397464126000145 ], [ -119.743215070999909, 34.402607612000011 ], [ -119.754504535999899, 34.404785920000123 ], [ -119.787648874999945, 34.417211163000118 ], [ -119.802964752999927, 34.418097903000145 ], [ -119.808548752999926, 34.416345410000176 ], [ -119.832035359999878, 34.416264303000119 ], [ -119.836407368999858, 34.414948130000099 ], [ -119.841011731999885, 34.412982916000047 ], [ -119.840942211999916, 34.410039772000161 ], [ -119.842389676999858, 34.406233080000149 ], [ -119.844384790999911, 34.403892494 ], [ -119.854720134999923, 34.408806865000102 ], [ -119.868241575999946, 34.409479315000155 ], [ -119.87435016099991, 34.408769703000146 ], [ -119.878635816999946, 34.40661306000014 ], [ -119.890366276999927, 34.419092434000092 ], [ -119.900601458999915, 34.42043595100013 ], [ -119.921527970999875, 34.433401349000164 ], [ -119.934840716999943, 34.435541072000021 ], [ -119.942755918999907, 34.43523731 ], [ -119.949897361999888, 34.434311362000059 ], [ -119.957072189999877, 34.43589230500011 ], [ -119.96224848499989, 34.43981498100014 ], [ -119.975932049999912, 34.447209800000124 ], [ -119.984667386999959, 34.450034968000111 ], [ -119.989527355999911, 34.449767523 ], [ -120.009967660999877, 34.461011957 ], [ -120.022136204999867, 34.457696147000107 ], [ -120.036598995999881, 34.463137087000163 ], [ -120.091420050999957, 34.458807684000149 ], [ -120.133412238999952, 34.472723700000031 ], [ -120.171871103999877, 34.469984758000081 ], [ -120.293206557999881, 34.468485563000016 ], [ -120.425200975999928, 34.4513207050001 ], [ -120.444342400999886, 34.451182132000085 ], [ -120.454107498999889, 34.442811833000022 ], [ -120.472681432999877, 34.450272972000093 ], [ -120.491607225999957, 34.491359768000123 ], [ -120.509985793999945, 34.521374539000121 ], [ -120.53636322699991, 34.535293291000144 ], [ -120.557835565999909, 34.541159594000035 ], [ -120.577931495999906, 34.553543183000059 ], [ -120.594568531999869, 34.554696821000121 ], [ -120.621616008999936, 34.552613560000069 ], [ -120.636626756999902, 34.562892971000068 ], [ -120.64443668999985, 34.574131281000106 ], [ -120.647834192999952, 34.585675589000132 ], [ -120.642109133999924, 34.601023237000092 ], [ -120.630566680999948, 34.628194386000175 ], [ -120.614135657999881, 34.659403305000026 ], [ -120.606054635999882, 34.679349989000102 ], [ -120.603053655999915, 34.704781950000083 ], [ -120.617014126999933, 34.725653387000094 ], [ -120.627593553999887, 34.743475653000175 ], [ -120.640248175999957, 34.758530992000189 ], [ -120.629917942999924, 34.781932656000137 ], [ -120.619212167999905, 34.819206217000144 ], [ -120.617412480999946, 34.843631567000145 ], [ -120.615573189999907, 34.858002598000027 ], [ -120.622188411999858, 34.867299625 ], [ -120.632557745999932, 34.87140534100017 ], [ -120.640248175999957, 34.879217841000141 ], [ -120.64461047199984, 34.895112857000086 ], [ -120.654973021999893, 34.901185974000057 ], [ -120.667646859999948, 34.898848112000067 ], [ -120.672839345999961, 34.90752128400014 ], [ -120.666195046999903, 34.931769275000121 ], [ -120.642375558999845, 35.000873310000159 ], [ -120.633697068999879, 35.03510163 ], [ -120.630726691999953, 35.073879299000012 ], [ -120.635731574999909, 35.108587958000086 ], [ -120.644886847999885, 35.139390367000047 ], [ -120.652943488999924, 35.144232489000117 ], [ -120.658554893999863, 35.15047967800011 ], [ -120.671159987999914, 35.150225857000137 ], [ -120.679025844999884, 35.153062242000189 ], [ -120.698068813999882, 35.169134833000058 ], [ -120.706369594999856, 35.174221096000096 ], [ -120.723849416999926, 35.175226033000015 ], [ -120.749669233999839, 35.177396791000135 ], [ -120.755608399999915, 35.171922497000153 ], [ -120.755346169999882, 35.163123925000107 ], [ -120.75944029599988, 35.159214627000111 ], [ -120.76553376899993, 35.160242155000148 ], [ -120.790842251999905, 35.179022528000175 ], [ -120.849792732999887, 35.202913231000153 ], [ -120.876682473999864, 35.223790356000123 ], [ -120.886097785999951, 35.233791408000016 ], [ -120.897654183999919, 35.249765515000107 ], [ -120.895590616999897, 35.273513581000103 ], [ -120.887067596999913, 35.285935479000031 ], [ -120.867831188999901, 35.33039216700017 ], [ -120.862243646999872, 35.361905041000128 ], [ -120.853814633999946, 35.347529367000121 ], [ -120.857391897999904, 35.326764807000146 ], [ -120.855580206999917, 35.321519273000106 ], [ -120.843242048999926, 35.324347749000097 ], [ -120.842059102999926, 35.331669812000101 ], [ -120.83140497299992, 35.336087589000144 ], [ -120.835834936999902, 35.342912953000095 ], [ -120.841558010999861, 35.345866813000058 ], [ -120.852074160999905, 35.367051064000023 ], [ -120.860263661999923, 35.373802556000086 ], [ -120.866749607999935, 35.370992622000117 ], [ -120.871096717999905, 35.405308394000159 ], [ -120.879081212999921, 35.420093047000179 ], [ -120.887318488999881, 35.432928778000118 ], [ -120.908184147999876, 35.448243818000137 ], [ -120.946192229999909, 35.446285131000153 ], [ -120.963465629999945, 35.456651356000137 ], [ -120.982768674999875, 35.45998789800008 ], [ -121.005362163999919, 35.460656967000105 ], [ -121.036976691999939, 35.489203192 ], [ -121.068311503999908, 35.517869279000152 ], [ -121.101811690999909, 35.549667202000151 ], [ -121.130870197999911, 35.600701175000054 ], [ -121.143275384999953, 35.605042829000112 ], [ -121.15910836899991, 35.627235283000104 ], [ -121.169401557999905, 35.636919404000068 ], [ -121.187366959999906, 35.641920587000143 ], [ -121.193066839999901, 35.639615762000133 ], [ -121.191525738999928, 35.633864719000186 ], [ -121.195030889999956, 35.632336335 ], [ -121.216496041999903, 35.647747645 ], [ -121.234003236999925, 35.652037747000136 ], [ -121.251990046999921, 35.657394463000159 ], [ -121.269145896999916, 35.664210591000128 ], [ -121.288312801999865, 35.664829516000097 ], [ -121.28847445, 35.681458255000067 ], [ -121.298414451999903, 35.69748896300014 ], [ -121.309015800999902, 35.707709393000144 ], [ -121.3145902239999, 35.713723753000139 ], [ -121.323068813999839, 35.76455312700007 ], [ -121.337232304999873, 35.786528670000152 ], [ -121.36800677199993, 35.810361061000108 ], [ -121.387116923999898, 35.821431931000134 ], [ -121.408930921999925, 35.844020730000167 ], [ -121.413349774999872, 35.854745748000184 ], [ -121.425536751999886, 35.858420443000014 ], [ -121.442025246999904, 35.869221839000133 ], [ -121.463200875999874, 35.886731338000075 ], [ -121.462717251999919, 35.903713283000073 ], [ -121.472247747999859, 35.913568528000056 ], [ -121.478381525999865, 35.931581610000094 ], [ -121.482226478999848, 35.948975515000157 ], [ -121.486903628999954, 35.965828066000128 ], [ -121.489979620999904, 35.982245184000092 ], [ -121.506677586999857, 36.003260042000178 ], [ -121.522569024999953, 36.010070734000138 ], [ -121.541083525999909, 36.01501304900016 ], [ -121.566738868999906, 36.020117263000074 ], [ -121.582243759999898, 36.036027173 ], [ -121.59266137299997, 36.050570011000062 ], [ -121.594522310999935, 36.064233426 ], [ -121.606444046999925, 36.071504863000186 ], [ -121.618221380999884, 36.084429003000153 ], [ -121.630155127999899, 36.113056839000151 ], [ -121.64265948699996, 36.123549889000074 ], [ -121.65775869499987, 36.142646683000081 ], [ -121.677920767999908, 36.162675352000107 ], [ -121.693576414999953, 36.171656473000056 ], [ -121.703879557999869, 36.182216730000121 ], [ -121.729139027999878, 36.198144643000106 ], [ -121.753953875999869, 36.211546510000105 ], [ -121.781441447999839, 36.226325732000092 ], [ -121.798857694999882, 36.234479655000186 ], [ -121.810366632999916, 36.232397340000105 ], [ -121.824859178999915, 36.239203192000119 ], [ -121.835601365999921, 36.249172268000123 ], [ -121.840077277999896, 36.259344794000171 ], [ -121.845418036999916, 36.272399878000144 ], [ -121.852202928999887, 36.279445705000015 ], [ -121.863189256999931, 36.283189195000048 ], [ -121.873605923999932, 36.290025132000082 ], [ -121.881011522999913, 36.299505927000084 ], [ -121.899660522999909, 36.304399527000143 ], [ -121.895628818999924, 36.313928729000068 ], [ -121.897125800999888, 36.327981200000139 ], [ -121.893723924999875, 36.332057557 ], [ -121.893586326999952, 36.338568490000128 ], [ -121.897856076999915, 36.343868345000075 ], [ -121.901072382999928, 36.352760124 ], [ -121.903645366999925, 36.362116214000181 ], [ -121.905844840999919, 36.37175179300003 ], [ -121.906126954999905, 36.377140376000099 ], [ -121.904168130999835, 36.384536730000107 ], [ -121.906123448999878, 36.388477716000139 ], [ -121.908274684999881, 36.396371347000112 ], [ -121.914431504999925, 36.40303590300006 ], [ -121.91767174799989, 36.415548510000107 ], [ -121.915329132999943, 36.423193583000099 ], [ -121.918351247999894, 36.430327327000057 ], [ -121.929012139999926, 36.44778604700015 ], [ -121.930224976999909, 36.454603356000135 ], [ -121.931506626999905, 36.463030718000098 ], [ -121.938040328999875, 36.46826458 ], [ -121.944699073999885, 36.486151827000114 ], [ -121.946309010999954, 36.491891436000103 ], [ -121.942480509999911, 36.49670503800003 ], [ -121.943207904999866, 36.502832352000112 ], [ -121.944237493999879, 36.505694754000089 ], [ -121.94226954099986, 36.511900845000028 ], [ -121.94957475199989, 36.51421753800004 ], [ -121.956929621999848, 36.517617502000078 ], [ -121.955362532999871, 36.522727685000021 ], [ -121.948204164999908, 36.523661799000038 ], [ -121.940064800999863, 36.522815646000126 ], [ -121.927533152999857, 36.523851999000058 ], [ -121.928299653999943, 36.531380319000093 ], [ -121.929944560999886, 36.537845670000181 ], [ -121.933123776999949, 36.538475389000141 ], [ -121.9356328289999, 36.544187772 ], [ -121.931268944999957, 36.547209922000135 ], [ -121.932527777999837, 36.555128979000145 ], [ -121.934616623999929, 36.561225309000164 ], [ -121.940335484999878, 36.558517432000102 ], [ -121.94279872199985, 36.563146222000015 ], [ -121.946476926999907, 36.564848380000072 ], [ -121.950890438999949, 36.562908855 ], [ -121.953891433999914, 36.559565391000135 ], [ -121.970075389999877, 36.56885441600015 ], [ -121.978002256999915, 36.57476745400011 ], [ -121.981115218999918, 36.583716876000111 ], [ -121.973934469999875, 36.584291224000125 ], [ -121.967219888999864, 36.58521270100006 ], [ -121.966635985999872, 36.59210137800001 ], [ -121.963867392999944, 36.600500741000147 ], [ -121.959862546999958, 36.611472799000083 ], [ -121.956379834999836, 36.614103583000158 ], [ -121.95033388599991, 36.609938392000132 ], [ -121.946644313999897, 36.618006564000055 ], [ -121.942521606999932, 36.626447756000019 ], [ -121.94153113299987, 36.634434026000108 ], [ -121.937694666999874, 36.639249335000088 ], [ -121.929526144999912, 36.638040214000128 ], [ -121.921210777999875, 36.633581243000052 ], [ -121.920548853999904, 36.628897996000077 ], [ -121.913135481999902, 36.624411953000063 ], [ -121.902154127999907, 36.620752134000114 ], [ -121.895936844999923, 36.612611487000081 ], [ -121.887421360999852, 36.601994493000021 ], [ -121.878836012999855, 36.602614043000031 ], [ -121.870003890999882, 36.607212149000176 ], [ -121.853874547999908, 36.619613892000089 ], [ -121.837928762999937, 36.635611954000026 ], [ -121.827060928999913, 36.656200019000053 ], [ -121.814258246999955, 36.683237837000135 ], [ -121.809925910999965, 36.718817450000031 ], [ -121.805359412999863, 36.737739027000103 ], [ -121.792423796999913, 36.730867810000021 ], [ -121.763742641999855, 36.722072658000073 ], [ -121.761274397999912, 36.730286095000125 ], [ -121.766442165999933, 36.735207993000031 ], [ -121.770214955999904, 36.739083170000029 ], [ -121.775111714999866, 36.737499773000039 ], [ -121.783707483999919, 36.73798364800011 ], [ -121.790190125999928, 36.741781238000087 ], [ -121.794901395999915, 36.746351552000036 ], [ -121.803204864999941, 36.750459474000124 ], [ -121.79816220299989, 36.779907161 ], [ -121.789811754999889, 36.806198967000071 ], [ -121.804245937999838, 36.836018241000048 ], [ -121.859934048999889, 36.927476304000052 ], [ -121.887115037999905, 36.954901434000092 ], [ -121.905601189999928, 36.969126309000146 ], [ -121.937243162999906, 36.978306980000085 ], [ -121.952767306999903, 36.971007662000105 ], [ -121.963566150999895, 36.95949017900007 ], [ -121.974235369999903, 36.955199274000151 ], [ -121.993967251999962, 36.959865627000156 ], [ -122.006701206999935, 36.962378329000117 ], [ -122.021210374999882, 36.962667850000102 ], [ -122.025156090999943, 36.959653313000061 ], [ -122.02407544499988, 36.95607035400009 ], [ -122.025189385999852, 36.950974006000038 ], [ -122.034823934999878, 36.95321256700008 ], [ -122.046794080999888, 36.948156804000078 ], [ -122.060867827999857, 36.948813136000027 ], [ -122.080901399999931, 36.951462594000063 ], [ -122.106004018999926, 36.955755369000045 ], [ -122.120842988999883, 36.963255874000154 ], [ -122.134990691999946, 36.965726027000088 ], [ -122.142237514999934, 36.975250521000149 ], [ -122.153643159999959, 36.977075436000163 ], [ -122.177586857999898, 36.995104660000109 ], [ -122.20791581899995, 37.019273179000024 ], [ -122.222117576999864, 37.024294942000111 ], [ -122.227945638999884, 37.040059559000028 ], [ -122.253802123999904, 37.059123309000043 ], [ -122.266041901999927, 37.076455525000156 ], [ -122.28102986099988, 37.096582914000166 ], [ -122.29006162899995, 37.104236081000025 ], [ -122.297658442999946, 37.111226697000134 ], [ -122.308354444999864, 37.116675008000087 ], [ -122.318730468999959, 37.115617245000166 ], [ -122.327655643999904, 37.112807727000032 ], [ -122.339290056999943, 37.118581815000042 ], [ -122.337853206999895, 37.134902402000122 ], [ -122.359527538999913, 37.150485414000102 ], [ -122.36103852899987, 37.162356196000033 ], [ -122.369353199999935, 37.174019993000016 ], [ -122.383412109999938, 37.182271109000155 ], [ -122.396109331999881, 37.181859916000136 ], [ -122.404456977999914, 37.194525975 ], [ -122.407867944999879, 37.216117025000145 ], [ -122.410703662999936, 37.226870680000147 ], [ -122.41649926599986, 37.233919856000043 ], [ -122.418363404999909, 37.252309719000081 ], [ -122.410150356999907, 37.268845184000085 ], [ -122.407412333999844, 37.294983806000076 ], [ -122.402522319999889, 37.340504117000037 ], [ -122.400337817999898, 37.359741136000096 ], [ -122.408736250999965, 37.364171592000119 ], [ -122.411569086999876, 37.374931261000157 ], [ -122.429193801999929, 37.407270842000131 ], [ -122.444446441999844, 37.437519345000013 ], [ -122.449160188999954, 37.476655219000023 ], [ -122.46324622299997, 37.496649481000034 ], [ -122.479267580999888, 37.502783450000052 ], [ -122.486096134999912, 37.502556444 ], [ -122.494211917999863, 37.500839443000146 ], [ -122.495284826999907, 37.495371003000045 ], [ -122.499263169999921, 37.493066185000103 ], [ -122.501074149999923, 37.501329036000143 ], [ -122.512025435999917, 37.510003086000111 ], [ -122.520471886999871, 37.53142146 ], [ -122.517565391999909, 37.545265769000181 ], [ -122.514759298999891, 37.560893426000021 ], [ -122.520027872999904, 37.574124813000125 ], [ -122.519040027999878, 37.589713519000114 ], [ -122.522424280999942, 37.593217442000039 ], [ -122.517468184999942, 37.594472564000071 ], [ -122.513089255999915, 37.597843855000022 ], [ -122.507597153999896, 37.597698121000136 ], [ -122.503232882999924, 37.601462648000151 ], [ -122.501698410999879, 37.606944275 ], [ -122.495946980999889, 37.627373970000079 ], [ -122.494740363999881, 37.665228583000115 ], [ -122.501874297999862, 37.703488398 ], [ -122.508493013999853, 37.724943829000111 ], [ -122.513610291999868, 37.752261117000117 ], [ -122.515171646999903, 37.781126118000131 ], [ -122.505873669999929, 37.786455717000123 ], [ -122.497669986999895, 37.787102375000146 ], [ -122.485930131999851, 37.790810532000094 ], [ -122.47644909199991, 37.810675016000019 ], [ -122.463358567999933, 37.805303535000021 ], [ -122.418757245999899, 37.811143484000141 ], [ -122.408636661999893, 37.810391705000129 ], [ -122.398195119999883, 37.803494794000031 ], [ -122.387928839999901, 37.790961005000113 ], [ -122.387103655999923, 37.778745268000037 ], [ -122.381532155999906, 37.773642615000156 ], [ -122.382857618999878, 37.763829250000086 ], [ -122.379244690999911, 37.755985983000031 ], [ -122.374316994999859, 37.749271105 ], [ -122.36649429099991, 37.739754832000173 ], [ -122.354543940999861, 37.730008295000019 ], [ -122.362459752999968, 37.714916086000173 ], [ -122.376290197999879, 37.716641098000153 ], [ -122.379471757999866, 37.707491557000125 ], [ -122.392454687999916, 37.710330339000066 ], [ -122.387973748999883, 37.677188425000153 ], [ -122.380157679999868, 37.676710271000118 ], [ -122.381033419999937, 37.666919106000094 ], [ -122.374911476999841, 37.655163302000162 ], [ -122.381360193999882, 37.647352848000153 ], [ -122.384388800999915, 37.636664130000113 ], [ -122.383729769999931, 37.631459923000122 ], [ -122.363722012999858, 37.627250748 ], [ -122.354141903999903, 37.613507428 ], [ -122.35933988599993, 37.608471446000166 ], [ -122.371165863999906, 37.612945368000126 ], [ -122.374108815999961, 37.604187046000149 ], [ -122.362286590999929, 37.599708043000092 ], [ -122.358519682999926, 37.592805084000034 ], [ -122.330392201999942, 37.589405158000105 ], [ -122.316769666999903, 37.58984531 ], [ -122.31579035599988, 37.583929682000118 ], [ -122.299068746999922, 37.576897860000045 ], [ -122.283268724999942, 37.574698647000091 ], [ -122.257923956999889, 37.571519273000021 ], [ -122.250965949999895, 37.568060614 ], [ -122.245347544999902, 37.553193097000175 ], [ -122.239576081999942, 37.546887253000037 ], [ -122.230539516999926, 37.544826565000065 ], [ -122.210292404999862, 37.539864207 ], [ -122.199298366999884, 37.534961906000106 ], [ -122.198894168999928, 37.526780707000071 ], [ -122.207346157999893, 37.517482815 ], [ -122.193000124999855, 37.51535717600008 ], [ -122.183071103999893, 37.50755389300015 ], [ -122.171285427999877, 37.503590445000114 ], [ -122.15868079299986, 37.503363348000065 ], [ -122.14793860599994, 37.496649481000034 ], [ -122.134144660999937, 37.497788804000052 ], [ -122.122670050999886, 37.484930731000034 ], [ -122.111927863999881, 37.467474677000084 ], [ -122.100168423999904, 37.455064195000048 ], [ -122.080881313999868, 37.448716539000102 ], [ -122.058908657999851, 37.447414455000015 ], [ -122.038644985999838, 37.451402085 ], [ -122.03213982099993, 37.46336413000013 ], [ -122.040760870999947, 37.467922268000066 ], [ -122.048329230999897, 37.46873607 ], [ -122.052235480999897, 37.471380927000084 ], [ -122.051869269999969, 37.47744375200007 ], [ -122.05052649599989, 37.484279690000093 ], [ -122.051747199999909, 37.489203192000147 ], [ -122.057769334999904, 37.497544664000102 ], [ -122.062367316999939, 37.501695054000052 ], [ -122.069081183999899, 37.503566799000126 ], [ -122.093332485999881, 37.503566799000126 ], [ -122.109038865999935, 37.517971096000096 ], [ -122.116550199999878, 37.542562043000103 ], [ -122.146309666999898, 37.57896842600006 ], [ -122.152218331999933, 37.616095750000127 ], [ -122.162778990999925, 37.664433826000064 ], [ -122.185242623999883, 37.69078357500014 ], [ -122.191863422999873, 37.700313007 ], [ -122.20672606699992, 37.710668767000087 ], [ -122.21436033499991, 37.699068410000123 ], [ -122.251766048999926, 37.722777463000014 ], [ -122.262350384999934, 37.743003384000119 ], [ -122.248933433999952, 37.748300638000089 ], [ -122.21245198, 37.743483524000126 ], [ -122.217292863999901, 37.758486264000155 ], [ -122.221849874999918, 37.759717068000114 ], [ -122.226318453999909, 37.755396800000042 ], [ -122.239336110999901, 37.755324872000145 ], [ -122.271550722999919, 37.762847091000097 ], [ -122.283512109999918, 37.763328930000071 ], [ -122.289854290999926, 37.767130969000064 ], [ -122.299881495999855, 37.772245866000063 ], [ -122.297371403999904, 37.779759191 ], [ -122.307556988999877, 37.780865450000036 ], [ -122.309851219999899, 37.776217955000092 ], [ -122.331508804999956, 37.78238805400018 ], [ -122.328616081999883, 37.796488617000151 ], [ -122.324700144999881, 37.801083119000069 ], [ -122.325008953999941, 37.803750772000072 ], [ -122.328422022999902, 37.804460378000087 ], [ -122.339093960999961, 37.803380526000083 ], [ -122.340656570999855, 37.807115783000043 ], [ -122.334727578999917, 37.811630501000039 ], [ -122.322361319999899, 37.81094243400004 ], [ -122.316571373999921, 37.817089584000186 ], [ -122.328359634999899, 37.821025574000046 ], [ -122.319691418999881, 37.825092641000126 ], [ -122.301385088999908, 37.826239299000136 ], [ -122.295502283999895, 37.831292182000155 ], [ -122.297888076999939, 37.839311075000083 ], [ -122.303863106999955, 37.862902251000079 ], [ -122.31602365899991, 37.860890743000184 ], [ -122.317747123999951, 37.867864906000179 ], [ -122.308306775999924, 37.870329380000058 ], [ -122.313902037999867, 37.885829354000109 ], [ -122.328759888999883, 37.908057592000134 ], [ -122.347832189999906, 37.906371521000054 ], [ -122.364829592999939, 37.903659221000098 ], [ -122.391087853999892, 37.907674614000044 ], [ -122.38762834099991, 37.920218397 ], [ -122.396259253999943, 37.928049189 ], [ -122.410173387999947, 37.931922281000098 ], [ -122.421315688999925, 37.948316087000094 ], [ -122.429698153999922, 37.964261981000092 ], [ -122.413807246999866, 37.962083423000038 ], [ -122.397725146999903, 37.956117270000121 ], [ -122.395031795999898, 37.970267004000092 ], [ -122.368795656999907, 37.980316416000065 ], [ -122.359565618999866, 37.987648655000115 ], [ -122.369976190999878, 38.003555794000178 ], [ -122.36630595799997, 38.012335587000095 ], [ -122.346302863999938, 38.00604889500012 ], [ -122.336008266999912, 38.00381094000015 ], [ -122.322499152999853, 38.005194403000033 ], [ -122.316769855999922, 38.010136438000032 ], [ -122.29904056399991, 38.011198076000127 ], [ -122.276972612999913, 38.024950739000175 ], [ -122.275570494999897, 38.039101116 ], [ -122.26423611299991, 38.045952152000112 ], [ -122.24974524599989, 38.055365302000112 ], [ -122.227040167999931, 38.058417059000121 ], [ -122.203629734999879, 38.05337843700012 ], [ -122.1861702489999, 38.047976275000096 ], [ -122.168553028999838, 38.028042939000144 ], [ -122.14793860599994, 38.023627020000063 ], [ -122.124379035999894, 38.029201565000093 ], [ -122.081836768999878, 38.047895644000064 ], [ -122.053255048999873, 38.053075459000112 ], [ -122.003989925999861, 38.05613559600009 ], [ -121.939008661999878, 38.04454375100012 ], [ -121.888004331999937, 38.041088916000078 ], [ -121.87810163599994, 38.034346317000043 ], [ -121.837122762999854, 38.023064037000111 ], [ -121.779133710999943, 38.015461194000167 ], [ -121.751082358999867, 38.019435757000124 ], [ -121.722971157999893, 38.011135158000158 ], [ -121.702056443999922, 38.009222723 ], [ -121.69004367999986, 38.009118724000118 ], [ -121.681442821999923, 38.017453104000126 ], [ -121.694824753999853, 38.0246783300001 ], [ -121.710547762999866, 38.022105755000055 ], [ -121.723080947999918, 38.025562990000125 ], [ -121.72060570099984, 38.032116780000152 ], [ -121.704905589999854, 38.035232029000056 ], [ -121.694894985999895, 38.043402411 ], [ -121.685536261999857, 38.044745184000178 ], [ -121.681507941999882, 38.048325914000046 ], [ -121.678374803999915, 38.056952216000141 ], [ -121.676340298999975, 38.067084052000112 ], [ -121.675607876999948, 38.075506903000147 ], [ -121.671131964999887, 38.083889065000122 ], [ -121.660552537999934, 38.086859442000119 ], [ -121.637684699999923, 38.086330471000153 ], [ -121.62451773699992, 38.089285933000085 ], [ -121.624057744999874, 38.094702176000126 ], [ -121.617095506999888, 38.09861888200011 ], [ -121.606678839999901, 38.099351304000052 ], [ -121.596262173999918, 38.094387111000103 ], [ -121.582054389999954, 38.092000484000053 ], [ -121.580326189999951, 38.083397639000125 ], [ -121.576518639999861, 38.074307486000023 ], [ -121.582468521999928, 38.068751220000124 ], [ -121.584966533999932, 38.062742692000185 ], [ -121.599232226999902, 38.059134431000146 ], [ -121.609607081999897, 38.061029046000144 ], [ -121.620622940999894, 38.061825336000126 ], [ -121.62771267899987, 38.050832725000177 ], [ -121.63223942599987, 38.04422942600003 ], [ -121.622988438999869, 38.036361805000112 ], [ -121.612760446999857, 38.021491498000117 ], [ -121.605064050999971, 38.017905994000117 ], [ -121.598367945999883, 38.021861896000033 ], [ -121.584243414999975, 38.028710186000112 ], [ -121.582477760999893, 38.035782157000099 ], [ -121.580205037999875, 38.047190906000125 ], [ -121.579258203999871, 38.057484298000034 ], [ -121.578086936999867, 38.062377989000098 ], [ -121.569305311999884, 38.065844333000129 ], [ -121.555922197999848, 38.057537194000147 ], [ -121.547581201999918, 38.055044979000073 ], [ -121.537800542999975, 38.050965938 ], [ -121.526405274999931, 38.040979472000075 ], [ -121.512641833999865, 38.040240119000103 ], [ -121.500884568999894, 38.031073309000064 ], [ -121.480338300999861, 38.02265105000005 ], [ -121.459013193999866, 38.004780726000021 ], [ -121.445301886999857, 37.99632396 ], [ -121.445383266999841, 38.003892320000134 ], [ -121.458729620999932, 38.020575262000179 ], [ -121.475738084999904, 38.037176825000031 ], [ -121.486561652999896, 38.044745184000178 ], [ -121.503895636999886, 38.049750067000119 ], [ -121.513235831999893, 38.054821675000184 ], [ -121.526271253999937, 38.054497328000153 ], [ -121.529257197999911, 38.060368420000103 ], [ -121.535607457999888, 38.064533381 ], [ -121.542424173999905, 38.063281536 ], [ -121.548642240999868, 38.064206155000122 ], [ -121.565124681999919, 38.081082783000099 ], [ -121.571277742999925, 38.097139452000093 ], [ -121.586496548999961, 38.102362372000144 ], [ -121.604074673999904, 38.105780341000141 ], [ -121.627186652999868, 38.1056175800001 ], [ -121.631906704999864, 38.103257554000137 ], [ -121.63947506399991, 38.094468492000161 ], [ -121.644520636999943, 38.092515367000132 ], [ -121.651966925999915, 38.094305731000119 ], [ -121.658558722999899, 38.097601630000057 ], [ -121.664947068999922, 38.099188544000086 ], [ -121.680281841999957, 38.092690639000139 ], [ -121.686105923999918, 38.082668361000017 ], [ -121.688588019999941, 38.075100002000156 ], [ -121.689279751999891, 38.061590887000179 ], [ -121.69933020699996, 38.050848700000174 ], [ -121.720589347999905, 38.040282003000115 ], [ -121.742063135999857, 38.029448816000112 ], [ -121.76747499, 38.030388394000127 ], [ -121.778708776999864, 38.036019105 ], [ -121.785222423999954, 38.043399355000119 ], [ -121.784246217999907, 38.052066680000124 ], [ -121.779849615999936, 38.061374991000079 ], [ -121.769174307999947, 38.068695426000133 ], [ -121.759025348999899, 38.072215007000111 ], [ -121.74681555899987, 38.075995184000149 ], [ -121.73643958199996, 38.078843492000189 ], [ -121.716667794999893, 38.092807082000107 ], [ -121.702992316999911, 38.1056175800001 ], [ -121.687787442999962, 38.123830708000085 ], [ -121.682601541999958, 38.14719259100012 ], [ -121.689484232999931, 38.14754736100015 ], [ -121.704884772999904, 38.122292821000102 ], [ -121.721446587999964, 38.108345944000163 ], [ -121.746978318999936, 38.087713934000035 ], [ -121.767445441999897, 38.078843492000189 ], [ -121.803080127999934, 38.0628834030001 ], [ -121.823968053999891, 38.068799208000186 ], [ -121.846118462999868, 38.072511231000092 ], [ -121.861836299999908, 38.070452619000108 ], [ -121.867339647999884, 38.064642645000092 ], [ -121.882527380999932, 38.056900412000132 ], [ -121.898170078999868, 38.053220639000031 ], [ -121.916724984999888, 38.052707385000119 ], [ -121.928822394999941, 38.058417059000121 ], [ -121.920969204999878, 38.06244538 ], [ -121.916086391999897, 38.066961981000034 ], [ -121.908314581999903, 38.078843492000189 ], [ -121.954984801999871, 38.079169842000098 ], [ -121.971269434999911, 38.074917644000081 ], [ -121.989478998999871, 38.082498151000053 ], [ -122.014955473999891, 38.098510611000123 ], [ -121.985992244999935, 38.110704479000091 ], [ -121.989419892999948, 38.125198017000159 ], [ -122.000296232999872, 38.137312445000092 ], [ -122.016207337999901, 38.13955023700008 ], [ -122.038064345999942, 38.136746606000187 ], [ -122.055165167999917, 38.13373444200009 ], [ -122.065419074999937, 38.127346096000068 ], [ -122.068955344999878, 38.121780414000071 ], [ -122.065797284999874, 38.113226666000131 ], [ -122.07548987699991, 38.100507714000074 ], [ -122.093250938999887, 38.084304174000081 ], [ -122.121083136999857, 38.059881903000175 ], [ -122.126597029999914, 38.05034334200009 ], [ -122.130290382999888, 38.042142433000109 ], [ -122.158478154999884, 38.043445424000097 ], [ -122.165931113999875, 38.054546831000081 ], [ -122.184301597999919, 38.064789216000051 ], [ -122.189628493999862, 38.061381840000095 ], [ -122.195142417999918, 38.061752044000102 ], [ -122.20493356299994, 38.065233034000173 ], [ -122.223570935999945, 38.065726736000059 ], [ -122.2452079789999, 38.072085631000149 ], [ -122.260887954999902, 38.069432829000121 ], [ -122.2714591659999, 38.074509308000032 ], [ -122.281674116999895, 38.086084697000061 ], [ -122.300677480999894, 38.108195570000149 ], [ -122.396519648999899, 38.153231178000155 ], [ -122.410629795999867, 38.133846197000096 ], [ -122.434130813999857, 38.123345321000059 ], [ -122.449307870999917, 38.124468515 ], [ -122.457880291999899, 38.117698999000154 ], [ -122.502317470999856, 38.113520866000144 ], [ -122.487421946999916, 38.104826882000125 ], [ -122.482488475999929, 38.076881029000063 ], [ -122.494091007999899, 38.050007846000042 ], [ -122.502724523999873, 38.031880216000118 ], [ -122.505684726999931, 38.023131408 ], [ -122.506049972999861, 38.017172177000148 ], [ -122.493456137999942, 38.012783035000083 ], [ -122.469746411999907, 38.005427059000013 ], [ -122.454241609999926, 37.997805286000087 ], [ -122.445335789999888, 37.985123056000035 ], [ -122.451239965999903, 37.980061808000144 ], [ -122.459541619999868, 37.981407048000065 ], [ -122.469221377999901, 37.982745656000148 ], [ -122.474355503999888, 37.976121863000017 ], [ -122.492543097999899, 37.969794012000037 ], [ -122.493560350999957, 37.958563544000029 ], [ -122.483713344999842, 37.948553778000061 ], [ -122.480345583999906, 37.941820138000153 ], [ -122.491667501999927, 37.935487565000031 ], [ -122.503592822999863, 37.940495312000124 ], [ -122.504221157999893, 37.934881903000118 ], [ -122.503439636999886, 37.924811732000094 ], [ -122.476231976999898, 37.915990882000173 ], [ -122.472552794999856, 37.911245787000112 ], [ -122.474290343999911, 37.90523823000008 ], [ -122.46006377899991, 37.89543694400011 ], [ -122.449003017999914, 37.893641492000157 ], [ -122.438800504999875, 37.882082590000053 ], [ -122.447949954999913, 37.873668560000127 ], [ -122.454733024999911, 37.872361174000147 ], [ -122.459462618999908, 37.871122781000068 ], [ -122.459009212999959, 37.862484926 ], [ -122.469520141999936, 37.867002837000157 ], [ -122.473341138999885, 37.874445071000153 ], [ -122.472259514999919, 37.879888759 ], [ -122.476052436999865, 37.886791545000122 ], [ -122.490135432999907, 37.893890372000143 ], [ -122.499028738999883, 37.893590149 ], [ -122.49648569599988, 37.884483468000113 ], [ -122.494742088999942, 37.877513015000076 ], [ -122.499279924999882, 37.872485288000107 ], [ -122.489308753999893, 37.864131370000067 ], [ -122.478052385999973, 37.859680785000151 ], [ -122.479767152999912, 37.853132619000164 ], [ -122.476490146999936, 37.84352103500008 ], [ -122.470391197999888, 37.831831620000017 ], [ -122.477564809999947, 37.82510439500011 ], [ -122.487840297999895, 37.825303128000044 ], [ -122.502640854999882, 37.820482206000051 ], [ -122.511796860999922, 37.824489631000134 ], [ -122.522586146999927, 37.821970017000027 ], [ -122.528425812999842, 37.816371593 ], [ -122.537954047999861, 37.82793964700015 ], [ -122.547903979999958, 37.834622633000109 ], [ -122.563690482999903, 37.848147881 ], [ -122.573698633999925, 37.855908338000134 ], [ -122.588341258999904, 37.860810405 ], [ -122.601304429999914, 37.873227615000147 ], [ -122.620730577999907, 37.877496484000133 ], [ -122.645198853999901, 37.8988159660001 ], [ -122.672391568999899, 37.906573792000088 ], [ -122.68597313699992, 37.903959004000015 ], [ -122.696670641999887, 37.899257335000115 ], [ -122.700383075999923, 37.892100954000128 ], [ -122.713182013999926, 37.900299208000078 ], [ -122.727738257999945, 37.903039615000168 ], [ -122.734204749999947, 37.920124324000128 ], [ -122.748640978999902, 37.932601282000135 ], [ -122.765348407999923, 37.937396405000143 ], [ -122.780243859999942, 37.948131095000164 ], [ -122.795998772999837, 37.975519631000012 ], [ -122.810550402999922, 37.985193801000136 ], [ -122.821432247999851, 37.997669778000059 ], [ -122.839397098999896, 38.006349484000125 ], [ -122.906843211999899, 38.031843985000037 ], [ -122.921111944999851, 38.034871294000155 ], [ -122.932695539999941, 38.049519338000138 ], [ -122.932122705999873, 38.058805503000102 ], [ -122.920142064999894, 38.065312404000068 ], [ -122.935414191999897, 38.070746161000059 ], [ -122.941558397999884, 38.064764716000141 ], [ -122.948475714999887, 38.060736395000092 ], [ -122.947099134999931, 38.054754507000112 ], [ -122.946888800999943, 38.045314846000153 ], [ -122.942494269999955, 38.041245835 ], [ -122.936085525999943, 38.030770371000031 ], [ -122.94937089799987, 38.029445705000043 ], [ -122.963376935999932, 38.02531491000012 ], [ -122.979069671999923, 38.014515591000176 ], [ -122.984027208999862, 38.003230867000028 ], [ -122.980330499999894, 37.99803906200016 ], [ -122.971765000999937, 37.996142070000062 ], [ -122.962504008999915, 37.992047822000032 ], [ -122.9742291069999, 37.990277222000188 ], [ -122.984480311999874, 37.992113214000128 ], [ -122.997547065999939, 37.993842171 ], [ -123.017815502999895, 37.993521681000132 ], [ -123.027453026999893, 37.994488745000027 ], [ -123.021621651999865, 38.000482830000024 ], [ -123.015998228999905, 38.00069532800002 ], [ -122.990726317999929, 38.048715678000164 ], [ -122.94964800599989, 38.143990916000135 ], [ -122.950285100999935, 38.16449325100011 ], [ -122.955510032999882, 38.176271984000081 ], [ -122.964945316999945, 38.182602293000102 ], [ -122.964788138999907, 38.198598197000123 ], [ -122.973839471999895, 38.208038310000134 ], [ -122.983050354999961, 38.220129478000118 ], [ -122.993230381999908, 38.229518661 ], [ -122.996296689999866, 38.242729824000108 ], [ -122.98525421899987, 38.237811760000156 ], [ -122.964816130999907, 38.217700385000128 ], [ -122.925570098999856, 38.175140664000182 ], [ -122.907277248999932, 38.152344259000031 ], [ -122.89150956899995, 38.130804755000057 ], [ -122.868763800999929, 38.110256252000042 ], [ -122.843373175999901, 38.091986395000148 ], [ -122.825672980999897, 38.072088934000149 ], [ -122.832264777999882, 38.095892645000148 ], [ -122.850431862999869, 38.110698133000184 ], [ -122.888417120999875, 38.154608466000141 ], [ -122.935536261999871, 38.215480861000074 ], [ -122.943998613999909, 38.219311254 ], [ -122.950655011999899, 38.217294762000151 ], [ -122.954336038999912, 38.231402197000151 ], [ -122.964571008999968, 38.232364285000088 ], [ -122.968815284999863, 38.237093637000058 ], [ -122.968517624999933, 38.250872761 ], [ -122.974535185999912, 38.266194223000085 ], [ -122.987116161999921, 38.277722996000179 ], [ -123.002280363999972, 38.294859195000143 ], [ -123.029521556999896, 38.312691558000054 ], [ -123.046460375999871, 38.312048445000144 ], [ -123.051696822999887, 38.30519213200013 ], [ -123.052886522999913, 38.298000393000066 ], [ -123.062439643999951, 38.295902748000159 ], [ -123.075967249999863, 38.322473087000091 ], [ -123.068387917999885, 38.346290233000119 ], [ -123.070932273999915, 38.359954194000025 ], [ -123.079044693999933, 38.372078026000153 ], [ -123.087030183999858, 38.391262379000025 ], [ -123.095810261999887, 38.395831515000069 ], [ -123.102057160999834, 38.412164286000078 ], [ -123.112759805999943, 38.420619134000034 ], [ -123.124578631999867, 38.437479288000148 ], [ -123.12872916099991, 38.449310265000108 ], [ -123.170924035999889, 38.479188398000176 ], [ -123.252657979999896, 38.510665624000112 ], [ -123.27255673499991, 38.528950711 ], [ -123.304547020999848, 38.549024209 ], [ -123.31531993099992, 38.557472947000136 ], [ -123.336979425999871, 38.567259471000128 ], [ -123.341667698999913, 38.586630594000027 ], [ -123.355994898999896, 38.59714943900012 ], [ -123.365886766999893, 38.600738471000156 ], [ -123.369487741999947, 38.612144403000016 ], [ -123.401095308999928, 38.642832421000108 ], [ -123.413981695999894, 38.666687392000185 ], [ -123.432460835999862, 38.67797137400008 ], [ -123.433606676999901, 38.686794669000122 ], [ -123.474096620999944, 38.721974557000081 ], [ -123.492457285999876, 38.736468673000118 ], [ -123.523292959999935, 38.746723986000077 ], [ -123.537643258999879, 38.772329148 ], [ -123.558845130999899, 38.782990569000091 ], [ -123.566232876999919, 38.795152085000112 ], [ -123.594170967999858, 38.805820716000184 ], [ -123.616472326999897, 38.827315014000035 ], [ -123.648306616999889, 38.849534971000182 ], [ -123.663059233999903, 38.872450691000054 ], [ -123.69756133299984, 38.900277721000137 ], [ -123.711672367999881, 38.914321002000079 ], [ -123.726242233999869, 38.918576086000158 ], [ -123.727301203999914, 38.933182959000121 ], [ -123.742606700999929, 38.955623911000046 ], [ -123.725241612999952, 38.960372251000095 ], [ -123.703928188999853, 38.990057684000121 ], [ -123.69608687399996, 39.007794611000136 ], [ -123.689076300999886, 39.027899481000148 ], [ -123.691314256999874, 39.038560289000188 ], [ -123.695150703999872, 39.059126676000105 ], [ -123.703840546999885, 39.083628436000126 ], [ -123.712882217999976, 39.106315400000156 ], [ -123.721648712999936, 39.133019342000139 ], [ -123.737795843999962, 39.14300494700008 ], [ -123.735550560999911, 39.159034120000015 ], [ -123.767850350999964, 39.19400673300008 ], [ -123.777898087999887, 39.222120515000157 ], [ -123.790543420999896, 39.269745849000131 ], [ -123.803263375999862, 39.278954003000038 ], [ -123.797474738999895, 39.29767487200003 ], [ -123.806385870999932, 39.304754950000088 ], [ -123.805997655999874, 39.324140097000154 ], [ -123.824924247999917, 39.347295592000151 ], [ -123.820568918999896, 39.405260096000077 ], [ -123.816509372999917, 39.443998058000105 ], [ -123.798638125999886, 39.490508910000031 ], [ -123.776356574999895, 39.529282945000134 ], [ -123.769768318999937, 39.544645807000094 ], [ -123.769444368999871, 39.563728211000139 ], [ -123.786827832999862, 39.596776979000182 ], [ -123.786479454999906, 39.655204622000056 ], [ -123.790376490999847, 39.666414820000071 ], [ -123.790581689999868, 39.677373737000082 ], [ -123.795967388999884, 39.691867604 ], [ -123.802934825999856, 39.702512754000153 ], [ -123.808573900999875, 39.711797943000036 ], [ -123.823816960999878, 39.717762103000055 ], [ -123.830019570999895, 39.726514178000073 ], [ -123.830555792999945, 39.741848049000126 ], [ -123.837555661999929, 39.761601771000031 ], [ -123.837275051999896, 39.782944200000045 ], [ -123.84473142599991, 39.808299108000043 ], [ -123.854018803999892, 39.833514269000105 ], [ -123.88017665999989, 39.844271305000021 ], [ -123.907720977999944, 39.865867204000139 ], [ -123.930696268999867, 39.908017810000061 ], [ -123.955554353999887, 39.924506245000188 ], [ -123.9789471939999, 39.962896153000187 ], [ -124.001239988999927, 39.978083140000152 ], [ -124.02270607499986, 40.002135431000042 ], [ -124.033457798999862, 40.01212592600011 ], [ -124.045149080999892, 40.018727169000059 ], [ -124.058520300999916, 40.023796388 ], [ -124.063327971999897, 40.022596871000147 ], [ -124.069370180999869, 40.021333145000128 ], [ -124.076052004999838, 40.027217164000078 ], [ -124.080406974999917, 40.035559707000132 ], [ -124.080480409999865, 40.059789185000099 ], [ -124.087441716999962, 40.077515373000111 ], [ -124.115793423999932, 40.107123114 ], [ -124.138251369999864, 40.11592565100004 ], [ -124.185317380999905, 40.12955148000016 ], [ -124.219996411999915, 40.165152204000137 ], [ -124.256422725999897, 40.184415136000112 ], [ -124.319377876999923, 40.224613110000163 ], [ -124.327154329999956, 40.237040215000135 ], [ -124.342581489999915, 40.24203732900007 ], [ -124.363509794999942, 40.261480937000059 ], [ -124.36013698099994, 40.281567164000066 ], [ -124.348283142999961, 40.318907378000162 ], [ -124.364777988999975, 40.344683457000187 ], [ -124.366205206999851, 40.3774507400001 ], [ -124.398109628999876, 40.415835728000062 ], [ -124.409201970999902, 40.443817665000083 ], [ -124.395959556999884, 40.465362732000145 ], [ -124.388028151999904, 40.483295 ], [ -124.38378271899991, 40.500100354000111 ], [ -124.385832023999924, 40.509515360000094 ], [ -124.369999712999928, 40.536889624000125 ], [ -124.357980923999889, 40.563055731000176 ], [ -124.349964972999942, 40.577785549000069 ], [ -124.322092251999891, 40.617377020000035 ], [ -124.31948808499989, 40.628648179000109 ], [ -124.317250128999916, 40.632066148000106 ], [ -124.314035610999866, 40.634588934000035 ], [ -124.310129360999866, 40.635484117000132 ], [ -124.305775519999955, 40.637396552000084 ], [ -124.307687954999835, 40.64158763200011 ], [ -124.311634894999912, 40.646226304000137 ], [ -124.307616336999857, 40.652825045000057 ], [ -124.292662957999937, 40.676822617000099 ], [ -124.273874767999885, 40.700047055000041 ], [ -124.252552863999881, 40.734767971000153 ], [ -124.239737672999951, 40.758709465000081 ], [ -124.230885396999895, 40.750081009000084 ], [ -124.247294416999921, 40.727912378 ], [ -124.258477221999883, 40.706882725000028 ], [ -124.259497744999948, 40.698410073000147 ], [ -124.248036261999928, 40.69326406500015 ], [ -124.234373419999926, 40.691899556000138 ], [ -124.225760097999938, 40.686123080000115 ], [ -124.22170290699988, 40.690110801000102 ], [ -124.224619919999924, 40.695202054000092 ], [ -124.22168811199991, 40.697713875 ], [ -124.213844690999935, 40.701402471 ], [ -124.213236033999934, 40.709511239 ], [ -124.221783291999969, 40.722431685000132 ], [ -124.217429072999849, 40.730717736000045 ], [ -124.220454935999925, 40.737238493000106 ], [ -124.213295901999913, 40.741851361000116 ], [ -124.20289856699992, 40.745185527000118 ], [ -124.198610158999927, 40.754424907000143 ], [ -124.201084020999886, 40.761927160000127 ], [ -124.198235360999902, 40.76904071700001 ], [ -124.191588435999904, 40.772838960000129 ], [ -124.188911896999869, 40.790574382000116 ], [ -124.182743320999904, 40.799903013000161 ], [ -124.175501801999914, 40.803561892000019 ], [ -124.163809657999906, 40.806466714000024 ], [ -124.145867579999873, 40.809648628000119 ], [ -124.136897028999897, 40.807191272000111 ], [ -124.121864672999919, 40.807383196 ], [ -124.109194910999932, 40.814151048000056 ], [ -124.087398312999923, 40.82515617000017 ], [ -124.082483318999863, 40.843501684 ], [ -124.084462042999888, 40.848374742000047 ], [ -124.093820766999912, 40.853989976000051 ], [ -124.101802063999926, 40.858443981000093 ], [ -124.108466857999915, 40.854807297 ], [ -124.118974668999897, 40.851947235000139 ], [ -124.126072932999946, 40.854001869000157 ], [ -124.131431722999949, 40.858039212000065 ], [ -124.137553855999883, 40.863946744000103 ], [ -124.151324414999905, 40.863321058000011 ], [ -124.154967697999908, 40.861727478000077 ], [ -124.156644445999902, 40.851181181000086 ], [ -124.166608250999914, 40.842159547000065 ], [ -124.170407395999931, 40.82675683300009 ], [ -124.183974688999925, 40.815662637000074 ], [ -124.193598484999939, 40.802370455000116 ], [ -124.199744790999915, 40.78485271000001 ], [ -124.223288141999959, 40.757096106000077 ], [ -124.232841118999886, 40.766642871000116 ], [ -124.216848530999869, 40.786421734000086 ], [ -124.176575122999893, 40.847754338000144 ], [ -124.133757617999933, 40.936398753000148 ], [ -124.120676392999911, 40.978954375000015 ], [ -124.11041334599993, 41.015252825000076 ], [ -124.111412218999888, 41.041660333000138 ], [ -124.11703013599994, 41.048247103000122 ], [ -124.127325767999949, 41.049531427 ], [ -124.13457304699989, 41.047949403000118 ], [ -124.142928561999881, 41.053127286000162 ], [ -124.146878394999931, 41.060165416000117 ], [ -124.149302378999849, 41.075956705000081 ], [ -124.155282821999961, 41.086811974000128 ], [ -124.16063391799986, 41.099351304000081 ], [ -124.160277542999864, 41.113563001 ], [ -124.164052832999857, 41.132220090000047 ], [ -124.162889787999902, 41.139080266000022 ], [ -124.15633162, 41.142351715000174 ], [ -124.1476906689999, 41.140948432000144 ], [ -124.143473806999864, 41.144991874000127 ], [ -124.124261811999929, 41.181808722000184 ], [ -124.113270636999914, 41.221177476 ], [ -124.090931769999884, 41.289455471000068 ], [ -124.082183397999913, 41.341782945000077 ], [ -124.067809317999959, 41.398920561000139 ], [ -124.062155357999941, 41.435875986000113 ], [ -124.076079881999917, 41.489976304000081 ], [ -124.082020636999857, 41.521470445 ], [ -124.068348761999914, 41.539252020000063 ], [ -124.078928188999868, 41.543361721000039 ], [ -124.08869381399991, 41.549139716000084 ], [ -124.096913214999901, 41.556830145 ], [ -124.103098110999881, 41.566555080000157 ], [ -124.103871222999899, 41.576117255000142 ], [ -124.102772589999944, 41.602606512000094 ], [ -124.106516079999878, 41.608099677000141 ], [ -124.114979620999918, 41.617865302000084 ], [ -124.126576300999929, 41.640082098000121 ], [ -124.139881964999859, 41.66429271000014 ], [ -124.138498501999877, 41.679754950000145 ], [ -124.145784942999867, 41.706381248000085 ], [ -124.15945881399989, 41.736674780000058 ], [ -124.177286450999958, 41.743599917 ], [ -124.187921386999889, 41.746991123 ], [ -124.196314233999942, 41.744033010000024 ], [ -124.201107462999872, 41.739305330000107 ], [ -124.232360841999949, 41.762362560000057 ], [ -124.262895183999944, 41.776427858000048 ], [ -124.26046399199987, 41.788783114000026 ], [ -124.247924115999879, 41.793873739000063 ], [ -124.233963339999931, 41.813205903 ], [ -124.218837133999912, 41.850006372000124 ], [ -124.210958501999869, 41.891009920000116 ], [ -124.202219204999835, 41.960394598 ], [ -124.203684048999889, 41.971177476000108 ], [ -124.207875128999916, 41.981512762000122 ], [ -124.216968317999914, 42.006177337000011 ], [ -124.236968295999873, 42.017502766000135 ], [ -124.260875230999972, 42.033797471000028 ], [ -124.274826146999899, 42.045386991000086 ], [ -124.293118568999972, 42.046473703000018 ], [ -124.335950542999896, 42.091502932000125 ], [ -124.350457994999957, 42.097958190000085 ], [ -124.359555776999898, 42.113002399000052 ], [ -124.354164346999937, 42.131903249000018 ], [ -124.366168682999842, 42.150060251000141 ], [ -124.36383788899991, 42.175162873000048 ], [ -124.376235288999908, 42.196647261000081 ], [ -124.379059048999878, 42.220278054000076 ], [ -124.395171678999887, 42.239447333000115 ], [ -124.41246497299997, 42.248928127000127 ], [ -124.410267706999889, 42.258856512000037 ], [ -124.409448772999895, 42.29624445600011 ], [ -124.423329230999869, 42.317816473 ], [ -124.427886522999913, 42.320013739000089 ], [ -124.432813586999899, 42.329310740000082 ], [ -124.430653449999866, 42.349554755000057 ], [ -124.426075443999892, 42.361843874000058 ], [ -124.426500488999892, 42.377280563000014 ], [ -124.427318630999906, 42.396577619000155 ], [ -124.424980115999858, 42.419888939000188 ], [ -124.439788396999859, 42.439191830000098 ], [ -124.423541867999873, 42.454090670000042 ], [ -124.422025016999868, 42.46703634100011 ], [ -124.420674997999896, 42.491004834000151 ], [ -124.406320766999897, 42.519517320000105 ], [ -124.402821417999903, 42.532904364000117 ], [ -124.394439256999945, 42.566555080000128 ], [ -124.39818109699992, 42.585520691000013 ], [ -124.403366446999883, 42.594945157000083 ], [ -124.399891262999944, 42.615729872000131 ], [ -124.408533742999865, 42.644964339000026 ], [ -124.414540167999903, 42.662420966000141 ], [ -124.426177537999905, 42.671535549000126 ], [ -124.440907355999897, 42.678045966000028 ], [ -124.45441646999987, 42.686916408000073 ], [ -124.4667862619999, 42.702541408000158 ], [ -124.472927172999874, 42.730308576000155 ], [ -124.491819768999861, 42.73775836099999 ], [ -124.505482550999943, 42.736517645 ], [ -124.515004035999937, 42.748724677000084 ], [ -124.532053188999896, 42.803941148 ], [ -124.538889126999919, 42.816229559000064 ], [ -124.549387173999889, 42.825588283000073 ], [ -124.566761847999956, 42.833970445000048 ], [ -124.547718878999973, 42.845445054 ], [ -124.492447269999914, 42.929836294000054 ], [ -124.463672069999902, 42.993043181000033 ], [ -124.454253709999904, 43.011297919000114 ], [ -124.444883423999897, 43.029999070000045 ], [ -124.437463643999891, 43.05612324800002 ], [ -124.434702855999902, 43.07494314000003 ], [ -124.424445186999918, 43.119290092000156 ], [ -124.416151450999905, 43.125484449000041 ], [ -124.418485244999914, 43.14215128400015 ], [ -124.386612238999902, 43.263099067000141 ], [ -124.395136740999916, 43.3000737710001 ], [ -124.401323790999896, 43.31009613200014 ], [ -124.385374903999931, 43.330158249000092 ], [ -124.37650426599987, 43.340228799000144 ], [ -124.359867444999921, 43.34227740900009 ], [ -124.342123057999913, 43.352103755000158 ], [ -124.329455151999895, 43.348814444000155 ], [ -124.325971677999888, 43.338664408000014 ], [ -124.326407535999891, 43.312252094000101 ], [ -124.316514217999867, 43.299832471000045 ], [ -124.312873162999864, 43.309006546000049 ], [ -124.308283600999914, 43.327877757000138 ], [ -124.311817510999916, 43.338662644000138 ], [ -124.308707548999905, 43.354911278000131 ], [ -124.300559924999902, 43.36366093200003 ], [ -124.287342902999924, 43.370591539000046 ], [ -124.27619381399991, 43.39394765800013 ], [ -124.252756313999839, 43.417466539000102 ], [ -124.232873571999917, 43.424081451000134 ], [ -124.222315015999911, 43.42519798900004 ], [ -124.217993791999859, 43.416376566000068 ], [ -124.218632955999894, 43.402150876000135 ], [ -124.218238788999969, 43.386041811000055 ], [ -124.212873321999851, 43.374680932000032 ], [ -124.200377952999901, 43.373951905000084 ], [ -124.177776550999923, 43.369160233000017 ], [ -124.151844855999897, 43.369452216000028 ], [ -124.140034925999913, 43.375348974000062 ], [ -124.16974219099987, 43.37983307399999 ], [ -124.186671728999869, 43.391327923000105 ], [ -124.190469718999879, 43.405345899000068 ], [ -124.194327773999888, 43.420008847000034 ], [ -124.208610915999955, 43.43095956100008 ], [ -124.207025758999904, 43.44325738900001 ], [ -124.197621222999899, 43.452460028000118 ], [ -124.208698239999904, 43.452189747000133 ], [ -124.233131949999887, 43.447236190000169 ], [ -124.240191894999867, 43.436624843000132 ], [ -124.262399065999929, 43.426615851000051 ], [ -124.277027482999884, 43.421454885000131 ], [ -124.283457824999914, 43.403115965000055 ], [ -124.325282615999896, 43.362537133000117 ], [ -124.335229283999908, 43.365316424000056 ], [ -124.298029297999861, 43.417925605000065 ], [ -124.237903173999953, 43.547115862000012 ], [ -124.223465990999927, 43.586431329000121 ], [ -124.215687628999916, 43.627386786000116 ], [ -124.209787755999898, 43.656630134000139 ], [ -124.202283232999903, 43.662761227000104 ], [ -124.174686291999933, 43.672995449000112 ], [ -124.161712840999954, 43.688384319000093 ], [ -124.154449022999884, 43.698472398 ], [ -124.149322068999879, 43.711900132000082 ], [ -124.141835089999901, 43.721625067000119 ], [ -124.139812165999857, 43.733105799000114 ], [ -124.132854216999874, 43.734687380000153 ], [ -124.126168108999906, 43.728526572000035 ], [ -124.116585106999892, 43.710934713000043 ], [ -124.109017972999951, 43.706116866000016 ], [ -124.072499152999853, 43.704738674000126 ], [ -124.070218166999865, 43.711661445000132 ], [ -124.085539362999853, 43.71292483800012 ], [ -124.101270952999954, 43.718667316000094 ], [ -124.115210799999957, 43.73542805600006 ], [ -124.128533274999938, 43.749085285000049 ], [ -124.148814088999941, 43.747587557000102 ], [ -124.160475241999876, 43.736747354000059 ], [ -124.16144771999987, 43.717718817000119 ], [ -124.171514853999895, 43.697602817000146 ], [ -124.190834642999874, 43.684523422000112 ], [ -124.202945415999892, 43.680772710000113 ], [ -124.191724034999922, 43.717362788000159 ], [ -124.176018417999842, 43.762476774000064 ], [ -124.151031053999887, 43.88174062700007 ], [ -124.144747337999902, 43.943211167000086 ], [ -124.139881964999859, 43.982001044000143 ], [ -124.137196417999888, 43.990423895 ], [ -124.124256964999873, 43.996242580000072 ], [ -124.119455532999893, 44.006496486000103 ], [ -124.13341874299995, 44.03201655800008 ], [ -124.133540939999946, 44.044255746000047 ], [ -124.126128709999932, 44.099554755000057 ], [ -124.113945796999914, 44.190582723 ], [ -124.114084438999839, 44.249009507000082 ], [ -124.107248501999905, 44.286322333000115 ], [ -124.108143683999899, 44.29238515800013 ], [ -124.113596157999851, 44.301459052000112 ], [ -124.114084438999839, 44.307359117000075 ], [ -124.111480272999927, 44.313299872000087 ], [ -124.103098110999881, 44.322333075000088 ], [ -124.100412563999896, 44.327297268000152 ], [ -124.088843906999884, 44.385444965000048 ], [ -124.084427140999935, 44.411664499 ], [ -124.071888800999901, 44.421820380000085 ], [ -124.065309793999916, 44.429489071000077 ], [ -124.053551799999866, 44.432975382000151 ], [ -124.04523922899989, 44.425275988000081 ], [ -124.034977091999892, 44.416174158 ], [ -124.017893032999893, 44.409816799000154 ], [ -124.027615818999848, 44.439216139000038 ], [ -124.039337129999865, 44.443445670000031 ], [ -124.049612483999894, 44.448695878000038 ], [ -124.0682391389999, 44.437885694000087 ], [ -124.076080504999879, 44.43334357200014 ], [ -124.083433705999894, 44.427752110000156 ], [ -124.082753058999884, 44.440863348000065 ], [ -124.081434107999911, 44.462361753000025 ], [ -124.084352013999933, 44.498066040000126 ], [ -124.063193965999901, 44.609519519000131 ], [ -124.052607261999881, 44.618212423000145 ], [ -124.045663028999869, 44.621499811 ], [ -124.031134927999872, 44.617959933000023 ], [ -124.023214752999948, 44.611366461 ], [ -124.020248710999937, 44.606894260000061 ], [ -124.012020071999885, 44.599835351000181 ], [ -124.009690771999885, 44.60994500700015 ], [ -124.004754946999881, 44.61629137000007 ], [ -124.006706659999892, 44.623814005000085 ], [ -124.018883439999854, 44.627120086000062 ], [ -124.023189319999886, 44.623125955 ], [ -124.02715573499988, 44.622424241000104 ], [ -124.035080395999913, 44.625724517000052 ], [ -124.048294225999882, 44.632554954000156 ], [ -124.055899729999894, 44.626682131000067 ], [ -124.068138344999909, 44.61775280300013 ], [ -124.070778498999871, 44.620576774000099 ], [ -124.067458316999961, 44.632099257 ], [ -124.062829990999901, 44.640552046000053 ], [ -124.059185536999891, 44.651588654000179 ], [ -124.057844017999912, 44.663580183000178 ], [ -124.062787567999948, 44.671820262000111 ], [ -124.074686724999935, 44.672797201000108 ], [ -124.077992039999856, 44.674916636000049 ], [ -124.072364547999911, 44.678909749000141 ], [ -124.067063010999846, 44.689451505000093 ], [ -124.058420376999905, 44.726141669000143 ], [ -124.059437628999973, 44.7462425800001 ], [ -124.065261040999872, 44.76370249300011 ], [ -124.073374301999877, 44.777653192000045 ], [ -124.066562111999872, 44.805527790000056 ], [ -124.065184793999961, 44.823311082000188 ], [ -124.053639608999859, 44.83869852100004 ], [ -124.046498175999957, 44.858384507000054 ], [ -124.034535285999937, 44.878404039000102 ], [ -124.032704230999869, 44.897365627000042 ], [ -124.031849738999952, 44.904852606000091 ], [ -124.024484829999864, 44.909735419000143 ], [ -124.017689581999932, 44.916571356000176 ], [ -124.018204259999891, 44.927495878000073 ], [ -124.025646594999898, 44.935661944000017 ], [ -124.024484829999864, 44.943833726000079 ], [ -124.015004035999951, 44.967718817000147 ], [ -124.011341925999901, 44.997707424000012 ], [ -124.004790818999922, 45.043524481000091 ], [ -124.015736456999889, 45.054429429000081 ], [ -124.01414954299986, 45.064276434000092 ], [ -124.004221157999865, 45.082586981000148 ], [ -123.984364386999857, 45.104925848000093 ], [ -123.97691809799997, 45.128851630000057 ], [ -123.971099412999919, 45.153713283000101 ], [ -123.970590484999903, 45.167292770000032 ], [ -123.969176529999885, 45.186056690000115 ], [ -123.969122348999932, 45.205299804000063 ], [ -123.976389126999891, 45.216620184000035 ], [ -123.968356325999878, 45.250513705000074 ], [ -123.965443488999924, 45.25844961100016 ], [ -123.962077922999896, 45.279364813000157 ], [ -123.9603572259999, 45.299994208000143 ], [ -123.97191321499993, 45.331447658000073 ], [ -123.987660285999894, 45.336371161000116 ], [ -124.001779751999919, 45.337632554000137 ], [ -124.001779751999919, 45.344468492000047 ], [ -123.981027798999918, 45.349595445000077 ], [ -123.972767706999932, 45.362005927 ], [ -123.970204230999926, 45.378607489000061 ], [ -123.967844204999878, 45.391791083 ], [ -123.964466925999943, 45.402533270000035 ], [ -123.96117102799991, 45.409165757 ], [ -123.957875128999973, 45.414984442000119 ], [ -123.953358527999924, 45.41339752800009 ], [ -123.955474412999934, 45.40924713700015 ], [ -123.960804816999897, 45.378607489000061 ], [ -123.944243943999936, 45.389349677000055 ], [ -123.931955532999879, 45.405422268000152 ], [ -123.918446417999903, 45.417669989000032 ], [ -123.954701300999915, 45.43280670800003 ], [ -123.971099412999919, 45.451971747000172 ], [ -123.970529751999948, 45.494452216000141 ], [ -123.958607550999915, 45.516058661000145 ], [ -123.954335089999901, 45.548407294000143 ], [ -123.948801235999881, 45.557196356000034 ], [ -123.945668097999899, 45.525702216000113 ], [ -123.939198370999904, 45.499823309000092 ], [ -123.921930040999925, 45.494906973000113 ], [ -123.912876477999916, 45.48333597400007 ], [ -123.890533006999959, 45.475490627000127 ], [ -123.894220266999866, 45.482310798000086 ], [ -123.891423713999941, 45.488073026000066 ], [ -123.886613417999925, 45.493355896000097 ], [ -123.883287068999863, 45.500090489000101 ], [ -123.885347309999887, 45.507305306000106 ], [ -123.889291088999869, 45.519814741000133 ], [ -123.897487316999914, 45.524637883000153 ], [ -123.900502081999946, 45.538478908000158 ], [ -123.896066860999881, 45.560288804000109 ], [ -123.925200975999942, 45.554266669000086 ], [ -123.94798743399987, 45.568752346000153 ], [ -123.957875128999973, 45.576157945000134 ], [ -123.952250697999915, 45.59106385500003 ], [ -123.944581272999955, 45.621341006000151 ], [ -123.941875791999919, 45.648504864000088 ], [ -123.920732285999946, 45.662663219000038 ], [ -123.921595457999871, 45.683725751000068 ], [ -123.918229469999901, 45.689566336000055 ], [ -123.910301481999852, 45.691279813000094 ], [ -123.901518057999908, 45.687109308000075 ], [ -123.893312852999927, 45.68362677100005 ], [ -123.887428465999861, 45.682923249000012 ], [ -123.879546678999901, 45.686509507 ], [ -123.871083136999871, 45.69790273600016 ], [ -123.877186652999853, 45.696112372000172 ], [ -123.88166256399991, 45.695461330000043 ], [ -123.885894334999932, 45.694037177000055 ], [ -123.897322716999881, 45.695764312000151 ], [ -123.903615831999929, 45.700988709000129 ], [ -123.908009918999966, 45.708268126000078 ], [ -123.917432518999945, 45.704483054000079 ], [ -123.921039154999846, 45.697195406000063 ], [ -123.930344156999865, 45.693442533000066 ], [ -123.932365676999893, 45.681688915000123 ], [ -123.932415244999902, 45.668548308000155 ], [ -123.937879725999863, 45.660603523000148 ], [ -123.939361131999959, 45.667669989000061 ], [ -123.937408006999917, 45.698960679000109 ], [ -123.941677188999918, 45.72695436100004 ], [ -123.947577910999911, 45.735955403000148 ], [ -123.963928901999935, 45.74386924900007 ], [ -123.969298909999893, 45.7529401500001 ], [ -123.967767236999904, 45.760931776000078 ], [ -123.972239220999896, 45.762629693000136 ], [ -123.981138639999941, 45.760293748000052 ], [ -123.982152080999953, 45.767769414000057 ], [ -123.968375836999897, 45.781578289000052 ], [ -123.966664191999939, 45.79596588700015 ], [ -123.959136522999884, 45.815659898000106 ], [ -123.956613735999881, 45.873236395000092 ], [ -123.959706183999856, 45.89728424700003 ], [ -123.969715949999937, 45.918605861000074 ], [ -123.990549282999922, 45.937933661000031 ], [ -123.982329881999917, 45.948065497000144 ], [ -123.97288977799991, 45.952704169000086 ], [ -123.964292691999916, 45.966935428000127 ], [ -123.951091371999922, 45.972263102000156 ], [ -123.933990037999905, 45.979681708000058 ], [ -123.928456183999884, 45.992580471000068 ], [ -123.923329230999883, 46.013983466000113 ], [ -123.928402351999878, 46.037246131000089 ], [ -123.936841735999863, 46.081831258000037 ], [ -123.950632813999903, 46.11999888000004 ], [ -123.990467902999939, 46.200506903000061 ], [ -124.022664426999881, 46.230841603000144 ], [ -124.017339970999871, 46.235432913000139 ], [ -124.002717579999882, 46.237717669000105 ], [ -123.988130878999925, 46.226665894000135 ], [ -123.994790473999913, 46.22024085000011 ], [ -123.984855898999939, 46.210117 ], [ -123.968916763999886, 46.210555304000039 ], [ -123.95100432, 46.205014584000153 ], [ -123.923835320999913, 46.190721390000149 ], [ -123.915910672999885, 46.180595906000079 ], [ -123.910595386999915, 46.181506366000107 ], [ -123.903962625999839, 46.180113614000064 ], [ -123.900694775999909, 46.168617977000153 ], [ -123.880803580999896, 46.163980793000164 ], [ -123.866932745999918, 46.159857489000061 ], [ -123.835029830999929, 46.16249077200014 ], [ -123.825116494999932, 46.15694823500003 ], [ -123.818543148999879, 46.147280542000104 ], [ -123.813303188999839, 46.127752997000087 ], [ -123.812489386999928, 46.114162502000127 ], [ -123.798736131999902, 46.102443752000127 ], [ -123.800282355999855, 46.115790106000148 ], [ -123.801443721999931, 46.130231826000013 ], [ -123.800647149999932, 46.143553333000014 ], [ -123.778309699999937, 46.137152411 ], [ -123.778309699999937, 46.143377997000144 ], [ -123.786936001999933, 46.149562893000123 ], [ -123.806996222999899, 46.167547919000171 ], [ -123.816151495999875, 46.171332098 ], [ -123.827015753999959, 46.17206452000012 ], [ -123.843584157999928, 46.17308541600012 ], [ -123.850194324999919, 46.177239581000109 ], [ -123.860798490999883, 46.180941651000083 ], [ -123.86541879699989, 46.186467798000095 ], [ -123.856105166999868, 46.189204857000064 ], [ -123.836169952999853, 46.190077064000135 ], [ -123.820891454999938, 46.189578636000093 ], [ -123.798085089999859, 46.193548895000063 ], [ -123.778739653999892, 46.201386179000153 ], [ -123.766770687999895, 46.204106413000076 ], [ -123.754877025999903, 46.195794868000078 ], [ -123.736683722999956, 46.178168036000116 ], [ -123.727188914999957, 46.170422303000137 ], [ -123.705953207999897, 46.170805465000129 ], [ -123.614084438999853, 46.186468817 ], [ -123.599476691999925, 46.191839911000059 ], [ -123.62011446699988, 46.196644268000014 ], [ -123.620594855999926, 46.204820054000052 ], [ -123.607411261999886, 46.209051825000145 ], [ -123.581513746999931, 46.206572937000047 ], [ -123.564929028999941, 46.216555456 ], [ -123.542075616999895, 46.226154037000143 ], [ -123.536591355999889, 46.233973263000095 ], [ -123.519273185999879, 46.23526921600002 ], [ -123.497141079999906, 46.232814846000068 ], [ -123.484934048999932, 46.230047919000114 ], [ -123.473143295999932, 46.217489289000085 ], [ -123.45285927399992, 46.207223568000146 ], [ -123.437154073999878, 46.198321919000094 ], [ -123.43198949, 46.187278527000117 ], [ -123.430141898999935, 46.176723919 ], [ -123.421050584999918, 46.169134833 ], [ -123.405911419999896, 46.158253584000036 ], [ -123.38552092199987, 46.146183099 ], [ -123.325961380999857, 46.138886428000049 ], [ -123.299379165999923, 46.140992194000106 ], [ -123.277640681999927, 46.133941233000158 ], [ -123.256438867999918, 46.133321197 ], [ -123.23330644399995, 46.137152411 ], [ -123.2210308249999, 46.147285974000042 ], [ -123.205540394999858, 46.164614052000061 ], [ -123.193427997999891, 46.172330970000147 ], [ -123.180094812999911, 46.179102095000033 ], [ -123.180732522999918, 46.180027920000086 ], [ -123.207517995999879, 46.178363375000018 ], [ -123.247501756999867, 46.162626751000047 ], [ -123.269446005999839, 46.150414766 ], [ -123.297938515999917, 46.151544598000143 ], [ -123.32886597299985, 46.165555505000057 ], [ -123.393361813999903, 46.204137166000024 ], [ -123.412388732999901, 46.22029463600002 ], [ -123.427441404999868, 46.239288553000122 ], [ -123.444488553999932, 46.257781878000131 ], [ -123.455676105999927, 46.267044338000105 ], [ -123.478911912999919, 46.275864976000108 ], [ -123.603179490999963, 46.260077216000141 ], [ -123.662668423999904, 46.270249742000104 ], [ -123.667347785999908, 46.276841539000159 ], [ -123.669992641999897, 46.285589911000059 ], [ -123.6752009759999, 46.294256903000147 ], [ -123.692967461999885, 46.305202251000182 ], [ -123.701925194999944, 46.303349998000144 ], [ -123.71598445799988, 46.301464791000015 ], [ -123.723861920999923, 46.300325281000156 ], [ -123.726189183999921, 46.290234704000156 ], [ -123.735196355999904, 46.287934032000024 ], [ -123.747532741999933, 46.291080304000118 ], [ -123.752087593999946, 46.286005474000078 ], [ -123.757743441999935, 46.277518513000061 ], [ -123.764512917999866, 46.27326731 ], [ -123.777984049999901, 46.274084521000034 ], [ -123.790861116999892, 46.282992720000109 ], [ -123.806582777999878, 46.28339623 ], [ -123.8150429169999, 46.275311884000175 ], [ -123.81844384399993, 46.268761542000064 ], [ -123.834163609999848, 46.26875901800004 ], [ -123.841499900999878, 46.261434281000092 ], [ -123.851041267999918, 46.25984635500005 ], [ -123.854452098999872, 46.252129641000082 ], [ -123.862322906999893, 46.248653170000026 ], [ -123.873033488999866, 46.240171721000124 ], [ -123.889855052999906, 46.242147971000023 ], [ -123.90779618299986, 46.246460680000084 ], [ -123.925174298999949, 46.251540584000011 ], [ -123.939730065999925, 46.264383621000135 ], [ -123.948696046999885, 46.269835381000107 ], [ -123.96714923299993, 46.294315797000039 ], [ -123.973332682999867, 46.299781951000128 ], [ -123.985091096999852, 46.309097120000118 ], [ -124.009303808999846, 46.313455506000039 ], [ -124.022801132999916, 46.314253055000123 ], [ -124.032936245999878, 46.306109120000158 ], [ -124.040251926999886, 46.304178006000157 ], [ -124.048695005999917, 46.296418351000014 ], [ -124.051511365999886, 46.285929945000035 ], [ -124.040301877999937, 46.280974500000085 ], [ -124.038063928999861, 46.276704709000128 ], [ -124.041438644999928, 46.272828002 ], [ -124.052102995999903, 46.273611769000112 ], [ -124.06164186799991, 46.276722254000063 ], [ -124.071192894999868, 46.271295533000128 ], [ -124.075835740999878, 46.268296617000047 ], [ -124.080174877999909, 46.271687954000086 ], [ -124.078358527999896, 46.282375393 ], [ -124.077341676999964, 46.294966302000134 ], [ -124.072836102999943, 46.306992604000172 ], [ -124.068885861999945, 46.322898341000112 ], [ -124.06605768999988, 46.338806523000173 ], [ -124.063790138999934, 46.356267144000142 ], [ -124.062068435999947, 46.38770537700016 ], [ -124.060857095999907, 46.439870820000138 ], [ -124.062611456999932, 46.59593333500014 ], [ -124.072499561999891, 46.642510042000097 ], [ -124.062876105999891, 46.654940829000012 ], [ -124.051007426999931, 46.645602075000127 ], [ -124.035760036999932, 46.630818343000115 ], [ -124.044097459999918, 46.623602606000034 ], [ -124.038319464999873, 46.60761139500012 ], [ -124.025624152999896, 46.590887762000094 ], [ -124.017893032999893, 46.568548895000063 ], [ -124.026234503999959, 46.492336330000015 ], [ -124.024728969999913, 46.465521552000112 ], [ -124.022050881999917, 46.41966609400005 ], [ -124.014251108999915, 46.385118637000076 ], [ -123.993445857999859, 46.380099189000092 ], [ -123.977701361999848, 46.382444289000048 ], [ -123.958119269999926, 46.378241278000118 ], [ -123.947880384999891, 46.403004590000094 ], [ -123.932024378999898, 46.415282599000179 ], [ -123.926863660999928, 46.440099665000091 ], [ -123.920678164999913, 46.439314680000152 ], [ -123.910602091999948, 46.428439955 ], [ -123.875890266999889, 46.419120292000102 ], [ -123.846547003999945, 46.396633205000157 ], [ -123.84064693899991, 46.415757554000137 ], [ -123.856760219999884, 46.426459052000055 ], [ -123.880686001999933, 46.433498440000122 ], [ -123.898060675999915, 46.44163646000014 ], [ -123.900217251999919, 46.446682033000073 ], [ -123.901682094999884, 46.457342841000113 ], [ -123.904896613999938, 46.459377346000124 ], [ -123.910511847999942, 46.460679429000137 ], [ -123.917713995999875, 46.464056708000058 ], [ -123.924387173999932, 46.468451239000117 ], [ -123.935825431999888, 46.472311290000121 ], [ -123.935741860999897, 46.480457471000094 ], [ -123.935170050999929, 46.494696356000148 ], [ -123.922111857999965, 46.502552018000173 ], [ -123.908029751999919, 46.508286851000108 ], [ -123.900705532999908, 46.513373114000146 ], [ -123.896351691999911, 46.521226304000109 ], [ -123.894927537999948, 46.531317450000088 ], [ -123.896351691999911, 46.544419664000046 ], [ -123.899810350999914, 46.551174221000096 ], [ -123.904204881999902, 46.555609442000062 ], [ -123.920318162999877, 46.58071523600016 ], [ -123.944732225999914, 46.605902411000116 ], [ -123.956410285999922, 46.62311432500006 ], [ -123.938547329999864, 46.619859117000019 ], [ -123.911040818999922, 46.605414130000142 ], [ -123.894927537999948, 46.602728583000058 ], [ -123.915882941999897, 46.628404039000102 ], [ -123.922515428999958, 46.657863674000012 ], [ -123.91100012899993, 46.682033596000011 ], [ -123.877268032999837, 46.692084052 ], [ -123.843413865999963, 46.696682033000016 ], [ -123.826486782999893, 46.69236888200011 ], [ -123.819203253999959, 46.674994208000143 ], [ -123.811879035999965, 46.662583726000108 ], [ -123.795074022999955, 46.660874742000104 ], [ -123.776478644999955, 46.667181708000143 ], [ -123.763986782999851, 46.678412177000055 ], [ -123.79572506399991, 46.681952216000028 ], [ -123.818348761999871, 46.697699286000088 ], [ -123.839751756999917, 46.717433986000017 ], [ -123.86766516799986, 46.733058986000103 ], [ -123.883615688999868, 46.737494208000086 ], [ -123.899996272999928, 46.747406449000081 ], [ -123.912232280999916, 46.741022853000104 ], [ -123.913002165999842, 46.727768694000147 ], [ -123.951785553999898, 46.724833801000059 ], [ -123.976128826999854, 46.741054508000147 ], [ -123.98195567199987, 46.720438247000075 ], [ -123.974817696999907, 46.711102134000058 ], [ -123.963346041999841, 46.707162427000142 ], [ -123.972697566999898, 46.701262049 ], [ -123.987760147999893, 46.705704115000103 ], [ -124.000680798999852, 46.705712031000033 ], [ -124.014322856999897, 46.71065279 ], [ -124.025089946999927, 46.712628140000035 ], [ -124.029855923999918, 46.720160223000093 ], [ -124.070325420999865, 46.734812839000185 ], [ -124.093378958999864, 46.743228390000141 ], [ -124.100599022999873, 46.761477808000123 ], [ -124.10130774599989, 46.808661200000088 ], [ -124.114084438999839, 46.849107164000046 ], [ -124.130482550999929, 46.885972398000106 ], [ -124.126820441999882, 46.898504950000117 ], [ -124.111781545999904, 46.912325889000115 ], [ -124.090878992999876, 46.900013011000013 ], [ -124.097564256999945, 46.87787506700009 ], [ -124.077381964999915, 46.858791408000016 ], [ -124.072499152999853, 46.842922268000066 ], [ -124.058094855999883, 46.844468492000104 ], [ -124.042062954999892, 46.83978913 ], [ -124.028391079999864, 46.833970445000048 ], [ -124.021311001999905, 46.832342841000028 ], [ -124.013824022999927, 46.842474677000084 ], [ -124.014719204999835, 46.851141669000171 ], [ -124.021392381999888, 46.859849351000051 ], [ -124.031564907999837, 46.870266018000152 ], [ -124.057045040999895, 46.862085883000091 ], [ -124.054870351999895, 46.875872612000038 ], [ -124.04692793, 46.891135833000035 ], [ -124.033225867999946, 46.898024456000044 ], [ -124.006703253999973, 46.899237372000059 ], [ -123.991932745999904, 46.903753973 ], [ -123.962635870999875, 46.918036200000088 ], [ -123.881692947999852, 46.941664439000036 ], [ -123.813059048999889, 46.958970445000105 ], [ -123.828109657999875, 46.965226545000021 ], [ -123.844708923999917, 46.960842987000049 ], [ -123.867909308999899, 46.969631252000156 ], [ -123.950101256999886, 46.968401732000117 ], [ -123.955865493999866, 46.97234962 ], [ -123.945031734999915, 46.972831167000052 ], [ -123.922271287999919, 46.980129299000041 ], [ -123.965218484999866, 46.98418469400012 ], [ -124.012883726999931, 46.983726117000103 ], [ -124.019364052999919, 46.994076730000032 ], [ -124.012835579999944, 47.009348397000011 ], [ -124.027699347999913, 47.028143622000115 ], [ -124.046758818999947, 47.03302514700006 ], [ -124.065546335999855, 47.037470540000086 ], [ -124.090120937999941, 47.040932334000061 ], [ -124.116869937999923, 47.042916937000044 ], [ -124.139277389999847, 47.035527027000128 ], [ -124.148182745999932, 47.024400132000082 ], [ -124.146107550999915, 47.017238674000126 ], [ -124.1367081369999, 47.001898505 ], [ -124.137069078999914, 46.987208957000135 ], [ -124.13850473999986, 46.977351428000034 ], [ -124.136599385999958, 46.96794288100007 ], [ -124.130811874999907, 46.956765767000135 ], [ -124.123582245999913, 46.946574410000139 ], [ -124.11105931599991, 46.947995956000071 ], [ -124.104797280999961, 46.944707092000087 ], [ -124.105760020999938, 46.933421287000115 ], [ -124.122133408999858, 46.941310025000021 ], [ -124.138029463999885, 46.944596455000081 ], [ -124.148142335999879, 46.942620579 ], [ -124.153436551999874, 46.93801598000006 ], [ -124.153427676999939, 46.930123993000066 ], [ -124.163056340999916, 46.927489121000107 ], [ -124.17846065799985, 46.925506828000138 ], [ -124.175588053999945, 46.935704037000093 ], [ -124.176421678999901, 46.942613023000106 ], [ -124.175648566999882, 46.953843492000104 ], [ -124.172286001999936, 46.981426811000105 ], [ -124.171892320999859, 47.041948537000124 ], [ -124.174336137999916, 47.066607596000111 ], [ -124.179269985999852, 47.106878973000093 ], [ -124.199834843999909, 47.187479798000041 ], [ -124.211707435999926, 47.226638046000048 ], [ -124.227544376999859, 47.263167618000026 ], [ -124.242932187999941, 47.290078656 ], [ -124.253693171999913, 47.301540153000118 ], [ -124.275983768999936, 47.30262840799999 ], [ -124.280547912999921, 47.312692828000152 ], [ -124.299256539999874, 47.348204633000151 ], [ -124.286852923999888, 47.347376462000014 ], [ -124.278321126999884, 47.341959149000147 ], [ -124.271717902999853, 47.34259674700003 ], [ -124.283091526999883, 47.351234052000066 ], [ -124.308364067999904, 47.352668881000127 ], [ -124.317807932999884, 47.357351183000119 ], [ -124.348696084999929, 47.499752570000069 ], [ -124.350819464999944, 47.546820380000085 ], [ -124.374887200999922, 47.607688120000049 ], [ -124.383606373999882, 47.636016697000073 ], [ -124.410781607999866, 47.688183549000101 ], [ -124.41583523199985, 47.725587044000022 ], [ -124.422759568999894, 47.741888739000117 ], [ -124.435414191999953, 47.744452216000056 ], [ -124.44676673099994, 47.750392971000068 ], [ -124.455881313999839, 47.761786200000031 ], [ -124.47656569, 47.778254609000086 ], [ -124.483469204999849, 47.812933661 ], [ -124.541612179999888, 47.834331149000107 ], [ -124.556264611999879, 47.853682102 ], [ -124.567982550999886, 47.869696356000148 ], [ -124.593132931999932, 47.876199526000065 ], [ -124.60950710599991, 47.874855198000049 ], [ -124.638130105999849, 47.907864261000086 ], [ -124.656158006999888, 47.954006252000127 ], [ -124.671986456999917, 47.990708726000051 ], [ -124.683216925999915, 48.027818101000051 ], [ -124.693846940999975, 48.074530328000051 ], [ -124.689442511999886, 48.100165106000119 ], [ -124.722971157999922, 48.150091864000061 ], [ -124.73460723799991, 48.170403604000157 ], [ -124.71923587799985, 48.176295765000148 ], [ -124.700066285999867, 48.191858653000153 ], [ -124.689442511999886, 48.213446356000091 ], [ -124.689768032999908, 48.218898830000128 ], [ -124.694935675999901, 48.225572007 ], [ -124.705516511999889, 48.245979080000055 ], [ -124.703627259999891, 48.249854586000097 ], [ -124.689133067999947, 48.25250801 ], [ -124.682478490999927, 48.263499821000053 ], [ -124.683216925999915, 48.284735419000114 ], [ -124.679839647999898, 48.293687242000132 ], [ -124.664906378999945, 48.309068101000079 ], [ -124.661488410999937, 48.319525458000058 ], [ -124.670536563999946, 48.32416871300002 ], [ -124.669677649999926, 48.33318756000007 ], [ -124.678419099999871, 48.335084342000172 ], [ -124.689108792999889, 48.337616058000108 ], [ -124.702815186999942, 48.347202089000135 ], [ -124.718251105999911, 48.357367255 ], [ -124.730255571999919, 48.371578287000048 ], [ -124.72752846799996, 48.387727740000102 ], [ -124.696517970999906, 48.391086445 ], [ -124.661576058999913, 48.38603691200008 ], [ -124.638159990999839, 48.383001168000177 ], [ -124.619554954999842, 48.36891544800001 ], [ -124.607974310999907, 48.36632591200005 ], [ -124.593366725999914, 48.374856146000027 ], [ -124.574893906999932, 48.370407625 ], [ -124.532072339999885, 48.349909919000183 ], [ -124.457997199999937, 48.316839911000088 ], [ -124.399213986999939, 48.293579925000031 ], [ -124.346831834999961, 48.281073309000149 ], [ -124.33763587099989, 48.277044989000089 ], [ -124.296342400999904, 48.261545235000156 ], [ -124.274006837999877, 48.257051258000118 ], [ -124.250846252999906, 48.262899088 ], [ -124.227650519999941, 48.258530992000075 ], [ -124.15980255, 48.232662017000095 ], [ -124.111414280999881, 48.215931080000175 ], [ -124.099840942999933, 48.200472681000022 ], [ -124.05018191899984, 48.177263026000062 ], [ -123.997077274999938, 48.172693967000114 ], [ -123.970991385999952, 48.16559843600011 ], [ -123.943948357999901, 48.165543337000159 ], [ -123.918833130999928, 48.162276740000081 ], [ -123.873425222999856, 48.161551778000145 ], [ -123.861883532999855, 48.15639424600009 ], [ -123.818339231999886, 48.160775417000124 ], [ -123.788889126999891, 48.153143622000144 ], [ -123.742020506999836, 48.159914921000151 ], [ -123.700343728999925, 48.164910696000149 ], [ -123.64169479499995, 48.15119169200004 ], [ -123.633872895999886, 48.141447099000132 ], [ -123.58459962099991, 48.135416810000081 ], [ -123.56703737599986, 48.146934193 ], [ -123.552393456999965, 48.151362185000025 ], [ -123.535028430999887, 48.145464750000102 ], [ -123.523616923999924, 48.135099750000123 ], [ -123.505482550999972, 48.132635809000092 ], [ -123.475606090999861, 48.133607361000102 ], [ -123.435895825999864, 48.142407182000071 ], [ -123.41850625299989, 48.142302973000156 ], [ -123.405021835999918, 48.138998371000028 ], [ -123.4263017439999, 48.137192149000057 ], [ -123.440835693999944, 48.134055426000046 ], [ -123.453428629999877, 48.131548650000028 ], [ -123.449660626999858, 48.125108759000014 ], [ -123.421734170999898, 48.117827898000044 ], [ -123.357998639999863, 48.117422337000065 ], [ -123.322326178999901, 48.11461325100008 ], [ -123.287461243999886, 48.118216558000043 ], [ -123.246926722999888, 48.11533374599999 ], [ -123.223622199999909, 48.122015692000062 ], [ -123.17060080399996, 48.164374279000171 ], [ -123.150033294999858, 48.177102253000086 ], [ -123.108250514999881, 48.183837639000117 ], [ -123.118024334999888, 48.17940744400012 ], [ -123.130721701999846, 48.173711893000061 ], [ -123.144471236999905, 48.163508263 ], [ -123.161284959999932, 48.151922919000057 ], [ -123.145713754999861, 48.151269930000112 ], [ -123.11180940699991, 48.149027503000113 ], [ -123.089182094999913, 48.128485419000143 ], [ -123.06302914799997, 48.117603385000123 ], [ -123.040454271999863, 48.085113287000027 ], [ -123.04527747299997, 48.059719143000066 ], [ -123.029693162999891, 48.045233466000028 ], [ -123.007883266999841, 48.038560289000159 ], [ -122.996815558999899, 48.038641669000143 ], [ -123.005726691999925, 48.078680731000091 ], [ -122.999134894999955, 48.091742255000057 ], [ -122.956939256999917, 48.097479559000035 ], [ -122.941070115999892, 48.097886460000055 ], [ -122.927479620999932, 48.095119533000073 ], [ -122.921742316999953, 48.086127020000063 ], [ -122.918771938999853, 48.07021719000015 ], [ -122.910796678999901, 48.066107489 ], [ -122.89972896999987, 48.066229559000149 ], [ -122.88695227799991, 48.062567450000031 ], [ -122.872547980999855, 48.04975006700009 ], [ -122.857289191999882, 48.029527085000055 ], [ -122.853382941999882, 48.010443427 ], [ -122.873280402999882, 48.001125393000123 ], [ -122.873280402999882, 47.993719794000143 ], [ -122.854359503999959, 47.995266018 ], [ -122.841379360999866, 48.005560614000032 ], [ -122.824859178999887, 48.035223700000145 ], [ -122.836903449999895, 48.04987213700015 ], [ -122.877064581999903, 48.079657294000143 ], [ -122.881662563999853, 48.091742255000057 ], [ -122.877756313999853, 48.106634833000115 ], [ -122.868316209999932, 48.1192894550001 ], [ -122.85627193899991, 48.124579169000171 ], [ -122.823841925999915, 48.131089585000055 ], [ -122.794911261999914, 48.141180731000034 ], [ -122.770171678999944, 48.141099351000051 ], [ -122.750396287999919, 48.11717357 ], [ -122.759877081999917, 48.112209377000127 ], [ -122.784535285999922, 48.102932033000073 ], [ -122.791371222999928, 48.096747137000094 ], [ -122.791981574999895, 48.082912502000013 ], [ -122.784494594999927, 48.073065497000087 ], [ -122.775380011999928, 48.065578518000123 ], [ -122.770904100999871, 48.059149481000119 ], [ -122.764637824999923, 48.044623114000061 ], [ -122.722482876999976, 47.993719794000143 ], [ -122.714344855999869, 47.987250067000147 ], [ -122.695383266999855, 47.978949286000059 ], [ -122.688343878999973, 47.973211981000091 ], [ -122.685658331999903, 47.965399481000091 ], [ -122.682525193999922, 47.944077867000047 ], [ -122.678089972999942, 47.935695705000072 ], [ -122.626210089999859, 47.889553127000156 ], [ -122.62010657499988, 47.877630927000112 ], [ -122.628244594999884, 47.873521226000079 ], [ -122.658070441999882, 47.872503973 ], [ -122.667836066999925, 47.870794989 ], [ -122.67642167899993, 47.862127997000115 ], [ -122.683908657999908, 47.843207098000093 ], [ -122.692046678999915, 47.832586981000034 ], [ -122.736398891999869, 47.794419664000159 ], [ -122.750396287999919, 47.774562893000066 ], [ -122.768666144999898, 47.737982489000117 ], [ -122.775217251999962, 47.718817450000174 ], [ -122.777699347999899, 47.70254140800013 ], [ -122.781076626999919, 47.692043361000074 ], [ -122.78929602799991, 47.684515692 ], [ -122.800363735999866, 47.679877020000092 ], [ -122.811879035999894, 47.678371486000131 ], [ -122.828480597999942, 47.683172919000029 ], [ -122.829213019999884, 47.694077867000019 ], [ -122.818023240999963, 47.713120835 ], [ -122.799794074999895, 47.777289130000142 ], [ -122.798939581999889, 47.806708075000031 ], [ -122.805653449999923, 47.843451239000117 ], [ -122.817290818999936, 47.830267645000092 ], [ -122.81847083199996, 47.81085846600017 ], [ -122.821603969999842, 47.792425848000121 ], [ -122.83918209499987, 47.78204987200003 ], [ -122.840402798999889, 47.802313544000143 ], [ -122.846791144999912, 47.82029857 ], [ -122.85643469999988, 47.82607656500015 ], [ -122.867095506999917, 47.809271552000141 ], [ -122.86636308499989, 47.793524481000176 ], [ -122.858265753999945, 47.775458075000145 ], [ -122.83918209499987, 47.746649481000034 ], [ -122.86192786399991, 47.733343817 ], [ -122.876210089999901, 47.710150458000086 ], [ -122.886626756999888, 47.688137111000074 ], [ -122.903960740999878, 47.673163153000033 ], [ -122.910023566999882, 47.650091864000089 ], [ -122.918039516999926, 47.644842841000084 ], [ -122.930327928999887, 47.64199453300013 ], [ -122.941761847999928, 47.6349144550001 ], [ -123.021066860999881, 47.565659898000106 ], [ -123.032948370999932, 47.549994208000143 ], [ -123.065093553999887, 47.49339427300005 ], [ -123.080555792999917, 47.478827216000113 ], [ -123.101307745999904, 47.465277411000145 ], [ -123.119374152999924, 47.449530341000084 ], [ -123.133371548999889, 47.412298895 ], [ -123.158436652999896, 47.37205638200011 ], [ -123.161284959999932, 47.35683828300013 ], [ -123.130238410999908, 47.340643622000087 ], [ -123.074126756999902, 47.34463125200007 ], [ -122.905140753999902, 47.394964911000116 ], [ -122.871571417999874, 47.409857489000061 ], [ -122.83918209499987, 47.431952216000141 ], [ -122.867746548999961, 47.436265367000075 ], [ -122.907053188999868, 47.423814195000048 ], [ -122.976307745999932, 47.391017971000124 ], [ -123.052235480999869, 47.367010809000092 ], [ -123.091867641999897, 47.36737702 ], [ -123.113514777999882, 47.391017971000124 ], [ -123.11050370999989, 47.405096747000172 ], [ -123.099354620999861, 47.419907945000048 ], [ -123.072580532999865, 47.445542710000112 ], [ -123.06330318899991, 47.456732489000117 ], [ -123.022613084999918, 47.522894598 ], [ -122.949045376999948, 47.59707265800013 ], [ -122.935454881999888, 47.602850653000118 ], [ -122.873280402999882, 47.631170966000141 ], [ -122.798207160999951, 47.651678778000118 ], [ -122.775380011999928, 47.660711981000119 ], [ -122.763539191999882, 47.669134833000058 ], [ -122.757069464999873, 47.682318427000112 ], [ -122.742787238999881, 47.726874091000113 ], [ -122.733754035999965, 47.742580471000068 ], [ -122.634877081999946, 47.839667059000092 ], [ -122.623646613999952, 47.847154039000159 ], [ -122.613189256999874, 47.850287177000055 ], [ -122.595692511999914, 47.847235419000143 ], [ -122.594146287999877, 47.839789130000085 ], [ -122.596994594999913, 47.830715236000074 ], [ -122.592152472999942, 47.822984117000075 ], [ -122.570952928999944, 47.819769598 ], [ -122.56651770699996, 47.834458726000108 ], [ -122.571441209999932, 47.857082424000069 ], [ -122.588286912999934, 47.904445705000015 ], [ -122.592152472999942, 47.911769924000012 ], [ -122.610991990999878, 47.935980536000116 ], [ -122.613189256999874, 47.945949611000017 ], [ -122.553374803999915, 47.920843817000119 ], [ -122.52806555899987, 47.905503648000078 ], [ -122.51768958199996, 47.88104889500012 ], [ -122.516468878999945, 47.866359768000123 ], [ -122.510243292999903, 47.832586981000034 ], [ -122.504221157999893, 47.822455145000092 ], [ -122.493763800999915, 47.814032294000029 ], [ -122.490061001999962, 47.803859768000095 ], [ -122.504017706999932, 47.788234768 ], [ -122.495025193999922, 47.786118882 ], [ -122.484527147999941, 47.782131252000013 ], [ -122.475168423999918, 47.776068427000112 ], [ -122.469227667999888, 47.768377997000087 ], [ -122.468373175999886, 47.756537177000141 ], [ -122.47345943899991, 47.748032945000105 ], [ -122.479725714999859, 47.741888739000117 ], [ -122.482899542999917, 47.737005927000055 ], [ -122.492909308999913, 47.73525625200007 ], [ -122.541086391999869, 47.742865302000027 ], [ -122.557972785999951, 47.740423895000063 ], [ -122.555775519999955, 47.728705145000092 ], [ -122.564686652999896, 47.712551174000041 ], [ -122.579701300999915, 47.698187567000147 ], [ -122.595855272999884, 47.691961981000091 ], [ -122.651600714999887, 47.7325707050001 ], [ -122.661040818999894, 47.73045482 ], [ -122.658111131999874, 47.717962958000058 ], [ -122.650990363999924, 47.711411851 ], [ -122.641916469999927, 47.706691799000069 ], [ -122.633127407999865, 47.699448960000055 ], [ -122.628407355999855, 47.692938544000143 ], [ -122.592152472999942, 47.59707265800013 ], [ -122.599598761999914, 47.590236721000124 ], [ -122.592152472999942, 47.582749742000075 ], [ -122.616932745999904, 47.574123440000065 ], [ -122.643788214999887, 47.595851955000128 ], [ -122.681507941999953, 47.651678778000118 ], [ -122.68919837099989, 47.643540757 ], [ -122.69456946499993, 47.634100653000175 ], [ -122.696929490999892, 47.623114325000031 ], [ -122.69579016799986, 47.610052802000141 ], [ -122.690012173999889, 47.596625067000147 ], [ -122.681548631999945, 47.590521552000055 ], [ -122.646839972999885, 47.576971747000087 ], [ -122.639149542999874, 47.57705312700007 ], [ -122.638986782999908, 47.574774481000091 ], [ -122.64736894399995, 47.562323309000092 ], [ -122.656890428999958, 47.551743882000139 ], [ -122.675933397999941, 47.537665106000091 ], [ -122.681507941999953, 47.52753327000012 ], [ -122.630197719999842, 47.544378973000121 ], [ -122.607045050999901, 47.555487372000172 ], [ -122.585926886999886, 47.569077867000132 ], [ -122.553130662999877, 47.583400783000016 ], [ -122.543202277999868, 47.566799221000153 ], [ -122.541615363999938, 47.540961005000113 ], [ -122.534087693999879, 47.52753327000012 ], [ -122.507923956999932, 47.520331122000115 ], [ -122.509592251999948, 47.502915757000139 ], [ -122.522694464999915, 47.481756903000033 ], [ -122.530669725999871, 47.462958075000088 ], [ -122.538319464999901, 47.43748607 ], [ -122.551625128999916, 47.414007880000113 ], [ -122.556223110999866, 47.391994533000016 ], [ -122.537505662999891, 47.370550848000065 ], [ -122.545074022999927, 47.356431382000139 ], [ -122.555246548999975, 47.346625067 ], [ -122.568674282999879, 47.340155341000113 ], [ -122.585926886999886, 47.336371161000088 ], [ -122.560658331999932, 47.301336981000091 ], [ -122.55699622299997, 47.284613348000065 ], [ -122.568511522999913, 47.264064846000011 ], [ -122.583485480999855, 47.264227606000176 ], [ -122.661040818999894, 47.287909247000087 ], [ -122.68626868399987, 47.301214911000116 ], [ -122.683461066999911, 47.310370184000092 ], [ -122.669504360999852, 47.319484768000095 ], [ -122.661040818999894, 47.332586981000148 ], [ -122.653472459999946, 47.349188544000114 ], [ -122.638579881999902, 47.363226630000057 ], [ -122.627919074999866, 47.379950262000094 ], [ -122.633127407999865, 47.404608466000084 ], [ -122.640614386999928, 47.385972398000021 ], [ -122.653635219999913, 47.376532294000086 ], [ -122.688343878999973, 47.364325262000094 ], [ -122.696115688999882, 47.35846588700015 ], [ -122.703033006999888, 47.351223049000126 ], [ -122.710438605999869, 47.34516022300015 ], [ -122.71934973899991, 47.34259674700003 ], [ -122.72594153599988, 47.339056708000058 ], [ -122.727935350999914, 47.330633856000091 ], [ -122.729074673999946, 47.320624091000028 ], [ -122.733021613999938, 47.312445380000113 ], [ -122.748605923999932, 47.295355536000059 ], [ -122.753081834999904, 47.281195380000057 ], [ -122.747629360999866, 47.267279364000061 ], [ -122.723296678999887, 47.23847077000012 ], [ -122.724476691999911, 47.232611395 ], [ -122.730865037999934, 47.228013414000046 ], [ -122.736724412999891, 47.21967194200009 ], [ -122.736927863999938, 47.224554755000057 ], [ -122.741444464999887, 47.222316799000069 ], [ -122.747059699999895, 47.216986395 ], [ -122.750396287999919, 47.212836005000057 ], [ -122.748646613999924, 47.210679429000081 ], [ -122.745269334999904, 47.204982815000093 ], [ -122.742583787999919, 47.197902736000017 ], [ -122.742990688999839, 47.191717841000141 ], [ -122.772775844999842, 47.173081773000078 ], [ -122.798695441999939, 47.204982815000093 ], [ -122.814849412999905, 47.25088125200007 ], [ -122.814930792999888, 47.274318752000127 ], [ -122.795562303999873, 47.280666408000073 ], [ -122.78661048099994, 47.296087958 ], [ -122.784006313999853, 47.315252997000144 ], [ -122.784535285999922, 47.342759507 ], [ -122.786040818999965, 47.35040924700003 ], [ -122.791371222999928, 47.364325262000094 ], [ -122.798085089999887, 47.371486721000153 ], [ -122.8066300119999, 47.376532294000086 ], [ -122.811105923999961, 47.38377513200011 ], [ -122.805653449999923, 47.397772528000147 ], [ -122.820139126999976, 47.383286851000108 ], [ -122.836577928999873, 47.334295966000141 ], [ -122.846018032999893, 47.315863348000121 ], [ -122.870025193999936, 47.299261786000059 ], [ -122.885650193999922, 47.291327216000113 ], [ -122.897531704999878, 47.287909247000087 ], [ -122.913400844999899, 47.2853050800001 ], [ -122.920480923999946, 47.278021552 ], [ -122.949777798999975, 47.202297268 ], [ -122.965077277999939, 47.181138414000102 ], [ -122.990630662999919, 47.165025132000139 ], [ -123.043283657999851, 47.154445705000072 ], [ -123.068348761999928, 47.14594147300015 ], [ -123.07876542899993, 47.130275783000073 ], [ -123.063872850999871, 47.137111721000096 ], [ -123.040923631999888, 47.144232489000146 ], [ -123.021636522999941, 47.14443594 ], [ -123.017933722999899, 47.130275783000073 ], [ -123.029408331999946, 47.121527411 ], [ -123.048898891999841, 47.11823151200015 ], [ -123.06810462099989, 47.112494208 ], [ -123.07876542899993, 47.096136786000088 ], [ -123.058990037999905, 47.102687893000066 ], [ -122.974517381999945, 47.146429755000142 ], [ -122.968902147999941, 47.14769114800005 ], [ -122.9648331369999, 47.150946356000091 ], [ -122.942209438999839, 47.178045966000028 ], [ -122.930246548999904, 47.174465236000131 ], [ -122.934681769999969, 47.159979559000092 ], [ -122.979074673999904, 47.101507880000113 ], [ -122.992543097999885, 47.090887762000094 ], [ -123.010487433999927, 47.082505601000136 ], [ -122.987456834999946, 47.08100006700009 ], [ -122.964588995999947, 47.0899925800001 ], [ -122.945871548999975, 47.107163804000109 ], [ -122.935414191999897, 47.130275783000073 ], [ -122.929310675999915, 47.120428778000147 ], [ -122.927316860999881, 47.109808661000031 ], [ -122.929310675999915, 47.099269924000154 ], [ -122.935414191999897, 47.089300848000065 ], [ -122.925648566999953, 47.07831452 ], [ -122.918202277999882, 47.056138414000131 ], [ -122.908070441999925, 47.048325914000046 ], [ -122.893299933999856, 47.047267971000096 ], [ -122.892974412999919, 47.057359117000047 ], [ -122.900217251999948, 47.071519273000078 ], [ -122.908070441999925, 47.082505601000136 ], [ -122.89582271999987, 47.092596747000087 ], [ -122.896473761999914, 47.104925848000121 ], [ -122.901193813999924, 47.117865302000055 ], [ -122.901234503999916, 47.130275783000073 ], [ -122.892404751999948, 47.142075914000046 ], [ -122.852853969999913, 47.165025132000139 ], [ -122.847401495999875, 47.155218817 ], [ -122.847971157999851, 47.146063544000029 ], [ -122.852609829999864, 47.137762762000037 ], [ -122.859689907999837, 47.130275783000073 ], [ -122.845529751999905, 47.131740627000127 ], [ -122.830799933999913, 47.136786200000145 ], [ -122.820952928999887, 47.142075914000046 ], [ -122.821522589999859, 47.144598700000145 ], [ -122.822661912999891, 47.160101630000085 ], [ -122.817128058999884, 47.165716864000061 ], [ -122.798207160999951, 47.15761953300013 ], [ -122.790109829999835, 47.149115302000112 ], [ -122.782053188999896, 47.137762762000037 ], [ -122.772775844999842, 47.127752997000144 ], [ -122.748158331999932, 47.120021877000127 ], [ -122.735747850999914, 47.111476955000043 ], [ -122.726429816999953, 47.100409247000087 ], [ -122.722482876999976, 47.089300848000065 ], [ -122.685902472999942, 47.10439687700007 ], [ -122.652333136999914, 47.128078518000095 ], [ -122.571603969999899, 47.209295966000084 ], [ -122.550200975999942, 47.242336330000128 ], [ -122.537098761999886, 47.27855052300005 ], [ -122.537505662999891, 47.315863348000121 ], [ -122.520375128999945, 47.30548737200003 ], [ -122.485422329999849, 47.290228583000058 ], [ -122.448475714999887, 47.268459377000099 ], [ -122.433094855999855, 47.264878648000106 ], [ -122.418609178999901, 47.269476630000057 ], [ -122.400380011999914, 47.281073309000178 ], [ -122.417551235999852, 47.289252020000092 ], [ -122.427601691999925, 47.296535549000012 ], [ -122.429554816999968, 47.304877020000063 ], [ -122.422027147999913, 47.315863348000121 ], [ -122.40941321499993, 47.325018622000115 ], [ -122.39126542899993, 47.333685614 ], [ -122.372141079999864, 47.34003327000012 ], [ -122.339466925999915, 47.346584377000013 ], [ -122.328480597999956, 47.357123114000089 ], [ -122.323597785999894, 47.372544664000102 ], [ -122.325266079999906, 47.391017971000124 ], [ -122.333648240999963, 47.404120184000092 ], [ -122.360951300999943, 47.429999091000113 ], [ -122.366810675999886, 47.442206122000087 ], [ -122.366688605999911, 47.485337632000025 ], [ -122.370228644999898, 47.49713776200015 ], [ -122.381418423999904, 47.510199286000059 ], [ -122.38841712099989, 47.52081940300009 ], [ -122.40754146999987, 47.566066799000041 ], [ -122.409047003999916, 47.574937242000075 ], [ -122.403716600999942, 47.581976630000142 ], [ -122.390451626999919, 47.593695380000113 ], [ -122.377919074999923, 47.596177476000051 ], [ -122.366607225999928, 47.585679429 ], [ -122.356068488999881, 47.57127513200011 ], [ -122.345773891999869, 47.562323309000092 ], [ -122.341053839999859, 47.582953192000033 ], [ -122.339995897999898, 47.598944403000118 ], [ -122.345204230999897, 47.611965236000103 ], [ -122.359364386999914, 47.623724677000084 ], [ -122.404042120999875, 47.637396552000112 ], [ -122.413482225999886, 47.641669012000037 ], [ -122.423329230999911, 47.651068427000055 ], [ -122.428781704999849, 47.66038646 ], [ -122.425160285999894, 47.664740302 ], [ -122.413685675999943, 47.667466539000046 ], [ -122.409291144999955, 47.674383856000148 ], [ -122.406809048999932, 47.683294989 ], [ -122.400380011999914, 47.691961981000091 ], [ -122.384673631999945, 47.708970445000048 ], [ -122.381092902999882, 47.720160223000065 ], [ -122.383900519999926, 47.736721096000124 ], [ -122.387562628999888, 47.752346096000011 ], [ -122.398345506999888, 47.762925523000078 ], [ -122.406117316999897, 47.777899481000091 ], [ -122.404367641999897, 47.797593492000047 ], [ -122.399484829999835, 47.813950914000046 ], [ -122.391916469999884, 47.827582098 ], [ -122.382191535999922, 47.839056708000143 ], [ -122.352609829999878, 47.856268622000144 ], [ -122.339711066999953, 47.872788804000137 ], [ -122.336984829999892, 47.894842841000028 ], [ -122.334217902999924, 47.910467841000028 ], [ -122.324574347999956, 47.924383856000091 ], [ -122.324533657999879, 47.934149481000034 ], [ -122.320423956999917, 47.942084052 ], [ -122.312652147999927, 47.947211005000113 ], [ -122.292713995999932, 47.95734284100017 ], [ -122.285715298999946, 47.962836005 ], [ -122.277170376999933, 47.967433986000131 ], [ -122.241607225999871, 47.9728050800001 ], [ -122.232899542999888, 47.978420315 ], [ -122.212798631999931, 47.986802476000051 ], [ -122.209136522999884, 47.999701239000061 ], [ -122.207346157999893, 48.014390367000075 ], [ -122.200835740999906, 48.018988348 ], [ -122.196278449999866, 48.022650458000058 ], [ -122.191721157999908, 48.026312567 ], [ -122.193511522999898, 48.030951239000117 ], [ -122.201771613999881, 48.033677476000108 ], [ -122.20750891799986, 48.037543036000031 ], [ -122.221587693999894, 48.03815338700015 ], [ -122.238107876999962, 48.026312567 ], [ -122.307728644999955, 48.065375067000062 ], [ -122.340158657999865, 48.090033270000063 ], [ -122.362294074999937, 48.12250397300015 ], [ -122.367746548999961, 48.159613348000065 ], [ -122.365712042999945, 48.190578518 ], [ -122.375599738999952, 48.213202216000141 ], [ -122.416859503999902, 48.225531317 ], [ -122.421864386999857, 48.227972723000121 ], [ -122.428374803999944, 48.232123114000089 ], [ -122.435943162999891, 48.234605210000026 ], [ -122.444203253999973, 48.232367255000113 ], [ -122.448963995999875, 48.22284577000012 ], [ -122.446115688999839, 48.202215887000094 ], [ -122.466623501999891, 48.19204336100016 ], [ -122.469471808999927, 48.177069403000033 ], [ -122.465728318999894, 48.15908437700007 ], [ -122.457875128999916, 48.14362213700015 ], [ -122.448068813999882, 48.13418203300013 ], [ -122.432118292999874, 48.122463283000158 ], [ -122.414621548999918, 48.112494208000058 ], [ -122.399810350999942, 48.108221747000144 ], [ -122.384103969999884, 48.101467190000037 ], [ -122.369130011999857, 48.085679429000081 ], [ -122.348011847999942, 48.054266669000057 ], [ -122.366037563999868, 48.053900458000115 ], [ -122.377430792999931, 48.060248114000061 ], [ -122.396392381999945, 48.081529039000131 ], [ -122.405629035999908, 48.087795315000093 ], [ -122.489654100999957, 48.130438544000114 ], [ -122.510365363999966, 48.147447007000082 ], [ -122.526112433999927, 48.170965887000037 ], [ -122.533273891999869, 48.196112372000115 ], [ -122.531239386999928, 48.219875393 ], [ -122.533950316999878, 48.249676800000046 ], [ -122.498850063999839, 48.25287506700009 ], [ -122.465158657999837, 48.25995514500012 ], [ -122.445912238999881, 48.26105377800009 ], [ -122.429921027999882, 48.259100653000033 ], [ -122.418365037999948, 48.251532294000086 ], [ -122.409657355999883, 48.241400458000115 ], [ -122.400786912999919, 48.235256252000156 ], [ -122.388986782999865, 48.239813544000086 ], [ -122.393706834999961, 48.249986070000048 ], [ -122.390614386999886, 48.260199286000088 ], [ -122.375314907999922, 48.280747789000131 ], [ -122.379383917999888, 48.28595612200003 ], [ -122.381825324999909, 48.296820380000028 ], [ -122.385853644999884, 48.303778387000094 ], [ -122.391753709999918, 48.309759833000115 ], [ -122.425363735999852, 48.330226955000072 ], [ -122.455148891999855, 48.342474677000141 ], [ -122.478627081999917, 48.359808661000116 ], [ -122.491363084999961, 48.365057684000121 ], [ -122.506214972999928, 48.36798737200003 ], [ -122.522694464999915, 48.368963934000121 ], [ -122.533762173999946, 48.374660549000097 ], [ -122.553537563999882, 48.401312567000119 ], [ -122.567046678999944, 48.409898179000137 ], [ -122.567046678999944, 48.417385158000016 ], [ -122.552072719999913, 48.427883205000072 ], [ -122.558949347999928, 48.434027411000059 ], [ -122.5742081369999, 48.437079169000143 ], [ -122.584462042999917, 48.437811591000084 ], [ -122.591704881999945, 48.434068101000051 ], [ -122.607777472999928, 48.416001695000134 ], [ -122.615549282999837, 48.409898179000137 ], [ -122.630360480999897, 48.405340887000094 ], [ -122.646595831999932, 48.403753973000065 ], [ -122.661773240999921, 48.40623607 ], [ -122.673573370999904, 48.413641669000171 ], [ -122.683461066999911, 48.430161851000051 ], [ -122.67857825399993, 48.43886953300013 ], [ -122.66877193899991, 48.445257880000057 ], [ -122.663319464999873, 48.454901434000035 ], [ -122.669341600999886, 48.472805080000072 ], [ -122.682932094999842, 48.479193427 ], [ -122.697010870999875, 48.481350002000013 ], [ -122.704904751999948, 48.486273505000057 ], [ -122.70238196499993, 48.497992255000057 ], [ -122.689076300999915, 48.499823309000035 ], [ -122.672474738999952, 48.498968817000119 ], [ -122.659901495999861, 48.502997137000094 ], [ -122.633046027999882, 48.516262111000017 ], [ -122.613270636999857, 48.500311591000028 ], [ -122.597035285999908, 48.474554755000085 ], [ -122.580718553999887, 48.458319403000033 ], [ -122.580881313999853, 48.484523830000072 ], [ -122.568348761999857, 48.489488023000106 ], [ -122.551014777999868, 48.48151276200015 ], [ -122.527211066999968, 48.460353908000158 ], [ -122.514271613999952, 48.453192450000031 ], [ -122.500599738999924, 48.45042552300005 ], [ -122.488880988999938, 48.454901434000035 ], [ -122.480824347999899, 48.464097398 ], [ -122.480132615999963, 48.470282294000143 ], [ -122.482818162999934, 48.476507880000113 ], [ -122.485178188999896, 48.486273505000057 ], [ -122.488392706999946, 48.512925523 ], [ -122.494252081999903, 48.529364325000088 ], [ -122.503529425999943, 48.543646552 ], [ -122.515858527999896, 48.557603257000054 ], [ -122.556019660999908, 48.576605536000059 ], [ -122.567005988999952, 48.58535390800013 ], [ -122.546620245999875, 48.588690497000144 ], [ -122.525135870999947, 48.583197333000115 ], [ -122.485340949999866, 48.55980052300005 ], [ -122.468088344999856, 48.554510809000149 ], [ -122.447621222999885, 48.562160549000012 ], [ -122.440297003999888, 48.580715236000017 ], [ -122.444325324999852, 48.603257554 ], [ -122.457875128999916, 48.623439846000039 ], [ -122.466460740999921, 48.628729559000092 ], [ -122.475331183999884, 48.631252346000011 ], [ -122.484120245999932, 48.634751695000105 ], [ -122.492583787999891, 48.643255927000141 ], [ -122.497141079999835, 48.65355052300005 ], [ -122.503041144999955, 48.679632880000113 ], [ -122.502552863999881, 48.68488190300009 ], [ -122.525135870999947, 48.692287502000099 ], [ -122.521107550999886, 48.709051825000117 ], [ -122.498850063999839, 48.739488023000078 ], [ -122.508615688999882, 48.755682684000121 ], [ -122.52993730399993, 48.768622137000122 ], [ -122.554676886999914, 48.777329820000105 ], [ -122.574533657999922, 48.780462958000086 ], [ -122.593617316999897, 48.774115302000055 ], [ -122.609771287999962, 48.75861237200003 ], [ -122.639719204999835, 48.722398179000109 ], [ -122.650380011999871, 48.718166408000101 ], [ -122.6601456369999, 48.722560940000093 ], [ -122.667347785999937, 48.731878973000121 ], [ -122.670155402999896, 48.74290599199999 ], [ -122.666900193999936, 48.748114325000145 ], [ -122.652902798999975, 48.758286851000108 ], [ -122.64964759, 48.763657945000077 ], [ -122.658192511999857, 48.777329820000105 ], [ -122.676991339999901, 48.793443101 ], [ -122.695952928999915, 48.80076732 ], [ -122.704904751999948, 48.787909247000144 ], [ -122.700591600999942, 48.812160549000126 ], [ -122.703846808999899, 48.827378648000106 ], [ -122.714222785999894, 48.838202216000028 ], [ -122.757557745999861, 48.864243882 ], [ -122.768218553999901, 48.874009507000139 ], [ -122.772531704999892, 48.886542059000035 ], [ -122.768381313999868, 48.897406317000119 ], [ -122.759144660999894, 48.905951239000146 ], [ -122.749908006999931, 48.912543036000116 ], [ -122.745838995999875, 48.917669989000117 ], [ -122.758859829999864, 48.935939846000011 ], [ -122.808094855999869, 48.934515692000119 ], [ -122.813547329999906, 48.951808986000046 ], [ -122.80101477799991, 48.962307033000101 ], [ -122.777495897999941, 48.964789130000113 ], [ -122.731556769999884, 48.959214585000112 ], [ -122.741118943999965, 48.976792710000055 ], [ -122.753000454999921, 48.992499091000113 ], [ -122.753012325014581, 48.992514892989064 ], [ -122.65325801699997, 48.992514547000056 ], [ -122.433374796999928, 48.992514547000056 ], [ -122.213517415999988, 48.992514547000056 ], [ -121.993763387999977, 48.992514547000056 ], [ -121.773957682999949, 48.992514547000056 ], [ -121.554151977999936, 48.992514547000056 ], [ -121.33432043499991, 48.992514547000056 ], [ -121.114514729999982, 48.992514547000056 ], [ -120.894709025999958, 48.992514547000056 ], [ -120.674954997999947, 48.992514547000056 ], [ -120.455149292999934, 48.992514547000056 ], [ -120.235317749999908, 48.992514547000056 ], [ -120.015512044999966, 48.992514547000056 ], [ -119.795706339999953, 48.992514547000056 ], [ -119.575874796999926, 48.992514547000056 ], [ -119.3560432539999, 48.992514547000056 ], [ -119.136211710999959, 48.992514547000056 ], [ -118.916483520999961, 48.992514547000056 ], [ -118.696677815999934, 48.992514547000056 ], [ -118.476872111999924, 48.992514547000056 ], [ -118.257066406999897, 48.992514547000056 ], [ -118.037234863999956, 48.992514547000056 ], [ -117.817429158999943, 48.992514547000056 ], [ -117.597675130999932, 48.992514547000056 ], [ -117.377869425999918, 48.992514547000056 ], [ -117.158012044999879, 48.992514547000056 ], [ -117.038151102999947, 48.992514547000056 ], [ -116.938180501999938, 48.992514547000056 ], [ -116.718374796999925, 48.992514547000056 ], [ -116.498569091999897, 48.992514547000056 ], [ -116.278763387999888, 48.992514547000056 ], [ -116.058957682999946, 48.992514547000056 ], [ -116.048163124999959, 48.992514547000056 ], [ -115.839126139999919, 48.992514547000056 ], [ -115.619372111999922, 48.992514547000056 ], [ -115.399514730999883, 48.992514547000056 ], [ -115.179657349999943, 48.992514547000056 ], [ -114.959929158999941, 48.992514547000056 ], [ -114.740097615999915, 48.992514547000056 ], [ -114.520266072999888, 48.992514547000056 ], [ -114.300486206999878, 48.992514547000056 ], [ -114.080680501999936, 48.992514547000056 ], [ -114.063840127999939, 48.992514547000056 ], [ -113.860874796999923, 48.992514547000056 ], [ -113.641043254999985, 48.992514547000056 ], [ -113.421185872999956, 48.992514547000056 ], [ -113.201380167999929, 48.992514547000056 ], [ -112.981626139999918, 48.992514547000056 ], [ -112.76182043499999, 48.992566223000054 ], [ -112.541988891999878, 48.992617900000155 ], [ -112.32218318799994, 48.992617900000155 ], [ -112.102377482999927, 48.992617900000155 ], [ -111.882571778, 48.992617900000155 ], [ -111.66271439599987, 48.992617900000155 ], [ -111.442882853999933, 48.992617900000155 ], [ -111.22307714899992, 48.992617900000155 ], [ -111.003323120999909, 48.992617900000155 ], [ -110.783517415999981, 48.992617900000155 ], [ -110.563711711999957, 48.992617900000155 ], [ -110.343880167999927, 48.992617900000155 ], [ -110.124100300999913, 48.992617900000155 ], [ -109.999321087999903, 48.992617900000155 ], [ -109.904268758999976, 48.992617900000155 ], [ -109.684540568999878, 48.992617900000155 ], [ -109.464709025999952, 48.992617900000155 ], [ -109.244851644999912, 48.992617900000155 ], [ -109.025045939999899, 48.992617900000155 ], [ -108.805240234999957, 48.992617900000155 ], [ -108.585434529999944, 48.992617900000155 ], [ -108.365628824999916, 48.992617900000155 ], [ -108.14579728199989, 48.992617900000155 ], [ -107.926043253999893, 48.992617900000155 ], [ -107.706237549999955, 48.992617900000155 ], [ -107.486431844999942, 48.992617900000155 ], [ -107.266626138999911, 48.992617900000155 ], [ -107.046794596999888, 48.992617900000155 ], [ -106.826988892999864, 48.992617900000155 ], [ -106.607183186999933, 48.992617900000155 ], [ -106.387325805999907, 48.992617900000155 ], [ -106.16752010099988, 48.992617900000155 ], [ -105.947740234999955, 48.992617900000155 ], [ -105.727934529999942, 48.992617900000155 ], [ -105.508154662999928, 48.992617900000155 ], [ -105.288323120999905, 48.992617900000155 ], [ -105.068543253999891, 48.992617900000155 ], [ -104.84871171099995, 48.992617900000155 ], [ -104.628854329999911, 48.992617900000155 ], [ -104.409048624999897, 48.992617900000155 ], [ -104.189242920999874, 48.992617900000155 ], [ -104.047574446999903, 48.992617900000155 ], [ -103.969488891999873, 48.992617900000155 ], [ -103.749683186999931, 48.992617900000155 ], [ -103.529851643999905, 48.992617900000155 ], [ -103.310045938999892, 48.992617900000155 ], [ -103.090240234999868, 48.992617900000155 ], [ -102.870382853999928, 48.992617900000155 ], [ -102.650577148999901, 48.992617900000155 ], [ -102.430745605999874, 48.992617900000155 ], [ -102.210939900999946, 48.992669577000086 ], [ -101.991185872999935, 48.992669577000086 ], [ -101.771380167999922, 48.992669577000086 ], [ -101.551574462999895, 48.992669577000086 ], [ -101.364339646999895, 48.992669577000086 ], [ -101.331691243999856, 48.992669577000086 ], [ -101.111885538999928, 48.992669577000086 ], [ -100.892105672999918, 48.992669577000086 ], [ -100.672274129999977, 48.992669577000086 ], [ -100.452494262999963, 48.992669577000086 ], [ -100.232662719999936, 48.992669577000086 ], [ -100.012882853999926, 48.992669577000086 ], [ -99.793102986999912, 48.992669577000086 ], [ -99.573297282999974, 48.992669577000086 ], [ -99.353491576999957, 48.992669577000086 ], [ -99.133660034999934, 48.992669577000086 ], [ -98.913854329999907, 48.992669577000086 ], [ -98.694048625, 48.992669577000086 ], [ -98.47419124399994, 48.992669577000086 ], [ -98.254437215999928, 48.992669577000086 ], [ -98.034605671999827, 48.992669577000086 ], [ -97.814799967999903, 48.992669577000086 ], [ -97.594994262999876, 48.992669577000086 ], [ -97.375188558999952, 48.992669577000086 ], [ -97.226088565999987, 48.992669577000086 ], [ -97.155382852999935, 48.992669577000086 ], [ -96.935602987999914, 48.992669577000086 ], [ -96.715797281999897, 48.992669577000086 ], [ -96.49599157699987, 48.992669577000086 ], [ -96.276211710999945, 48.992669577000086 ], [ -96.056328491999892, 48.992669577000086 ], [ -95.836496948999979, 48.992669577000086 ], [ -95.616717081999951, 48.992669577000086 ], [ -95.396937215999941, 48.992669577000086 ], [ -95.177105672999915, 48.992669577000086 ], [ -95.168527384999976, 48.995046693000134 ], [ -95.161886962999887, 49.00114451200001 ], [ -95.15932898, 49.011789856000078 ], [ -95.159664876999869, 49.10950999000012 ], [ -95.160026611999882, 49.223353170000067 ], [ -95.160336669999964, 49.313011780000025 ], [ -95.160569213999906, 49.369494121000074 ] ] ], [ [ [ -179.081491665999948, 51.286444403000033 ], [ -179.069447394999941, 51.262844143 ], [ -179.061594204999864, 51.254543361000017 ], [ -179.061594204999864, 51.247707424000012 ], [ -179.085153774999924, 51.242905992000104 ], [ -179.103098110999952, 51.226467190000122 ], [ -179.119007941999882, 51.215399481000176 ], [ -179.136667446999894, 51.227240302000141 ], [ -179.129709438999896, 51.24359772300015 ], [ -179.134470180999898, 51.255764065000122 ], [ -179.142038540999948, 51.265570380000085 ], [ -179.143462693999908, 51.275051174000069 ], [ -179.143503383999899, 51.275051174000069 ], [ -179.13414466099988, 51.283758856000148 ], [ -179.118601040999863, 51.290187893000066 ], [ -179.088246222999885, 51.29608795800003 ], [ -179.081491665999948, 51.286444403000033 ] ] ], [ [ [ -178.973622199999909, 51.312445380000113 ], [ -178.986887173999946, 51.307521877000156 ], [ -178.992665167999917, 51.326239325000031 ], [ -178.99046790299991, 51.334173895 ], [ -178.978382941999911, 51.353827216000141 ], [ -178.980295376999891, 51.362860419000143 ], [ -178.986887173999946, 51.377020575000174 ], [ -178.985829230999911, 51.384222723 ], [ -178.972238735999952, 51.396551825000145 ], [ -178.95441646999987, 51.395209052000084 ], [ -178.917551235999895, 51.377427476 ], [ -178.904245571999866, 51.353827216000141 ], [ -178.913889126999948, 51.345770575000117 ], [ -178.93305416599992, 51.344183661000088 ], [ -178.948312954999892, 51.33982982 ], [ -178.973622199999909, 51.312445380000113 ] ] ], [ [ [ 178.769216342000249, 51.639715887000179 ], [ 178.787119988000285, 51.623846747000144 ], [ 178.800303582000225, 51.635443427000084 ], [ 178.814789259000207, 51.635931708000058 ], [ 178.829274936000132, 51.628607489000061 ], [ 178.841807488000228, 51.617010809000035 ], [ 178.853770379000167, 51.620672919000086 ], [ 178.86988366000017, 51.621812242000132 ], [ 178.887380405000187, 51.620550848000121 ], [ 178.920176629000224, 51.611802476000051 ], [ 178.927907748000138, 51.607163804000109 ], [ 178.931162957000282, 51.600287177000112 ], [ 178.934336784999942, 51.588609117000104 ], [ 178.941905144000287, 51.584947007000054 ], [ 178.951833530000187, 51.583807684000121 ], [ 178.961680535000227, 51.579779364000061 ], [ 178.966644727000045, 51.578924872000144 ], [ 178.986338738, 51.577826239 ], [ 178.992686394000117, 51.576646226 ], [ 178.996836785000056, 51.572333075000174 ], [ 179.00611412900011, 51.558539130000085 ], [ 179.009287957000168, 51.555568752000156 ], [ 179.020762566000229, 51.549953518000152 ], [ 179.060313347000175, 51.514593817000147 ], [ 179.122894727000102, 51.480414130000057 ], [ 179.139984571000156, 51.47679271 ], [ 179.183441602000158, 51.473211981000119 ], [ 179.195323113000114, 51.470526434000035 ], [ 179.204274935999962, 51.463080145000063 ], [ 179.228037957000168, 51.439195054 ], [ 179.240082227000158, 51.416693427 ], [ 179.257578972000232, 51.413641669000114 ], [ 179.294281446000156, 51.41901276200015 ], [ 179.291026238000285, 51.414984442 ], [ 179.288747592000192, 51.411322333000143 ], [ 179.285655144000117, 51.408026434000092 ], [ 179.280039910000227, 51.404730536000059 ], [ 179.280039910000227, 51.398504950000117 ], [ 179.379242384000094, 51.401922919000114 ], [ 179.400075717000135, 51.408433335000112 ], [ 179.458506707000225, 51.381293036 ], [ 179.472341342000135, 51.370550848000065 ], [ 179.454274936000132, 51.370347398000106 ], [ 179.421153191000059, 51.364162502000156 ], [ 179.403575066000229, 51.364406643 ], [ 179.405772332000112, 51.368394273000078 ], [ 179.406911655000187, 51.368638414000102 ], [ 179.410411004000053, 51.370550848000065 ], [ 179.396657748000251, 51.376898505000028 ], [ 179.382823113000171, 51.377346096000011 ], [ 179.355153842000249, 51.370550848000065 ], [ 179.348643425000233, 51.36741771 ], [ 179.340668165000096, 51.359279690000093 ], [ 179.335215691000172, 51.357570705000072 ], [ 179.326996290000153, 51.358587958000143 ], [ 179.310720248000138, 51.363267320000077 ], [ 179.30111738400015, 51.364406643 ], [ 179.287852410000227, 51.361029364000089 ], [ 179.271169467000192, 51.354559637000179 ], [ 179.254893425000176, 51.350287177000055 ], [ 179.243011915000096, 51.353827216000141 ], [ 179.235850457000168, 51.363470770000035 ], [ 179.234222852000215, 51.372015692000119 ], [ 179.237803582, 51.380764065 ], [ 179.246429884000207, 51.391058661000116 ], [ 179.076914910000227, 51.453558661000059 ], [ 179.058441602000102, 51.467596747000115 ], [ 179.041026238000171, 51.477036851000136 ], [ 179.039073113000285, 51.482896226000079 ], [ 179.034515821000156, 51.490627346000096 ], [ 179.026866082000225, 51.500921942 ], [ 179.014170769000231, 51.509019273000135 ], [ 178.988129102000158, 51.522162177 ], [ 178.960134310999962, 51.542141018000066 ], [ 178.941416863000285, 51.550360419000143 ], [ 178.872325066000172, 51.571356512000094 ], [ 178.838389519000117, 51.576646226 ], [ 178.799978061000246, 51.571112372000144 ], [ 178.782969597000175, 51.572170315000037 ], [ 178.77963300900015, 51.582831122000144 ], [ 178.753591342000249, 51.582831122000144 ], [ 178.735118035000227, 51.584906317000062 ], [ 178.719411655000243, 51.592108466000113 ], [ 178.701914910000227, 51.607367255000085 ], [ 178.689463738000285, 51.615383205000015 ], [ 178.636403842000192, 51.637437242000104 ], [ 178.666677280000187, 51.655015367000047 ], [ 178.68262780000029, 51.65900299700003 ], [ 178.721202019000231, 51.642808335000083 ], [ 178.769216342000249, 51.639715887000179 ] ] ], [ [ [ 178.23129316500021, 51.831773179000137 ], [ 178.237152540000153, 51.830511786000116 ], [ 178.243825717000135, 51.830715236000074 ], [ 178.252207879000167, 51.829901434000149 ], [ 178.271820509000094, 51.825018622000087 ], [ 178.313649936000246, 51.821926174000012 ], [ 178.333994988000171, 51.816229559000035 ], [ 178.35035241000017, 51.806952216000084 ], [ 178.396169467000249, 51.76850006700009 ], [ 178.381114129000167, 51.772365627000099 ], [ 178.356455925000233, 51.767401434000035 ], [ 178.341481967000135, 51.76850006700009 ], [ 178.331228061000132, 51.774237372000144 ], [ 178.311696811000246, 51.792059637000037 ], [ 178.303721550000176, 51.795721747000172 ], [ 178.285980665000153, 51.799750067000147 ], [ 178.260264519000117, 51.80963776200015 ], [ 178.236582879000224, 51.822943427000084 ], [ 178.22486412900011, 51.836737372000087 ], [ 178.23129316500021, 51.831773179000137 ] ] ], [ [ [ -178.760487433999941, 51.752264716000056 ], [ -178.80829830599987, 51.747300523 ], [ -178.822702602999954, 51.756170966000028 ], [ -178.842722133999928, 51.772650458000115 ], [ -178.858143683999941, 51.788641669000029 ], [ -178.858876105999883, 51.795721747000172 ], [ -178.846058722999942, 51.805894273000135 ], [ -178.832224087999947, 51.825751044000029 ], [ -178.813588019999855, 51.839178778000033 ], [ -178.786529100999928, 51.829901434000149 ], [ -178.748483852999925, 51.817572333000115 ], [ -178.740183071999951, 51.783636786000088 ], [ -178.760487433999941, 51.752264716000056 ] ] ], [ [ [ -176.354115363999938, 51.836737372000087 ], [ -176.354115363999938, 51.829901434000149 ], [ -176.345692511999886, 51.830471096000124 ], [ -176.32835852799991, 51.829169012000037 ], [ -176.319935675999943, 51.829901434000149 ], [ -176.325306769999912, 51.814398505000057 ], [ -176.327381964999915, 51.810003973000065 ], [ -176.298288540999948, 51.821478583000115 ], [ -176.283029751999891, 51.82257721600017 ], [ -176.264719204999921, 51.816229559000035 ], [ -176.264719204999921, 51.810003973000065 ], [ -176.270375128999916, 51.806463934000092 ], [ -176.273915167999917, 51.802150783000101 ], [ -176.276478644999912, 51.796332098000121 ], [ -176.279001430999926, 51.788275458 ], [ -176.26390540299991, 51.783148505 ], [ -176.258534308999856, 51.782131252000127 ], [ -176.258534308999856, 51.775295315 ], [ -176.27440344999988, 51.775132554000052 ], [ -176.286081508999871, 51.76850006700009 ], [ -176.292551235999895, 51.756740627000013 ], [ -176.292673305999955, 51.741156317 ], [ -176.300119594999927, 51.741156317 ], [ -176.307932094999927, 51.752386786000031 ], [ -176.315866665999891, 51.749579169000143 ], [ -176.330515102999897, 51.730292059000121 ], [ -176.340687628999945, 51.72581614800005 ], [ -176.35175533799989, 51.740871486000074 ], [ -176.360951300999858, 51.733710028000033 ], [ -176.37205969999988, 51.736721096000124 ], [ -176.385609503999945, 51.737127997000059 ], [ -176.397043423999889, 51.741888739000146 ], [ -176.401926235999895, 51.758205471000068 ], [ -176.409372524999952, 51.823675848 ], [ -176.403879360999923, 51.820990302000141 ], [ -176.393910285999937, 51.818264065000065 ], [ -176.38886471299989, 51.816229559000035 ], [ -176.395822719999899, 51.8263207050001 ], [ -176.423044399999895, 51.851019598000093 ], [ -176.392933722999857, 51.863104559000178 ], [ -176.34715735599994, 51.869940497000115 ], [ -176.303212042999917, 51.868963934000035 ], [ -176.279001430999926, 51.857163804000052 ], [ -176.292673305999955, 51.843736070000077 ], [ -176.311838344999927, 51.839789130000085 ], [ -176.333363410999937, 51.839341539000188 ], [ -176.354115363999938, 51.836737372000087 ] ] ], [ [ [ -176.120798305999926, 51.846869208000143 ], [ -176.111927863999881, 51.838568427000055 ], [ -176.10773678299995, 51.847316799000126 ], [ -176.093861456999889, 51.858587958000115 ], [ -176.062855597999942, 51.854966539000159 ], [ -176.030222133999899, 51.843166408000101 ], [ -176.011463995999918, 51.829901434000149 ], [ -176.018910285999908, 51.823675848 ], [ -175.999379035999937, 51.811957098000121 ], [ -175.990956183999884, 51.810003973000065 ], [ -175.998483852999925, 51.802557684000092 ], [ -176.026234503999916, 51.822333075000031 ], [ -176.031971808999884, 51.829901434000149 ], [ -176.049631313999896, 51.824855861000131 ], [ -176.06590735599994, 51.825384833000115 ], [ -176.097482876999919, 51.829901434000149 ], [ -176.106394008999871, 51.826483466000141 ], [ -176.10492916599992, 51.817816473000065 ], [ -176.094064907999922, 51.795721747000172 ], [ -176.109201626999919, 51.798976955000128 ], [ -176.121774868999921, 51.805650132 ], [ -176.130848761999914, 51.815904039000102 ], [ -176.135609503999916, 51.829901434000149 ], [ -176.148386196999951, 51.817938544000057 ], [ -176.152414516999926, 51.804510809000064 ], [ -176.149647589999859, 51.790228583000058 ], [ -176.141835089999859, 51.775295315 ], [ -176.148671027999882, 51.775295315 ], [ -176.15172278599988, 51.778998114000146 ], [ -176.159006313999896, 51.791449286000059 ], [ -176.16234290299991, 51.795721747000172 ], [ -176.162953253999888, 51.798529364000117 ], [ -176.161691860999866, 51.807318427 ], [ -176.16234290299991, 51.810003973000065 ], [ -176.166452602999868, 51.81126536699999 ], [ -176.175282355999911, 51.810777085 ], [ -176.194162563999953, 51.819973049000069 ], [ -176.208322719999899, 51.820013739000061 ], [ -176.219064907999893, 51.824367580000157 ], [ -176.223744269999912, 51.843573309000092 ], [ -176.201242641999926, 51.840887762000037 ], [ -176.199045376999919, 51.848863023 ], [ -176.210682745999918, 51.867132880000057 ], [ -176.204538540999948, 51.881008205000128 ], [ -176.190134243999893, 51.886704820000134 ], [ -176.173898891999954, 51.885321356000063 ], [ -176.16234290299991, 51.877671617000104 ], [ -176.137074347999885, 51.868597723000036 ], [ -176.128163214999915, 51.86399974199999 ], [ -176.128163214999915, 51.859523830000015 ], [ -176.120798305999926, 51.846869208000143 ] ] ], [ [ [ -176.018910285999908, 51.891994533000101 ], [ -175.990956183999884, 51.884507554000137 ], [ -175.986887173999918, 51.8868675800001 ], [ -175.974964972999885, 51.897040106000034 ], [ -175.970529751999919, 51.898138739000089 ], [ -175.962595180999926, 51.888617255000085 ], [ -175.958322719999927, 51.874741929 ], [ -175.95677649599989, 51.860825914000102 ], [ -175.956857876999891, 51.851019598000093 ], [ -175.976999477999925, 51.852362372000172 ], [ -176.10773678299995, 51.884507554000137 ], [ -176.092355923999918, 51.894476630000113 ], [ -176.073312954999921, 51.903794664000159 ], [ -176.052561001999919, 51.910345770000148 ], [ -176.020944790999948, 51.912787177 ], [ -176.010324673999889, 51.91242096600017 ], [ -176.000233527999939, 51.910101630000113 ], [ -175.990956183999884, 51.905585028000147 ], [ -175.999094204999892, 51.904486395 ], [ -176.018910285999908, 51.898138739000089 ], [ -176.018910285999908, 51.891994533000101 ] ] ], [ [ [ -177.845448370999918, 51.851874091000084 ], [ -177.840646938999924, 51.836737372000087 ], [ -177.708973761999886, 51.837307033000158 ], [ -177.648182745999861, 51.847601630000085 ], [ -177.622181769999884, 51.857163804000052 ], [ -177.626698370999918, 51.832586981000148 ], [ -177.647409633999843, 51.820502020000148 ], [ -177.675160285999908, 51.816555080000157 ], [ -177.700998501999948, 51.816229559000035 ], [ -177.726796027999882, 51.812201239000061 ], [ -177.775217251999862, 51.796535549000097 ], [ -177.800282355999855, 51.795721747000172 ], [ -177.797189907999893, 51.786322333000058 ], [ -177.791452602999897, 51.779689846000096 ], [ -177.783273891999897, 51.775946356000148 ], [ -177.773019985999866, 51.775295315 ], [ -177.796620245999918, 51.759222723000121 ], [ -177.80610104099992, 51.745591539000159 ], [ -177.807443813999896, 51.728908596000124 ], [ -177.806507941999911, 51.703314520000063 ], [ -177.810373501999919, 51.695379950000088 ], [ -177.837513800999943, 51.675360419000029 ], [ -177.847849087999947, 51.671861070000048 ], [ -177.860666469999899, 51.675034898000106 ], [ -177.882883266999954, 51.685858466000113 ], [ -177.885202602999925, 51.674505927000141 ], [ -177.892526821999923, 51.667914130000057 ], [ -177.903553839999859, 51.665106512000094 ], [ -177.916981574999852, 51.66543203300013 ], [ -177.90953528599988, 51.65924713700015 ], [ -177.916127081999946, 51.645331122000087 ], [ -177.913034633999871, 51.630926825000117 ], [ -177.895863410999937, 51.603949286000059 ], [ -177.906727667999917, 51.598089911000116 ], [ -177.920114712999919, 51.596502997000087 ], [ -177.933461066999939, 51.598700262000179 ], [ -177.944325324999909, 51.603949286000059 ], [ -177.948841925999886, 51.610785223000093 ], [ -177.953806118999921, 51.630113023000106 ], [ -177.957997199999852, 51.637437242000104 ], [ -177.973622199999937, 51.645168361000017 ], [ -178.011179165999948, 51.648138739000117 ], [ -178.032460089999915, 51.65924713700015 ], [ -178.044626430999926, 51.665594794000086 ], [ -178.082508917999945, 51.662502346000011 ], [ -178.101389126999891, 51.66543203300013 ], [ -178.091908331999889, 51.690578518 ], [ -178.079945441999939, 51.700344143000152 ], [ -178.029367641999954, 51.700140692 ], [ -178.01903235599994, 51.702337958 ], [ -178.002145962999947, 51.711737372000115 ], [ -177.974558071999923, 51.715480861000131 ], [ -177.96308346299989, 51.720526434000178 ], [ -177.95482337099989, 51.729071356000091 ], [ -177.950510219999899, 51.741156317 ], [ -177.955393032999865, 51.763739325000174 ], [ -177.97398841099988, 51.778265692000119 ], [ -177.998890753999888, 51.786037502000042 ], [ -178.046254035999937, 51.791449286000059 ], [ -178.062082485999895, 51.799627997000172 ], [ -178.09516354099992, 51.823675848 ], [ -178.189564581999889, 51.854966539000159 ], [ -178.213815883999871, 51.876044012000094 ], [ -178.17707271999987, 51.905585028000147 ], [ -178.147816535999937, 51.914699611000131 ], [ -177.952259894999884, 51.924750067000119 ], [ -177.931263800999943, 51.918646552000141 ], [ -177.931263800999943, 51.911810614000117 ], [ -177.895497199999909, 51.889227606000034 ], [ -177.882883266999954, 51.884507554000137 ], [ -177.882883266999954, 51.877671617000104 ], [ -177.892689581999889, 51.867010809000178 ], [ -177.845448370999918, 51.851874091000084 ] ] ], [ [ [ -177.13231360599994, 51.73065827000012 ], [ -177.156686977999897, 51.700140692 ], [ -177.192616339999887, 51.709173895 ], [ -177.203846808999884, 51.713812567000119 ], [ -177.202097133999899, 51.707098700000088 ], [ -177.202463344999899, 51.702053127000156 ], [ -177.203561977999954, 51.697577216000084 ], [ -177.203846808999884, 51.692694403000033 ], [ -177.223825649999867, 51.697088934000092 ], [ -177.249216274999895, 51.687201239 ], [ -177.277658657999893, 51.680121161000116 ], [ -177.306874152999939, 51.692694403000033 ], [ -177.315052863999853, 51.687323309000149 ], [ -177.319569464999915, 51.68695709800015 ], [ -177.327341274999924, 51.692694403000033 ], [ -177.32831783799989, 51.69424062700007 ], [ -177.341013149999952, 51.706366278000147 ], [ -177.356760219999899, 51.71775950700011 ], [ -177.370798305999955, 51.723863023000106 ], [ -177.385446743999864, 51.726385809000035 ], [ -177.436146613999938, 51.725897528000033 ], [ -177.454335089999915, 51.722967841000028 ], [ -177.467640753999945, 51.716945705000015 ], [ -177.484811977999868, 51.705877997000172 ], [ -177.498850063999924, 51.703314520000063 ], [ -177.532785610999866, 51.706366278000147 ], [ -177.598581508999843, 51.702704169000114 ], [ -177.629587368999864, 51.691636460000083 ], [ -177.642648891999954, 51.668850002000127 ], [ -177.648060675999886, 51.654730536000031 ], [ -177.660023566999911, 51.652980861000017 ], [ -177.671986456999946, 51.659125067 ], [ -177.677438930999898, 51.668850002000127 ], [ -177.678781704999892, 51.678534247000087 ], [ -177.683338995999918, 51.686265367000104 ], [ -177.691761847999885, 51.693304755000085 ], [ -177.704701300999886, 51.700140692 ], [ -177.704701300999886, 51.706366278000147 ], [ -177.688181118999921, 51.712103583000115 ], [ -177.659047003999945, 51.729925848 ], [ -177.646351691999882, 51.733710028000033 ], [ -177.626332160999908, 51.731594143000123 ], [ -177.588815883999899, 51.722154039000102 ], [ -177.570668097999885, 51.72003815300009 ], [ -177.522897915999948, 51.72003815300009 ], [ -177.518991665999948, 51.723334052000141 ], [ -177.519113735999923, 51.730617580000128 ], [ -177.517567511999886, 51.737860419000171 ], [ -177.508900519999884, 51.741156317 ], [ -177.474720831999889, 51.741156317 ], [ -177.471994594999927, 51.743312893 ], [ -177.469064907999922, 51.747951565000122 ], [ -177.463856574999909, 51.752630927000055 ], [ -177.454294399999924, 51.754787502000156 ], [ -177.387766079999921, 51.761664130000057 ], [ -177.292469855999883, 51.782782294000171 ], [ -177.215524868999893, 51.818793036000145 ], [ -177.203846808999884, 51.870184637000065 ], [ -177.199289516999954, 51.878607489 ], [ -177.195505337999919, 51.900946356000034 ], [ -177.190174933999856, 51.911810614000117 ], [ -177.194406704999892, 51.929999091000113 ], [ -177.173451300999915, 51.935614325000117 ], [ -177.122181769999884, 51.932928778000033 ], [ -177.099802212999862, 51.930365302000112 ], [ -177.074818488999853, 51.922593492000104 ], [ -177.054676886999914, 51.909816799000069 ], [ -177.046823696999923, 51.891994533000101 ], [ -177.06114661399991, 51.887844143000066 ], [ -177.066965298999889, 51.881577867000104 ], [ -177.06773841099988, 51.874253648000106 ], [ -177.067250128999888, 51.867132880000057 ], [ -177.074330206999861, 51.858832098000065 ], [ -177.121896938999953, 51.843573309000092 ], [ -177.136952277999882, 51.822821356000119 ], [ -177.128977016999926, 51.783596096000096 ], [ -177.142404751999919, 51.761623440000065 ], [ -177.127756313999896, 51.74746328300013 ], [ -177.13231360599994, 51.73065827000012 ] ] ], [ [ [ -175.707630988999853, 51.97386302300005 ], [ -175.678456183999913, 51.966986395000148 ], [ -175.662058071999894, 51.96702708500014 ], [ -175.662058071999894, 51.959621486000131 ], [ -175.703928188999896, 51.952378648000135 ], [ -175.710438605999911, 51.950018622000172 ], [ -175.714955206999946, 51.937323309000121 ], [ -175.726063605999883, 51.933050848 ], [ -175.73969479099992, 51.934556382000054 ], [ -175.752023891999897, 51.939154364000089 ], [ -175.745920376999891, 51.948431708000143 ], [ -175.72411048099994, 51.97386302300005 ], [ -175.707630988999853, 51.97386302300005 ] ] ], [ [ [ -176.559885219999927, 51.960435289000074 ], [ -176.560292120999918, 51.947414455000072 ], [ -176.553781704999921, 51.937323309000121 ], [ -176.53966223899991, 51.932928778000033 ], [ -176.549427863999938, 51.914129950000174 ], [ -176.563913540999891, 51.909125067000119 ], [ -176.58149166599992, 51.90916575700011 ], [ -176.600534633999928, 51.905585028000147 ], [ -176.611398891999897, 51.895453192 ], [ -176.618519660999851, 51.881415106000148 ], [ -176.626942511999914, 51.869086005 ], [ -176.641468878999945, 51.86399974199999 ], [ -176.641468878999945, 51.857163804000052 ], [ -176.588124152999882, 51.857163804000052 ], [ -176.595692511999914, 51.849351304000081 ], [ -176.598011847999885, 51.84393952000012 ], [ -176.596913214999944, 51.838324286000116 ], [ -176.594309048999946, 51.829901434000149 ], [ -176.569081183999884, 51.839056708000058 ], [ -176.549387173999946, 51.835516669000171 ], [ -176.529855923999889, 51.827704169000171 ], [ -176.504953579999921, 51.823675848 ], [ -176.504953579999921, 51.829901434000149 ], [ -176.511789516999954, 51.829901434000149 ], [ -176.504017706999946, 51.838934637000179 ], [ -176.491688605999911, 51.843736070000077 ], [ -176.463978644999912, 51.851019598000093 ], [ -176.44078528599988, 51.841864325000088 ], [ -176.427683071999923, 51.834295966000141 ], [ -176.42638098899991, 51.826808986000074 ], [ -176.431507941999939, 51.815008856000119 ], [ -176.427927212999947, 51.803900458 ], [ -176.426258917999945, 51.794663804000109 ], [ -176.437245245999918, 51.788275458 ], [ -176.433949347999885, 51.778062242000075 ], [ -176.429798956999917, 51.76886627800009 ], [ -176.423939581999889, 51.760972398000106 ], [ -176.415598110999895, 51.754787502000156 ], [ -176.427235480999911, 51.74144114800005 ], [ -176.454782680999926, 51.73045482 ], [ -176.470814581999946, 51.72003815300009 ], [ -176.490793423999918, 51.754217841000084 ], [ -176.522938605999883, 51.741522528000033 ], [ -176.588124152999882, 51.685858466000113 ], [ -176.593617316999911, 51.69611237200003 ], [ -176.601267055999926, 51.702582098000121 ], [ -176.61070716099988, 51.704291083000143 ], [ -176.621652798999918, 51.700140692 ], [ -176.614816860999895, 51.692694403000033 ], [ -176.629628058999884, 51.691961981000091 ], [ -176.64203854099992, 51.686835028000175 ], [ -176.651966925999915, 51.681097723 ], [ -176.659494594999956, 51.678412177000112 ], [ -176.671254035999937, 51.680853583000058 ], [ -176.683827277999939, 51.685492255 ], [ -176.696888800999915, 51.688462632000025 ], [ -176.710397915999891, 51.685858466000113 ], [ -176.719797329999921, 51.669012762000094 ], [ -176.724313930999955, 51.657171942000147 ], [ -176.721262173999889, 51.651760158000101 ], [ -176.71117102799991, 51.647772528000118 ], [ -176.706898566999882, 51.638332424000012 ], [ -176.707102016999954, 51.626857815000065 ], [ -176.710397915999891, 51.617010809000035 ], [ -176.751332160999908, 51.637437242000104 ], [ -176.771351691999882, 51.619614976000136 ], [ -176.784494594999927, 51.612860419000086 ], [ -176.799753383999899, 51.610785223000093 ], [ -176.814442511999914, 51.61554596600017 ], [ -176.824777798999918, 51.624823309000035 ], [ -176.824208136999943, 51.633734442000062 ], [ -176.806589321999923, 51.637437242000104 ], [ -176.806589321999923, 51.644964911000059 ], [ -176.819406704999949, 51.659898179000109 ], [ -176.82831783799989, 51.673814195 ], [ -176.829701300999886, 51.690578518 ], [ -176.820261196999951, 51.713812567000119 ], [ -176.827097133999871, 51.72003815300009 ], [ -176.89598548099994, 51.637437242000104 ], [ -176.902780727999954, 51.626939195000048 ], [ -176.909494594999899, 51.613348700000088 ], [ -176.917062954999949, 51.601548570000105 ], [ -176.92638098899991, 51.596502997000087 ], [ -176.952137824999937, 51.592189846000096 ], [ -176.969838019999941, 51.59267812700007 ], [ -176.97789466099988, 51.600287177000112 ], [ -176.975575324999909, 51.647121486000074 ], [ -176.966623501999891, 51.669134833000086 ], [ -176.902170376999891, 51.700140692 ], [ -176.889963344999927, 51.710150458000086 ], [ -176.882150844999842, 51.720363674000041 ], [ -176.879343227999897, 51.732367255000142 ], [ -176.882313605999911, 51.747300523 ], [ -176.861683722999885, 51.747951565000122 ], [ -176.854969855999911, 51.747300523 ], [ -176.857899542999945, 51.751776434000149 ], [ -176.861195441999882, 51.754787502000156 ], [ -176.820261196999951, 51.76850006700009 ], [ -176.820261196999951, 51.775295315 ], [ -176.84227454299986, 51.773830471000153 ], [ -176.866566535999937, 51.76886627800009 ], [ -176.889881964999944, 51.767157294000086 ], [ -176.909006313999924, 51.775295315 ], [ -176.915109829999921, 51.791937567000062 ], [ -176.904774542999917, 51.807562567000147 ], [ -176.885568813999953, 51.819159247000144 ], [ -176.864938930999926, 51.823675848 ], [ -176.854969855999911, 51.818182684000178 ], [ -176.846547003999888, 51.805975653000118 ], [ -176.833688930999955, 51.793850002000013 ], [ -176.810292120999861, 51.788275458 ], [ -176.726551886999943, 51.781968492000075 ], [ -176.704172329999921, 51.788275458 ], [ -176.72166907499988, 51.795558986000017 ], [ -176.755970831999946, 51.80548737200003 ], [ -176.769032355999911, 51.813177802000141 ], [ -176.779855923999918, 51.829046942000062 ], [ -176.778513149999924, 51.843166408000101 ], [ -176.767201300999943, 51.853338934000064 ], [ -176.748239712999919, 51.857163804000052 ], [ -176.706003383999899, 51.85968659100017 ], [ -176.758737758999899, 51.883978583000058 ], [ -176.779286261999943, 51.908677476000136 ], [ -176.781809048999861, 51.936468817 ], [ -176.776315883999928, 51.944484768000152 ], [ -176.758778449999909, 51.953436591000084 ], [ -176.741647915999948, 51.958319403000147 ], [ -176.722360805999926, 51.960516669000143 ], [ -176.68305416599992, 51.959621486000131 ], [ -176.660511847999942, 51.953192450000031 ], [ -176.648671027999882, 51.95180898600016 ], [ -176.638376430999955, 51.956488348000065 ], [ -176.626779751999948, 51.975165106000148 ], [ -176.621652798999918, 51.980129299000012 ], [ -176.604807094999927, 51.986761786000059 ], [ -176.583729620999918, 51.989691473000093 ], [ -176.562692837999862, 51.987860419000114 ], [ -176.545887824999852, 51.980129299000012 ], [ -176.553334113999938, 51.97386302300005 ], [ -176.559885219999927, 51.960435289000074 ] ] ], [ [ [ -175.874948696999923, 51.994370835000112 ], [ -175.86750240799995, 51.987494208 ], [ -175.85094153599988, 51.988836981000091 ], [ -175.834706183999941, 51.992743231000176 ], [ -175.819569464999944, 51.993963934000092 ], [ -175.80601966099988, 51.987494208 ], [ -175.876413540999891, 51.96893952 ], [ -175.910349087999919, 51.967230536 ], [ -175.950021938999953, 51.97386302300005 ], [ -175.93915768099987, 51.986476955000128 ], [ -175.919504360999923, 51.989447333000143 ], [ -175.89789791599992, 51.986273505000085 ], [ -175.881174282999893, 51.980129299000012 ], [ -175.880441860999952, 51.984808661000116 ], [ -175.878773566999939, 51.987779039000131 ], [ -175.876820441999882, 51.990464585000112 ], [ -175.874948696999923, 51.994370835000112 ] ] ], [ [ [ 178.53785241000017, 51.89667389500012 ], [ 178.516774936000246, 51.896185614000117 ], [ 178.50261478000013, 51.901922919000114 ], [ 178.471364780000187, 51.926255601000079 ], [ 178.464528841999964, 51.932928778000033 ], [ 178.45997155, 51.94440338700015 ], [ 178.46322675900015, 51.952053127000013 ], [ 178.46900475400011, 51.96116771 ], [ 178.471934440999945, 51.976996161000116 ], [ 178.477305535000113, 51.985907294000171 ], [ 178.490407747999967, 51.988674221000124 ], [ 178.506114129000224, 51.989935614000117 ], [ 178.519704623000081, 51.994370835000112 ], [ 178.522959832000225, 51.990545966000084 ], [ 178.526133660000113, 51.988959052000055 ], [ 178.533946160000113, 51.987494208 ], [ 178.573415561000246, 51.975653387000037 ], [ 178.59050540500013, 51.968247789000046 ], [ 178.60230553500017, 51.953436591000084 ], [ 178.604258660000227, 51.93768952000012 ], [ 178.596202019000174, 51.929144598 ], [ 178.582530144000231, 51.922349351000079 ], [ 178.568044467000135, 51.911810614000117 ], [ 178.574229363000285, 51.905585028000147 ], [ 178.559092644000287, 51.900702216000084 ], [ 178.53785241000017, 51.89667389500012 ] ] ], [ [ [ 179.671397332000225, 51.877183335000112 ], [ 179.642100457000168, 51.874172268000123 ], [ 179.566742384000094, 51.885239976000079 ], [ 179.557790561000246, 51.888251044000171 ], [ 179.549327019, 51.894924221000124 ], [ 179.522715691000172, 51.909125067000119 ], [ 179.498220248000138, 51.916408596000153 ], [ 179.497325065999945, 51.926214911000088 ], [ 179.50261478000013, 51.935614325000117 ], [ 179.50660241000017, 51.939154364000089 ], [ 179.503672722000061, 51.950100002000156 ], [ 179.499359571000156, 51.958929755000113 ], [ 179.493500196000213, 51.966538804000052 ], [ 179.486094597000232, 51.97386302300005 ], [ 179.496267123000081, 51.978013414000017 ], [ 179.516368035000227, 51.978216864000146 ], [ 179.527110222000232, 51.980129299000012 ], [ 179.558278842000249, 52.001857815000065 ], [ 179.57447350400011, 52.004380601 ], [ 179.597911004000053, 52.011542059000035 ], [ 179.621267122999967, 52.022162177000084 ], [ 179.636973504000224, 52.03534577000012 ], [ 179.643402540000153, 52.030340887000179 ], [ 179.649261915000096, 52.029038804 ], [ 179.664235873000194, 52.02850983300003 ], [ 179.670095247999967, 52.019842841000113 ], [ 179.67652428500017, 52.015692450000174 ], [ 179.683767123000081, 52.012844143000123 ], [ 179.69214928500017, 52.00804271000014 ], [ 179.718923372999967, 51.987494208 ], [ 179.734548373000138, 51.978827216000113 ], [ 179.749278190999945, 51.973578192000119 ], [ 179.780935092000135, 51.96702708500014 ], [ 179.775075716999964, 51.955471096000011 ], [ 179.763845248000251, 51.946193752000156 ], [ 179.753428582000282, 51.939642645000063 ], [ 179.749847852000102, 51.936021226000108 ], [ 179.755381707000112, 51.922674872000087 ], [ 179.746592644000231, 51.91347890800013 ], [ 179.722666863000285, 51.901922919000114 ], [ 179.699717644000287, 51.886542059000149 ], [ 179.671397332000225, 51.877183335000112 ] ] ], [ [ [ -175.995594855999911, 52.032945054 ], [ -175.985544399999924, 52.026434637000179 ], [ -175.963693813999896, 52.03534577000012 ], [ -175.975087042999945, 52.021918036000116 ], [ -176.03026282499988, 52.012844143000123 ], [ -176.04625403599988, 51.994370835000112 ], [ -176.028879360999895, 51.995998440000122 ], [ -176.021311001999948, 51.990708726000051 ], [ -176.021839972999942, 51.981350002000042 ], [ -176.028879360999895, 51.970445054000052 ], [ -176.043039516999926, 51.963364976 ], [ -176.057728644999941, 51.966945705000157 ], [ -176.080393032999893, 51.980129299000012 ], [ -176.122873501999948, 51.992621161000116 ], [ -176.138701951999906, 51.994370835000112 ], [ -176.138742641999897, 51.994370835000112 ], [ -176.155466274999924, 51.995347398 ], [ -176.164865688999924, 51.998602606000034 ], [ -176.170602993999921, 52.005031643000123 ], [ -176.190012173999918, 52.038519598000093 ], [ -176.194528774999867, 52.051092841000084 ], [ -176.193348761999943, 52.05955638200011 ], [ -176.187204555999955, 52.068060614000061 ], [ -176.175526495999861, 52.089667059000149 ], [ -176.169138149999952, 52.097398179000081 ], [ -176.143259243999921, 52.107123114000117 ], [ -176.105417446999894, 52.110744533000073 ], [ -176.068714972999885, 52.107652085 ], [ -176.04625403599988, 52.097398179000081 ], [ -176.005319790999948, 52.067816473 ], [ -175.998483852999925, 52.05955638200011 ], [ -175.998483852999925, 52.046698309000092 ], [ -175.995594855999911, 52.032945054 ] ] ], [ [ [ 177.576996290000153, 51.988918361000074 ], [ 177.563975457000282, 51.979071356000148 ], [ 177.554453972000175, 51.968451239 ], [ 177.57447350399994, 51.953436591000084 ], [ 177.609141472000118, 51.952460028000118 ], [ 177.614756707000282, 51.950018622000172 ], [ 177.614431186000076, 51.936916408000016 ], [ 177.612071160000227, 51.927923895000092 ], [ 177.605967644000231, 51.92572663 ], [ 177.594248894000174, 51.932928778000033 ], [ 177.58033287900011, 51.925116278000033 ], [ 177.573090040000096, 51.919582424000012 ], [ 177.567637566000116, 51.911810614000117 ], [ 177.555349155000243, 51.920599677000084 ], [ 177.538747592000192, 51.928290106000091 ], [ 177.521250847000175, 51.932928778000033 ], [ 177.505544467000192, 51.932928778000033 ], [ 177.494151238000114, 51.92568594 ], [ 177.486094597000118, 51.915961005000057 ], [ 177.477793816000116, 51.912990627000127 ], [ 177.465098504000224, 51.925482489000146 ], [ 177.471364780000187, 51.939154364000089 ], [ 177.413584832000168, 51.930650132000054 ], [ 177.392344597000175, 51.92088450700011 ], [ 177.36597741000017, 51.912095445000048 ], [ 177.354258660000113, 51.896063544000143 ], [ 177.334483269000174, 51.839667059000121 ], [ 177.330902540000096, 51.833807684000149 ], [ 177.323578321000099, 51.826808986000074 ], [ 177.316905144000174, 51.828762111000131 ], [ 177.306813998000251, 51.836981512000037 ], [ 177.297373894000231, 51.846991278000118 ], [ 177.293142123000138, 51.854071356000176 ], [ 177.283376498000138, 51.862494208000115 ], [ 177.237803582000225, 51.883124091000141 ], [ 177.224294467000249, 51.891994533000101 ], [ 177.293711785000227, 51.922186591000113 ], [ 177.316742384000207, 51.925482489000146 ], [ 177.328868035000113, 51.92967357 ], [ 177.340017123000081, 51.939764716000141 ], [ 177.35840905000012, 51.963324286 ], [ 177.372569207000168, 51.974676825000145 ], [ 177.388031446000099, 51.978583075000145 ], [ 177.423513217000192, 51.980129299000012 ], [ 177.445323113000114, 51.98651764500012 ], [ 177.454274935999962, 51.987494208 ], [ 177.477875196000099, 51.986761786000059 ], [ 177.48503665500013, 51.987494208 ], [ 177.50847415500013, 51.994574286000059 ], [ 177.51628665500013, 52.000962632 ], [ 177.527110222000118, 52.034816799000154 ], [ 177.556000196000213, 52.084906317000062 ], [ 177.553884311000189, 52.10423411699999 ], [ 177.593435092000135, 52.125067450000145 ], [ 177.615407748000251, 52.130072333 ], [ 177.642588738000171, 52.124701239000146 ], [ 177.672211133999923, 52.112697658000044 ], [ 177.683767123000138, 52.105047919000086 ], [ 177.69044030000029, 52.089911200000088 ], [ 177.682139519000287, 52.08283112200003 ], [ 177.663910352000215, 52.075506903000033 ], [ 177.656260613000285, 52.069484768000123 ], [ 177.651052280000187, 52.059637762000094 ], [ 177.648448113000285, 52.043646552000027 ], [ 177.642588738000171, 52.03534577000012 ], [ 177.626963738000171, 52.025213934000149 ], [ 177.567637566000116, 52.001857815000065 ], [ 177.576996290000153, 51.988918361000074 ] ] ], [ [ [ -173.592030402999853, 52.152044989000117 ], [ -173.575266079999921, 52.143744208000143 ], [ -173.548085089999915, 52.14752838700015 ], [ -173.531198696999923, 52.144964911000059 ], [ -173.544870571999866, 52.117905992000104 ], [ -173.531239386999914, 52.124701239000146 ], [ -173.520863410999937, 52.115301825000031 ], [ -173.50800533799989, 52.111558335 ], [ -173.430165167999917, 52.112209377000127 ], [ -173.422230597999942, 52.116766669000086 ], [ -173.414540167999917, 52.117905992000104 ], [ -173.408395962999947, 52.115790106000119 ], [ -173.407297329999892, 52.111070054000024 ], [ -173.405588344999899, 52.10639069200009 ], [ -173.39745032499988, 52.10423411699999 ], [ -173.370106574999909, 52.108587958000086 ], [ -173.360218878999888, 52.105169989000061 ], [ -173.353098110999952, 52.089911200000088 ], [ -173.330637173999946, 52.099758205000015 ], [ -173.30406653599988, 52.10773346600017 ], [ -173.276234503999945, 52.112250067000119 ], [ -173.250070766999897, 52.111721096000153 ], [ -173.249379035999851, 52.10960521000014 ], [ -173.24579830599987, 52.104803778000147 ], [ -173.240956183999913, 52.099798895 ], [ -173.236398891999954, 52.097398179000081 ], [ -173.228138800999886, 52.098049221000011 ], [ -173.216175910999937, 52.10260651200015 ], [ -173.209055141999897, 52.10423411699999 ], [ -173.157826300999943, 52.10423411699999 ], [ -173.140451626999948, 52.109442450000174 ], [ -173.130848761999886, 52.111151434000178 ], [ -173.123402472999913, 52.107977606000119 ], [ -173.114003058999884, 52.101304429000052 ], [ -173.101673956999946, 52.09829336100016 ], [ -172.955799933999884, 52.089911200000088 ], [ -172.974476691999882, 52.083889065000093 ], [ -173.016957160999937, 52.081610419000029 ], [ -173.034047003999888, 52.073187567000062 ], [ -173.051869269999855, 52.068548895000148 ], [ -173.102894660999851, 52.074693101000108 ], [ -173.139759894999912, 52.058661200000031 ], [ -173.164906378999888, 52.056341864000061 ], [ -173.189930792999917, 52.05882396 ], [ -173.213937954999949, 52.070379950000117 ], [ -173.22675533799989, 52.074204820000134 ], [ -173.23859615799995, 52.075751044000171 ], [ -173.243845180999926, 52.073187567000062 ], [ -173.247629360999952, 52.063299872000144 ], [ -173.25645911399991, 52.063055731000119 ], [ -173.27391516799986, 52.069484768000123 ], [ -173.307118292999888, 52.06346263200011 ], [ -173.376535610999923, 52.038763739000117 ], [ -173.414540167999917, 52.03534577000012 ], [ -173.449696417999888, 52.044378973000121 ], [ -173.462961391999926, 52.042792059000092 ], [ -173.472523566999911, 52.037339585000055 ], [ -173.484242316999882, 52.024725653000175 ], [ -173.490223761999914, 52.021673895000092 ], [ -173.500559048999918, 52.022853908000016 ], [ -173.515736456999917, 52.032416083 ], [ -173.523793097999942, 52.03534577000012 ], [ -173.538034633999871, 52.034735419000171 ], [ -173.549916144999884, 52.032171942000062 ], [ -173.560902472999857, 52.03115469 ], [ -173.572214321999923, 52.03534577000012 ], [ -173.557810024999867, 52.044623114000089 ], [ -173.570668097999885, 52.048529364000089 ], [ -173.682077602999925, 52.049017645000063 ], [ -173.67747962099989, 52.055853583000086 ], [ -173.674631313999924, 52.06268952 ], [ -173.688832160999851, 52.069484768000123 ], [ -173.715402798999889, 52.05499909100017 ], [ -173.749134894999884, 52.047796942000147 ], [ -173.836008266999897, 52.043361721000068 ], [ -173.887440558999884, 52.056463934000035 ], [ -173.922067837999862, 52.059393622000144 ], [ -173.929880337999862, 52.066310940000065 ], [ -173.92162024599989, 52.083726304000137 ], [ -173.930897589999915, 52.087347723000093 ], [ -173.956369594999927, 52.089911200000088 ], [ -173.965199347999885, 52.093247789000131 ], [ -173.981516079999921, 52.101304429000052 ], [ -173.990549282999922, 52.10423411699999 ], [ -173.997385219999956, 52.104396877000127 ], [ -174.01496334499987, 52.102728583000115 ], [ -174.024647589999915, 52.10423411699999 ], [ -174.033314581999917, 52.108465887000094 ], [ -174.050485805999955, 52.120266018000066 ], [ -174.059437628999888, 52.124701239000146 ], [ -174.058664516999954, 52.12909577000012 ], [ -174.057484503999945, 52.132147528000033 ], [ -174.055368618999921, 52.134955145000063 ], [ -174.051950649999924, 52.138373114000089 ], [ -174.044667120999918, 52.132554429000137 ], [ -174.023630337999862, 52.12889232 ], [ -174.010975714999915, 52.124701239000146 ], [ -173.958851691999882, 52.122992255000142 ], [ -173.942087368999921, 52.124701239000146 ], [ -173.902211066999882, 52.137518622000172 ], [ -173.887440558999884, 52.138373114000089 ], [ -173.892648891999897, 52.124335028000033 ], [ -173.895822719999956, 52.117987372000087 ], [ -173.901112433999913, 52.111721096000153 ], [ -173.885812954999864, 52.113023179000052 ], [ -173.857370571999951, 52.123358466000141 ], [ -173.846506313999953, 52.124701239000146 ], [ -173.838815883999843, 52.119574286000116 ], [ -173.805531378999945, 52.089911200000088 ], [ -173.790231899999895, 52.115301825000031 ], [ -173.765207485999895, 52.127386786000116 ], [ -173.733631964999887, 52.130845445000134 ], [ -173.698801235999952, 52.130926825000117 ], [ -173.685373501999948, 52.133978583 ], [ -173.660267706999861, 52.148016669000143 ], [ -173.647287563999953, 52.152044989000117 ], [ -173.630848761999857, 52.151271877000099 ], [ -173.61860104099992, 52.147894598000093 ], [ -173.606800910999937, 52.146673895000063 ], [ -173.592030402999853, 52.152044989000117 ] ] ], [ [ [ 175.962901238000285, 52.344061591000084 ], [ 175.928884311000246, 52.339260158000101 ], [ 175.898610873000251, 52.348822333000086 ], [ 175.881846550000233, 52.377997137000037 ], [ 175.915863477000102, 52.377997137000037 ], [ 175.936534050000176, 52.371649481000091 ], [ 175.973317905000187, 52.364650783000016 ], [ 175.99097741000017, 52.358099677000141 ], [ 175.962901238000285, 52.344061591000084 ] ] ], [ [ [ -172.387277798999861, 52.296047268000095 ], [ -172.41279049399995, 52.27855052300005 ], [ -172.425770636999943, 52.276678778000175 ], [ -172.441273566999882, 52.289211330000072 ], [ -172.479440883999928, 52.264797268000123 ], [ -172.529408331999889, 52.25023021 ], [ -172.583241339999915, 52.248236395000063 ], [ -172.633046027999882, 52.261297919000029 ], [ -172.598825649999895, 52.313421942000062 ], [ -172.579050258999871, 52.335842190000093 ], [ -172.55797278599988, 52.35065338700015 ], [ -172.496530727999868, 52.371161200000117 ], [ -172.441273566999882, 52.399074611000131 ], [ -172.435536261999886, 52.393784898000078 ], [ -172.427357550999886, 52.390570380000113 ], [ -172.407175258999871, 52.385443427000027 ], [ -172.383534308999913, 52.368801174000154 ], [ -172.337106899999867, 52.358384507000082 ], [ -172.301584438999896, 52.344305731000034 ], [ -172.310902472999942, 52.316473700000145 ], [ -172.325998501999948, 52.309475002000099 ], [ -172.387277798999861, 52.296047268000095 ] ] ], [ [ [ -174.123890753999888, 52.39972565300009 ], [ -174.102406378999945, 52.394720770000063 ], [ -174.086130337999919, 52.399074611000131 ], [ -174.07172604099992, 52.382025458 ], [ -174.054514126999919, 52.368475653000033 ], [ -174.034413214999887, 52.359930731000119 ], [ -174.010975714999915, 52.358099677000141 ], [ -174.010487433999913, 52.342108466000028 ], [ -173.999623175999915, 52.328029690000093 ], [ -173.991892055999926, 52.312567450000174 ], [ -174.000477667999917, 52.292629299000097 ], [ -174.006947394999941, 52.287095445000077 ], [ -174.015858527999882, 52.281480210000055 ], [ -174.02562415299991, 52.277289130000142 ], [ -174.03461666599992, 52.27558014500012 ], [ -174.046254035999937, 52.271226304000137 ], [ -174.049387173999918, 52.26105377800009 ], [ -174.049509243999893, 52.249457098000065 ], [ -174.051909959999932, 52.240790106000176 ], [ -174.051950649999924, 52.240790106000176 ], [ -174.089182094999899, 52.227118231000063 ], [ -174.180734829999921, 52.230698960000112 ], [ -174.202829555999898, 52.212836005000057 ], [ -174.192738410999937, 52.201361395 ], [ -174.180653449999937, 52.190334377000156 ], [ -174.154367641999897, 52.171942450000117 ], [ -174.11750240799995, 52.152980861000103 ], [ -174.100209113999938, 52.140936591000084 ], [ -174.092966274999924, 52.127834377000042 ], [ -174.098947719999927, 52.112982489000061 ], [ -174.113514777999882, 52.112494208000086 ], [ -174.14789791599992, 52.127834377000042 ], [ -174.156849738999938, 52.12909577000012 ], [ -174.163807745999918, 52.125433661000088 ], [ -174.170521613999881, 52.12034739800005 ], [ -174.178578253999916, 52.117905992000104 ], [ -174.189645962999947, 52.119330145000092 ], [ -174.211008266999897, 52.124660549000154 ], [ -174.223255988999881, 52.124701239000146 ], [ -174.216501430999926, 52.116603908000016 ], [ -174.213205532999893, 52.107977606000119 ], [ -174.213205532999893, 52.099066473000093 ], [ -174.216420050999943, 52.089911200000088 ], [ -174.230051235999895, 52.095607815000093 ], [ -174.271066860999895, 52.097398179000081 ], [ -174.279245571999923, 52.100775458000086 ], [ -174.30052649599989, 52.11322663 ], [ -174.305856899999952, 52.117905992000104 ], [ -174.321034308999941, 52.123358466000141 ], [ -174.338693813999953, 52.120550848 ], [ -174.356882290999948, 52.114813544000029 ], [ -174.373768683999941, 52.111721096000153 ], [ -174.413197394999912, 52.113836981000148 ], [ -174.429921027999939, 52.110052802000141 ], [ -174.435536261999943, 52.097398179000081 ], [ -174.42133541599992, 52.102280992000132 ], [ -174.406198696999923, 52.104193427 ], [ -174.374134894999855, 52.10423411699999 ], [ -174.374134894999855, 52.097398179000081 ], [ -174.392770962999947, 52.092840887000122 ], [ -174.398142055999898, 52.052639065000122 ], [ -174.411366339999944, 52.042792059000092 ], [ -174.435861782999865, 52.044501044000114 ], [ -174.444447394999884, 52.050848700000031 ], [ -174.449167446999894, 52.063421942000119 ], [ -174.46226966099988, 52.083726304000137 ], [ -174.475697394999941, 52.068915106000148 ], [ -174.493275519999884, 52.072007554000137 ], [ -174.510935024999895, 52.084377346000068 ], [ -174.524973110999952, 52.097398179000081 ], [ -174.526071743999893, 52.081976630000142 ], [ -174.497792120999918, 52.053168036 ], [ -174.490183071999894, 52.03534577000012 ], [ -174.504831508999899, 52.047512111000017 ], [ -174.52314205599987, 52.057318427000141 ], [ -174.542185024999952, 52.061428127000099 ], [ -174.559071417999945, 52.056463934000035 ], [ -174.552601691999854, 52.052964585000055 ], [ -174.543649868999921, 52.04572174700003 ], [ -174.538563605999911, 52.042792059000092 ], [ -174.538563605999911, 52.03534577000012 ], [ -174.550648566999911, 52.036769924000097 ], [ -174.571278449999937, 52.041693427000055 ], [ -174.582956508999928, 52.042792059000092 ], [ -174.592396613999938, 52.040716864000089 ], [ -174.61546790299991, 52.031317450000145 ], [ -174.627390102999925, 52.02850983300003 ], [ -174.650746222999942, 52.03266022300015 ], [ -174.694203253999888, 52.051581122000172 ], [ -174.709299282999893, 52.049017645000063 ], [ -174.699330206999889, 52.042547919000143 ], [ -174.697702602999868, 52.035834052000112 ], [ -174.703724738999881, 52.030585028000033 ], [ -174.716745571999866, 52.02850983300003 ], [ -174.702137824999937, 52.020575262000037 ], [ -174.715280727999897, 52.016506252000099 ], [ -174.754261847999885, 52.014837958000086 ], [ -174.763050910999851, 52.016994533000073 ], [ -174.783273891999869, 52.02635325700011 ], [ -174.888050910999937, 52.042792059000092 ], [ -174.899037238999881, 52.039780992000104 ], [ -174.918649868999921, 52.030462958000058 ], [ -174.929025844999927, 52.02850983300003 ], [ -174.967477993999921, 52.030585028000033 ], [ -174.984811977999925, 52.027899481000148 ], [ -175.000965949999909, 52.018255927000084 ], [ -175.035023566999911, 52.004339911 ], [ -175.323557094999927, 52.007757880000113 ], [ -175.340524868999921, 52.014837958000086 ], [ -175.31078040299991, 52.026678778000033 ], [ -175.210194464999859, 52.03534577000012 ], [ -175.161325649999867, 52.048529364000089 ], [ -175.141306118999921, 52.049017645000063 ], [ -175.124501105999911, 52.047552802 ], [ -175.110218878999916, 52.044623114000089 ], [ -175.106312628999916, 52.038763739000117 ], [ -175.120798305999955, 52.02850983300003 ], [ -175.10411536399991, 52.029852606000091 ], [ -175.075998501999919, 52.040594794000114 ], [ -175.059315558999884, 52.042792059000092 ], [ -175.042469855999883, 52.038723049000126 ], [ -175.029855923999889, 52.032538153000175 ], [ -175.019846157999922, 52.031480210000112 ], [ -175.010935024999895, 52.042792059000092 ], [ -175.023508266999869, 52.048407294000114 ], [ -175.027048305999955, 52.05402252800009 ], [ -175.024606899999924, 52.066107489 ], [ -175.019968227999897, 52.074530341000141 ], [ -175.009958462999919, 52.074774481000091 ], [ -175.000477667999917, 52.071478583000058 ], [ -174.997263149999952, 52.069484768000123 ], [ -174.994130011999886, 52.066310940000065 ], [ -174.984608527999882, 52.06053294500002 ], [ -174.974598761999886, 52.058335679000109 ], [ -174.969960089999859, 52.066107489 ], [ -174.965931769999884, 52.079738674000154 ], [ -174.956735805999926, 52.0821800800001 ], [ -174.93895423099994, 52.076890367000104 ], [ -174.930287238999938, 52.086615302000055 ], [ -174.917795376999948, 52.104681708000086 ], [ -174.90656490799995, 52.114894924000012 ], [ -174.90172278599988, 52.100816148000078 ], [ -174.893788214999887, 52.088934637000122 ], [ -174.855091925999943, 52.104803778000147 ], [ -174.840199347999885, 52.089911200000088 ], [ -174.824940558999913, 52.097601630000113 ], [ -174.808664516999897, 52.098049221000011 ], [ -174.794504360999866, 52.091131903000118 ], [ -174.785633917999917, 52.076890367000104 ], [ -174.755482550999886, 52.094875393000152 ], [ -174.744007941999854, 52.103501695000048 ], [ -174.744007941999854, 52.117905992000104 ], [ -174.722971157999922, 52.124701239000146 ], [ -174.697824673999946, 52.110988674000041 ], [ -174.650380011999914, 52.104315497000144 ], [ -174.601551886999914, 52.104641018000095 ], [ -174.572132941999939, 52.111721096000153 ], [ -174.592152472999885, 52.115301825000031 ], [ -174.597889777999882, 52.122626044000029 ], [ -174.590687628999945, 52.131048895000092 ], [ -174.572132941999939, 52.138373114000089 ], [ -174.551625128999888, 52.139105536000116 ], [ -174.529123501999891, 52.137111721000068 ], [ -174.509470180999926, 52.139105536000116 ], [ -174.497629360999895, 52.152044989000117 ], [ -174.526722785999937, 52.15131256700009 ], [ -174.540476040999948, 52.153225002000127 ], [ -174.552845831999889, 52.158880927000141 ], [ -174.545399542999917, 52.165716864000061 ], [ -174.550038214999944, 52.168524481000091 ], [ -174.552357550999915, 52.17080312700007 ], [ -174.559071417999945, 52.179348049000012 ], [ -174.449208136999886, 52.179348049000012 ], [ -174.42442786399991, 52.170843817000062 ], [ -174.412668423999946, 52.171210028000175 ], [ -174.407663540999891, 52.182766018 ], [ -174.413034633999871, 52.189601955000128 ], [ -174.425607876999948, 52.196682033000101 ], [ -174.449208136999886, 52.206691799000069 ], [ -174.449208136999886, 52.212836005000057 ], [ -174.387074347999857, 52.212958075000031 ], [ -174.361195441999939, 52.20538971600017 ], [ -174.339344855999911, 52.186183986000017 ], [ -174.330881313999953, 52.202337958000086 ], [ -174.315419074999937, 52.214667059000035 ], [ -174.29828854099992, 52.219427802000112 ], [ -174.284738735999952, 52.212836005000057 ], [ -174.277658657999893, 52.219549872000087 ], [ -174.272572394999855, 52.23135000200007 ], [ -174.267648891999897, 52.237697658000101 ], [ -174.25914466099988, 52.240912177000055 ], [ -174.236317511999943, 52.243719794000114 ], [ -174.229481574999937, 52.248236395000063 ], [ -174.228260870999918, 52.267523505 ], [ -174.24474036399991, 52.274155992000075 ], [ -174.284738735999952, 52.27558014500012 ], [ -174.299672003999888, 52.283148505000085 ], [ -174.309519008999899, 52.293036200000088 ], [ -174.317128058999941, 52.302679755000057 ], [ -174.325672980999883, 52.309637762000065 ], [ -174.344919399999924, 52.315375067000119 ], [ -174.355295376999919, 52.311183986000103 ], [ -174.356271938999896, 52.299261786000145 ], [ -174.346791144999884, 52.281805731000091 ], [ -174.376779751999948, 52.283840236000017 ], [ -174.415842251999891, 52.293443101 ], [ -174.442575649999924, 52.307521877000127 ], [ -174.435536261999943, 52.322699286000116 ], [ -174.369374152999853, 52.324774481000063 ], [ -174.338612433999884, 52.335516669000143 ], [ -174.346791144999884, 52.364325262000094 ], [ -174.334421352999925, 52.370266018000038 ], [ -174.323068813999868, 52.367865302000084 ], [ -174.311472133999871, 52.363755601000108 ], [ -174.298410610999895, 52.364325262000094 ], [ -174.288319464999915, 52.371771552000084 ], [ -174.282297329999892, 52.388413804000109 ], [ -174.242054816999911, 52.396877346000153 ], [ -174.190297003999888, 52.41787344 ], [ -174.161813930999898, 52.419582424000012 ], [ -174.145456508999871, 52.409491278000033 ], [ -174.123890753999888, 52.39972565300009 ] ] ], [ [ [ 173.791270379000167, 52.501532294000057 ], [ 173.730642123000194, 52.47211334800015 ], [ 173.713063997999967, 52.45058828300013 ], [ 173.726084832000168, 52.422919012000037 ], [ 173.733653191000116, 52.411200262000037 ], [ 173.738942905000243, 52.394435940000122 ], [ 173.742442254000167, 52.376410223 ], [ 173.743418815999945, 52.361232815 ], [ 173.660899284999942, 52.35065338700015 ], [ 173.663584832000225, 52.356105861000103 ], [ 173.664235872999967, 52.35871002800009 ], [ 173.665049675000176, 52.360663153000033 ], [ 173.668467644000287, 52.364325262000094 ], [ 173.668467644000287, 52.371161200000117 ], [ 173.656016472000175, 52.370062567000062 ], [ 173.644541863000285, 52.371161200000117 ], [ 173.634532097000232, 52.373968817000062 ], [ 173.626719597000232, 52.377997137000037 ], [ 173.62761478000013, 52.394598700000088 ], [ 173.605316602000102, 52.39679596600017 ], [ 173.500661655000187, 52.387030341000056 ], [ 173.401703320999928, 52.396673895 ], [ 173.38892662900011, 52.403794664000074 ], [ 173.394053582000168, 52.419582424000012 ], [ 173.408457879000167, 52.430121161000059 ], [ 173.431325717000249, 52.44049713700015 ], [ 173.454274936000246, 52.447211005000113 ], [ 173.469086134000207, 52.446844794000086 ], [ 173.491465690999945, 52.442043361000017 ], [ 173.510508660000227, 52.44159577 ], [ 173.527842644000231, 52.44550202 ], [ 173.544932488000285, 52.453680731000119 ], [ 173.567067905000243, 52.471177476000079 ], [ 173.575531446000213, 52.473578192 ], [ 173.592784050000176, 52.474066473 ], [ 173.599294467000192, 52.476385809000149 ], [ 173.602305535000113, 52.481675523000135 ], [ 173.609548373000194, 52.491278387000122 ], [ 173.618662957000282, 52.498724677 ], [ 173.624522332000225, 52.500718492000132 ], [ 173.631114129000224, 52.500433661 ], [ 173.737478061000189, 52.510809637000094 ], [ 173.767344597000118, 52.509426174000012 ], [ 173.791270379000167, 52.501532294000057 ] ] ], [ [ [ -171.222157355999911, 52.46308014500012 ], [ -171.27684485599994, 52.453680731000119 ], [ -171.311634894999884, 52.464260158000158 ], [ -171.31464596299989, 52.488430080000072 ], [ -171.293568488999881, 52.514105536000116 ], [ -171.256418423999889, 52.529445705000072 ], [ -171.221669074999909, 52.510809637000094 ], [ -171.207630988999881, 52.498724677 ], [ -171.211659308999913, 52.484442450000088 ], [ -171.216013149999924, 52.477240302000055 ], [ -171.218088344999927, 52.469387111000074 ], [ -171.222157355999911, 52.46308014500012 ] ] ], [ [ [ -170.59784908799989, 52.611395575000117 ], [ -170.621937628999888, 52.593898830000157 ], [ -170.645456508999956, 52.587103583000143 ], [ -170.670847133999871, 52.589016018000095 ], [ -170.700876430999926, 52.597723700000174 ], [ -170.752797003999916, 52.574286200000088 ], [ -170.769154425999943, 52.562933661000116 ], [ -170.786081508999928, 52.547512111000103 ], [ -170.797840949999909, 52.540269273000078 ], [ -170.81078040299991, 52.542914130000057 ], [ -170.831247524999952, 52.556708075000174 ], [ -170.83739173099994, 52.549261786 ], [ -170.846669074999909, 52.584377346000068 ], [ -170.821237758999871, 52.616034247000059 ], [ -170.755482550999886, 52.659125067000062 ], [ -170.748646613999881, 52.667669989 ], [ -170.747059699999937, 52.674383856000034 ], [ -170.743723110999923, 52.678697007000139 ], [ -170.73192298099994, 52.680243231000176 ], [ -170.715077277999939, 52.68032461100016 ], [ -170.703480597999942, 52.681870835000026 ], [ -170.694081183999913, 52.686835028000147 ], [ -170.684071417999917, 52.696966864000032 ], [ -170.670480923999889, 52.700832424000012 ], [ -170.647084113999881, 52.69916413 ], [ -170.622303839999915, 52.693996486000103 ], [ -170.604644334999904, 52.687079169000086 ], [ -170.593454555999898, 52.685207424000126 ], [ -170.583119269999884, 52.68235911699999 ], [ -170.573353644999941, 52.678371486000017 ], [ -170.563710089999887, 52.672796942 ], [ -170.566110805999926, 52.662176825000145 ], [ -170.565907355999883, 52.65615469000015 ], [ -170.567250128999859, 52.650702216000028 ], [ -170.59784908799989, 52.611395575000117 ] ] ], [ [ [ 174.164805535000113, 52.720933335000055 ], [ 174.182302280000187, 52.70693594 ], [ 174.096690300000176, 52.713771877000042 ], [ 174.080332879000053, 52.717678127000013 ], [ 174.083506707000112, 52.726507880000085 ], [ 174.097666863000228, 52.735785223000121 ], [ 174.113942905000073, 52.741034247000115 ], [ 174.164805535000113, 52.720933335000055 ] ] ], [ [ [ -170.128122524999895, 52.727443752000156 ], [ -170.194406704999949, 52.727443752000156 ], [ -170.180246548999918, 52.766791083000058 ], [ -170.17328854099992, 52.775213934000092 ], [ -170.179676886999943, 52.78001536699999 ], [ -170.182443813999896, 52.781480210000055 ], [ -170.186960415999863, 52.782660223000093 ], [ -170.169016079999921, 52.789780992000132 ], [ -170.146555141999926, 52.791001695000048 ], [ -170.12364661399991, 52.78807200700011 ], [ -170.104400193999879, 52.782660223000093 ], [ -170.086252407999893, 52.779120184000092 ], [ -170.065785285999908, 52.771063544000143 ], [ -170.056101040999948, 52.760321356000148 ], [ -170.070261196999866, 52.748480536 ], [ -170.067209438999896, 52.744574286 ], [ -170.065744594999927, 52.741441148000106 ], [ -170.063425258999956, 52.734279690000065 ], [ -170.128122524999895, 52.727443752000156 ] ] ], [ [ [ -169.78290768099987, 52.892523505000057 ], [ -169.767526821999923, 52.884711005000057 ], [ -169.755482550999915, 52.884914455000015 ], [ -169.743356899999924, 52.887111721000011 ], [ -169.727609829999892, 52.88507721600017 ], [ -169.715891079999892, 52.879055080000072 ], [ -169.70722408799989, 52.872748114000117 ], [ -169.698557094999899, 52.86933014500012 ], [ -169.686634894999855, 52.872015692 ], [ -169.686634894999855, 52.866929429000081 ], [ -169.684763149999895, 52.863999742000047 ], [ -169.681996222999942, 52.861476955000128 ], [ -169.679269985999952, 52.857733466000113 ], [ -169.683054165999891, 52.851996161000116 ], [ -169.693470831999889, 52.830471096000011 ], [ -169.679269985999952, 52.823635158000101 ], [ -169.692575649999867, 52.813788153000175 ], [ -169.70653235599994, 52.80556875200007 ], [ -169.713856574999852, 52.796128648000078 ], [ -169.707142706999917, 52.782660223000093 ], [ -169.723378058999941, 52.77448151200015 ], [ -169.737904425999886, 52.778306382 ], [ -169.761789516999954, 52.795721747000144 ], [ -169.781442837999919, 52.803900458000058 ], [ -169.864816860999923, 52.820868231000034 ], [ -169.877308722999942, 52.819525458000143 ], [ -169.914865688999924, 52.799383856000119 ], [ -169.922067837999862, 52.797552802000141 ], [ -169.939930792999917, 52.795721747000144 ], [ -169.957102016999954, 52.79035065300009 ], [ -169.964100714999944, 52.789496161 ], [ -169.97016354099992, 52.791652736000103 ], [ -169.978993292999888, 52.80101146000014 ], [ -170.000721808999856, 52.809515692000062 ], [ -170.01109778599988, 52.823635158000101 ], [ -170.011667446999923, 52.837713934000035 ], [ -169.973255988999938, 52.855658270000092 ], [ -169.964100714999944, 52.857733466000113 ], [ -169.922840949999909, 52.85089752800009 ], [ -169.899362758999928, 52.851792710000083 ], [ -169.887440558999884, 52.855292059000149 ], [ -169.86851966099988, 52.875148830000072 ], [ -169.850290493999893, 52.882513739000061 ], [ -169.802967902999939, 52.882269598000121 ], [ -169.78290768099987, 52.892523505000057 ] ] ], [ [ [ -170.030588344999956, 52.864569403000033 ], [ -170.056101040999948, 52.857082424000154 ], [ -170.090769008999928, 52.864569403000033 ], [ -170.104807094999899, 52.871161200000088 ], [ -170.117054816999939, 52.879217841000028 ], [ -170.124826626999948, 52.888617255000057 ], [ -170.125477667999888, 52.899359442000062 ], [ -170.117298956999889, 52.909654038999989 ], [ -170.103220180999926, 52.916327216000141 ], [ -170.086374477999925, 52.919501044000114 ], [ -170.070261196999866, 52.919175523 ], [ -170.014271613999938, 52.905829169000171 ], [ -169.994577602999897, 52.905585028000033 ], [ -170.01109778599988, 52.882269598000121 ], [ -170.030588344999956, 52.864569403000033 ] ] ], [ [ [ 172.904063347000175, 53.001166083000115 ], [ 172.911387566000116, 52.998602606000091 ], [ 172.914235873000024, 52.992661851 ], [ 172.916270379000167, 52.986232815000065 ], [ 172.921071811000076, 52.981878973000065 ], [ 172.934092644000231, 52.97988515800013 ], [ 172.957286004000167, 52.979641018000095 ], [ 172.969411655000073, 52.974432684000092 ], [ 173.008067254000053, 52.989691473000065 ], [ 173.027191601999988, 52.993597723000065 ], [ 173.127207879000167, 52.994940497000144 ], [ 173.143321160000056, 52.990383205000015 ], [ 173.175059441000172, 52.971747137000122 ], [ 173.184743686000019, 52.967596747000172 ], [ 173.186045769000231, 52.961818752000013 ], [ 173.171397332000225, 52.948635158000073 ], [ 173.140147332000168, 52.926662502000156 ], [ 173.151540561000019, 52.92877838700015 ], [ 173.160329623000194, 52.927720445000105 ], [ 173.165863477000045, 52.922756252000156 ], [ 173.167491082000225, 52.913031317 ], [ 173.222178582000168, 52.937323309000178 ], [ 173.249847852000158, 52.944403387000065 ], [ 173.25684655000012, 52.933498440000065 ], [ 173.301280144000231, 52.925604559000092 ], [ 173.322520379000224, 52.916001695000105 ], [ 173.321787957000225, 52.902492580000128 ], [ 173.309336785000113, 52.892767645 ], [ 173.296397332000168, 52.88548411699999 ], [ 173.263031446000099, 52.872015692 ], [ 173.301524285000113, 52.859320380000142 ], [ 173.351573113000285, 52.852484442000119 ], [ 173.401866082000168, 52.851874091000141 ], [ 173.441905144000287, 52.857733466000113 ], [ 173.433116082000168, 52.838568427000141 ], [ 173.41871178500017, 52.830755927000055 ], [ 173.376638217000135, 52.830471096000011 ], [ 173.337412957, 52.826239325000088 ], [ 173.322032097000175, 52.820217190000093 ], [ 173.321543816000172, 52.810858466000141 ], [ 173.296153190999945, 52.829535223000121 ], [ 173.281993035000227, 52.837388414000102 ], [ 173.263031446000099, 52.844142971000153 ], [ 173.241953972000175, 52.847113348000065 ], [ 173.222666863000171, 52.843817450000031 ], [ 173.206553582000168, 52.833929755000113 ], [ 173.194834832000112, 52.816799221000068 ], [ 173.188649936000019, 52.816799221000068 ], [ 173.188649936000019, 52.823635158000101 ], [ 173.181162957000055, 52.823635158000101 ], [ 173.174327019000231, 52.809312242000104 ], [ 173.188649936000019, 52.803168036000116 ], [ 173.188649936000019, 52.795721747000144 ], [ 173.163747592000192, 52.793524481000148 ], [ 173.146494988000114, 52.788275458000086 ], [ 173.131521030000073, 52.788641669000086 ], [ 173.112803582000112, 52.803168036000116 ], [ 173.094004754000053, 52.826564846000039 ], [ 173.089366082000112, 52.830471096000011 ], [ 173.077484571000156, 52.828314520000035 ], [ 173.057871941000116, 52.818915106000091 ], [ 173.048350457000112, 52.816799221000068 ], [ 173.016612175000233, 52.802191473000065 ], [ 172.981293165000039, 52.772772528000147 ], [ 172.944346550000063, 52.749823309000178 ], [ 172.907481316, 52.754706122000144 ], [ 172.910817905000016, 52.760158596000096 ], [ 172.91285241000017, 52.770086981000091 ], [ 172.912119988000228, 52.780991929000081 ], [ 172.907481316, 52.789496161 ], [ 172.893809441000172, 52.796087958000086 ], [ 172.880218946000042, 52.795314846000153 ], [ 172.85621178500017, 52.789496161 ], [ 172.849375847000061, 52.791815497000144 ], [ 172.839366082000055, 52.801581122000087 ], [ 172.832286004, 52.803168036000116 ], [ 172.826996290000039, 52.799383856000119 ], [ 172.821787957000225, 52.785630601 ], [ 172.814626498000194, 52.782660223000093 ], [ 172.801768425000176, 52.784409898000078 ], [ 172.776621941000172, 52.792873440000037 ], [ 172.763438347000061, 52.795721747000144 ], [ 172.763438347000061, 52.803168036000116 ], [ 172.776703321000156, 52.810980536000116 ], [ 172.783213738000171, 52.822821356000176 ], [ 172.790782097, 52.85089752800009 ], [ 172.808767123000081, 52.877508856000034 ], [ 172.811045769000117, 52.887925523000106 ], [ 172.797618035000056, 52.892523505000057 ], [ 172.78785241000017, 52.890814520000148 ], [ 172.756032748000081, 52.878241278000147 ], [ 172.744476759000037, 52.877101955000043 ], [ 172.708181186000019, 52.878241278000147 ], [ 172.640391472, 52.868801174000126 ], [ 172.626149936000189, 52.872015692 ], [ 172.635590040000039, 52.879339911 ], [ 172.660411004000167, 52.913031317 ], [ 172.652842644000231, 52.924383856000176 ], [ 172.639903191000059, 52.928045966000028 ], [ 172.605153842000078, 52.926662502000156 ], [ 172.54761803500017, 52.91290924700003 ], [ 172.534027540000039, 52.916083075000088 ], [ 172.520192905000016, 52.922593492000019 ], [ 172.491872592000192, 52.920111395000063 ], [ 172.476084832000225, 52.926662502000156 ], [ 172.551117384000094, 52.967596747000172 ], [ 172.557383660000056, 52.960150458 ], [ 172.57691491, 52.977972723000093 ], [ 172.660411004000167, 53.008612372000087 ], [ 172.73080488399998, 53.000392971000096 ], [ 172.746755405000187, 53.004868882000054 ], [ 172.762868686000076, 53.014146226000108 ], [ 172.781097852000158, 53.015529690000093 ], [ 172.904063347000175, 53.001166083000115 ] ] ], [ [ [ -169.719349738999881, 52.950140692000119 ], [ -169.748117641999926, 52.94651927300005 ], [ -169.741932745999947, 52.960150458 ], [ -169.760487433999856, 52.968695380000113 ], [ -169.758005337999919, 52.98273346600017 ], [ -169.749867316999911, 52.998480536000116 ], [ -169.753285285999937, 53.02480703300013 ], [ -169.734242316999939, 53.032904364000061 ], [ -169.709421352999868, 53.03652578300013 ], [ -169.693470831999889, 53.03587474199999 ], [ -169.680734829999921, 53.033189195000105 ], [ -169.67320716099988, 53.025213934000064 ], [ -169.669138149999895, 53.013861395000063 ], [ -169.66620846299989, 53.001166083000115 ], [ -169.686350063999924, 52.988999742000132 ], [ -169.701405402999939, 52.968207098000121 ], [ -169.719349738999881, 52.950140692000119 ] ] ], [ [ [ -168.00829016799986, 53.570298570000105 ], [ -167.959909633999956, 53.537787177000112 ], [ -167.934681769999884, 53.526760158000073 ], [ -167.901560024999952, 53.52252838700015 ], [ -167.837391730999911, 53.525458075000174 ], [ -167.806996222999942, 53.520086981000119 ], [ -167.794789191999882, 53.502020575000088 ], [ -167.808094855999911, 53.477932033000073 ], [ -167.85297604099992, 53.447251695 ], [ -167.871164516999897, 53.426947333000086 ], [ -167.861683722999885, 53.421454169000143 ], [ -167.853871222999885, 53.413641669000143 ], [ -167.85130774599989, 53.403876044000114 ], [ -167.857492641999954, 53.392767645000092 ], [ -167.850046352999897, 53.385402736000103 ], [ -167.875559048999889, 53.371893622000115 ], [ -167.93773352799991, 53.348456122000059 ], [ -167.966420050999943, 53.344427802000084 ], [ -167.988107876999948, 53.338568427000112 ], [ -168.138172980999911, 53.273260809000035 ], [ -168.172230597999913, 53.26504140800013 ], [ -168.225778774999924, 53.259711005000085 ], [ -168.256459113999938, 53.250311591000141 ], [ -168.271188930999926, 53.248195705000128 ], [ -168.287587042999917, 53.242987372000144 ], [ -168.311716274999924, 53.220038153000147 ], [ -168.329213019999884, 53.214667059000092 ], [ -168.325428839999859, 53.204779364 ], [ -168.322987433999941, 53.200995184000149 ], [ -168.340199347999942, 53.189398505000057 ], [ -168.349436001999919, 53.172430731000176 ], [ -168.359120245999861, 53.161078192 ], [ -168.377634243999893, 53.16620514500012 ], [ -168.376576300999943, 53.140204169000029 ], [ -168.390695766999954, 53.124701239000117 ], [ -168.412098761999914, 53.112616278000118 ], [ -168.432850714999915, 53.097357489000146 ], [ -168.466053839999915, 53.056626695 ], [ -168.489938930999898, 53.042059637000065 ], [ -168.515451626999891, 53.050197658000158 ], [ -168.531198696999951, 53.034613348000065 ], [ -168.584055141999926, 53.030462958000115 ], [ -168.607289191999939, 53.018866278000118 ], [ -168.626210089999859, 53.004950262000037 ], [ -168.671579555999955, 52.982367255000057 ], [ -168.686105923999889, 52.967596747000172 ], [ -168.681467251999891, 52.96308014500012 ], [ -168.679310675999886, 52.960150458 ], [ -168.751291469999899, 52.960150458 ], [ -168.774525519999941, 52.956366278000175 ], [ -168.778635219999899, 52.947333075000174 ], [ -168.769886847999913, 52.936265367000132 ], [ -168.754383917999917, 52.926662502000156 ], [ -168.766061977999897, 52.913885809000121 ], [ -168.780384894999884, 52.913641669000171 ], [ -168.795399542999917, 52.921820380000085 ], [ -168.809030727999954, 52.933498440000065 ], [ -168.818348761999914, 52.919623114000089 ], [ -168.83177649599989, 52.918524481000034 ], [ -168.846628383999956, 52.920599677000055 ], [ -168.860218878999916, 52.916083075000088 ], [ -168.885731574999909, 52.896185614 ], [ -168.900827602999925, 52.888251044000143 ], [ -168.934681769999884, 52.882635809000035 ], [ -168.988392706999946, 52.864569403000033 ], [ -169.024240688999953, 52.859564520000092 ], [ -169.039906378999916, 52.853664455000128 ], [ -169.035593227999925, 52.844142971000153 ], [ -169.035593227999925, 52.83730703300013 ], [ -169.111276821999923, 52.823635158000101 ], [ -169.095326300999886, 52.83490631700009 ], [ -169.077219204999892, 52.837591864000061 ], [ -169.060861782999893, 52.84178294500002 ], [ -169.049875454999921, 52.857733466000113 ], [ -169.053171352999954, 52.859808661000116 ], [ -169.053822394999912, 52.860337632000025 ], [ -169.054066535999937, 52.861314195 ], [ -169.05601966099988, 52.864569403000033 ], [ -168.996571417999945, 52.871527411000116 ], [ -168.98094641799986, 52.878241278000147 ], [ -168.97044837099989, 52.894720770000148 ], [ -168.967884894999884, 52.927191473000121 ], [ -168.952992316999939, 52.940334377000099 ], [ -168.930246548999889, 52.94428131700009 ], [ -168.910104946999951, 52.940619208000115 ], [ -168.890980597999885, 52.940334377000099 ], [ -168.871083136999886, 52.954006252000127 ], [ -168.863270636999914, 52.971584377000156 ], [ -168.862009243999893, 53.006903387000179 ], [ -168.850575324999937, 53.022202867000047 ], [ -168.828928188999953, 53.016099351000051 ], [ -168.808054165999891, 53.028387762000122 ], [ -168.77208411399991, 53.066961981000176 ], [ -168.768625454999892, 53.08144765800013 ], [ -168.794504360999923, 53.115545966000141 ], [ -168.795969204999892, 53.138332424000069 ], [ -168.788522915999891, 53.152329820000134 ], [ -168.775339321999951, 53.170803127000156 ], [ -168.759510870999918, 53.186712958000086 ], [ -168.727406378999945, 53.199286200000145 ], [ -168.697824673999889, 53.223700262000122 ], [ -168.686105923999889, 53.228338934000035 ], [ -168.637562628999945, 53.250474351000108 ], [ -168.630848761999886, 53.258734442 ], [ -168.623361782999922, 53.274237372000115 ], [ -168.60570227799991, 53.275132554000109 ], [ -168.569447394999884, 53.261786200000088 ], [ -168.550485805999898, 53.252427476000079 ], [ -168.541330532999893, 53.249335028000175 ], [ -168.528187628999945, 53.248195705000128 ], [ -168.520822719999956, 53.251288153000033 ], [ -168.501535610999923, 53.265448309000149 ], [ -168.482411261999943, 53.270493882 ], [ -168.473744269999941, 53.274237372000115 ], [ -168.46430416599992, 53.276800848000121 ], [ -168.453358527999853, 53.275458075000031 ], [ -168.447865363999938, 53.270819403000118 ], [ -168.43891354099992, 53.25470612200003 ], [ -168.432850714999915, 53.248195705000128 ], [ -168.404367641999897, 53.257961330000072 ], [ -168.379465298999861, 53.260972398 ], [ -168.360788540999891, 53.271307684000092 ], [ -168.35094153599988, 53.302801825000117 ], [ -168.362294074999937, 53.297308661000088 ], [ -168.371530727999897, 53.298325914000046 ], [ -168.375477667999888, 53.305161851000051 ], [ -168.37079830599987, 53.317084052 ], [ -168.386097785999937, 53.322577216000028 ], [ -168.417795376999891, 53.326239325000174 ], [ -168.432850714999915, 53.33006419500002 ], [ -168.432850714999915, 53.337591864000061 ], [ -168.419748501999948, 53.342718817000062 ], [ -168.406198696999866, 53.353664455000128 ], [ -168.395700649999924, 53.366848049000097 ], [ -168.391916469999899, 53.378485419000086 ], [ -168.396962042999917, 53.396673895000092 ], [ -168.40404212099989, 53.40322500200007 ], [ -168.406564907999893, 53.409491278000118 ], [ -168.398142055999926, 53.426947333000086 ], [ -168.373605923999918, 53.460150458 ], [ -168.364613410999908, 53.467922268000095 ], [ -168.349720831999946, 53.473822333000115 ], [ -168.314564581999889, 53.482001044000029 ], [ -168.270700649999924, 53.513861395000063 ], [ -168.236805792999888, 53.530096747000115 ], [ -168.199818488999938, 53.540228583000058 ], [ -168.125477667999945, 53.546698309000149 ], [ -168.107004360999923, 53.551703192 ], [ -168.093373175999886, 53.559759833000143 ], [ -168.077870245999861, 53.563381252000013 ], [ -168.028879360999895, 53.560492255000085 ], [ -168.00829016799986, 53.570298570000105 ] ] ], [ [ [ -166.089182094999899, 53.844671942 ], [ -166.099191860999895, 53.833929755 ], [ -166.102772589999944, 53.831000067000062 ], [ -166.112904425999886, 53.830308335000112 ], [ -166.120961066999939, 53.826483466000113 ], [ -166.126820441999882, 53.819810289000074 ], [ -166.130116339999915, 53.810492255000113 ], [ -166.119618292999945, 53.802639065000122 ], [ -166.117176886999914, 53.793036200000145 ], [ -166.121205206999889, 53.783636786000116 ], [ -166.130116339999915, 53.77635325700011 ], [ -166.144479946999894, 53.772528387000094 ], [ -166.174265102999897, 53.776312567000119 ], [ -166.19159908799989, 53.77635325700011 ], [ -166.176706508999928, 53.757635809000064 ], [ -166.171579555999926, 53.747870184000092 ], [ -166.17479407499988, 53.738511460000083 ], [ -166.184519008999928, 53.733872789000046 ], [ -166.226307745999947, 53.727972723 ], [ -166.22211666599992, 53.72284577 ], [ -166.212635870999918, 53.708075262000122 ], [ -166.232899542999917, 53.716782945000105 ], [ -166.271921352999897, 53.743353583000058 ], [ -166.290882941999911, 53.749090887000122 ], [ -166.297840949999909, 53.760199286000059 ], [ -166.299265102999868, 53.781683661000088 ], [ -166.290516730999911, 53.795355536000116 ], [ -166.26728268099987, 53.783148505000142 ], [ -166.267526821999923, 53.796820380000085 ], [ -166.262033657999893, 53.803208726000022 ], [ -166.253244594999927, 53.807318427000055 ], [ -166.243397589999915, 53.813910223000121 ], [ -166.237863735999895, 53.815252997000115 ], [ -166.236805792999917, 53.806138414000131 ], [ -166.23997962099989, 53.783148505000142 ], [ -166.232533331999917, 53.783148505000142 ], [ -166.212351040999891, 53.822943427000141 ], [ -166.197824673999946, 53.837103583000058 ], [ -166.177927212999947, 53.831000067000062 ], [ -166.169748501999948, 53.842962958 ], [ -166.160837368999921, 53.843573309000149 ], [ -166.150257941999854, 53.839585679 ], [ -166.136952277999939, 53.837836005 ], [ -166.124582485999895, 53.841213283000016 ], [ -166.116037563999896, 53.845770575000145 ], [ -166.105946417999917, 53.848049221000124 ], [ -166.089182094999899, 53.844671942 ] ] ], [ [ [ -166.111520962999919, 53.956000067000147 ], [ -166.153920050999915, 53.955308335 ], [ -166.169056769999912, 53.956773179000052 ], [ -166.191273566999882, 53.964911200000174 ], [ -166.196115688999953, 53.981024481000148 ], [ -166.189157680999955, 53.98969147300015 ], [ -166.18028723899991, 53.989813544000114 ], [ -166.156564907999893, 53.993597723000121 ], [ -166.115793423999946, 53.988674221000068 ], [ -166.094553188999953, 53.98065827000012 ], [ -166.087757941999911, 53.977932033000158 ], [ -166.07953854099992, 53.970892645 ], [ -166.088978644999941, 53.961655992000132 ], [ -166.111520962999919, 53.956000067000147 ] ] ], [ [ [ -166.746449347999885, 53.975002346000124 ], [ -166.731027798999946, 53.974107164000046 ], [ -166.719349738999853, 53.98456452000012 ], [ -166.709462042999945, 53.998480536000031 ], [ -166.699289516999897, 54.008490302 ], [ -166.668324347999885, 54.013576565000037 ], [ -166.634592251999891, 54.004584052 ], [ -166.605702277999853, 53.98578522300015 ], [ -166.589426235999923, 53.961371161 ], [ -166.61274166599992, 53.955511786000059 ], [ -166.625070766999869, 53.950669663999989 ], [ -166.630441860999923, 53.943996486000017 ], [ -166.631337042999917, 53.939032294000171 ], [ -166.635609503999945, 53.929388739 ], [ -166.636586066999911, 53.923488674000069 ], [ -166.634592251999891, 53.91705963700015 ], [ -166.630197719999899, 53.91046784100017 ], [ -166.625681118999921, 53.906073309000092 ], [ -166.623605923999918, 53.906154690000065 ], [ -166.636097785999937, 53.876532294000029 ], [ -166.633493618999921, 53.871975002000099 ], [ -166.619699673999918, 53.875189520000148 ], [ -166.608143683999884, 53.881293036000116 ], [ -166.596424933999913, 53.884507554 ], [ -166.581979946999951, 53.879380601000079 ], [ -166.606678839999915, 53.844794012000179 ], [ -166.609934048999889, 53.831000067000062 ], [ -166.586984829999892, 53.83930084800015 ], [ -166.489491339999944, 53.900091864000089 ], [ -166.475331183999913, 53.899074611000017 ], [ -166.459095831999889, 53.885565497000059 ], [ -166.455799933999941, 53.896144924000097 ], [ -166.438588019999941, 53.926581122000144 ], [ -166.439564581999889, 53.928127346000096 ], [ -166.43976803299995, 53.941717841000141 ], [ -166.438588019999941, 53.947088934000092 ], [ -166.422718878999888, 53.951157945000077 ], [ -166.418080206999889, 53.953843492000047 ], [ -166.40986080599987, 53.980169989000146 ], [ -166.403879360999952, 53.989243882000054 ], [ -166.370350714999915, 54.008490302 ], [ -166.360178188999896, 53.992824611000017 ], [ -166.369130011999914, 53.973822333000115 ], [ -166.373402472999913, 53.956773179000052 ], [ -166.349232550999915, 53.947088934000092 ], [ -166.326039191999882, 53.952866929000081 ], [ -166.300241665999948, 53.96613190300009 ], [ -166.27672278599988, 53.974920966000141 ], [ -166.260487433999941, 53.967596747000144 ], [ -166.254221157999893, 53.951402085000026 ], [ -166.250965949999852, 53.936590887000037 ], [ -166.254221157999893, 53.923488674000069 ], [ -166.26728268099987, 53.912909247000115 ], [ -166.253285285999908, 53.913519598000065 ], [ -166.241037563999953, 53.919012762000094 ], [ -166.218861456999889, 53.934027411000116 ], [ -166.218739386999914, 53.918605861000103 ], [ -166.224924282999893, 53.905462958000143 ], [ -166.235056118999921, 53.894476630000085 ], [ -166.246815558999913, 53.885565497000059 ], [ -166.266550258999928, 53.874335028000033 ], [ -166.283924933999913, 53.868963934000178 ], [ -166.301706508999899, 53.86847565300009 ], [ -166.32249915299991, 53.871975002000099 ], [ -166.327748175999886, 53.876532294000029 ], [ -166.33149166599992, 53.883612372000087 ], [ -166.336537238999938, 53.887437242000104 ], [ -166.345814581999889, 53.882513739000146 ], [ -166.349476691999854, 53.875921942000062 ], [ -166.352976040999948, 53.858343817000147 ], [ -166.356678839999887, 53.851507880000113 ], [ -166.374338344999899, 53.842108466000084 ], [ -166.414296027999853, 53.837958075000145 ], [ -166.431752081999917, 53.831000067000062 ], [ -166.418405727999897, 53.815415757000082 ], [ -166.411325649999924, 53.810492255000113 ], [ -166.424183722999885, 53.80475495000006 ], [ -166.521595831999917, 53.78900788 ], [ -166.541615363999881, 53.790025132000054 ], [ -166.51781165299991, 53.780585028000033 ], [ -166.506703253999888, 53.777899481000148 ], [ -166.493234829999892, 53.77635325700011 ], [ -166.493234829999892, 53.76951732000002 ], [ -166.520700649999924, 53.764593817000119 ], [ -166.540882941999854, 53.751776434000092 ], [ -166.575144008999928, 53.714300848000065 ], [ -166.559519008999928, 53.715643622000144 ], [ -166.550892706999946, 53.710598049000126 ], [ -166.549305792999917, 53.70058828300013 ], [ -166.554676886999857, 53.686997789000017 ], [ -166.540638800999915, 53.695135809000121 ], [ -166.521595831999917, 53.721421617000132 ], [ -166.513742641999926, 53.727972723 ], [ -166.498402472999885, 53.72284577 ], [ -166.487985805999898, 53.694810288999989 ], [ -166.476429816999882, 53.697577216000141 ], [ -166.473215298999918, 53.702948309000092 ], [ -166.472157355999855, 53.709947007 ], [ -166.472727016999926, 53.724554755 ], [ -166.471302863999881, 53.733954169000029 ], [ -166.467518683999941, 53.738023179 ], [ -166.462025519999912, 53.740545966000113 ], [ -166.455677863999881, 53.745347398 ], [ -166.440378383999928, 53.754461981000176 ], [ -166.420277472999885, 53.758734442 ], [ -166.404977993999921, 53.755316473000093 ], [ -166.403879360999952, 53.74164459800015 ], [ -166.393869594999899, 53.740627346000096 ], [ -166.386179165999948, 53.736721096000096 ], [ -166.380482550999886, 53.730129299000012 ], [ -166.376535610999895, 53.721136786 ], [ -166.369699673999889, 53.734849351000108 ], [ -166.368275519999912, 53.758734442 ], [ -166.359811977999954, 53.772935289000102 ], [ -166.346180792999917, 53.782700914000046 ], [ -166.334095831999917, 53.782416083000115 ], [ -166.32367916599992, 53.77472565300009 ], [ -166.315134243999893, 53.762111721000011 ], [ -166.314442511999857, 53.748032945000077 ], [ -166.31977291599992, 53.737290757000054 ], [ -166.317575649999924, 53.730414130000142 ], [ -166.294300910999937, 53.727972723 ], [ -166.278146938999953, 53.723863023000078 ], [ -166.275217251999948, 53.713690497000115 ], [ -166.276682094999899, 53.700384833 ], [ -166.273508266999926, 53.686997789000017 ], [ -166.289499477999925, 53.67991771000014 ], [ -166.331288214999859, 53.674017645 ], [ -166.407785610999952, 53.672674872000115 ], [ -166.424997524999867, 53.666489976000136 ], [ -166.409413214999887, 53.655707098000121 ], [ -166.403879360999952, 53.652818101000108 ], [ -166.427601691999882, 53.651109117000104 ], [ -166.449208136999886, 53.643500067000062 ], [ -166.470407680999955, 53.638739325000145 ], [ -166.493234829999892, 53.646063544000171 ], [ -166.547230597999885, 53.625921942000119 ], [ -166.562123175999943, 53.618109442000119 ], [ -166.546254035999908, 53.615383205000072 ], [ -166.534535285999937, 53.608954169000143 ], [ -166.526437954999892, 53.598781643 ], [ -166.521188930999926, 53.584621486000074 ], [ -166.54950924399995, 53.601060288999989 ], [ -166.575795050999886, 53.59369538 ], [ -166.593373175999915, 53.569566148000078 ], [ -166.595651821999894, 53.536200262000094 ], [ -166.608631964999887, 53.555121161000116 ], [ -166.664540167999945, 53.598211981000034 ], [ -166.665882941999939, 53.581732489000061 ], [ -166.64289303299995, 53.550034898 ], [ -166.636586066999911, 53.532782294000086 ], [ -166.647409633999899, 53.529120184000035 ], [ -166.712961391999926, 53.549790757000054 ], [ -166.708444790999891, 53.536281643000066 ], [ -166.696522589999944, 53.530340887000065 ], [ -166.681630011999886, 53.526556708000115 ], [ -166.667958136999943, 53.519435940000065 ], [ -166.656361456999946, 53.502386786000116 ], [ -166.65916907499988, 53.490912177000084 ], [ -166.671498175999943, 53.48847077000012 ], [ -166.697824673999946, 53.505316473000121 ], [ -166.70771236899995, 53.508246161000059 ], [ -166.729685024999952, 53.508856512000122 ], [ -166.734364386999886, 53.511542059000092 ], [ -166.742624477999868, 53.524725653000147 ], [ -166.746449347999885, 53.529364325000174 ], [ -166.771555141999869, 53.548163153000033 ], [ -166.794870571999866, 53.570298570000105 ], [ -166.809152798999889, 53.556626695000077 ], [ -166.800282355999911, 53.546087958 ], [ -166.781239386999914, 53.508856512000122 ], [ -166.750599738999938, 53.479193427 ], [ -166.746449347999885, 53.467922268000095 ], [ -166.752186652999853, 53.450873114000146 ], [ -166.764475063999896, 53.44912344000015 ], [ -166.794870571999866, 53.461086330000072 ], [ -166.800282355999911, 53.464748440000122 ], [ -166.801828579999864, 53.468980210000055 ], [ -166.805002407999922, 53.47101471600017 ], [ -166.815378383999928, 53.467922268000095 ], [ -166.816110805999955, 53.464422919000114 ], [ -166.825021938999896, 53.445868231000091 ], [ -166.829050258999956, 53.439927476000079 ], [ -166.868845180999955, 53.476019598000121 ], [ -166.876820441999911, 53.481512762000065 ], [ -166.893055792999945, 53.47597890800013 ], [ -166.904489712999919, 53.446844794000171 ], [ -166.917795376999919, 53.439927476000079 ], [ -166.930409308999913, 53.445135809000149 ], [ -166.934519008999956, 53.455796617000104 ], [ -166.938913540999948, 53.463812567000147 ], [ -166.952504035999908, 53.461086330000072 ], [ -166.96031653599988, 53.451483466000084 ], [ -166.963205532999922, 53.439520575000145 ], [ -166.969186977999925, 53.429673570000048 ], [ -166.986683722999885, 53.426947333000086 ], [ -166.984364386999914, 53.431341864000061 ], [ -166.979237433999913, 53.447414455000128 ], [ -167.007394985999895, 53.45258209800015 ], [ -167.068348761999886, 53.426988023000078 ], [ -167.099964972999885, 53.419501044000086 ], [ -167.12055416599992, 53.418524481000034 ], [ -167.136667446999866, 53.415920315000122 ], [ -167.212228969999899, 53.387518622000087 ], [ -167.242990688999868, 53.383205471000011 ], [ -167.27363033799989, 53.373846747000144 ], [ -167.291737433999884, 53.371649481000176 ], [ -167.299183722999885, 53.365912177 ], [ -167.312855597999913, 53.338690497000087 ], [ -167.321848110999923, 53.33006419500002 ], [ -167.391346808999941, 53.344427802000084 ], [ -167.407297329999949, 53.340562242000075 ], [ -167.439035610999895, 53.325262762000094 ], [ -167.458973761999886, 53.323919989000117 ], [ -167.455026821999894, 53.313462632000139 ], [ -167.452829555999926, 53.309637762000122 ], [ -167.469349738999881, 53.304510809000121 ], [ -167.480539516999897, 53.295843817000119 ], [ -167.500599738999853, 53.275458075000031 ], [ -167.502674933999884, 53.270412502000013 ], [ -167.504261847999913, 53.263413804000109 ], [ -167.508249477999897, 53.259914455000128 ], [ -167.527088995999918, 53.27220286699999 ], [ -167.536447719999956, 53.275132554000109 ], [ -167.559274868999864, 53.275458075000031 ], [ -167.592111782999893, 53.280951239000061 ], [ -167.606068488999938, 53.280707098000121 ], [ -167.620065883999899, 53.272040106000034 ], [ -167.625803188999896, 53.265692450000088 ], [ -167.627878383999899, 53.262640692 ], [ -167.630482550999886, 53.260199286000059 ], [ -167.665109829999892, 53.241929429 ], [ -167.672311977999925, 53.261623440000122 ], [ -167.697132941999882, 53.270941473000093 ], [ -167.753854946999951, 53.275458075000031 ], [ -167.780588344999956, 53.280707098000121 ], [ -167.80223548099994, 53.289129950000174 ], [ -167.809152798999946, 53.294134833000115 ], [ -167.811472133999928, 53.298529364 ], [ -167.815134243999864, 53.301581122000087 ], [ -167.834299282999922, 53.303127346000124 ], [ -167.840321417999917, 53.304266669000171 ], [ -167.845204230999911, 53.306341864000089 ], [ -167.850046352999897, 53.309637762000122 ], [ -167.718454555999926, 53.381293036000145 ], [ -167.702951626999919, 53.385402736000103 ], [ -167.67039954299986, 53.385443427000084 ], [ -167.654652472999913, 53.382554429000052 ], [ -167.641468878999945, 53.375067450000174 ], [ -167.638050910999937, 53.378159898000078 ], [ -167.594186977999897, 53.378607489000061 ], [ -167.592111782999893, 53.382310289000102 ], [ -167.596791144999884, 53.392767645000092 ], [ -167.570546027999882, 53.396307684000149 ], [ -167.516550258999956, 53.381415106000119 ], [ -167.48692786399991, 53.378485419000086 ], [ -167.495350714999859, 53.385199286000145 ], [ -167.513620571999923, 53.40643952000012 ], [ -167.513620571999923, 53.412665106000176 ], [ -167.504587368999921, 53.41412995000006 ], [ -167.499134894999884, 53.417547919000143 ], [ -167.49437415299991, 53.422023830000015 ], [ -167.474598761999886, 53.434027411000145 ], [ -167.458973761999886, 53.433742580000015 ], [ -167.440866665999891, 53.43040599199999 ], [ -167.408436652999882, 53.419256903000147 ], [ -167.390736456999889, 53.419501044000086 ], [ -167.395456508999899, 53.42405833500014 ], [ -167.400746222999885, 53.430731512000094 ], [ -167.404408331999917, 53.433742580000015 ], [ -167.37840735599994, 53.431952216000028 ], [ -167.343210415999891, 53.418768622000172 ], [ -167.321522589999915, 53.416449286 ], [ -167.336130337999919, 53.447414455000128 ], [ -167.313099738999938, 53.441961981000091 ], [ -167.303578253999945, 53.445257880000142 ], [ -167.301950649999924, 53.455511786000059 ], [ -167.302601691999882, 53.471340236000103 ], [ -167.29161536399991, 53.476019598000121 ], [ -167.226267055999926, 53.461086330000072 ], [ -167.212757941999882, 53.46198151200015 ], [ -167.169626430999955, 53.470200914000074 ], [ -167.158640102999897, 53.477118231000148 ], [ -167.161488410999937, 53.482367255000057 ], [ -167.166574673999946, 53.497300523 ], [ -167.164784308999884, 53.495184637000179 ], [ -167.172474738999881, 53.510199286000031 ], [ -167.177479620999918, 53.51634349199999 ], [ -167.185292120999918, 53.52252838700015 ], [ -167.17015540299991, 53.523260809000178 ], [ -167.107289191999882, 53.51447174700003 ], [ -167.043080206999946, 53.517767645000063 ], [ -166.980051235999923, 53.52806224199999 ], [ -166.960031704999949, 53.536200262000094 ], [ -166.981882290999891, 53.544867255 ], [ -167.004099087999947, 53.543890692000033 ], [ -167.051869269999912, 53.536200262000094 ], [ -167.098133917999888, 53.539252020000092 ], [ -167.120676235999895, 53.545396226000079 ], [ -167.144357876999891, 53.556626695000077 ], [ -167.139637824999909, 53.559271552000055 ], [ -167.137277798999946, 53.561997789000131 ], [ -167.134958462999862, 53.565497137000122 ], [ -167.130075649999895, 53.570298570000105 ], [ -167.153635219999956, 53.581447658000016 ], [ -167.162058071999894, 53.602362372000172 ], [ -167.155384894999941, 53.622626044000086 ], [ -167.133778449999937, 53.631781317000062 ], [ -167.092722133999928, 53.628648179 ], [ -167.082875128999916, 53.625555731000119 ], [ -167.073353644999941, 53.618801174000069 ], [ -167.059763149999867, 53.603461005000113 ], [ -167.048166469999956, 53.598211981000034 ], [ -167.050160285999908, 53.601792710000112 ], [ -167.051584438999868, 53.602443752000156 ], [ -167.053089972999913, 53.602484442000147 ], [ -167.055531378999945, 53.604437567 ], [ -167.048166469999956, 53.611273505000113 ], [ -167.053578253999916, 53.627508856000148 ], [ -167.03779049399995, 53.628729559000178 ], [ -166.993519660999908, 53.618109442000119 ], [ -167.006825324999909, 53.637274481000091 ], [ -167.044911261999914, 53.652736721000124 ], [ -167.062367316999882, 53.666489976000136 ], [ -167.064645962999947, 53.682684637000094 ], [ -167.050648566999882, 53.695868231000034 ], [ -167.028024868999921, 53.704779364000089 ], [ -166.946522589999887, 53.715765692000119 ], [ -166.916371222999857, 53.715725002000127 ], [ -166.894154425999886, 53.704331773 ], [ -166.870432094999899, 53.673895575000031 ], [ -166.864938930999955, 53.657171942 ], [ -166.863148566999882, 53.631781317000062 ], [ -166.856312628999859, 53.631781317000062 ], [ -166.853586391999897, 53.640814520000092 ], [ -166.850168423999889, 53.647853908000158 ], [ -166.842640753999916, 53.659654039000131 ], [ -166.830759243999864, 53.652899481000176 ], [ -166.801706508999899, 53.631781317000062 ], [ -166.827097133999928, 53.690863348 ], [ -166.829050258999956, 53.708075262000122 ], [ -166.786732550999858, 53.691961981000063 ], [ -166.766916469999956, 53.690863348 ], [ -166.746449347999885, 53.700628973000121 ], [ -166.757639126999891, 53.699693101000051 ], [ -166.768422003999888, 53.700873114000089 ], [ -166.778513149999952, 53.703762111000017 ], [ -166.787464972999885, 53.708075262000122 ], [ -166.768137173999861, 53.714544989000117 ], [ -166.72480221299989, 53.714097398000106 ], [ -166.705515102999954, 53.721136786 ], [ -166.733998175999886, 53.726467190000065 ], [ -166.807687954999921, 53.729559637000037 ], [ -166.883981899999952, 53.755275783000101 ], [ -166.898630337999862, 53.756903387000122 ], [ -166.938303188999896, 53.76951732000002 ], [ -166.968617316999882, 53.772609768000095 ], [ -166.990549282999893, 53.767035223000065 ], [ -167.011301235999895, 53.759222723000093 ], [ -167.038197394999884, 53.755275783000101 ], [ -167.103382941999882, 53.803656317 ], [ -167.100819464999887, 53.805568752000156 ], [ -167.097604946999923, 53.811753648000106 ], [ -167.095529751999891, 53.819037177000141 ], [ -167.096547003999859, 53.824164130000057 ], [ -167.101999477999897, 53.825628973 ], [ -167.117543097999913, 53.823675848000065 ], [ -167.130075649999895, 53.824693101000136 ], [ -167.145253058999884, 53.822902736000131 ], [ -167.151112433999941, 53.824164130000057 ], [ -167.156198696999951, 53.829779364000146 ], [ -167.158151821999923, 53.842189846000068 ], [ -167.161366339999859, 53.848089911000116 ], [ -167.163400844999899, 53.857367255000057 ], [ -167.151926235999952, 53.862250067000119 ], [ -167.137277798999946, 53.865179755000057 ], [ -167.130075649999895, 53.868557033000073 ], [ -167.126779751999862, 53.875067450000174 ], [ -167.103382941999882, 53.906154690000065 ], [ -167.086659308999941, 53.920314846000011 ], [ -167.049672003999916, 53.941636460000055 ], [ -167.031076626999919, 53.95766836100016 ], [ -167.021595831999917, 53.961249091000028 ], [ -166.98289954299986, 53.953843492000047 ], [ -166.972645636999943, 53.956732489000061 ], [ -166.938303188999896, 53.975002346000124 ], [ -166.91620846299989, 53.979885158000016 ], [ -166.895253058999941, 53.980902411000088 ], [ -166.87531490799995, 53.977199611000131 ], [ -166.856312628999859, 53.967596747000144 ], [ -166.831857876999919, 53.982123114 ], [ -166.779001430999955, 54.00275299700003 ], [ -166.753895636999857, 54.016017971000153 ], [ -166.741892055999926, 54.005438544000086 ], [ -166.746449347999885, 53.994818427000055 ], [ -166.752878383999899, 53.984442450000145 ], [ -166.746449347999885, 53.975002346000124 ] ] ], [ [ [ -165.252797003999945, 54.077704169000171 ], [ -165.247303839999915, 54.068182684000178 ], [ -165.245676235999895, 54.05695221600017 ], [ -165.261952277999939, 54.063177802000141 ], [ -165.271351691999854, 54.064683335 ], [ -165.280384894999884, 54.06378815300009 ], [ -165.284291144999884, 54.060126044000143 ], [ -165.292836066999882, 54.046820380000113 ], [ -165.294056769999912, 54.043890692 ], [ -165.307810024999924, 54.047837632 ], [ -165.326039191999911, 54.066839911 ], [ -165.338449673999918, 54.071234442000062 ], [ -165.387806769999912, 54.070135809000035 ], [ -165.422434048999889, 54.077460028000033 ], [ -165.465280727999868, 54.073879299000154 ], [ -165.485829230999911, 54.077460028000033 ], [ -165.376576300999915, 54.091050523 ], [ -165.266713019999941, 54.091050523 ], [ -165.25995846299989, 54.085394598 ], [ -165.252797003999945, 54.077704169000171 ] ] ], [ [ [ -164.93781490799995, 54.125189520000092 ], [ -164.932728644999912, 54.11399974199999 ], [ -164.939930792999945, 54.099310614000089 ], [ -164.952870245999861, 54.085598049000154 ], [ -164.965077277999939, 54.077460028000033 ], [ -164.97602291599992, 54.075751044000029 ], [ -165.053822394999884, 54.077460028000033 ], [ -165.089182094999899, 54.070868231000148 ], [ -165.102243618999893, 54.071234442000062 ], [ -165.107736782999922, 54.073879299000154 ], [ -165.116322394999941, 54.082953192000062 ], [ -165.123036261999886, 54.084865627000013 ], [ -165.128529425999915, 54.083685614 ], [ -165.143259243999893, 54.077460028000033 ], [ -165.206776495999918, 54.085353908000016 ], [ -165.225778774999895, 54.091050523 ], [ -165.219349738999881, 54.101629950000031 ], [ -165.212595180999955, 54.109361070000048 ], [ -165.203684048999918, 54.114732164000102 ], [ -165.191029425999943, 54.118353583000058 ], [ -165.183216925999943, 54.118353583000058 ], [ -165.171254035999937, 54.11347077 ], [ -165.164377407999922, 54.112127997000115 ], [ -165.154977993999893, 54.115383205000157 ], [ -165.14093990799995, 54.129461981000091 ], [ -165.133005337999862, 54.132635809000149 ], [ -165.126210089999944, 54.130357163999989 ], [ -165.12047278599988, 54.125555731000091 ], [ -165.116892055999898, 54.120591539000046 ], [ -165.116525844999899, 54.118353583000058 ], [ -165.109445766999926, 54.119452216000113 ], [ -165.097401495999918, 54.124172268000123 ], [ -165.091745571999923, 54.125189520000092 ], [ -165.077381964999944, 54.123602606000148 ], [ -165.064157680999898, 54.119289455000157 ], [ -165.051828579999949, 54.112779039000074 ], [ -165.040150519999884, 54.104681708000115 ], [ -165.02684485599994, 54.111476955000157 ], [ -164.988596157999893, 54.123602606000148 ], [ -164.981068488999938, 54.130682684000121 ], [ -164.972523566999911, 54.125189520000092 ], [ -164.963856574999909, 54.131089585000112 ], [ -164.955067511999943, 54.133124091000141 ], [ -164.946156378999916, 54.131089585000112 ], [ -164.93781490799995, 54.125189520000092 ] ] ], [ [ [ -165.874867316999882, 54.174383856000091 ], [ -165.854359503999945, 54.167669989000061 ], [ -165.831369594999956, 54.171535549000154 ], [ -165.814808722999885, 54.187323309000092 ], [ -165.799875454999949, 54.173895575000117 ], [ -165.759714321999923, 54.163153387000094 ], [ -165.739084438999896, 54.153143622000115 ], [ -165.75951087099989, 54.144476630000113 ], [ -165.821644660999908, 54.139471747000172 ], [ -165.821644660999908, 54.132635809000149 ], [ -165.809925910999908, 54.13271719000015 ], [ -165.780100063999924, 54.125189520000092 ], [ -165.739084438999896, 54.125189520000092 ], [ -165.67210852799991, 54.128851630000142 ], [ -165.657175258999956, 54.125189520000092 ], [ -165.664621548999946, 54.118353583000058 ], [ -165.679514126999891, 54.099066473000121 ], [ -165.699533657999865, 54.08869049700003 ], [ -165.770619269999912, 54.070746161000088 ], [ -165.780995245999918, 54.070013739000061 ], [ -165.794300910999937, 54.071234442000062 ], [ -165.828928188999924, 54.082993882000054 ], [ -165.839060024999867, 54.084865627000013 ], [ -165.852243618999921, 54.07510000200007 ], [ -165.88731848899991, 54.036322333000058 ], [ -165.900746222999885, 54.033351955000128 ], [ -165.908558722999885, 54.04401276200015 ], [ -165.912464972999885, 54.053859768000095 ], [ -165.918202277999853, 54.060980536000145 ], [ -165.931507941999882, 54.06378815300009 ], [ -165.956898566999911, 54.060736395 ], [ -165.966135219999956, 54.062445380000028 ], [ -165.972482876999891, 54.071234442000062 ], [ -165.988718227999925, 54.059149481000148 ], [ -166.023182745999861, 54.045884507000139 ], [ -166.04076087099989, 54.036444403000033 ], [ -166.075510219999956, 54.06378815300009 ], [ -166.065988735999952, 54.077582098 ], [ -166.080189581999889, 54.092189846000124 ], [ -166.122670050999943, 54.118353583000058 ], [ -166.108998175999915, 54.132635809000149 ], [ -166.116444464999887, 54.139471747000172 ], [ -166.106434699999909, 54.149562893000152 ], [ -166.091664191999911, 54.171291408000016 ], [ -166.081735805999926, 54.180487372000087 ], [ -166.071237758999928, 54.185207424000097 ], [ -166.034535285999937, 54.194077867000047 ], [ -165.97138424399995, 54.219468492000075 ], [ -165.945505337999947, 54.222072658000158 ], [ -165.934152798999889, 54.22089264500012 ], [ -165.912098761999886, 54.215765692000119 ], [ -165.879628058999884, 54.213446356000148 ], [ -165.876779751999948, 54.209621486000131 ], [ -165.880686001999948, 54.202297268000123 ], [ -165.883737758999928, 54.190659898000135 ], [ -165.874867316999882, 54.174383856000091 ] ] ], [ [ [ -165.51903235599994, 54.270209052000112 ], [ -165.529896613999938, 54.260891018000095 ], [ -165.546254035999937, 54.252630927 ], [ -165.561594204999892, 54.242499091000056 ], [ -165.554758266999869, 54.235052802000055 ], [ -165.547922329999949, 54.239243882 ], [ -165.541086391999926, 54.242499091000056 ], [ -165.544911261999943, 54.227484442000033 ], [ -165.547311977999897, 54.222072658000158 ], [ -165.443837042999945, 54.200140692000147 ], [ -165.418202277999882, 54.20774974199999 ], [ -165.404530402999939, 54.191839911000059 ], [ -165.423898891999954, 54.183091538999989 ], [ -165.457346157999922, 54.17987702000012 ], [ -165.485829230999911, 54.180487372000087 ], [ -165.485829230999911, 54.173651434000149 ], [ -165.47398841099988, 54.165920315000065 ], [ -165.479685024999924, 54.162665106000119 ], [ -165.506337042999888, 54.159328518000095 ], [ -165.528553839999915, 54.148586330000072 ], [ -165.539906378999916, 54.145209052000055 ], [ -165.554758266999869, 54.145697333000143 ], [ -165.541086391999926, 54.139471747000172 ], [ -165.550852016999869, 54.12230052300005 ], [ -165.567941860999923, 54.112494208000115 ], [ -165.588815883999899, 54.110907294000086 ], [ -165.609974738999881, 54.118353583000058 ], [ -165.624867316999939, 54.132391669000029 ], [ -165.623890753999888, 54.145086981000176 ], [ -165.612375454999949, 54.158270575000031 ], [ -165.595692511999914, 54.173651434000149 ], [ -165.631784633999928, 54.189642645000063 ], [ -165.623483852999954, 54.200832424000069 ], [ -165.596018032999922, 54.213690497000115 ], [ -165.574574347999885, 54.235052802000055 ], [ -165.600697394999941, 54.242010809000149 ], [ -165.684437628999859, 54.235052802000055 ], [ -165.679798956999946, 54.248928127000156 ], [ -165.673573370999861, 54.262355861000131 ], [ -165.664255337999919, 54.272609768000066 ], [ -165.650339321999951, 54.27659739800005 ], [ -165.634836391999926, 54.276312567000033 ], [ -165.630686001999891, 54.279242255000142 ], [ -165.627064581999946, 54.296454169000143 ], [ -165.621571417999917, 54.296616929000109 ], [ -165.614206508999928, 54.292792059000092 ], [ -165.598459438999953, 54.287298895000063 ], [ -165.596872524999924, 54.28050364800005 ], [ -165.597238735999952, 54.27338288 ], [ -165.595692511999914, 54.269191799000154 ], [ -165.587228969999956, 54.266546942000062 ], [ -165.585031704999864, 54.268052476000108 ], [ -165.582875128999859, 54.272121486000074 ], [ -165.574574347999885, 54.27659739800005 ], [ -165.531198696999923, 54.294378973000121 ], [ -165.513172980999911, 54.297186591000084 ], [ -165.494333462999947, 54.296372789000074 ], [ -165.491281704999949, 54.289984442000147 ], [ -165.500843878999945, 54.283880927000055 ], [ -165.519968227999925, 54.283514716000141 ], [ -165.51903235599994, 54.270209052000112 ] ] ], [ [ [ -162.405140753999888, 54.390570380000085 ], [ -162.401600714999887, 54.385891018000152 ], [ -162.395741339999944, 54.385891018000152 ], [ -162.368112758999928, 54.392075914000131 ], [ -162.368112758999928, 54.385891018000152 ], [ -162.413197394999884, 54.371812242000104 ], [ -162.435414191999882, 54.372015692000062 ], [ -162.453806118999921, 54.382473049000126 ], [ -162.480173305999898, 54.401922919000143 ], [ -162.484811977999925, 54.406398830000015 ], [ -162.485422329999892, 54.413885809000178 ], [ -162.481516079999892, 54.419582424000154 ], [ -162.472238735999952, 54.422105210000083 ], [ -162.456898566999882, 54.420070705000128 ], [ -162.409128383999928, 54.406398830000015 ], [ -162.407338019999884, 54.39740631700009 ], [ -162.405140753999888, 54.390570380000085 ] ] ], [ [ [ -162.621408657999922, 54.454779364000032 ], [ -162.615427212999919, 54.454291083000115 ], [ -162.602121548999889, 54.456000067000119 ], [ -162.594675258999899, 54.454779364000032 ], [ -162.594593878999916, 54.45311107000002 ], [ -162.592600063999896, 54.448716539000102 ], [ -162.589670376999862, 54.444037177 ], [ -162.587228969999927, 54.441107489000089 ], [ -162.587188279999936, 54.441107489000089 ], [ -162.549997524999924, 54.420070705000128 ], [ -162.546498175999943, 54.414699611000074 ], [ -162.545358852999925, 54.402980861000103 ], [ -162.546498175999943, 54.391262111000017 ], [ -162.549997524999924, 54.385891018000152 ], [ -162.655506964999915, 54.392075914000131 ], [ -162.646555141999897, 54.385687567 ], [ -162.636830206999946, 54.381415106000091 ], [ -162.626210089999915, 54.379339911000059 ], [ -162.614572719999899, 54.37909577000012 ], [ -162.614572719999899, 54.37225983300003 ], [ -162.632679816999911, 54.371893622000087 ], [ -162.647572394999884, 54.375433661000088 ], [ -162.676625128999945, 54.385891018000152 ], [ -162.728586391999897, 54.395819403000147 ], [ -162.754017706999946, 54.409572658000073 ], [ -162.783640102999868, 54.416408596000096 ], [ -162.796376105999911, 54.423488674000154 ], [ -162.841135219999956, 54.461004950000174 ], [ -162.82164466099988, 54.462469794000029 ], [ -162.822499152999882, 54.473822333 ], [ -162.829172329999949, 54.489081122000172 ], [ -162.827463344999927, 54.50193919500002 ], [ -162.81383216099988, 54.504339911000145 ], [ -162.793080206999889, 54.50031159100017 ], [ -162.758534308999884, 54.488267320000077 ], [ -162.734567837999919, 54.48456452000012 ], [ -162.690134243999921, 54.471340236000074 ], [ -162.656809048999918, 54.466782945000134 ], [ -162.621408657999922, 54.454779364000032 ] ] ], [ [ [ -159.527088995999918, 54.759466864 ], [ -159.547108527999882, 54.75389232 ], [ -159.569325324999937, 54.754584052000112 ], [ -159.58930416599992, 54.75967031500015 ], [ -159.593617316999939, 54.766831773 ], [ -159.590199347999913, 54.775783596000124 ], [ -159.592640753999945, 54.786607164000102 ], [ -159.596994594999956, 54.79710521 ], [ -159.602731899999924, 54.805080471000124 ], [ -159.604196743999864, 54.812323309000149 ], [ -159.597279425999886, 54.820217190000122 ], [ -159.585153774999867, 54.824204820000105 ], [ -159.571278449999909, 54.822251695000077 ], [ -159.55833899599989, 54.815252997000087 ], [ -159.545480923999861, 54.806138414000102 ], [ -159.525135870999861, 54.794378973000121 ], [ -159.521473761999914, 54.792263088000098 ], [ -159.521473761999914, 54.792222398000106 ], [ -159.515085415999891, 54.786932684000035 ], [ -159.512644008999956, 54.778509833 ], [ -159.515329555999926, 54.768744208000058 ], [ -159.527088995999918, 54.759466864 ] ] ], [ [ [ -133.515166795999903, 54.782456773 ], [ -133.521758592999873, 54.766750393 ], [ -133.529245571999923, 54.768337307000039 ], [ -133.543975389999929, 54.779445705000072 ], [ -133.546091274999924, 54.785020249000084 ], [ -133.543771938999896, 54.794053453000103 ], [ -133.543568488999938, 54.799587307000124 ], [ -133.545725063999924, 54.801825262000094 ], [ -133.545033331999974, 54.805446682000152 ], [ -133.545155402999853, 54.81602610900002 ], [ -133.543527798999946, 54.822292385000154 ], [ -133.544748501999834, 54.831691799000097 ], [ -133.537831183999941, 54.83498769700013 ], [ -133.529815232999908, 54.831040757000139 ], [ -133.520578579999835, 54.820257880000113 ], [ -133.520334438999896, 54.814195054000137 ], [ -133.520334438999896, 54.814113674000154 ], [ -133.520130988999938, 54.80821360900002 ], [ -133.515777147999927, 54.796861070000048 ], [ -133.515166795999903, 54.782456773 ] ] ], [ [ [ -132.736439581999889, 54.920314846000068 ], [ -132.725900844999842, 54.91486237200003 ], [ -132.715240037999934, 54.915228583000058 ], [ -132.704986131999874, 54.919867255000085 ], [ -132.695464647999898, 54.927720445000077 ], [ -132.685536261999886, 54.921128648 ], [ -132.674305792999888, 54.916815497000087 ], [ -132.665109829999921, 54.911932684000121 ], [ -132.661366339999887, 54.90355052300005 ], [ -132.655832485999866, 54.902167059000178 ], [ -132.643177863999881, 54.904730536000088 ], [ -132.629302537999905, 54.903998114000146 ], [ -132.620350714999859, 54.893011786 ], [ -132.615345831999946, 54.882473049000126 ], [ -132.616932745999861, 54.876166083 ], [ -132.623768683999884, 54.874823309000092 ], [ -132.634632941999968, 54.879339911000059 ], [ -132.635568813999839, 54.867499091000084 ], [ -132.630686001999891, 54.856268622000087 ], [ -132.628570115999963, 54.847845770000148 ], [ -132.637766079999835, 54.844549872000115 ], [ -132.6517634759999, 54.846380927 ], [ -132.663238084999932, 54.849310614 ], [ -132.674916144999941, 54.849839585 ], [ -132.689279751999919, 54.844549872000115 ], [ -132.675607876999891, 54.837388414000074 ], [ -132.669300910999937, 54.828558661000031 ], [ -132.662668423999975, 54.821030992000047 ], [ -132.647694464999944, 54.817857163999989 ], [ -132.637115037999877, 54.814032294000171 ], [ -132.626372850999871, 54.804754950000117 ], [ -132.617583787999934, 54.793443101000136 ], [ -132.612904425999886, 54.783758856000176 ], [ -132.616200324999937, 54.760199286000116 ], [ -132.636057094999842, 54.757473049000154 ], [ -132.661610480999911, 54.767889716000141 ], [ -132.681792772999955, 54.783758856000176 ], [ -132.684681769999884, 54.788763739000117 ], [ -132.689279751999919, 54.801825262000094 ], [ -132.692372199999909, 54.807318427000112 ], [ -132.698353644999941, 54.811672268000038 ], [ -132.713490363999938, 54.817084052000055 ], [ -132.71971594999988, 54.821275132 ], [ -132.722564256999931, 54.826564846000068 ], [ -132.727406378999888, 54.840399481000148 ], [ -132.730213995999947, 54.844549872000115 ], [ -132.736398891999897, 54.847316799000069 ], [ -132.749908006999874, 54.849188544000029 ], [ -132.757557745999918, 54.851996161000088 ], [ -132.771962042999888, 54.862250067000033 ], [ -132.776926235999838, 54.870062567 ], [ -132.779774542999888, 54.878241278000118 ], [ -132.788238084999932, 54.88959381700009 ], [ -132.794056769999969, 54.901922919000029 ], [ -132.78880774599989, 54.911037502000042 ], [ -132.782378709999875, 54.918890692 ], [ -132.784820115999906, 54.927720445000077 ], [ -132.778065558999884, 54.934556382000082 ], [ -132.773019985999838, 54.930243231000176 ], [ -132.757557745999918, 54.920314846000068 ], [ -132.750559048999946, 54.931097723000093 ], [ -132.738148566999911, 54.935370184000092 ], [ -132.723500128999888, 54.937241929000052 ], [ -132.709787563999896, 54.94082265800013 ], [ -132.713734503999945, 54.933050848000121 ], [ -132.719797329999864, 54.926947333000143 ], [ -132.727447068999879, 54.92267487200003 ], [ -132.736439581999889, 54.920314846000068 ] ] ], [ [ [ -159.284535285999851, 54.94082265800013 ], [ -159.268991665999948, 54.929632880000113 ], [ -159.247670050999886, 54.930161851 ], [ -159.226877407999893, 54.933579820000105 ], [ -159.212595180999898, 54.931138414000074 ], [ -159.208811001999891, 54.918524481000091 ], [ -159.219471808999913, 54.906805731000091 ], [ -159.246408657999893, 54.88959381700009 ], [ -159.286610480999855, 54.871730861000017 ], [ -159.317819790999948, 54.884711005000113 ], [ -159.326161261999914, 54.907863674000154 ], [ -159.29820716099988, 54.920314846000068 ], [ -159.30695553299995, 54.929632880000113 ], [ -159.31773841099988, 54.933783270000063 ], [ -159.329050258999928, 54.934759833000115 ], [ -159.339182094999899, 54.934556382000082 ], [ -159.322255011999914, 54.938381252000099 ], [ -159.306996222999942, 54.94623444200009 ], [ -159.292347785999937, 54.951727606000091 ], [ -159.277088995999861, 54.948187567000119 ], [ -159.284535285999851, 54.94082265800013 ] ] ], [ [ [ -162.27875729099992, 54.851996161000088 ], [ -162.309030727999925, 54.837347723000065 ], [ -162.342152472999942, 54.839544989000061 ], [ -162.37437903599988, 54.853094794000029 ], [ -162.401600714999887, 54.872503973000121 ], [ -162.424183722999885, 54.897935289000046 ], [ -162.434152798999946, 54.914374091000141 ], [ -162.436390753999945, 54.927720445000077 ], [ -162.426706508999871, 54.938666083000115 ], [ -162.374948696999951, 54.954413153000175 ], [ -162.344349738999938, 54.969794012000122 ], [ -162.302561001999891, 54.985663153000147 ], [ -162.262684699999937, 54.989203192000119 ], [ -162.237782355999911, 54.968085028000118 ], [ -162.233387824999909, 54.95697663 ], [ -162.230417446999923, 54.939154364000117 ], [ -162.229318813999953, 54.920599677000112 ], [ -162.230946417999888, 54.907294012000179 ], [ -162.239003058999913, 54.893988348000065 ], [ -162.27875729099992, 54.851996161000088 ] ] ], [ [ [ -131.241566535999937, 54.974595445000105 ], [ -131.237904425999886, 54.96112702000012 ], [ -131.237172003999973, 54.949530341000113 ], [ -131.243723110999866, 54.94082265800013 ], [ -131.243723110999866, 54.934556382000082 ], [ -131.211659308999884, 54.927232163999989 ], [ -131.197499152999853, 54.920314846000068 ], [ -131.194691535999908, 54.907294012000179 ], [ -131.203195766999841, 54.900702216000113 ], [ -131.239165818999908, 54.88300202 ], [ -131.250233527999853, 54.879339911000059 ], [ -131.285715298999946, 54.881781317 ], [ -131.29979407499988, 54.879217841000084 ], [ -131.314768032999922, 54.869452216000141 ], [ -131.331166144999941, 54.86123281500015 ], [ -131.350087042999945, 54.860907294000029 ], [ -131.369455532999865, 54.865668036000116 ], [ -131.38707434799997, 54.872503973000121 ], [ -131.387562628999945, 54.884222723000121 ], [ -131.426421678999873, 54.905829169000029 ], [ -131.441721157999837, 54.920314846000068 ], [ -131.468169725999928, 54.912420966000113 ], [ -131.482167120999861, 54.925604559000149 ], [ -131.478382941999939, 54.944728908000044 ], [ -131.451568162999934, 54.954413153000175 ], [ -131.430246548999889, 54.956000067000119 ], [ -131.371490037999877, 54.966986395000063 ], [ -131.352284308999913, 54.975531317 ], [ -131.330189581999946, 54.961371161000088 ], [ -131.263824022999927, 54.996893622000144 ], [ -131.236236131999874, 54.99542877800009 ], [ -131.243723110999866, 54.989203192000119 ], [ -131.241566535999937, 54.974595445000105 ] ] ], [ [ [ -163.756540493999921, 55.060370184000149 ], [ -163.681752081999917, 55.044378973000065 ], [ -163.571644660999908, 55.057033596000124 ], [ -163.52570553299995, 55.043850002000099 ], [ -163.539133266999926, 55.043443101 ], [ -163.545725063999896, 55.037583726000136 ], [ -163.54588782499988, 55.028021552000055 ], [ -163.539987758999928, 55.016546942 ], [ -163.531239386999857, 55.009711005 ], [ -163.508493618999921, 55.002020575000145 ], [ -163.479603644999912, 54.984930731000119 ], [ -163.461415167999917, 54.970770575000088 ], [ -163.444813605999855, 54.953680731000148 ], [ -163.430734829999921, 54.934556382000082 ], [ -163.42316646999987, 54.912014065 ], [ -163.421131964999944, 54.865912177000055 ], [ -163.412709113999881, 54.848334052000141 ], [ -163.373036261999886, 54.792669989000117 ], [ -163.354359503999888, 54.776922919000143 ], [ -163.328846808999913, 54.765692450000145 ], [ -163.30333411399991, 54.761786200000145 ], [ -163.23310299399995, 54.763495184000149 ], [ -163.223378058999913, 54.766424872000087 ], [ -163.216053839999915, 54.771918036000116 ], [ -163.207630988999853, 54.78034088700015 ], [ -163.198841925999886, 54.783880927000055 ], [ -163.188343878999916, 54.782294012000122 ], [ -163.177113410999908, 54.778794664000131 ], [ -163.166696743999921, 54.776922919000143 ], [ -163.144154425999943, 54.770331122000087 ], [ -163.128854946999894, 54.75413646000014 ], [ -163.107980923999918, 54.714829820000134 ], [ -163.099680141999926, 54.704738674000069 ], [ -163.09080969999988, 54.698472398000106 ], [ -163.082020636999914, 54.693670966000028 ], [ -163.073841925999915, 54.687567450000031 ], [ -163.067738410999937, 54.683579820000077 ], [ -163.05610104099992, 54.673895575000088 ], [ -163.050648566999882, 54.664129950000145 ], [ -163.063303188999953, 54.659613348 ], [ -163.155506964999915, 54.666205145000092 ], [ -163.170033331999946, 54.673895575000088 ], [ -163.154855923999861, 54.675685940000093 ], [ -163.114816860999923, 54.687567450000031 ], [ -163.127064581999889, 54.69550202 ], [ -163.140126105999883, 54.699855861000103 ], [ -163.154367641999897, 54.70140208500014 ], [ -163.170033331999946, 54.701239325000174 ], [ -163.185251430999926, 54.69749583500014 ], [ -163.215809699999852, 54.683294989000117 ], [ -163.228098110999923, 54.680080471000068 ], [ -163.238474087999919, 54.683050848000093 ], [ -163.247751430999955, 54.689886786 ], [ -163.26191158799989, 54.704657294000086 ], [ -163.272287563999896, 54.709133205000128 ], [ -163.299183722999885, 54.709906317000062 ], [ -163.313465949999852, 54.714829820000134 ], [ -163.347767706999917, 54.75226471600017 ], [ -163.369496222999885, 54.764553127000042 ], [ -163.402699347999913, 54.74713776200015 ], [ -163.417551235999866, 54.741766669000086 ], [ -163.43110104099992, 54.73501211100016 ], [ -163.436960415999891, 54.725083726000051 ], [ -163.429554816999882, 54.69212474199999 ], [ -163.430734829999921, 54.680080471000068 ], [ -163.449167446999951, 54.663519598 ], [ -163.506662563999953, 54.655747789000102 ], [ -163.518869594999927, 54.636379299000097 ], [ -163.53388424399995, 54.635321356000034 ], [ -163.622547980999911, 54.611802476000079 ], [ -163.678089972999885, 54.616359768000038 ], [ -163.789865688999896, 54.637925523000135 ], [ -164.132679816999882, 54.62323639500012 ], [ -164.18305416599992, 54.610256252000127 ], [ -164.218373175999943, 54.598130601000136 ], [ -164.329701300999886, 54.534816799000097 ], [ -164.334462042999888, 54.52680084800015 ], [ -164.332834438999953, 54.515570380000142 ], [ -164.330067511999886, 54.509588934000035 ], [ -164.32953854099992, 54.502508856000148 ], [ -164.334462042999888, 54.488267320000077 ], [ -164.361317511999857, 54.458482164000046 ], [ -164.405588344999899, 54.435980536000059 ], [ -164.457102016999897, 54.421047268000038 ], [ -164.505808071999923, 54.413804429 ], [ -164.573312954999892, 54.41339752800009 ], [ -164.608713344999899, 54.408921617000132 ], [ -164.633046027999882, 54.395819403000147 ], [ -164.652577277999853, 54.39199453300013 ], [ -164.802316860999895, 54.404038804000052 ], [ -164.825998501999919, 54.411322333000058 ], [ -164.845285610999952, 54.423488674000154 ], [ -164.873036261999943, 54.457220770000148 ], [ -164.889149542999917, 54.470933335000083 ], [ -164.909860805999926, 54.475287177000055 ], [ -164.904286261999914, 54.496649481000119 ], [ -164.912546352999897, 54.508734442000119 ], [ -164.924753383999956, 54.516913153000033 ], [ -164.930978969999927, 54.52680084800015 ], [ -164.933664516999897, 54.542954820000105 ], [ -164.940419074999937, 54.558661200000174 ], [ -164.958241339999915, 54.585150458000143 ], [ -164.938303188999924, 54.598863023000078 ], [ -164.909250454999949, 54.612127997000087 ], [ -164.879099087999919, 54.622137762000179 ], [ -164.796823696999866, 54.634466864000117 ], [ -164.739206508999899, 54.652777411 ], [ -164.700672980999911, 54.678290106000176 ], [ -164.569528774999867, 54.83698151200015 ], [ -164.557606574999937, 54.844549872000115 ], [ -164.547352667999917, 54.882757880000057 ], [ -164.541818813999896, 54.88743724199999 ], [ -164.47752844999988, 54.918890692 ], [ -164.453195766999897, 54.924994208 ], [ -164.399647589999887, 54.927720445000077 ], [ -164.378163214999859, 54.922837632 ], [ -164.336008266999926, 54.900051174000069 ], [ -164.313954230999911, 54.893011786 ], [ -164.225087042999888, 54.89472077 ], [ -164.212961391999897, 54.899888414000102 ], [ -164.210926886999857, 54.908433335000112 ], [ -164.224598761999914, 54.920314846000068 ], [ -164.190663214999944, 54.942124742000132 ], [ -164.156849738999881, 54.95697663 ], [ -164.119374152999853, 54.965399481000034 ], [ -164.050729946999923, 54.971136786000116 ], [ -164.026437954999949, 54.978338934000064 ], [ -163.985666469999899, 54.99542877800009 ], [ -163.937001105999855, 55.029120184000092 ], [ -163.916737433999941, 55.036363023000106 ], [ -163.823963995999918, 55.043850002000099 ], [ -163.803212042999917, 55.048041083000115 ], [ -163.780588344999956, 55.05585358300003 ], [ -163.756540493999921, 55.060370184000149 ] ] ], [ [ [ -159.355051235999923, 55.037298895 ], [ -159.363229946999923, 55.036322333000115 ], [ -159.373605923999946, 55.036363023000106 ], [ -159.383168097999942, 55.034369208000086 ], [ -159.391346808999913, 55.029852606000034 ], [ -159.394724087999947, 55.025376695000077 ], [ -159.39008541599992, 55.023382880000113 ], [ -159.37922115799995, 55.017075913999989 ], [ -159.363229946999923, 55.002671617000104 ], [ -159.339182094999899, 54.975531317 ], [ -159.401071743999864, 54.950344143000123 ], [ -159.434315558999884, 54.941839911 ], [ -159.462717251999919, 54.948187567000119 ], [ -159.451486782999893, 54.956488348 ], [ -159.452219204999949, 54.966009833 ], [ -159.456369594999899, 54.975002346000039 ], [ -159.455270962999919, 54.981756903000147 ], [ -159.445668097999885, 54.985052802 ], [ -159.421457485999952, 54.981878973000121 ], [ -159.408070441999882, 54.981756903000147 ], [ -159.413075324999909, 54.991848049000041 ], [ -159.424794074999909, 55.030218817000147 ], [ -159.439076300999886, 55.028713283000101 ], [ -159.483143683999884, 55.016546942 ], [ -159.459828253999888, 55.038153387000094 ], [ -159.454294399999952, 55.049750067000119 ], [ -159.462717251999919, 55.058050848 ], [ -159.462717251999919, 55.064276434000149 ], [ -159.444162563999896, 55.060980536000116 ], [ -159.364491339999944, 55.057562567000033 ], [ -159.354481574999852, 55.054754950000145 ], [ -159.345407680999955, 55.05068594 ], [ -159.349110480999911, 55.041449286000145 ], [ -159.355051235999923, 55.037298895 ] ] ], [ [ [ -131.189992318999941, 55.04833726000011 ], [ -131.216200289999904, 55.048024022000121 ], [ -131.25489452899987, 55.069236562000029 ], [ -131.244148378999881, 55.092743682 ], [ -131.20397197099993, 55.109932967000091 ], [ -131.189149909999855, 55.103431457000127 ], [ -131.188079458999937, 55.075074197000149 ], [ -131.189992318999941, 55.04833726000011 ] ] ], [ [ [ -161.730661587999947, 55.160549221000068 ], [ -161.730213995999861, 55.155910549000154 ], [ -161.731638149999924, 55.154486395000092 ], [ -161.734445766999897, 55.154364325000117 ], [ -161.738148566999939, 55.153713283000158 ], [ -161.71312415299991, 55.143988348 ], [ -161.660837368999921, 55.130682684000092 ], [ -161.641306118999921, 55.119533596000068 ], [ -161.652780727999868, 55.106268622000059 ], [ -161.685780402999939, 55.090399481000119 ], [ -161.696522589999859, 55.071112372000172 ], [ -161.711862758999928, 55.079006252000156 ], [ -161.724720831999946, 55.07428620000006 ], [ -161.737253383999928, 55.064764716000141 ], [ -161.751169399999924, 55.058050848 ], [ -161.770497199999937, 55.059027411000088 ], [ -161.78453528599988, 55.066799221000068 ], [ -161.797434048999889, 55.077053127000013 ], [ -161.813221808999941, 55.085394598000065 ], [ -161.80687415299991, 55.095648505 ], [ -161.775380011999914, 55.122626044000143 ], [ -161.771677212999862, 55.134344794000143 ], [ -161.783192511999914, 55.144924221000096 ], [ -161.813221808999941, 55.160549221000068 ], [ -161.809030727999925, 55.145005601000079 ], [ -161.81220455599987, 55.129787502000099 ], [ -161.826283331999946, 55.099066473 ], [ -161.840321417999888, 55.111761786000059 ], [ -161.871937628999888, 55.121405341000056 ], [ -161.893137173999946, 55.133937893000123 ], [ -161.90062415299991, 55.133490302000141 ], [ -161.906076626999862, 55.134588934000178 ], [ -161.908192511999857, 55.143459377000127 ], [ -161.906076626999862, 55.154852606000091 ], [ -161.900135870999918, 55.158026434000149 ], [ -161.891672329999892, 55.158148505000142 ], [ -161.843820766999869, 55.171332098000093 ], [ -161.730661587999947, 55.160549221000068 ] ] ], [ [ [ -132.791574673999946, 55.173081773 ], [ -132.741607225999928, 55.149115302000112 ], [ -132.722767706999946, 55.133205471000011 ], [ -132.66820227799991, 55.05068594 ], [ -132.682687954999835, 55.034369208000086 ], [ -132.750721808999913, 54.99542877800009 ], [ -132.758697068999936, 55.008368231000091 ], [ -132.768177863999938, 55.018744208 ], [ -132.79165605399993, 55.036363023000106 ], [ -132.791574673999946, 55.013617255000085 ], [ -132.815500454999892, 55.015692450000088 ], [ -132.873646613999938, 55.036363023000106 ], [ -132.861643032999837, 55.045477606000119 ], [ -132.83226477799991, 55.048814195000134 ], [ -132.826486782999893, 55.054388739000146 ], [ -132.823394334999875, 55.065863348000093 ], [ -132.816070115999878, 55.074855861000017 ], [ -132.807036912999962, 55.081284898000106 ], [ -132.799143032999893, 55.085394598000065 ], [ -132.810658331999946, 55.090277411000145 ], [ -132.827219204999892, 55.094631252000127 ], [ -132.856556769999912, 55.099066473 ], [ -132.861805792999917, 55.104803778000175 ], [ -132.86538652299987, 55.11782461100016 ], [ -132.86742102799991, 55.131659247000144 ], [ -132.866851365999935, 55.146429755000142 ], [ -132.869211391999897, 55.153998114 ], [ -132.86742102799991, 55.160549221000068 ], [ -132.863107876999891, 55.162054755000113 ], [ -132.855946417999945, 55.16156647300015 ], [ -132.849273240999878, 55.163275458000143 ], [ -132.842681443999936, 55.179144598000065 ], [ -132.833851691999939, 55.18646881700009 ], [ -132.822661912999934, 55.190497137000065 ], [ -132.812163865999878, 55.188421942000119 ], [ -132.791574673999946, 55.173081773 ] ] ], [ [ [ -161.354359503999945, 55.221502997000172 ], [ -161.340321417999888, 55.218980210000055 ], [ -161.338205532999893, 55.214056708 ], [ -161.341501430999926, 55.206773179 ], [ -161.338205532999893, 55.197902736000131 ], [ -161.333566860999952, 55.191473700000031 ], [ -161.33149166599992, 55.188055731000119 ], [ -161.330189581999946, 55.182033596000011 ], [ -161.330759243999921, 55.170355536000031 ], [ -161.341867641999926, 55.162746486000074 ], [ -161.360463019999941, 55.163031317 ], [ -161.369821743999864, 55.165350653000147 ], [ -161.42218990799995, 55.185451565000037 ], [ -161.43968665299991, 55.197333075000145 ], [ -161.437448696999923, 55.204901434000121 ], [ -161.427316860999952, 55.213690497000172 ], [ -161.411447719999927, 55.219468492000047 ], [ -161.372263149999895, 55.219142971000039 ], [ -161.354359503999945, 55.221502997000172 ] ] ], [ [ [ -159.524159308999913, 55.119533596000068 ], [ -159.522694464999915, 55.078802802 ], [ -159.524159308999913, 55.071112372000172 ], [ -159.494455532999893, 55.063137111000017 ], [ -159.489979620999918, 55.058050848 ], [ -159.493641730999855, 55.047593492000104 ], [ -159.504465298999946, 55.042466539000102 ], [ -159.517404751999948, 55.042425848000036 ], [ -159.527536587999919, 55.047267971000096 ], [ -159.549997524999924, 55.073797919000143 ], [ -159.562977667999917, 55.085435289000074 ], [ -159.578724738999881, 55.092230536 ], [ -159.582264777999939, 55.081610419000143 ], [ -159.583688930999926, 55.070868231000034 ], [ -159.582630988999881, 55.060492255000142 ], [ -159.578724738999881, 55.05068594 ], [ -159.593942837999947, 55.05072663 ], [ -159.620106574999909, 55.057033596000124 ], [ -159.633371548999918, 55.058050848 ], [ -159.639719204999949, 55.053859768000066 ], [ -159.643666144999941, 55.046616929000052 ], [ -159.647775844999899, 55.043280341000028 ], [ -159.654489712999919, 55.05068594 ], [ -159.659250454999949, 55.065130927000055 ], [ -159.654367641999954, 55.073391018000152 ], [ -159.633371548999918, 55.085394598000065 ], [ -159.627145962999862, 55.087632554000052 ], [ -159.621652798999946, 55.086371161000145 ], [ -159.616892055999926, 55.086371161000145 ], [ -159.612904425999858, 55.092230536 ], [ -159.61164303299995, 55.098944403000033 ], [ -159.613270636999857, 55.102972723 ], [ -159.61742102799991, 55.104803778000175 ], [ -159.623402472999942, 55.105292059000149 ], [ -159.645375128999945, 55.112697658000158 ], [ -159.650380011999886, 55.126369533000101 ], [ -159.640248175999943, 55.133937893000123 ], [ -159.592600063999953, 55.11017487200003 ], [ -159.577137824999937, 55.112005927000112 ], [ -159.577259894999912, 55.12173086100016 ], [ -159.599842902999882, 55.133205471000011 ], [ -159.585764126999948, 55.140936591000028 ], [ -159.551380988999881, 55.142157294000029 ], [ -159.544626430999955, 55.15029531500015 ], [ -159.552601691999911, 55.158921617000047 ], [ -159.591786261999943, 55.163763739000117 ], [ -159.606068488999938, 55.167914130000085 ], [ -159.582508917999888, 55.17715078300013 ], [ -159.584177212999919, 55.193182684000035 ], [ -159.589222785999937, 55.208400783000016 ], [ -159.575672980999883, 55.215155341000141 ], [ -159.56224524599989, 55.21548086100016 ], [ -159.55711829299986, 55.217027085000112 ], [ -159.553456183999913, 55.221340236000017 ], [ -159.544626430999955, 55.229396877000127 ], [ -159.540760870999947, 55.237616278000061 ], [ -159.539255337999919, 55.247137762000037 ], [ -159.533640102999897, 55.251044012000037 ], [ -159.517933722999942, 55.24241771000014 ], [ -159.520985480999911, 55.226385809000035 ], [ -159.53026282499988, 55.216620184000092 ], [ -159.540109829999892, 55.208685614000146 ], [ -159.544626430999955, 55.198065497000087 ], [ -159.538319464999915, 55.183539130000057 ], [ -159.524647589999887, 55.176174221000068 ], [ -159.511545376999919, 55.172919012000122 ], [ -159.507069464999944, 55.171087958000143 ], [ -159.51219641799986, 55.161322333 ], [ -159.524159308999913, 55.119533596000068 ] ] ], [ [ [ -133.062245245999918, 55.18382396 ], [ -133.06541907499988, 55.15029531500015 ], [ -133.055897589999887, 55.144110419000086 ], [ -133.011138475999928, 55.132310289000102 ], [ -132.997141079999892, 55.125718492000047 ], [ -132.994862433999913, 55.119289455000128 ], [ -132.993072068999936, 55.09979889500012 ], [ -132.99087480399993, 55.092230536 ], [ -132.956166144999941, 55.064276434000149 ], [ -132.984852667999917, 55.075995184000064 ], [ -133.019357876999834, 55.097235419000029 ], [ -133.054839647999927, 55.108954169000029 ], [ -133.086537238999881, 55.092230536 ], [ -132.997141079999892, 55.064276434000149 ], [ -132.997141079999892, 55.058050848 ], [ -133.032582160999965, 55.050279039000102 ], [ -133.045521613999881, 55.05068594 ], [ -133.045521613999881, 55.043850002000099 ], [ -133.014068162999934, 55.03457265800013 ], [ -132.98306230399993, 55.032049872000115 ], [ -132.957590298999946, 55.023342190000122 ], [ -132.942494269999941, 54.99542877800009 ], [ -132.941761847999885, 54.954413153000175 ], [ -132.942494269999941, 54.948187567000119 ], [ -132.932769334999875, 54.945502020000148 ], [ -132.906646287999934, 54.951361395000092 ], [ -132.894113735999923, 54.948187567000119 ], [ -132.901519334999904, 54.94082265800013 ], [ -132.893950975999957, 54.939154364000117 ], [ -132.891102667999917, 54.937567450000174 ], [ -132.887277798999889, 54.934556382000082 ], [ -132.892445441999911, 54.929510809000064 ], [ -132.901519334999904, 54.91351959800015 ], [ -132.860463019999912, 54.900336005 ], [ -132.843820766999869, 54.889105536 ], [ -132.839466925999943, 54.872503973000121 ], [ -132.824574347999913, 54.87518952000012 ], [ -132.815012173999918, 54.867580471000068 ], [ -132.814361131999874, 54.85545482 ], [ -132.826486782999893, 54.844549872000115 ], [ -132.812814907999837, 54.839992580000157 ], [ -132.78453528599988, 54.83685944200009 ], [ -132.771229620999861, 54.831529039000131 ], [ -132.762603318999936, 54.824448960000055 ], [ -132.758697068999936, 54.818182684000121 ], [ -132.755930141999897, 54.811590887000037 ], [ -132.750721808999913, 54.803656317000062 ], [ -132.722482876999834, 54.776556708000143 ], [ -132.72520911399991, 54.767401434000149 ], [ -132.750721808999913, 54.756415106000091 ], [ -132.74388587099989, 54.74900950700011 ], [ -132.751088019999912, 54.74701569200009 ], [ -132.753814256999874, 54.745428778000147 ], [ -132.757557745999918, 54.742173570000105 ], [ -132.705433722999885, 54.728827216000084 ], [ -132.688303188999839, 54.717962958 ], [ -132.702951626999862, 54.701239325000174 ], [ -132.671213344999899, 54.677313544000114 ], [ -132.68687903599988, 54.673976955000072 ], [ -132.724273240999935, 54.677435614000089 ], [ -132.757557745999918, 54.673895575000088 ], [ -132.76821855399993, 54.693019924000069 ], [ -132.793771938999839, 54.698065497000115 ], [ -132.842884894999969, 54.693793036 ], [ -132.843576626999919, 54.69830963700015 ], [ -132.852935350999928, 54.719142971000124 ], [ -132.863596157999893, 54.734523830000072 ], [ -132.863840298999918, 54.74160390800013 ], [ -132.856190558999913, 54.744696356000119 ], [ -132.839466925999943, 54.742173570000105 ], [ -132.938059048999946, 54.78774648600016 ], [ -132.956166144999941, 54.803656317000062 ], [ -132.94351152299987, 54.807074286000088 ], [ -132.925607876999834, 54.81533437700007 ], [ -132.911000128999916, 54.826402085000112 ], [ -132.908355272999927, 54.838324286000145 ], [ -132.921701626999834, 54.845200914000074 ], [ -132.942250128999973, 54.842027085 ], [ -132.980376756999931, 54.831529039000131 ], [ -132.998768683999913, 54.837958075000031 ], [ -133.007069464999887, 54.866115627000013 ], [ -133.021351691999968, 54.872503973000121 ], [ -133.037098761999914, 54.877386786000031 ], [ -133.049143032999837, 54.88890208500014 ], [ -133.051503058999913, 54.9024925800001 ], [ -133.038075324999909, 54.91351959800015 ], [ -133.053293423999975, 54.917792059000149 ], [ -133.068714972999913, 54.919745184000092 ], [ -133.100738084999904, 54.920314846000068 ], [ -133.100738084999904, 54.927720445000077 ], [ -133.075835740999963, 54.932196356000034 ], [ -133.063710089999859, 54.935736395 ], [ -133.058583136999857, 54.94082265800013 ], [ -133.064564581999946, 54.947088934000178 ], [ -133.078358527999882, 54.949286200000174 ], [ -133.107004360999838, 54.948187567000119 ], [ -133.132801886999886, 54.943345445000048 ], [ -133.139068162999934, 54.94525788 ], [ -133.147938605999883, 54.954413153000175 ], [ -133.144195115999935, 54.955511786000116 ], [ -133.14126542899993, 54.963080145000092 ], [ -133.143462693999908, 54.973089911000059 ], [ -133.154774542999917, 54.981756903000147 ], [ -133.134836391999897, 54.997503973 ], [ -133.153472459999904, 55.021185614000117 ], [ -133.203236456999974, 55.058050848 ], [ -133.199289516999897, 55.06525299700003 ], [ -133.203724738999966, 55.075140692000147 ], [ -133.211293097999913, 55.086818752000127 ], [ -133.216867641999926, 55.099066473 ], [ -133.168365037999934, 55.096380927000112 ], [ -133.120676235999895, 55.099066473 ], [ -133.139312303999873, 55.115668036000059 ], [ -133.189361131999874, 55.12173086100016 ], [ -133.203236456999974, 55.133205471000011 ], [ -133.18211829299986, 55.133205471000011 ], [ -133.216867641999926, 55.153713283000158 ], [ -133.205799933999884, 55.155829169000171 ], [ -133.18211829299986, 55.15322500200007 ], [ -133.168446417999917, 55.153713283000158 ], [ -133.177642381999902, 55.164292710000112 ], [ -133.18700110599994, 55.172023830000043 ], [ -133.199208136999914, 55.175604559000092 ], [ -133.216867641999926, 55.174139716000028 ], [ -133.216867641999926, 55.180975653000147 ], [ -133.154774542999917, 55.19464752800009 ], [ -133.1888728509999, 55.213771877000156 ], [ -133.19399980399993, 55.222235419000114 ], [ -133.18211829299986, 55.235581773000106 ], [ -133.166127081999946, 55.243109442000062 ], [ -133.143462693999908, 55.248846747000144 ], [ -133.121408657999922, 55.251288153000175 ], [ -133.107004360999838, 55.248683986000074 ], [ -133.096547003999945, 55.233099677 ], [ -133.102202928999958, 55.220282294000143 ], [ -133.104237433999913, 55.211574611000074 ], [ -133.082834438999839, 55.208319403000033 ], [ -133.066761847999942, 55.200913804000137 ], [ -133.062245245999918, 55.18382396 ] ] ], [ [ [ -161.564076300999915, 55.207912502000013 ], [ -161.574086066999882, 55.207017320000134 ], [ -161.592640753999888, 55.207505601000108 ], [ -161.637196417999888, 55.193548895000148 ], [ -161.645334438999896, 55.194525458000115 ], [ -161.664173956999946, 55.19867584800015 ], [ -161.676869269999912, 55.20018138200011 ], [ -161.691721157999893, 55.211615302000055 ], [ -161.683338995999918, 55.230902411 ], [ -161.658884243999864, 55.242377020000148 ], [ -161.612416144999941, 55.24510325700011 ], [ -161.559030727999868, 55.254461981000063 ], [ -161.548573370999918, 55.252834377000042 ], [ -161.544016079999949, 55.240627346000153 ], [ -161.557443813999953, 55.215765692 ], [ -161.564076300999915, 55.207912502000013 ] ] ], [ [ [ -131.352284308999913, 55.122626044000143 ], [ -131.355580206999946, 55.114813544000143 ], [ -131.36192786399991, 55.106187242000075 ], [ -131.366118943999936, 55.097398179 ], [ -131.363189256999931, 55.08881256700009 ], [ -131.348784959999932, 55.077948309000092 ], [ -131.345082160999908, 55.070990302000027 ], [ -131.345529751999891, 55.058050848 ], [ -131.357045050999943, 55.03253815300009 ], [ -131.378000454999892, 55.017889716000084 ], [ -131.404286261999914, 55.011297919000029 ], [ -131.471831834999961, 55.004828192000119 ], [ -131.479562954999892, 55.006293036000088 ], [ -131.485340949999937, 55.017035223000093 ], [ -131.484445766999841, 55.02610911699999 ], [ -131.48176021999987, 55.034654039000102 ], [ -131.482655402999853, 55.043850002000099 ], [ -131.493763800999886, 55.057277736000074 ], [ -131.513742641999869, 55.074164130000085 ], [ -131.53449459499987, 55.087103583000086 ], [ -131.54784094999988, 55.08881256700009 ], [ -131.549794074999909, 55.076361395000063 ], [ -131.536691860999866, 55.064439195000105 ], [ -131.524973110999895, 55.049994208000058 ], [ -131.531117316999939, 55.030218817000147 ], [ -131.539296027999853, 55.022609768 ], [ -131.550200975999928, 55.014715887000037 ], [ -131.57201087099989, 55.002875067000062 ], [ -131.575266079999835, 55.000433661000116 ], [ -131.578114386999857, 54.997503973 ], [ -131.582997199999937, 54.995347398000106 ], [ -131.592518683999941, 54.99542877800009 ], [ -131.598988410999937, 54.998195705000157 ], [ -131.603342251999834, 55.003078518000123 ], [ -131.606556769999884, 55.00771719000015 ], [ -131.609608527999882, 55.009711005 ], [ -131.62450110599994, 55.017401434000092 ], [ -131.618397589999944, 55.035223700000174 ], [ -131.581044074999909, 55.09007396 ], [ -131.583729620999861, 55.095770575000174 ], [ -131.599354620999947, 55.099066473 ], [ -131.582875128999945, 55.125555731000176 ], [ -131.564279751999891, 55.126288153000118 ], [ -131.544260219999899, 55.118557033000101 ], [ -131.523589647999898, 55.119533596000068 ], [ -131.517241990999935, 55.134182033000073 ], [ -131.531483527999853, 55.151760158000016 ], [ -131.553944464999859, 55.166896877000013 ], [ -131.57201087099989, 55.174139716000028 ], [ -131.568186001999891, 55.177394924000069 ], [ -131.561919725999928, 55.185126044000086 ], [ -131.558420376999834, 55.188421942000119 ], [ -131.572173631999931, 55.196844794000171 ], [ -131.581695115999935, 55.206284898 ], [ -131.586537238999938, 55.218654690000122 ], [ -131.586333787999962, 55.235581773000106 ], [ -131.581288214999915, 55.253363348 ], [ -131.572987433999856, 55.260484117000047 ], [ -131.560861782999865, 55.263820705000072 ], [ -131.544097459999932, 55.270412502000156 ], [ -131.551584438999896, 55.276556708000115 ], [ -131.531239386999914, 55.274237372000172 ], [ -131.503570115999935, 55.264797268000152 ], [ -131.479237433999856, 55.252630927000084 ], [ -131.451283331999917, 55.223781643000152 ], [ -131.395578579999921, 55.215399481000176 ], [ -131.37279212099989, 55.201483466000113 ], [ -131.376942511999914, 55.182847398000106 ], [ -131.369130011999914, 55.163723049000126 ], [ -131.357980923999918, 55.143703518000066 ], [ -131.352284308999913, 55.122626044000143 ] ] ], [ [ [ -159.921986456999946, 55.221909898 ], [ -159.904408331999889, 55.207464911000116 ], [ -159.916940883999899, 55.156927802000112 ], [ -159.901478644999884, 55.140082098000036 ], [ -159.886952277999939, 55.149115302000112 ], [ -159.875111456999889, 55.172674872000172 ], [ -159.857533331999946, 55.190252997000115 ], [ -159.825795050999886, 55.180975653000147 ], [ -159.832875128999945, 55.171616929000109 ], [ -159.839304165999863, 55.145168361000131 ], [ -159.846262173999946, 55.133205471000011 ], [ -159.848255988999881, 55.134426174000126 ], [ -159.874216274999867, 55.125718492000047 ], [ -159.876535610999952, 55.120794989000089 ], [ -159.875233527999939, 55.115057684000092 ], [ -159.874867316999939, 55.109564520000092 ], [ -159.879750128999888, 55.105292059000149 ], [ -159.897409633999928, 55.104885158000158 ], [ -159.909250454999892, 55.114813544000143 ], [ -159.920155402999853, 55.127020575000031 ], [ -159.93500729099992, 55.133205471000011 ], [ -159.949452277999882, 55.128892320000105 ], [ -159.967884894999912, 55.106756903000033 ], [ -159.982858852999925, 55.099066473 ], [ -159.955881313999896, 55.081488348000065 ], [ -159.946115688999953, 55.069647528000118 ], [ -159.959543423999946, 55.064276434000149 ], [ -160.012644008999928, 55.071356512000122 ], [ -160.031239386999943, 55.071112372000172 ], [ -160.01728268099987, 55.0528832050001 ], [ -160.01703854099992, 55.045314846000153 ], [ -160.045521613999938, 55.030218817000147 ], [ -160.083688930999926, 54.995835679 ], [ -160.129831508999928, 54.965969143 ], [ -160.155384894999912, 54.94082265800013 ], [ -160.183298305999955, 54.918931382 ], [ -160.196359829999949, 54.905218817000062 ], [ -160.20844479099992, 54.87384674700003 ], [ -160.222727016999926, 54.876125393 ], [ -160.237049933999913, 54.888576565000122 ], [ -160.243519660999937, 54.90355052300005 ], [ -160.240223761999886, 54.927069403000118 ], [ -160.230295376999891, 54.934475002000099 ], [ -160.213327602999925, 54.937648830000157 ], [ -160.188913540999948, 54.948187567000119 ], [ -160.144520636999914, 55.006293036000088 ], [ -160.130686001999948, 55.015692450000088 ], [ -160.114816860999895, 55.023830471000039 ], [ -160.100819464999944, 55.034247137000094 ], [ -160.092722133999928, 55.05068594 ], [ -160.174631313999953, 55.058050848 ], [ -160.174631313999953, 55.064276434000149 ], [ -160.161976691999882, 55.069037177000055 ], [ -160.148548956999889, 55.070990302000027 ], [ -160.119984503999888, 55.071112372000172 ], [ -160.125192837999919, 55.082464911000145 ], [ -160.134144660999937, 55.091253973000036 ], [ -160.145619269999884, 55.09699127800009 ], [ -160.173939581999917, 55.103216864000146 ], [ -160.18919837099989, 55.112372137000037 ], [ -160.194813605999911, 55.121527411000031 ], [ -160.181752081999917, 55.125718492000047 ], [ -160.152902798999889, 55.121649481000176 ], [ -160.100656704999892, 55.103420315 ], [ -160.072214321999951, 55.099066473 ], [ -160.084095831999917, 55.115301825000145 ], [ -160.113474087999919, 55.139308986000103 ], [ -160.127430792999888, 55.153713283000158 ], [ -160.110585089999887, 55.160834052000112 ], [ -160.094309048999946, 55.156927802000112 ], [ -160.079904751999891, 55.147040106000091 ], [ -160.068796352999954, 55.136664130000028 ], [ -160.064076300999943, 55.128851630000113 ], [ -160.063588019999884, 55.123521226000051 ], [ -160.060658331999946, 55.12051015800013 ], [ -160.039784308999856, 55.118475653000118 ], [ -160.031564907999893, 55.115545966000084 ], [ -160.02403723899991, 55.111029364000146 ], [ -160.017567511999914, 55.105292059000149 ], [ -160.01398678299995, 55.108058986000046 ], [ -160.010202602999925, 55.111761786000059 ], [ -160.003895636999857, 55.119533596000068 ], [ -160.019154425999943, 55.13373444200009 ], [ -160.056101040999891, 55.181382554000052 ], [ -160.065378383999928, 55.201483466000113 ], [ -159.981271938999896, 55.177883205000072 ], [ -159.953602667999917, 55.175848700000031 ], [ -159.976633266999897, 55.208319403000033 ], [ -159.964833136999914, 55.210516669000114 ], [ -159.954090949999909, 55.209702867000104 ], [ -159.943348761999886, 55.210760809000149 ], [ -159.931630011999914, 55.218573309000149 ], [ -159.930653449999909, 55.226141669000086 ], [ -159.936960415999863, 55.235256252000099 ], [ -159.94481360599994, 55.244452216000141 ], [ -159.948679165999948, 55.252386786000116 ], [ -159.93968665299991, 55.2560082050001 ], [ -159.89867102799991, 55.28534577 ], [ -159.887277798999861, 55.297064520000092 ], [ -159.876901821999951, 55.287583726 ], [ -159.874216274999867, 55.284002997000115 ], [ -159.864979620999918, 55.25116608300003 ], [ -159.875111456999889, 55.238836981000148 ], [ -159.896717902999882, 55.233628648000078 ], [ -159.921986456999946, 55.221909898 ] ] ], [ [ [ -133.285267706999889, 55.317938544000143 ], [ -133.291574673999946, 55.300848700000117 ], [ -133.319243943999936, 55.270412502000156 ], [ -133.291371222999885, 55.262925523 ], [ -133.280384894999941, 55.282131252000127 ], [ -133.259632941999939, 55.28156159100017 ], [ -133.234242316999911, 55.27362702 ], [ -133.209380662999934, 55.270412502000156 ], [ -133.226633266999869, 55.252875067000033 ], [ -133.233754035999937, 55.242254950000174 ], [ -133.240142381999931, 55.220363674000126 ], [ -133.248890753999916, 55.216498114000117 ], [ -133.272084113999938, 55.215155341000141 ], [ -133.306548631999874, 55.203111070000134 ], [ -133.316151495999947, 55.201483466000113 ], [ -133.328439907999893, 55.202948309000149 ], [ -133.334339972999942, 55.206610419000029 ], [ -133.338856574999909, 55.211086330000072 ], [ -133.346587693999908, 55.215155341000141 ], [ -133.369455532999893, 55.221991278000147 ], [ -133.382435675999915, 55.223334052000055 ], [ -133.388172980999883, 55.218573309000149 ], [ -133.391835089999915, 55.20917389500012 ], [ -133.400786912999962, 55.2032738300001 ], [ -133.411976691999968, 55.200751044000171 ], [ -133.422271287999877, 55.201483466000113 ], [ -133.436594204999892, 55.211371161000116 ], [ -133.445627407999893, 55.229152736000103 ], [ -133.449859178999901, 55.250230210000112 ], [ -133.449615037999962, 55.270412502000156 ], [ -133.437408006999874, 55.26581452000012 ], [ -133.424672003999945, 55.26308828300013 ], [ -133.41234290299991, 55.263902085000055 ], [ -133.401234503999945, 55.270412502000156 ], [ -133.434437628999973, 55.28587474199999 ], [ -133.442779100999928, 55.297796942000119 ], [ -133.432240363999881, 55.314439195000077 ], [ -133.414133266999897, 55.318182684000092 ], [ -133.392079230999883, 55.315578518 ], [ -133.377512173999946, 55.316717841000056 ], [ -133.381947394999941, 55.331854559000035 ], [ -133.360259568999936, 55.332912502000099 ], [ -133.338775193999908, 55.337347723000065 ], [ -133.318104620999918, 55.339056708000058 ], [ -133.298736131999874, 55.331854559000035 ], [ -133.285267706999889, 55.317938544000143 ] ] ], [ [ [ -160.032093878999945, 55.313666083000143 ], [ -160.039987758999928, 55.307074286000059 ], [ -160.072946743999893, 55.308294989000089 ], [ -160.096994594999927, 55.314927476000051 ], [ -160.109079555999926, 55.325751044000143 ], [ -160.108469204999892, 55.333889065000065 ], [ -160.09935462099989, 55.340277411000088 ], [ -160.085438605999911, 55.343410549000154 ], [ -160.066599087999862, 55.344712632000054 ], [ -160.061512824999937, 55.342678127000127 ], [ -160.059030727999925, 55.338568427000084 ], [ -160.052561001999891, 55.333441473000065 ], [ -160.036244269999884, 55.32619863500004 ], [ -160.036244269999884, 55.326157945000048 ], [ -160.033070441999939, 55.322577216000084 ], [ -160.032093878999945, 55.313666083000143 ] ] ], [ [ [ -160.332875128999945, 55.352280992000104 ], [ -160.324777798999918, 55.313910223000093 ], [ -160.323719855999855, 55.295233466000113 ], [ -160.325428839999859, 55.276556708000115 ], [ -160.336293097999942, 55.248683986000074 ], [ -160.346913214999887, 55.250555731000148 ], [ -160.361765102999954, 55.255113023 ], [ -160.374989386999914, 55.261053778000118 ], [ -160.401112433999941, 55.286769924000069 ], [ -160.498483852999925, 55.302232163999989 ], [ -160.531483527999882, 55.325018622000115 ], [ -160.518991665999863, 55.32713450700011 ], [ -160.50841223899991, 55.331732489000061 ], [ -160.504261847999885, 55.338039455000015 ], [ -160.511057094999899, 55.345445054 ], [ -160.486927863999881, 55.353216864 ], [ -160.461659308999913, 55.351141669000171 ], [ -160.437123175999915, 55.346177476000108 ], [ -160.41547604099992, 55.345445054 ], [ -160.367380337999947, 55.366522528000118 ], [ -160.345204230999883, 55.371079820000048 ], [ -160.325428839999859, 55.358547268000152 ], [ -160.332875128999945, 55.352280992000104 ] ] ], [ [ [ -160.690663214999915, 55.307806708 ], [ -160.679392055999926, 55.306708075000145 ], [ -160.658151821999951, 55.311346747000172 ], [ -160.654042120999918, 55.314520575000145 ], [ -160.650135870999918, 55.321600653000118 ], [ -160.64521236899995, 55.328599351 ], [ -160.637928839999944, 55.331854559000035 ], [ -160.630238410999937, 55.330755927 ], [ -160.618031378999945, 55.326117255000057 ], [ -160.610340949999909, 55.325018622000115 ], [ -160.604725714999915, 55.330755927 ], [ -160.602487758999928, 55.360093492000104 ], [ -160.599802212999862, 55.372788804000052 ], [ -160.590158657999893, 55.383856512000094 ], [ -160.57555091099988, 55.391424872000144 ], [ -160.559274868999921, 55.393133856000148 ], [ -160.544545050999943, 55.386419989 ], [ -160.535593227999925, 55.364325262000122 ], [ -160.551584438999924, 55.345038153000175 ], [ -160.57445227799991, 55.324937242000132 ], [ -160.586130337999919, 55.300482489 ], [ -160.582386847999885, 55.285549221000153 ], [ -160.573231574999909, 55.27806224199999 ], [ -160.562001105999911, 55.272406317 ], [ -160.551991339999915, 55.262925523 ], [ -160.546091274999895, 55.250433661000088 ], [ -160.549875454999921, 55.245021877000127 ], [ -160.579904751999891, 55.235581773000106 ], [ -160.563710089999915, 55.229803778000147 ], [ -160.528024868999864, 55.227525132000082 ], [ -160.511057094999899, 55.221909898 ], [ -160.507679816999882, 55.216945705000128 ], [ -160.502308722999942, 55.200262762000179 ], [ -160.497385219999956, 55.19464752800009 ], [ -160.486317511999914, 55.193670966000113 ], [ -160.477487758999871, 55.197577216000113 ], [ -160.469838019999941, 55.198472398000106 ], [ -160.462595180999926, 55.188421942000119 ], [ -160.486195441999882, 55.181463934000035 ], [ -160.533558722999885, 55.187933661000145 ], [ -160.558827277999939, 55.188421942000119 ], [ -160.518625454999949, 55.17877838700015 ], [ -160.511057094999899, 55.174139716000028 ], [ -160.513295050999886, 55.164984442000147 ], [ -160.538319464999915, 55.133205471000011 ], [ -160.555246548999889, 55.157456773 ], [ -160.575266079999949, 55.162665106000091 ], [ -160.627064581999946, 55.153713283000158 ], [ -160.637684699999909, 55.154933986000074 ], [ -160.666371222999885, 55.163153387000179 ], [ -160.675526495999918, 55.167914130000085 ], [ -160.685251430999898, 55.180365302 ], [ -160.682484503999945, 55.186957098000065 ], [ -160.676136847999885, 55.192531643000066 ], [ -160.675526495999918, 55.201483466000113 ], [ -160.683338995999918, 55.211371161000116 ], [ -160.692331508999928, 55.20917389500012 ], [ -160.703317837999919, 55.20136139500012 ], [ -160.717111782999922, 55.19464752800009 ], [ -160.733347133999956, 55.191961981000119 ], [ -160.745838995999861, 55.191473700000031 ], [ -160.757679816999939, 55.189113674000069 ], [ -160.771717902999882, 55.180975653000147 ], [ -160.783884243999864, 55.166937567 ], [ -160.802845831999889, 55.133368231000148 ], [ -160.818918423999946, 55.119533596000068 ], [ -160.82050533799989, 55.135402736000103 ], [ -160.81273352799991, 55.166083075000088 ], [ -160.81578528599988, 55.177557684000035 ], [ -160.83922278599988, 55.197943427000112 ], [ -160.847401495999861, 55.207098700000117 ], [ -160.853627081999917, 55.221909898 ], [ -160.852365688999896, 55.225002346000068 ], [ -160.847238735999895, 55.24209219 ], [ -160.846180792999945, 55.248683986000074 ], [ -160.84862219999988, 55.256089585000083 ], [ -160.858265753999945, 55.265692450000145 ], [ -160.860463019999941, 55.273504950000031 ], [ -160.856922980999855, 55.288723049000012 ], [ -160.850534633999928, 55.303168036000088 ], [ -160.847279425999886, 55.317328192 ], [ -160.853627081999917, 55.331854559000035 ], [ -160.821400519999884, 55.363226630000085 ], [ -160.784047003999945, 55.389878648000106 ], [ -160.742054816999939, 55.406317450000088 ], [ -160.695993618999921, 55.406927802000055 ], [ -160.665760870999918, 55.383856512000094 ], [ -160.658762173999918, 55.363836981000034 ], [ -160.671986456999861, 55.343085028000033 ], [ -160.702829555999926, 55.317572333000143 ], [ -160.690663214999915, 55.307806708 ] ] ], [ [ [ -131.818470831999946, 55.413763739000089 ], [ -131.696522589999859, 55.343451239000146 ], [ -131.636097785999937, 55.299302476000079 ], [ -131.633452928999958, 55.262925523 ], [ -131.638579881999874, 55.275946356000176 ], [ -131.646351691999968, 55.286810614000061 ], [ -131.657134568999879, 55.294256903000033 ], [ -131.671294725999928, 55.297064520000092 ], [ -131.675363735999866, 55.291205145000148 ], [ -131.668283657999893, 55.256089585000083 ], [ -131.686146613999966, 55.230292059000035 ], [ -131.711740688999839, 55.23663971600017 ], [ -131.739491339999915, 55.250718492000104 ], [ -131.763824022999898, 55.248683986000074 ], [ -131.737212693999936, 55.217840887000122 ], [ -131.720855272999927, 55.203070380000142 ], [ -131.702381964999915, 55.19464752800009 ], [ -131.712757941999911, 55.177476304000052 ], [ -131.726551886999914, 55.166327216000141 ], [ -131.733306443999936, 55.155707098 ], [ -131.722889777999853, 55.140082098000036 ], [ -131.743316209999932, 55.142726955000015 ], [ -131.771962042999917, 55.167914130000085 ], [ -131.804921027999882, 55.181138414000102 ], [ -131.817779100999928, 55.197984117000104 ], [ -131.853179490999935, 55.300482489 ], [ -131.853138800999943, 55.339544989000061 ], [ -131.857004360999923, 55.357407945000105 ], [ -131.866851365999935, 55.372788804000052 ], [ -131.850941535999937, 55.373358466000028 ], [ -131.845773891999926, 55.372788804000052 ], [ -131.851958787999905, 55.394842841000141 ], [ -131.849517381999959, 55.41608307500006 ], [ -131.838368292999945, 55.425930080000157 ], [ -131.818470831999946, 55.413763739000089 ] ] ], [ [ [ -133.569691535999965, 55.424302476000136 ], [ -133.541900193999908, 55.414618231000176 ], [ -133.471587693999879, 55.416449286000059 ], [ -133.449615037999962, 55.406927802000055 ], [ -133.449045376999891, 55.392320054000137 ], [ -133.447580532999837, 55.386542059000178 ], [ -133.442209438999896, 55.38027578300013 ], [ -133.449615037999962, 55.374172268000123 ], [ -133.457875128999945, 55.369696356000176 ], [ -133.466908331999946, 55.366888739000117 ], [ -133.497710740999935, 55.365952867000047 ], [ -133.505360480999855, 55.364447333 ], [ -133.505034959999932, 55.36074453300013 ], [ -133.502837693999936, 55.356146552000112 ], [ -133.50487219999988, 55.352280992000104 ], [ -133.516224738999938, 55.345445054 ], [ -133.521473761999914, 55.341253973000065 ], [ -133.526844855999911, 55.339178778000033 ], [ -133.538685675999943, 55.338609117000075 ], [ -133.548329230999911, 55.339992580000157 ], [ -133.568104620999918, 55.34516022300015 ], [ -133.579945441999882, 55.345445054 ], [ -133.567209438999839, 55.33038971600017 ], [ -133.565174933999913, 55.319810289000131 ], [ -133.579945441999882, 55.29026927300005 ], [ -133.587757941999882, 55.257717190000093 ], [ -133.594309048999975, 55.242987372000087 ], [ -133.607289191999968, 55.235581773000106 ], [ -133.621164516999869, 55.240383205000015 ], [ -133.636301235999866, 55.25315989800005 ], [ -133.655669725999871, 55.276556708000115 ], [ -133.657297329999892, 55.283921617000132 ], [ -133.655873175999943, 55.30023834800015 ], [ -133.658802863999938, 55.307603257000054 ], [ -133.664418097999942, 55.310248114000117 ], [ -133.680572068999908, 55.309312242000047 ], [ -133.689198370999918, 55.311346747000172 ], [ -133.665394660999937, 55.323391018000095 ], [ -133.658802863999938, 55.325018622000115 ], [ -133.646351691999939, 55.325751044000143 ], [ -133.641468878999945, 55.328192450000174 ], [ -133.639230923999975, 55.332464911 ], [ -133.621449347999885, 55.354193427000055 ], [ -133.623361782999865, 55.361314195000105 ], [ -133.655669725999871, 55.372788804000052 ], [ -133.64273027299987, 55.382025458000115 ], [ -133.615061001999891, 55.390082098000065 ], [ -133.603871222999942, 55.39667389500012 ], [ -133.590443488999966, 55.417181708 ], [ -133.58055579299986, 55.426214911 ], [ -133.569691535999965, 55.424302476000136 ] ] ], [ [ [ -163.139027472999942, 55.403509833000058 ], [ -163.151682094999899, 55.396958726000079 ], [ -163.162587042999888, 55.398993231000091 ], [ -163.171945766999897, 55.404038804000137 ], [ -163.195057745999861, 55.412665106000034 ], [ -163.18818111899995, 55.425116278000147 ], [ -163.167917446999923, 55.436997789000102 ], [ -163.142770962999862, 55.441066799000154 ], [ -163.133127407999893, 55.432440497000144 ], [ -163.12938391799986, 55.423041083000115 ], [ -163.131418423999889, 55.413275458 ], [ -163.139027472999942, 55.403509833000058 ] ] ], [ [ [ -133.238282998999921, 55.413802715000102 ], [ -133.274493430999883, 55.404279945 ], [ -133.315196539999874, 55.40454704200009 ], [ -133.320269559999872, 55.423126599000099 ], [ -133.307276610999907, 55.432187230000167 ], [ -133.269250983999939, 55.443950171000083 ], [ -133.236056754999936, 55.440219968000164 ], [ -133.238282998999921, 55.413802715000102 ] ] ], [ [ [ -160.236927863999938, 55.449855861000046 ], [ -160.233591274999924, 55.447902736000074 ], [ -160.223825649999867, 55.449042059000121 ], [ -160.206288214999915, 55.454169012000037 ], [ -160.198841925999858, 55.455308335000055 ], [ -160.171131964999859, 55.453762111000017 ], [ -160.159901495999861, 55.449530341000113 ], [ -160.155384894999912, 55.441066799000154 ], [ -160.15986080599987, 55.426988023000106 ], [ -160.159413214999887, 55.412665106000034 ], [ -160.155100063999896, 55.398871161000116 ], [ -160.14793860599994, 55.386419989 ], [ -160.15986080599987, 55.380804755000028 ], [ -160.166981574999909, 55.384426174000069 ], [ -160.173085089999915, 55.392482815 ], [ -160.182077602999925, 55.400091864000146 ], [ -160.197214321999923, 55.404242255000085 ], [ -160.233713344999899, 55.409979559000149 ], [ -160.246937628999945, 55.417466539000131 ], [ -160.259470180999926, 55.422308661 ], [ -160.273386196999923, 55.416652736000017 ], [ -160.298776821999923, 55.400091864000146 ], [ -160.312367316999882, 55.397447007000054 ], [ -160.328114386999943, 55.398138739 ], [ -160.341135219999927, 55.404120184000121 ], [ -160.346547003999888, 55.417466539000131 ], [ -160.334095831999946, 55.443670966000141 ], [ -160.304758266999954, 55.458319403000147 ], [ -160.270578579999949, 55.46369049700003 ], [ -160.243519660999937, 55.462144273 ], [ -160.238758917999917, 55.459051825000088 ], [ -160.236927863999938, 55.449855861000046 ] ] ], [ [ [ -133.49478105399993, 55.429510809000035 ], [ -133.511382615999963, 55.427435614000117 ], [ -133.533029751999862, 55.430121161 ], [ -133.600453253999945, 55.447902736000074 ], [ -133.589751756999931, 55.463283596000039 ], [ -133.574289516999897, 55.469794012000122 ], [ -133.556304490999963, 55.474066473000121 ], [ -133.538400844999899, 55.48265208500014 ], [ -133.524728969999899, 55.499579169000029 ], [ -133.517689581999889, 55.514837958 ], [ -133.505726691999968, 55.522609768000095 ], [ -133.476918097999942, 55.516791083000143 ], [ -133.431752081999889, 55.496527411000116 ], [ -133.422271287999877, 55.489447333000058 ], [ -133.41844641799986, 55.475572007000082 ], [ -133.420765753999945, 55.459662177000055 ], [ -133.428089972999942, 55.446519273000021 ], [ -133.439076300999886, 55.441066799000154 ], [ -133.457102016999926, 55.438910223000065 ], [ -133.49478105399993, 55.429510809000035 ] ] ], [ [ [ -133.337025519999912, 55.464544989000117 ], [ -133.346587693999908, 55.447902736000074 ], [ -133.360585089999859, 55.460638739000117 ], [ -133.395008917999917, 55.503119208 ], [ -133.423980272999898, 55.518011786000059 ], [ -133.433176235999866, 55.527980861000131 ], [ -133.428537563999839, 55.54413483300003 ], [ -133.413644985999895, 55.553208726000108 ], [ -133.390614386999914, 55.557196356000176 ], [ -133.32445227799991, 55.556952216000141 ], [ -133.304798956999974, 55.553208726000108 ], [ -133.287424282999893, 55.5450707050001 ], [ -133.272084113999938, 55.530462958000086 ], [ -133.27196204299986, 55.511948960000055 ], [ -133.273426886999914, 55.500311591000141 ], [ -133.279042120999918, 55.491848049000012 ], [ -133.291371222999885, 55.48265208500014 ], [ -133.309152798999946, 55.47483958500014 ], [ -133.32445227799991, 55.471177476 ], [ -133.337025519999912, 55.464544989000117 ] ] ], [ [ [ -133.646311001999834, 55.542303778000033 ], [ -133.612416144999884, 55.541571356000091 ], [ -133.586781378999916, 55.54413483300003 ], [ -133.580922003999973, 55.527085679000052 ], [ -133.578684048999889, 55.509263413999989 ], [ -133.584706183999913, 55.495184637000037 ], [ -133.603871222999942, 55.489447333000058 ], [ -133.618478969999899, 55.482977606000148 ], [ -133.633168097999885, 55.454413153000175 ], [ -133.651966925999943, 55.447902736000074 ], [ -133.671050584999932, 55.4513207050001 ], [ -133.709624803999901, 55.465806382000139 ], [ -133.730132615999935, 55.468410549000126 ], [ -133.74937903599988, 55.464178778000118 ], [ -133.779408331999946, 55.449855861000046 ], [ -133.79906165299991, 55.447902736000074 ], [ -133.79906165299991, 55.455308335000055 ], [ -133.777007615999906, 55.464300848000093 ], [ -133.748280402999939, 55.496161200000117 ], [ -133.700835740999935, 55.507391669000114 ], [ -133.701812303999901, 55.516791083000143 ], [ -133.711293097999913, 55.526068427 ], [ -133.72020423099994, 55.532456773000106 ], [ -133.724517381999931, 55.531683661 ], [ -133.728505011999914, 55.532863674000012 ], [ -133.730132615999935, 55.540716864 ], [ -133.726714647999927, 55.546616929000137 ], [ -133.718739386999886, 55.551743882000054 ], [ -133.702870245999947, 55.557766018000152 ], [ -133.679351365999878, 55.547349351000079 ], [ -133.646311001999834, 55.542303778000033 ] ] ], [ [ [ -159.289621548999889, 55.767889716000028 ], [ -159.30211341099988, 55.759222723000121 ], [ -159.31810462099989, 55.767767645000148 ], [ -159.328602667999945, 55.778387762000094 ], [ -159.344715949999909, 55.783880927000112 ], [ -159.362294074999852, 55.786281643000066 ], [ -159.359852667999917, 55.798163153000118 ], [ -159.332834438999896, 55.812445380000113 ], [ -159.31273352799991, 55.811224677 ], [ -159.298044399999924, 55.793646552000055 ], [ -159.289051886999914, 55.778998114000061 ], [ -159.289621548999889, 55.767889716000028 ] ] ], [ [ [ -133.589100714999887, 55.811672268000095 ], [ -133.573109503999973, 55.804754950000088 ], [ -133.578968878999945, 55.824408270000148 ], [ -133.565256313999896, 55.830308335000083 ], [ -133.504505988999938, 55.822902736000103 ], [ -133.495228644999912, 55.82029857000002 ], [ -133.486887173999946, 55.81476471600017 ], [ -133.482411261999857, 55.806586005000085 ], [ -133.481109178999873, 55.798773505000085 ], [ -133.477691209999961, 55.792792059000149 ], [ -133.466949022999927, 55.790472723 ], [ -133.351673956999946, 55.787787177000112 ], [ -133.339751756999874, 55.790472723 ], [ -133.329741990999906, 55.798814195000077 ], [ -133.322987433999856, 55.809027411 ], [ -133.316029425999972, 55.811672268000095 ], [ -133.30565344999988, 55.797349351000108 ], [ -133.310047980999855, 55.78221263200011 ], [ -133.368234829999892, 55.758734442000147 ], [ -133.391590949999909, 55.746161200000145 ], [ -133.417876756999902, 55.73847077000012 ], [ -133.44859778599988, 55.750718492000104 ], [ -133.475575324999852, 55.771795966000028 ], [ -133.49058997299997, 55.790472723 ], [ -133.503814256999931, 55.766180731000119 ], [ -133.488596157999837, 55.73436107 ], [ -133.487172003999945, 55.706732489000089 ], [ -133.542103644999941, 55.694891669000029 ], [ -133.578684048999889, 55.704901434000092 ], [ -133.623850063999839, 55.72947825700011 ], [ -133.663238084999932, 55.760728257 ], [ -133.682362433999913, 55.790472723 ], [ -133.649322068999936, 55.788560289000046 ], [ -133.641428188999896, 55.790472723 ], [ -133.639312303999958, 55.796454169000114 ], [ -133.638905402999853, 55.817084052000141 ], [ -133.634592251999862, 55.825262762000065 ], [ -133.614898240999906, 55.833197333000115 ], [ -133.601389126999834, 55.824896552000141 ], [ -133.589100714999887, 55.811672268000095 ] ] ], [ [ [ -158.745310024999924, 55.863185940000065 ], [ -158.730091925999886, 55.855169989000117 ], [ -158.717030402999882, 55.843980210000112 ], [ -158.708566860999952, 55.831488348 ], [ -158.811227993999893, 55.859523830000015 ], [ -158.85838782499988, 55.862982489000117 ], [ -158.887318488999881, 55.831488348 ], [ -158.87474524599989, 55.827948309000035 ], [ -158.861765102999897, 55.825832424000012 ], [ -158.851144985999952, 55.821437893000123 ], [ -158.845773891999897, 55.810980536000059 ], [ -158.866281704999949, 55.80573151200015 ], [ -158.883778449999909, 55.805243231000176 ], [ -158.897653774999867, 55.811346747000172 ], [ -158.907175258999871, 55.825262762000065 ], [ -158.908680792999917, 55.841294664000046 ], [ -158.897328253999859, 55.860581773000078 ], [ -158.900339321999951, 55.873724677000141 ], [ -158.853749152999939, 55.890936591000141 ], [ -158.828114386999886, 55.896714585000112 ], [ -158.791737433999913, 55.890285549000012 ], [ -158.77684485599994, 55.880926825000145 ], [ -158.760365363999881, 55.86627838700015 ], [ -158.745310024999924, 55.863185940000065 ] ] ], [ [ [ -133.26463782499988, 55.86627838700015 ], [ -133.254058397999927, 55.864203192000119 ], [ -133.228911912999934, 55.87128327 ], [ -133.216867641999926, 55.86627838700015 ], [ -133.220366990999935, 55.822455145 ], [ -133.223703579999835, 55.810980536000059 ], [ -133.235910610999923, 55.785711981000091 ], [ -133.240467902999853, 55.779974677000112 ], [ -133.250803188999896, 55.775946356000148 ], [ -133.259103969999842, 55.780259507000054 ], [ -133.266713019999884, 55.787014065 ], [ -133.275217251999919, 55.790472723 ], [ -133.283355272999927, 55.795965887000037 ], [ -133.302845831999946, 55.819810289000102 ], [ -133.316151495999947, 55.825262762000065 ], [ -133.324289516999869, 55.826727606000119 ], [ -133.334299282999837, 55.830877997000144 ], [ -133.341175910999937, 55.83734772300015 ], [ -133.339751756999874, 55.845770575000088 ], [ -133.332020636999886, 55.847479559000092 ], [ -133.291371222999885, 55.851996161000059 ], [ -133.318999803999873, 55.860541083000086 ], [ -133.330555792999917, 55.868312893000095 ], [ -133.332915818999965, 55.87986888200011 ], [ -133.325835740999906, 55.881415106000148 ], [ -133.291615363999938, 55.902004299000097 ], [ -133.285145636999914, 55.907171942 ], [ -133.267404751999834, 55.902167059000149 ], [ -133.266713019999884, 55.891669012000179 ], [ -133.270130988999881, 55.878729559000178 ], [ -133.26463782499988, 55.86627838700015 ] ] ], [ [ [ -155.570383266999897, 55.783026434000121 ], [ -155.597264121999956, 55.760431424000117 ], [ -155.629900349999957, 55.762901507000137 ], [ -155.663692559999845, 55.774462847000066 ], [ -155.697388269999919, 55.771345854000103 ], [ -155.718693372999894, 55.774851075000029 ], [ -155.728016730999911, 55.804754950000088 ], [ -155.749848675999914, 55.817680173999989 ], [ -155.741647915999948, 55.831488348 ], [ -155.701257952999924, 55.841336773000151 ], [ -155.663418954999855, 55.856008120000112 ], [ -155.652333136999914, 55.886664130000142 ], [ -155.652292446999923, 55.886704820000134 ], [ -155.635324673999861, 55.905747789000131 ], [ -155.59996916399993, 55.914813918 ], [ -155.556101040999891, 55.914618231000148 ], [ -155.557240363999938, 55.895209052000055 ], [ -155.569040493999921, 55.868801174000069 ], [ -155.570383266999897, 55.851996161000059 ], [ -155.55805416599992, 55.817572333000115 ], [ -155.557240363999938, 55.800482489000089 ], [ -155.570383266999897, 55.783026434000121 ] ] ], [ [ [ -134.244130011999914, 55.920843817000119 ], [ -134.257923956999889, 55.899888413999989 ], [ -134.234852667999945, 55.899969794000143 ], [ -134.179269985999895, 55.914618231000148 ], [ -134.122059699999937, 55.923732815000065 ], [ -134.101551886999914, 55.920803127000127 ], [ -134.114369269999941, 55.900336005000085 ], [ -134.153187628999945, 55.893622137000037 ], [ -134.19595292899993, 55.873358466000028 ], [ -134.233876105999855, 55.846136786000116 ], [ -134.258412238999881, 55.818426825000031 ], [ -134.276275193999936, 55.828802802000112 ], [ -134.318430141999897, 55.833807684000149 ], [ -134.326649542999917, 55.848822333 ], [ -134.318430141999897, 55.857855536 ], [ -134.264556443999965, 55.873724677000141 ], [ -134.279164191999882, 55.882147528000175 ], [ -134.334787563999896, 55.895086981000091 ], [ -134.347157355999855, 55.910956122000115 ], [ -134.332183397999927, 55.922512111000131 ], [ -134.298695441999968, 55.926499742000104 ], [ -134.263579881999902, 55.925238348 ], [ -134.244130011999914, 55.920843817000119 ] ] ], [ [ [ -133.842518683999941, 55.866359768000123 ], [ -133.871652798999889, 55.846747137000179 ], [ -133.912668423999889, 55.862779039000074 ], [ -133.921376105999911, 55.87433502800009 ], [ -133.931711391999897, 55.89398834800015 ], [ -133.93423417899993, 55.912583726000136 ], [ -133.919504360999923, 55.920843817000119 ], [ -133.877308722999885, 55.938055731000063 ], [ -133.856027798999918, 55.94228750200007 ], [ -133.832183397999927, 55.90058014500012 ], [ -133.842518683999941, 55.866359768000123 ] ] ], [ [ [ -131.208892381999931, 55.944891669000143 ], [ -131.179554816999911, 55.923529364 ], [ -131.044422980999883, 55.790472723 ], [ -131.046131964999887, 55.76658763200011 ], [ -131.02281653599988, 55.742865302000112 ], [ -130.968739386999914, 55.701117255000085 ], [ -130.966908331999917, 55.694159247000087 ], [ -130.968576626999834, 55.678127346000011 ], [ -130.965321417999888, 55.671047268000123 ], [ -130.938303188999839, 55.651516018000152 ], [ -130.934559699999909, 55.643133856000091 ], [ -130.938221808999856, 55.624212958000086 ], [ -130.955555792999945, 55.60049062700007 ], [ -130.96190344999988, 55.585109768000123 ], [ -130.945790167999917, 55.582749742000075 ], [ -130.943714972999885, 55.572699286 ], [ -130.954172329999892, 55.565619208000143 ], [ -130.975575324999909, 55.572007554000052 ], [ -130.974924282999865, 55.534572658000016 ], [ -130.977284308999913, 55.515936591000028 ], [ -130.983021613999881, 55.503119208 ], [ -130.978749152999882, 55.493312893000066 ], [ -130.979237433999856, 55.485541083000058 ], [ -130.981556769999941, 55.477036851000136 ], [ -130.983021613999881, 55.465277411000059 ], [ -130.971831834999875, 55.443589585000083 ], [ -130.968739386999914, 55.43488190300009 ], [ -130.967152472999942, 55.423773505000057 ], [ -130.968739386999914, 55.39667389500012 ], [ -130.971669074999909, 55.385239976 ], [ -130.978179490999906, 55.387640692000119 ], [ -130.989165818999965, 55.400091864000146 ], [ -131.005034959999904, 55.413397528000147 ], [ -131.015126105999855, 55.417181708 ], [ -131.02708899599989, 55.410345770000063 ], [ -131.03099524599989, 55.400458075000145 ], [ -131.027251756999931, 55.391058661000116 ], [ -131.020985480999911, 55.382025458000115 ], [ -131.017160610999895, 55.372788804000052 ], [ -131.018381313999896, 55.35431549700003 ], [ -131.025257941999911, 55.342352606000091 ], [ -131.03490149599989, 55.330267645 ], [ -131.044422980999883, 55.311346747000172 ], [ -131.05565344999988, 55.273586330000015 ], [ -131.065174933999884, 55.261053778000118 ], [ -131.085438605999911, 55.248683986000074 ], [ -131.106312628999945, 55.238918361000131 ], [ -131.116525844999899, 55.236395575000031 ], [ -131.130116339999944, 55.235581773000106 ], [ -131.137603318999936, 55.23139069200009 ], [ -131.140533006999931, 55.221625067000147 ], [ -131.142648891999841, 55.210272528000175 ], [ -131.147531704999921, 55.201483466000113 ], [ -131.192005988999938, 55.185736395000148 ], [ -131.232736782999893, 55.200913804000137 ], [ -131.271717902999882, 55.225002346000068 ], [ -131.311390753999888, 55.235581773000106 ], [ -131.256255662999934, 55.270575262000122 ], [ -131.234771287999934, 55.290961005 ], [ -131.215728318999936, 55.317572333000143 ], [ -131.213734503999888, 55.323065497000172 ], [ -131.208322719999842, 55.345445054 ], [ -131.204986131999931, 55.349920966000141 ], [ -131.20051021999987, 55.353745835000083 ], [ -131.196400519999912, 55.359442450000145 ], [ -131.194691535999908, 55.369370835000055 ], [ -131.195423956999946, 55.387355861000103 ], [ -131.199533657999893, 55.399725653000033 ], [ -131.20995032499988, 55.406317450000088 ], [ -131.229400193999965, 55.406927802000055 ], [ -131.221994594999899, 55.393255927000112 ], [ -131.243967251999891, 55.393744208000115 ], [ -131.268706834999875, 55.386175848000065 ], [ -131.283070441999939, 55.371079820000048 ], [ -131.273793097999885, 55.348863023000021 ], [ -131.261708136999914, 55.328802802000141 ], [ -131.263824022999927, 55.30939362200003 ], [ -131.277007615999935, 55.291693427000112 ], [ -131.298329230999911, 55.276556708000115 ], [ -131.324208136999914, 55.267075914000131 ], [ -131.352772589999915, 55.263251044000114 ], [ -131.404164191999939, 55.262925523 ], [ -131.427357550999943, 55.267035223000121 ], [ -131.45055091099988, 55.277899481000119 ], [ -131.463205532999865, 55.293402411000116 ], [ -131.454741990999935, 55.311346747000172 ], [ -131.43187415299991, 55.320013739000089 ], [ -131.404855923999946, 55.322902736000017 ], [ -131.3822322259999, 55.32941315300009 ], [ -131.37279212099989, 55.348863023000021 ], [ -131.371245897999927, 55.361151434000149 ], [ -131.366444464999859, 55.371079820000048 ], [ -131.358062303999901, 55.377834377000099 ], [ -131.345814581999946, 55.38027578300013 ], [ -131.329660610999895, 55.381415106000148 ], [ -131.322621222999885, 55.384955145000148 ], [ -131.311390753999888, 55.400091864000146 ], [ -131.278187628999973, 55.430243231000148 ], [ -131.270741339999915, 55.447333075000117 ], [ -131.280913865999935, 55.465277411000059 ], [ -131.283680792999917, 55.472154039000074 ], [ -131.293365037999962, 55.514553127000156 ], [ -131.299305792999917, 55.525336005000057 ], [ -131.330637173999946, 55.568548895000063 ], [ -131.336903449999909, 55.579657294000086 ], [ -131.343576626999862, 55.630275783000073 ], [ -131.350819464999859, 55.645575262000037 ], [ -131.363189256999931, 55.643133856000091 ], [ -131.371693488999938, 55.618638414000074 ], [ -131.365223761999943, 55.587307033000016 ], [ -131.327951626999891, 55.502752997000087 ], [ -131.321929490999935, 55.475083726 ], [ -131.325428839999944, 55.446763414000046 ], [ -131.342396613999938, 55.417466539000131 ], [ -131.349720831999946, 55.410142320000105 ], [ -131.37279212099989, 55.393255927000112 ], [ -131.380034959999932, 55.385728257000082 ], [ -131.394520636999857, 55.365952867000047 ], [ -131.409291144999941, 55.352199611000046 ], [ -131.424631313999896, 55.344061591000113 ], [ -131.462147589999915, 55.331854559000035 ], [ -131.452748175999972, 55.343451239000146 ], [ -131.426625128999945, 55.363999742000019 ], [ -131.421254035999965, 55.376532294000086 ], [ -131.426625128999945, 55.392279364000146 ], [ -131.439035610999866, 55.405422268 ], [ -131.452748175999972, 55.416896877000156 ], [ -131.462147589999915, 55.427435614000117 ], [ -131.46898352799991, 55.458685614000089 ], [ -131.458404100999871, 55.48371002800009 ], [ -131.421254035999965, 55.530462958000086 ], [ -131.437896287999934, 55.530585028000061 ], [ -131.463368292999917, 55.523260809000035 ], [ -131.489003058999913, 55.511786200000088 ], [ -131.50649980399993, 55.499416408000158 ], [ -131.516957160999937, 55.480047919000057 ], [ -131.516184048999889, 55.46002838700015 ], [ -131.50804602799991, 55.440130927000084 ], [ -131.49632727799991, 55.421210028000147 ], [ -131.469105597999885, 55.389634507000054 ], [ -131.465687628999888, 55.372259833000086 ], [ -131.479562954999892, 55.348863023000021 ], [ -131.508859829999892, 55.311712958 ], [ -131.526478644999941, 55.299383856000148 ], [ -131.551584438999896, 55.297064520000092 ], [ -131.573109503999945, 55.305243231000091 ], [ -131.616037563999896, 55.332709052000141 ], [ -131.661529100999957, 55.343207098 ], [ -131.685292120999861, 55.35431549700003 ], [ -131.722889777999853, 55.38027578300013 ], [ -131.725209113999938, 55.38353099199999 ], [ -131.731312628999916, 55.394924221000124 ], [ -131.735910610999866, 55.400091864000146 ], [ -131.786610480999911, 55.427313544000143 ], [ -131.808501756999931, 55.444484768000066 ], [ -131.820220506999931, 55.463812567 ], [ -131.810292120999918, 55.476629950000031 ], [ -131.717844204999835, 55.517971096000068 ], [ -131.705799933999913, 55.527044989000061 ], [ -131.688872850999928, 55.54295482 ], [ -131.678089972999942, 55.54962799700003 ], [ -131.667307094999927, 55.550767320000077 ], [ -131.650542772999927, 55.550279038999989 ], [ -131.644520636999914, 55.557074286000116 ], [ -131.61978105399993, 55.595282294000171 ], [ -131.630482550999943, 55.604396877000156 ], [ -131.681467251999862, 55.610541083000143 ], [ -131.698963995999918, 55.616115627000156 ], [ -131.707427537999934, 55.629624742000132 ], [ -131.708485480999911, 55.645453192000062 ], [ -131.703928188999868, 55.661118882000139 ], [ -131.69554602799991, 55.674465236000131 ], [ -131.691395636999857, 55.679510809000178 ], [ -131.686879035999908, 55.683905341000141 ], [ -131.680734829999921, 55.68695709800015 ], [ -131.671294725999928, 55.688137111000074 ], [ -131.635161912999962, 55.68695709800015 ], [ -131.627308722999885, 55.688137111000074 ], [ -131.625559048999889, 55.693589585000112 ], [ -131.626128709999961, 55.712103583000143 ], [ -131.623605923999946, 55.719142971000011 ], [ -131.614654100999928, 55.72370026200015 ], [ -131.606556769999884, 55.721625067000119 ], [ -131.599232550999972, 55.717352606000119 ], [ -131.592518683999941, 55.715399481000176 ], [ -131.534982876999862, 55.723089911 ], [ -131.517445441999911, 55.729071356000119 ], [ -131.517445441999911, 55.736517645000092 ], [ -131.533355272999927, 55.736965236000074 ], [ -131.578846808999913, 55.729071356000119 ], [ -131.62905839799987, 55.734035549000154 ], [ -131.647124803999901, 55.729071356000119 ], [ -131.69176184799997, 55.70526764500012 ], [ -131.704579230999911, 55.70970286699999 ], [ -131.70921790299991, 55.739650783000158 ], [ -131.695423956999917, 55.751613674000097 ], [ -131.663929816999911, 55.761216539000074 ], [ -131.629302537999934, 55.767726955000157 ], [ -131.512847459999875, 55.774725653000061 ], [ -131.482655402999853, 55.783026434000121 ], [ -131.490345831999974, 55.79242584800015 ], [ -131.512766079999892, 55.800279039000131 ], [ -131.517445441999911, 55.807928778000147 ], [ -131.521595831999946, 55.819159247000144 ], [ -131.530751105999911, 55.825751044000029 ], [ -131.539947068999908, 55.825100002000099 ], [ -131.544097459999932, 55.81476471600017 ], [ -131.554351365999963, 55.798773505000085 ], [ -131.578439907999893, 55.792547919000029 ], [ -131.606109178999901, 55.789536851000108 ], [ -131.627308722999885, 55.783026434000121 ], [ -131.644357876999834, 55.793402411000116 ], [ -131.678456183999941, 55.799221096000068 ], [ -131.688710089999887, 55.810980536000059 ], [ -131.68773352799991, 55.83197663 ], [ -131.670643683999856, 55.839504299000154 ], [ -131.470366990999906, 55.83197663 ], [ -131.435454881999874, 55.845770575000088 ], [ -131.457386847999913, 55.851955471000068 ], [ -131.53449459499987, 55.851996161000059 ], [ -131.546294725999928, 55.858791408000101 ], [ -131.560047980999855, 55.874741929 ], [ -131.572132941999939, 55.893215236000017 ], [ -131.578846808999913, 55.907171942 ], [ -131.515736456999889, 55.909613348000121 ], [ -131.49632727799991, 55.914618231000148 ], [ -131.487660285999908, 55.91925690300009 ], [ -131.471058722999942, 55.930975653000175 ], [ -131.462147589999915, 55.934515692000062 ], [ -131.446848110999838, 55.93545156500015 ], [ -131.404164191999939, 55.928290106000091 ], [ -131.365223761999943, 55.937160549000154 ], [ -131.323597785999965, 55.954250393 ], [ -131.280262824999909, 55.96515534100017 ], [ -131.236236131999874, 55.955633856000176 ], [ -131.208892381999931, 55.944891669000143 ] ] ], [ [ [ -156.67804928299995, 56.041489976000108 ], [ -156.680409308999913, 56.039007880000085 ], [ -156.680531378999888, 56.036932684000149 ], [ -156.677357550999915, 56.033596096000124 ], [ -156.678212042999917, 56.030462958000058 ], [ -156.680856899999895, 56.024155992000104 ], [ -156.681752081999889, 56.01951732 ], [ -156.680734829999921, 56.018052476000136 ], [ -156.680043097999885, 56.01666901200015 ], [ -156.683664516999954, 56.012437242000132 ], [ -156.694935675999943, 56.009344794000143 ], [ -156.706369594999899, 56.014227606000119 ], [ -156.71812903599988, 56.021673895 ], [ -156.73407955599987, 56.026190497000144 ], [ -156.746164516999897, 56.034898179000137 ], [ -156.744943813999868, 56.040920315000122 ], [ -156.734730597999942, 56.039984442000062 ], [ -156.725168423999946, 56.041327216000141 ], [ -156.716867641999869, 56.044501044000114 ], [ -156.709787563999896, 56.051092841000084 ], [ -156.70763098899991, 56.061021226 ], [ -156.701283331999889, 56.066148179000024 ], [ -156.69013424399995, 56.060451565000122 ], [ -156.678903774999952, 56.04596588700015 ], [ -156.67804928299995, 56.041489976000108 ] ] ], [ [ [ -133.392689581999946, 56.16046784100017 ], [ -133.3431697259999, 56.147406317 ], [ -133.302601691999882, 56.150824286 ], [ -133.28530839799987, 56.147202867000047 ], [ -133.285145636999914, 56.133124091000113 ], [ -133.308827277999939, 56.103013414000074 ], [ -133.313099738999938, 56.092189846000068 ], [ -133.311919725999928, 56.079901434000121 ], [ -133.301380988999966, 56.06386953300013 ], [ -133.298736131999874, 56.054632880000057 ], [ -133.297759568999908, 56.032945054 ], [ -133.299549933999913, 56.012030341000028 ], [ -133.31114661399991, 55.997870184000092 ], [ -133.339751756999874, 55.996568101000108 ], [ -133.358265753999888, 56.006170966000084 ], [ -133.376047329999892, 56.019964911 ], [ -133.395497199999909, 56.02635325700011 ], [ -133.439686652999853, 56.00267161699999 ], [ -133.470326300999943, 56.017279364000032 ], [ -133.49058997299997, 56.010199286000145 ], [ -133.510812954999892, 55.987941799000012 ], [ -133.517893032999865, 55.982326565 ], [ -133.560047980999911, 55.970892645000148 ], [ -133.589751756999931, 55.955755927000055 ], [ -133.62954667899993, 55.959418036 ], [ -133.641428188999896, 55.948187567 ], [ -133.638498501999862, 55.937933661000088 ], [ -133.618153449999852, 55.928045966000141 ], [ -133.620961066999911, 55.920843817000119 ], [ -133.630970831999889, 55.918646552000141 ], [ -133.678618943999965, 55.914618231000148 ], [ -133.691395636999914, 55.911118882000082 ], [ -133.697377081999917, 55.904974677 ], [ -133.702707485999895, 55.902777411000031 ], [ -133.72288977799991, 55.917710679000052 ], [ -133.732289191999939, 55.919826565000065 ], [ -133.758127407999893, 55.920843817000119 ], [ -133.794911261999857, 55.943589585000055 ], [ -133.771066860999895, 55.980454820000134 ], [ -133.689198370999918, 56.043768622000172 ], [ -133.684559699999909, 56.05353424700003 ], [ -133.684559699999909, 56.062486070000048 ], [ -133.680978969999899, 56.069159247000115 ], [ -133.607289191999968, 56.078517971000124 ], [ -133.541574673999975, 56.074774481000091 ], [ -133.509592251999891, 56.078111070000134 ], [ -133.483143683999913, 56.092189846000068 ], [ -133.513539191999968, 56.097357489000089 ], [ -133.596506313999868, 56.10097890800013 ], [ -133.620961066999911, 56.112616278000147 ], [ -133.617014126999919, 56.131537177000084 ], [ -133.580637173999946, 56.131903387000179 ], [ -133.507964647999955, 56.11945221600017 ], [ -133.494943813999896, 56.120672919000086 ], [ -133.479074673999946, 56.124212958000058 ], [ -133.463856574999852, 56.129624742000104 ], [ -133.442290818999936, 56.143011786000116 ], [ -133.415760870999918, 56.150783596000011 ], [ -133.40489661399991, 56.157375393000095 ], [ -133.392689581999946, 56.16046784100017 ] ] ], [ [ [ -156.774525519999941, 56.153225002000156 ], [ -156.792062954999864, 56.153021552 ], [ -156.80528723899991, 56.16478099199999 ], [ -156.809396938999953, 56.17890045800003 ], [ -156.809315558999856, 56.190130927000112 ], [ -156.806874152999939, 56.19733307500006 ], [ -156.802479620999947, 56.200669664000074 ], [ -156.799631313999896, 56.205511786000145 ], [ -156.799427863999881, 56.211737372000115 ], [ -156.792591925999943, 56.220689195000134 ], [ -156.778309699999852, 56.226711330000128 ], [ -156.774403449999852, 56.224188544000029 ], [ -156.780140753999916, 56.217922268000066 ], [ -156.783395962999862, 56.209051825000031 ], [ -156.78388424399995, 56.198716539000131 ], [ -156.779896613999881, 56.18964264500012 ], [ -156.766672329999949, 56.178534247000087 ], [ -156.766550258999871, 56.167669989 ], [ -156.774525519999941, 56.153225002000156 ] ] ], [ [ [ -132.483794725999871, 56.194566148 ], [ -132.457630988999938, 56.186672268 ], [ -132.429554816999939, 56.186753648 ], [ -132.403675910999937, 56.19354889500012 ], [ -132.359445766999841, 56.217922268000066 ], [ -132.338246222999942, 56.212103583000115 ], [ -132.316802537999934, 56.198716539000131 ], [ -132.291371222999913, 56.188381252000013 ], [ -132.223378058999941, 56.18349844000015 ], [ -132.192128058999884, 56.176581122000144 ], [ -132.164458787999877, 56.157375393000095 ], [ -132.148182745999947, 56.143011786000116 ], [ -132.092193162999905, 56.106431382000082 ], [ -132.096302863999938, 56.099432684000092 ], [ -132.101144985999923, 56.093654690000122 ], [ -132.106841600999928, 56.088812567000062 ], [ -132.113880988999881, 56.084662177000112 ], [ -132.130034959999932, 56.093817450000088 ], [ -132.137074347999913, 56.08808014500012 ], [ -132.141753709999932, 56.077460028000175 ], [ -132.151193813999839, 56.071682033000016 ], [ -132.163563605999883, 56.074774481000091 ], [ -132.188384568999936, 56.088609117000104 ], [ -132.202015753999973, 56.092189846000068 ], [ -132.196278449999909, 56.077866929 ], [ -132.175770636999857, 56.063055731000119 ], [ -132.167876756999874, 56.051214911000059 ], [ -132.172189907999893, 56.049546617000047 ], [ -132.182199673999946, 56.043768622000172 ], [ -132.169097459999904, 56.036810614 ], [ -132.160023566999911, 56.02728913 ], [ -132.153228318999965, 56.015814520000148 ], [ -132.147450324999909, 56.002752997000172 ], [ -132.150705532999865, 55.999090887000122 ], [ -132.152333136999886, 55.996527411000116 ], [ -132.154896613999881, 55.989732163999989 ], [ -132.129465298999975, 55.970282294000086 ], [ -132.122629360999866, 55.94550202000012 ], [ -132.13345292899993, 55.929022528000033 ], [ -132.161040818999965, 55.934515692000062 ], [ -132.168120897999927, 55.943019924000097 ], [ -132.177561001999834, 55.964829820000048 ], [ -132.185292120999947, 55.969305731000119 ], [ -132.191517706999917, 55.964300848000065 ], [ -132.211822068999936, 55.941392320000077 ], [ -132.223133917999917, 55.934515692000062 ], [ -132.236683722999942, 55.93349844 ], [ -132.245187954999892, 55.935492255000142 ], [ -132.252105272999898, 55.936265367000075 ], [ -132.271555141999897, 55.925238348 ], [ -132.286691860999895, 55.919378973000065 ], [ -132.30337480399993, 55.91535065300009 ], [ -132.31871497299997, 55.914618231000148 ], [ -132.335560675999972, 55.91819896000014 ], [ -132.34508216099988, 55.924302476000136 ], [ -132.363392706999946, 55.944769598000093 ], [ -132.379994269999884, 55.952337958000143 ], [ -132.416818813999896, 55.957831122000172 ], [ -132.428578253999945, 55.969305731000119 ], [ -132.412261522999927, 55.998114325000145 ], [ -132.404652472999885, 56.002752997000172 ], [ -132.392404751999834, 56.005845445000048 ], [ -132.384429490999963, 56.013413804000109 ], [ -132.382313605999855, 56.022609768000066 ], [ -132.387603318999936, 56.030707098 ], [ -132.41421464799987, 56.03510163 ], [ -132.444732225999928, 56.031927802000112 ], [ -132.462066209999904, 56.036688544000029 ], [ -132.449086066999911, 56.064846096000011 ], [ -132.558949347999885, 56.071682033000016 ], [ -132.570057745999918, 56.075018622000144 ], [ -132.581654425999943, 56.081610419000029 ], [ -132.593861456999889, 56.086574611000074 ], [ -132.606760219999899, 56.084662177000112 ], [ -132.612538214999887, 56.076971747000087 ], [ -132.613514777999853, 56.066555080000015 ], [ -132.616281704999921, 56.056870835000055 ], [ -132.62718665299991, 56.051214911000059 ], [ -132.645415818999965, 56.058091539000074 ], [ -132.676625128999945, 56.097235419000114 ], [ -132.692372199999909, 56.106431382000082 ], [ -132.704986131999874, 56.11741771000014 ], [ -132.713205532999893, 56.139797268000152 ], [ -132.711740688999924, 56.157171942000119 ], [ -132.695464647999898, 56.153631903000147 ], [ -132.693104620999918, 56.175523179 ], [ -132.687367316999939, 56.195379950000088 ], [ -132.687489386999914, 56.211615302000141 ], [ -132.702951626999862, 56.222479559000121 ], [ -132.681385870999947, 56.229193427000084 ], [ -132.603342251999891, 56.236151434000149 ], [ -132.589670376999891, 56.24681224199999 ], [ -132.566029425999943, 56.29376862200003 ], [ -132.548410610999923, 56.304429429000052 ], [ -132.541127081999889, 56.308783270000148 ], [ -132.537993943999936, 56.318915106000091 ], [ -132.53579667899993, 56.330511786000116 ], [ -132.530995245999947, 56.339178778000118 ], [ -132.521148240999935, 56.343207098000093 ], [ -132.427479620999918, 56.352199611000103 ], [ -132.399769660999937, 56.350409247000115 ], [ -132.393869594999899, 56.339178778000118 ], [ -132.385324673999946, 56.332180080000128 ], [ -132.380686001999834, 56.321519273000106 ], [ -132.380970831999946, 56.30951569200009 ], [ -132.387603318999936, 56.298244533000101 ], [ -132.377512173999946, 56.284572658000158 ], [ -132.376942511999914, 56.271633205000128 ], [ -132.385121222999913, 56.261786200000031 ], [ -132.401275193999965, 56.257269598000065 ], [ -132.38695227799991, 56.247707424000097 ], [ -132.389963344999899, 56.235500393 ], [ -132.402007615999906, 56.224025783000158 ], [ -132.414906378999916, 56.216294664000046 ], [ -132.470529751999834, 56.20404694200009 ], [ -132.483794725999871, 56.194566148 ] ] ], [ [ [ -133.586781378999916, 56.352850653000147 ], [ -133.439076300999886, 56.332342841000084 ], [ -133.341542120999861, 56.33344147300015 ], [ -133.313099738999938, 56.325588283000158 ], [ -133.313099738999938, 56.318752346000124 ], [ -133.330067511999914, 56.307033596000153 ], [ -133.328480597999885, 56.289007880000113 ], [ -133.312245245999947, 56.27724844000015 ], [ -133.285145636999914, 56.283921617000104 ], [ -133.289947068999908, 56.285142320000105 ], [ -133.293609178999958, 56.287095445000077 ], [ -133.296701626999862, 56.289618231000176 ], [ -133.299387173999946, 56.292547919000114 ], [ -133.294097459999932, 56.31378815300009 ], [ -133.25841223899991, 56.32737864800005 ], [ -133.213856574999909, 56.33344147300015 ], [ -133.18211829299986, 56.332342841000084 ], [ -133.167225714999915, 56.325181382000054 ], [ -133.151600714999915, 56.312811591000028 ], [ -133.139312303999873, 56.299017645 ], [ -133.134348110999923, 56.287339585000112 ], [ -133.136463995999918, 56.280829169000029 ], [ -133.140004035999908, 56.272935289000046 ], [ -133.140614386999857, 56.266302802000084 ], [ -133.134022589999915, 56.263495184000035 ], [ -133.126535610999838, 56.262274481000119 ], [ -133.105213995999861, 56.255926825000174 ], [ -133.095326300999943, 56.25071849199999 ], [ -133.068511522999955, 56.247544664000131 ], [ -133.058583136999857, 56.242987372000172 ], [ -133.053863084999932, 56.234442450000145 ], [ -133.053578253999916, 56.226263739000146 ], [ -133.054188605999883, 56.217922268000066 ], [ -133.052357550999886, 56.208889065000065 ], [ -133.053456183999941, 56.206610419000086 ], [ -133.056507941999939, 56.203192450000088 ], [ -133.058990037999962, 56.199042059000064 ], [ -133.058583136999857, 56.194566148 ], [ -133.053700324999909, 56.190741278000147 ], [ -133.040272589999915, 56.187811591000141 ], [ -133.035023566999911, 56.184963283000016 ], [ -133.030506964999859, 56.180121161000116 ], [ -133.024891730999855, 56.1720238300001 ], [ -133.024281378999888, 56.164455471000153 ], [ -133.035023566999911, 56.161078192000119 ], [ -133.0462947259999, 56.154242255000113 ], [ -133.065012173999946, 56.122503973000065 ], [ -133.072865363999938, 56.112616278000147 ], [ -133.092925584999904, 56.109320380000113 ], [ -133.123850063999839, 56.124497789000102 ], [ -133.140492316999882, 56.11945221600017 ], [ -133.092640753999973, 56.069159247000115 ], [ -133.079090949999909, 56.058050848000065 ], [ -133.062814907999893, 56.052313544000114 ], [ -133.048695441999939, 56.052801825000088 ], [ -133.018218553999901, 56.058050848000065 ], [ -133.000965949999909, 56.056789455000072 ], [ -132.956166144999941, 56.043768622000172 ], [ -132.955189581999974, 56.053859768000152 ], [ -132.95132402299987, 56.061712958000115 ], [ -132.9447322259999, 56.067613023000078 ], [ -132.935658331999889, 56.071682033000016 ], [ -132.918527798999946, 56.065904039000074 ], [ -132.91234290299991, 56.057766018000123 ], [ -132.909331834999904, 56.048000393 ], [ -132.898264126999862, 56.032171942000062 ], [ -132.898508266999897, 56.028062242000104 ], [ -132.895863410999908, 56.025458075000117 ], [ -132.875721808999884, 56.024644273000106 ], [ -132.869048631999931, 56.025702216000141 ], [ -132.863107876999891, 56.028509833000115 ], [ -132.856556769999912, 56.034125067000033 ], [ -132.842437303999873, 56.039048570000077 ], [ -132.827870245999947, 56.032375393000038 ], [ -132.814076300999943, 56.022284247000144 ], [ -132.802235480999883, 56.017035223000065 ], [ -132.789051886999914, 56.014715887000094 ], [ -132.736439581999889, 55.996568101000108 ], [ -132.715199347999942, 55.980780341000141 ], [ -132.693959113999938, 55.960109768000123 ], [ -132.670969204999864, 55.942124742000104 ], [ -132.633127407999922, 55.931708075000117 ], [ -132.620716925999886, 55.924383856000119 ], [ -132.610829230999883, 55.914496161 ], [ -132.606760219999899, 55.903753973000093 ], [ -132.600453253999973, 55.893377997000087 ], [ -132.569732225999871, 55.8829613300001 ], [ -132.558338995999918, 55.873724677000141 ], [ -132.565785285999908, 55.86627838700015 ], [ -132.531727667999888, 55.848537502000156 ], [ -132.508412238999881, 55.827622789000102 ], [ -132.462717251999862, 55.776841539000046 ], [ -132.472808397999927, 55.763576565000122 ], [ -132.468495245999918, 55.750637111000017 ], [ -132.457875128999973, 55.73729075700011 ], [ -132.449086066999911, 55.722845770000148 ], [ -132.445423956999946, 55.706122137000122 ], [ -132.447132941999939, 55.694037177000112 ], [ -132.462717251999862, 55.667629299000126 ], [ -132.448638475999928, 55.663234768000152 ], [ -132.438791469999899, 55.654689846000124 ], [ -132.433908657999922, 55.642401434000149 ], [ -132.434803839999915, 55.626654364000032 ], [ -132.425852016999897, 55.633978583000115 ], [ -132.393706834999932, 55.668402411000145 ], [ -132.3705134759999, 55.667629299000126 ], [ -132.365549282999837, 55.664374091000084 ], [ -132.349964972999942, 55.648586330000128 ], [ -132.346669074999909, 55.643133856000091 ], [ -132.345366990999906, 55.620062567000119 ], [ -132.343129035999937, 55.613470770000063 ], [ -132.339222785999937, 55.605536200000088 ], [ -132.297108527999882, 55.54706452000012 ], [ -132.287709113999938, 55.537298895000092 ], [ -132.236398891999926, 55.53701406500015 ], [ -132.214833136999914, 55.53119538 ], [ -132.157582160999965, 55.496730861000074 ], [ -132.145497199999852, 55.483058986000131 ], [ -132.140614386999914, 55.465277411000059 ], [ -132.150502081999889, 55.44940827000012 ], [ -132.173207160999937, 55.452826239000146 ], [ -132.216297980999883, 55.475816148000106 ], [ -132.25047766799986, 55.503119208 ], [ -132.29625403599988, 55.513576565000093 ], [ -132.333851691999968, 55.532294012000065 ], [ -132.405344204999835, 55.541205145000092 ], [ -132.434803839999915, 55.550279038999989 ], [ -132.491037563999896, 55.60370514500012 ], [ -132.523508266999897, 55.62523021000014 ], [ -132.552113410999965, 55.619208075000031 ], [ -132.544300910999965, 55.614935614000117 ], [ -132.539377407999893, 55.61017487200003 ], [ -132.530995245999947, 55.598700262000179 ], [ -132.54320227799991, 55.597235419000029 ], [ -132.552601691999939, 55.59105052300005 ], [ -132.559925910999937, 55.582098700000031 ], [ -132.565785285999908, 55.572007554000052 ], [ -132.550119594999927, 55.571478583000086 ], [ -132.528187628999888, 55.567328192000147 ], [ -132.512196417999917, 55.559271552000027 ], [ -132.514515753999945, 55.547186591000113 ], [ -132.562001105999883, 55.506252346000068 ], [ -132.591135219999842, 55.492865302000084 ], [ -132.659820115999935, 55.47565338700015 ], [ -132.681792772999955, 55.455308335000055 ], [ -132.666656053999958, 55.45107656500015 ], [ -132.654652472999942, 55.444891669000171 ], [ -132.649322068999965, 55.435492255000057 ], [ -132.654530402999853, 55.421210028000147 ], [ -132.642445441999939, 55.432928778000061 ], [ -132.63109290299991, 55.446437893000038 ], [ -132.617014126999834, 55.457505601000051 ], [ -132.555246548999946, 55.468410549000126 ], [ -132.546864386999886, 55.472601630000057 ], [ -132.544911261999914, 55.482082424000069 ], [ -132.54466712099989, 55.491400458000115 ], [ -132.541574673999889, 55.495672919000029 ], [ -132.534413214999859, 55.497626044000171 ], [ -132.519113735999895, 55.506659247000172 ], [ -132.511138475999928, 55.509344794000143 ], [ -132.501088019999969, 55.509588934000092 ], [ -132.495961066999939, 55.507757880000113 ], [ -132.491607225999871, 55.505072333000143 ], [ -132.483794725999871, 55.503119208 ], [ -132.464955206999946, 55.502183335000112 ], [ -132.443226691999939, 55.503566799000097 ], [ -132.42121334499987, 55.508002020000063 ], [ -132.401275193999965, 55.516791083000143 ], [ -132.383900519999884, 55.500392971000124 ], [ -132.37523352799991, 55.484767971000153 ], [ -132.361561652999853, 55.47296784100017 ], [ -132.302601691999911, 55.463568427000055 ], [ -132.276926235999838, 55.452704169000171 ], [ -132.267974412999934, 55.44135163 ], [ -132.291371222999913, 55.43488190300009 ], [ -132.305531378999945, 55.436835028000033 ], [ -132.324086066999939, 55.447088934000149 ], [ -132.339222785999937, 55.447902736000074 ], [ -132.350453253999945, 55.443670966000141 ], [ -132.358509894999969, 55.43675364800005 ], [ -132.368072068999936, 55.430243231000148 ], [ -132.383900519999884, 55.427435614000117 ], [ -132.441314256999902, 55.42706940300009 ], [ -132.469553188999896, 55.42129140800013 ], [ -132.483794725999871, 55.406927802000055 ], [ -132.478260870999861, 55.390570380000142 ], [ -132.456776495999918, 55.394842841000141 ], [ -132.4115291009999, 55.413763739000089 ], [ -132.400990363999938, 55.411525783000101 ], [ -132.388579881999931, 55.40570709800015 ], [ -132.37828528599988, 55.397935289000046 ], [ -132.369943813999924, 55.381170966000028 ], [ -132.360910610999895, 55.383246161000145 ], [ -132.346669074999909, 55.393255927000112 ], [ -132.341135219999899, 55.395819403000033 ], [ -132.332102016999897, 55.403631903000033 ], [ -132.32555091099988, 55.406927802000055 ], [ -132.324615037999934, 55.405991929000081 ], [ -132.250111456999946, 55.413763739000089 ], [ -132.242746548999946, 55.409165757000139 ], [ -132.212880011999857, 55.376532294000086 ], [ -132.200998501999919, 55.369208075000088 ], [ -132.188059048999918, 55.368312893 ], [ -132.174549933999941, 55.368841864000089 ], [ -132.161040818999965, 55.365952867000047 ], [ -132.154896613999881, 55.365952867000047 ], [ -132.159006313999839, 55.356024481000034 ], [ -132.161040818999965, 55.352280992000104 ], [ -132.150298631999931, 55.346380927000084 ], [ -132.145659959999932, 55.33722565300009 ], [ -132.143950975999928, 55.325018622000115 ], [ -132.132883266999897, 55.323065497000172 ], [ -132.124256964999887, 55.318019924000126 ], [ -132.121205206999974, 55.311224677000112 ], [ -132.126942511999857, 55.303900458 ], [ -132.102609829999892, 55.28803131700009 ], [ -132.090728318999936, 55.276800848000065 ], [ -132.095285610999895, 55.267075914000131 ], [ -132.120106574999937, 55.256089585000083 ], [ -132.148182745999947, 55.248602606000091 ], [ -132.179676886999857, 55.245062567000119 ], [ -132.212147589999944, 55.247137762000037 ], [ -132.243031378999888, 55.256089585000083 ], [ -132.236317511999943, 55.244940497000144 ], [ -132.241566535999937, 55.234076239000061 ], [ -132.249379035999937, 55.222235419000114 ], [ -132.25047766799986, 55.208319403000033 ], [ -132.240223761999943, 55.197211005 ], [ -132.226389126999834, 55.194281317000062 ], [ -132.217762824999937, 55.198431708000115 ], [ -132.223133917999917, 55.208319403000033 ], [ -132.203114386999914, 55.229193427 ], [ -132.172474738999938, 55.225002346000068 ], [ -132.113880988999881, 55.201483466000113 ], [ -132.083363410999937, 55.210109768 ], [ -132.050689256999902, 55.258937893 ], [ -132.027658657999837, 55.270412502000156 ], [ -132.00259355399993, 55.271918036 ], [ -131.994292772999955, 55.268133856000176 ], [ -131.983550584999932, 55.256089585000083 ], [ -131.977447068999936, 55.245428778000033 ], [ -131.97301184799997, 55.232367255000057 ], [ -131.970204230999911, 55.218410549000097 ], [ -131.969309048999946, 55.204901434000121 ], [ -131.9759822259999, 55.176947333000086 ], [ -131.991810675999943, 55.158270575000117 ], [ -132.00999915299991, 55.14154694200009 ], [ -132.023915167999917, 55.119533596000068 ], [ -131.989816860999895, 55.119533596000068 ], [ -132.001454230999911, 55.104478257000054 ], [ -132.018950975999928, 55.091376044000086 ], [ -132.039051886999914, 55.082098700000031 ], [ -132.058338995999918, 55.078599351000051 ], [ -132.066070115999935, 55.08274974199999 ], [ -132.081288214999915, 55.101060289000046 ], [ -132.092844204999864, 55.105292059000149 ], [ -132.100331183999913, 55.101263739 ], [ -132.097075975999871, 55.092515367000132 ], [ -132.088124152999939, 55.083441473000121 ], [ -132.078521287999962, 55.078599351000051 ], [ -132.087513800999972, 55.072943427000055 ], [ -132.097767706999917, 55.070379950000145 ], [ -132.108754035999965, 55.070013739000117 ], [ -132.120106574999937, 55.071112372000172 ], [ -132.120106574999937, 55.064276434000149 ], [ -132.090891079999892, 55.05609772300015 ], [ -132.076893683999941, 55.048773505000142 ], [ -132.075428839999887, 55.04010651200015 ], [ -132.086496548999918, 55.034654039000102 ], [ -132.117421027999853, 55.032782294000143 ], [ -132.152333136999886, 55.016058661000116 ], [ -132.208851691999911, 55.002630927000112 ], [ -132.223133917999917, 54.989203192000119 ], [ -132.178781704999864, 54.989203192000119 ], [ -132.167062954999892, 54.98725006700009 ], [ -132.158599412999934, 54.982814846000011 ], [ -132.152333136999886, 54.978176174000097 ], [ -132.134592251999891, 54.970160223000121 ], [ -132.12730872299997, 54.970933335000055 ], [ -132.108794725999957, 54.98574453300013 ], [ -132.101958787999934, 54.988226630000057 ], [ -132.096506313999896, 54.985256252000127 ], [ -132.092193162999905, 54.975531317 ], [ -132.069976365999935, 55.001125393000066 ], [ -132.035389777999939, 55.022772528000147 ], [ -131.996815558999884, 55.034491278000147 ], [ -131.963042772999898, 55.030218817000147 ], [ -131.974273240999878, 55.024644273000135 ], [ -131.981271938999896, 55.016750393000152 ], [ -131.982533331999974, 55.006822007000054 ], [ -131.976714647999927, 54.99542877800009 ], [ -131.997141079999892, 54.984361070000048 ], [ -132.005197719999927, 54.977687893 ], [ -132.01024329299986, 54.968085028000118 ], [ -131.976714647999927, 54.969712632000139 ], [ -131.969309048999946, 54.968085028000118 ], [ -131.961822068999965, 54.957709052000112 ], [ -131.965199347999885, 54.951890367000075 ], [ -131.972482876999891, 54.947251695000048 ], [ -131.976714647999927, 54.94082265800013 ], [ -131.976063605999883, 54.908148505 ], [ -131.984771287999962, 54.905910549000012 ], [ -132.01024329299986, 54.907294012000179 ], [ -132.03355872299997, 54.905585028000175 ], [ -132.047027147999955, 54.898586330000015 ], [ -132.045399542999917, 54.887193101000136 ], [ -132.023915167999917, 54.872503973000121 ], [ -131.985503709999875, 54.861070054 ], [ -131.968617316999882, 54.853501695000134 ], [ -131.955637173999889, 54.838324286000145 ], [ -131.960113084999961, 54.834051825000031 ], [ -131.964955206999946, 54.831976630000113 ], [ -131.970366990999878, 54.831366278000147 ], [ -131.976714647999927, 54.831529039000131 ], [ -131.95767167899993, 54.828111070000105 ], [ -131.956857876999919, 54.81720612200003 ], [ -131.958973761999914, 54.803045966000113 ], [ -131.948801235999895, 54.789984442000119 ], [ -131.963124152999882, 54.785467841000084 ], [ -131.978382941999939, 54.783758856000176 ], [ -132.01024329299986, 54.783758856000176 ], [ -131.996571417999917, 54.776922919000143 ], [ -132.00243079299986, 54.765448309000121 ], [ -132.001372850999928, 54.75576406500015 ], [ -131.997914191999939, 54.746242580000157 ], [ -131.996571417999917, 54.735296942 ], [ -132.000314907999865, 54.722723700000088 ], [ -132.005604620999918, 54.712958075000145 ], [ -132.008208787999934, 54.704006252000127 ], [ -132.004017706999889, 54.693793036 ], [ -132.067534959999904, 54.699042059000178 ], [ -132.08226477799991, 54.704657294000086 ], [ -132.096099412999905, 54.712713934000121 ], [ -132.111073370999918, 54.716701565 ], [ -132.117746548999975, 54.713690497000087 ], [ -132.106434699999909, 54.701239325000174 ], [ -132.149973110999923, 54.698635158000073 ], [ -132.200795050999943, 54.725246486000017 ], [ -132.247222459999932, 54.743312893000123 ], [ -132.277740037999962, 54.714829820000134 ], [ -132.292388475999871, 54.727484442 ], [ -132.297596808999856, 54.74445221600017 ], [ -132.294422980999911, 54.762152411000088 ], [ -132.284006313999896, 54.776922919000143 ], [ -132.265614386999857, 54.784654039000074 ], [ -132.224517381999874, 54.791652736000131 ], [ -132.216297980999883, 54.803656317000062 ], [ -132.21890214799987, 54.810288804000137 ], [ -132.225982225999928, 54.814683335000112 ], [ -132.235829230999855, 54.81720612200003 ], [ -132.24673417899993, 54.817857163999989 ], [ -132.259144660999965, 54.815171617000104 ], [ -132.266224738999938, 54.809027411000116 ], [ -132.271351691999939, 54.802191473 ], [ -132.277740037999962, 54.797430731000119 ], [ -132.299794074999852, 54.79433828300013 ], [ -132.336496548999946, 54.803412177000112 ], [ -132.359689907999893, 54.803656317000062 ], [ -132.336537238999938, 54.814886786000088 ], [ -132.283029751999834, 54.831000067000147 ], [ -132.264759894999941, 54.844549872000115 ], [ -132.275868292999917, 54.853705145000092 ], [ -132.310292120999918, 54.859930731000148 ], [ -132.32555091099988, 54.866278387000179 ], [ -132.314320441999882, 54.870672919000143 ], [ -132.302805141999869, 54.872381903000147 ], [ -132.277740037999962, 54.872503973000121 ], [ -132.277740037999962, 54.879339911000059 ], [ -132.315907355999911, 54.88300202 ], [ -132.335682745999947, 54.887884833000086 ], [ -132.349720831999889, 54.896429755 ], [ -132.352121548999946, 54.904608466000113 ], [ -132.349720831999889, 54.91229889500012 ], [ -132.349924282999865, 54.918036200000088 ], [ -132.359974738999938, 54.920314846000068 ], [ -132.369740363999966, 54.921210028000147 ], [ -132.378570115999935, 54.923976955000128 ], [ -132.386586066999968, 54.928412177 ], [ -132.393869594999899, 54.934556382000082 ], [ -132.378041144999941, 54.940130927 ], [ -132.369618292999917, 54.941555080000157 ], [ -132.359689907999893, 54.94082265800013 ], [ -132.367990688999896, 54.950995184000178 ], [ -132.387277798999918, 54.964422919000171 ], [ -132.393869594999899, 54.975531317 ], [ -132.394602016999897, 54.988226630000057 ], [ -132.390980597999942, 55.00096263200011 ], [ -132.380197719999842, 55.023382880000113 ], [ -132.402699347999942, 55.015285549000097 ], [ -132.412017381999874, 54.993719794000086 ], [ -132.414906378999916, 54.97150299700003 ], [ -132.418039516999897, 54.961249091000113 ], [ -132.415394660999908, 54.956000067000119 ], [ -132.417551235999895, 54.943915106000119 ], [ -132.422596808999941, 54.930161851 ], [ -132.428578253999945, 54.920314846000068 ], [ -132.43614661399991, 54.916571356000034 ], [ -132.472971157999893, 54.907294012000179 ], [ -132.485585089999859, 54.907375393000066 ], [ -132.495269334999932, 54.908880927000112 ], [ -132.501454230999911, 54.913763739 ], [ -132.503732876999862, 54.92401764500012 ], [ -132.497670050999943, 54.933050848000121 ], [ -132.483631964999915, 54.935777085 ], [ -132.467884894999941, 54.93691640800013 ], [ -132.456532355999883, 54.94082265800013 ], [ -132.444162563999839, 54.9630394550001 ], [ -132.452219204999892, 54.980536200000031 ], [ -132.470814581999974, 54.993638414000102 ], [ -132.490061001999834, 55.002875067000062 ], [ -132.495472785999965, 54.965277411000059 ], [ -132.51886959499987, 54.944159247000144 ], [ -132.550200975999928, 54.940252997000144 ], [ -132.579416469999842, 54.954413153000175 ], [ -132.593413865999906, 54.968247788999989 ], [ -132.598133917999917, 54.976019598000093 ], [ -132.599924282999893, 54.985500393000095 ], [ -132.596018032999893, 54.989081122000144 ], [ -132.575347459999875, 54.977118231000034 ], [ -132.565785285999908, 54.975531317 ], [ -132.555531378999973, 54.986395575000174 ], [ -132.551869269999941, 55.000677802000084 ], [ -132.546498175999943, 55.012640692 ], [ -132.530995245999947, 55.016546942 ], [ -132.546701626999919, 55.020209052000055 ], [ -132.566965298999946, 55.021429755000085 ], [ -132.579497850999928, 55.027044989000089 ], [ -132.571929490999878, 55.043850002000099 ], [ -132.553456183999856, 55.052435614 ], [ -132.52989661399991, 55.050116278000033 ], [ -132.5052791009999, 55.044663804 ], [ -132.483794725999871, 55.043850002000099 ], [ -132.464955206999946, 55.05072663 ], [ -132.530995245999947, 55.058050848 ], [ -132.542958136999886, 55.070217190000093 ], [ -132.539173956999946, 55.083644924000069 ], [ -132.511138475999928, 55.11273834800015 ], [ -132.529286261999943, 55.115464585000112 ], [ -132.544911261999914, 55.121527411000031 ], [ -132.559803839999887, 55.124090887000122 ], [ -132.575672980999911, 55.116156317000147 ], [ -132.602853969999927, 55.069525458000143 ], [ -132.612904425999886, 55.064276434000149 ], [ -132.626616990999935, 55.085638739000117 ], [ -132.608550584999904, 55.119208075000145 ], [ -132.579090949999909, 55.151312567000119 ], [ -132.558338995999918, 55.167914130000085 ], [ -132.575835740999878, 55.174994208000143 ], [ -132.589182094999899, 55.186265367000132 ], [ -132.609852667999917, 55.21173737200003 ], [ -132.633208787999905, 55.230902411 ], [ -132.640207485999895, 55.24054596600017 ], [ -132.64085852799991, 55.256089585000083 ], [ -132.657460089999887, 55.241848049000069 ], [ -132.655832485999866, 55.218980210000055 ], [ -132.642445441999939, 55.197739976000079 ], [ -132.623768683999884, 55.188421942000119 ], [ -132.616118943999936, 55.181952216000028 ], [ -132.615305141999841, 55.167669989000117 ], [ -132.620472785999937, 55.153387762000037 ], [ -132.630930141999926, 55.146877346000124 ], [ -132.696115688999839, 55.146877346000124 ], [ -132.706857876999862, 55.149237372000087 ], [ -132.736439581999889, 55.167914130000085 ], [ -132.774891730999911, 55.183050848000065 ], [ -132.784820115999906, 55.188421942000119 ], [ -132.798980272999927, 55.205145575000145 ], [ -132.808216925999886, 55.228216864000117 ], [ -132.809315558999941, 55.251898505000142 ], [ -132.799143032999893, 55.270412502000156 ], [ -132.826730923999918, 55.275458075000088 ], [ -132.840443488999938, 55.274888414000102 ], [ -132.846302863999881, 55.266669012000122 ], [ -132.847767706999946, 55.257513739000146 ], [ -132.851226365999935, 55.248236395000092 ], [ -132.855620897999927, 55.240423895 ], [ -132.859974738999938, 55.235581773000106 ], [ -132.881703253999888, 55.225816148000078 ], [ -132.928700324999909, 55.217474677000027 ], [ -132.949330206999946, 55.208319403000033 ], [ -133.030425584999875, 55.214097398 ], [ -133.035023566999911, 55.225653387000122 ], [ -133.025542772999898, 55.230169989000061 ], [ -132.983509894999941, 55.235581773000106 ], [ -132.913726365999878, 55.26471588700015 ], [ -132.905100063999896, 55.271063544000114 ], [ -132.901519334999904, 55.280259507000082 ], [ -132.909779425999886, 55.285223700000031 ], [ -132.928293423999889, 55.283351955000157 ], [ -132.959584113999966, 55.276556708000115 ], [ -133.086537238999881, 55.276556708000115 ], [ -133.083729620999918, 55.272772528000118 ], [ -133.079090949999909, 55.262925523 ], [ -133.092193162999877, 55.270819403000147 ], [ -133.103911912999962, 55.279771226 ], [ -133.116118943999936, 55.287176825000174 ], [ -133.130930141999897, 55.29026927300005 ], [ -133.147206183999941, 55.288234768000123 ], [ -133.17406165299991, 55.279201565000122 ], [ -133.1888728509999, 55.276556708000115 ], [ -133.212961391999926, 55.279201565000122 ], [ -133.21703040299991, 55.28839752800009 ], [ -133.214914516999897, 55.301174221000124 ], [ -133.220285610999838, 55.314439195000077 ], [ -133.232492641999897, 55.322007554000109 ], [ -133.2455134759999, 55.327337958000086 ], [ -133.257069464999915, 55.333929755000057 ], [ -133.26463782499988, 55.345445054 ], [ -133.24819902299987, 55.347154039000017 ], [ -133.240345831999889, 55.354681708000058 ], [ -133.235910610999923, 55.364447333 ], [ -133.229888475999928, 55.372788804000052 ], [ -133.218006964999859, 55.380316473000121 ], [ -133.206613735999895, 55.384466864000061 ], [ -133.194081183999913, 55.386135158000073 ], [ -133.178700324999852, 55.386419989 ], [ -133.174224412999877, 55.385321356000148 ], [ -133.162424282999922, 55.379380601000136 ], [ -133.152495897999927, 55.372300523000078 ], [ -133.14972896999987, 55.374172268000123 ], [ -133.147775844999899, 55.378078518000123 ], [ -133.144195115999935, 55.38027578300013 ], [ -133.060658331999974, 55.368597723000121 ], [ -133.052357550999886, 55.365952867000047 ], [ -133.033355272999898, 55.353949286000116 ], [ -133.03189042899993, 55.352280992000104 ], [ -133.017730272999927, 55.350327867000075 ], [ -132.872425910999937, 55.359076239000117 ], [ -132.846302863999881, 55.352280992000104 ], [ -132.869862433999913, 55.363918361000017 ], [ -132.956166144999941, 55.372788804000052 ], [ -133.007801886999914, 55.388128973 ], [ -133.028716600999871, 55.40058014500012 ], [ -133.024484829999835, 55.413763739000089 ], [ -133.031076626999919, 55.422430731000176 ], [ -133.040679490999906, 55.426988023000106 ], [ -133.052479620999861, 55.428412177 ], [ -133.06541907499988, 55.427435614000117 ], [ -133.046701626999891, 55.437079169000086 ], [ -133.023793097999913, 55.444281317000119 ], [ -132.999623175999886, 55.448187567000033 ], [ -132.977284308999856, 55.447902736000074 ], [ -133.008208787999934, 55.457464911000059 ], [ -133.075306769999884, 55.451117255000142 ], [ -133.107004360999838, 55.462144273 ], [ -133.125843878999888, 55.483587958000115 ], [ -133.124867316999911, 55.502183335000112 ], [ -133.111643032999893, 55.519598700000088 ], [ -133.093373175999886, 55.537298895000092 ], [ -133.087025519999969, 55.54682038 ], [ -133.07787024599989, 55.570013739000117 ], [ -133.072865363999938, 55.578273830000015 ], [ -133.064116990999878, 55.582912502000127 ], [ -133.024484829999835, 55.598700262000179 ], [ -133.00015214799987, 55.614976304000109 ], [ -132.986480272999927, 55.621771552000141 ], [ -132.969838019999884, 55.626654364000032 ], [ -132.922678188999896, 55.627630927 ], [ -132.908355272999927, 55.632879950000174 ], [ -132.922963019999941, 55.637355861000131 ], [ -132.938343878999973, 55.639715887000179 ], [ -132.969838019999884, 55.639715887000179 ], [ -132.982777472999885, 55.637030341000113 ], [ -133.014515753999945, 55.626654364000032 ], [ -133.06309973899991, 55.623480536000145 ], [ -133.203602667999917, 55.58690013200011 ], [ -133.25129146999987, 55.584784247000087 ], [ -133.357045050999886, 55.616197007000139 ], [ -133.379058397999898, 55.629787502000099 ], [ -133.388172980999883, 55.650213934000149 ], [ -133.386789516999897, 55.662054755000113 ], [ -133.382191535999965, 55.669501044000086 ], [ -133.373768683999913, 55.673285223000121 ], [ -133.341460740999878, 55.677720445 ], [ -133.34194902299987, 55.685451565 ], [ -133.360259568999936, 55.701117255000085 ], [ -133.368153449999909, 55.703558661000116 ], [ -133.378570115999906, 55.704535223000093 ], [ -133.38524329299986, 55.709295966000084 ], [ -133.381947394999941, 55.722845770000148 ], [ -133.370432094999899, 55.733343817000119 ], [ -133.357533331999946, 55.730617580000157 ], [ -133.345529751999862, 55.721177476000136 ], [ -133.336333787999877, 55.71198151200015 ], [ -133.323963995999918, 55.709295966000084 ], [ -133.317982550999943, 55.726385809000035 ], [ -133.31346594999988, 55.749172268000152 ], [ -133.30565344999988, 55.763861395000063 ], [ -133.293365037999934, 55.757757880000085 ], [ -133.265207485999838, 55.747951565000122 ], [ -133.236683722999942, 55.745062567 ], [ -133.223703579999835, 55.760077216000028 ], [ -133.213978644999884, 55.783351955000128 ], [ -133.191395636999914, 55.797186591000141 ], [ -133.166086391999897, 55.807074286000059 ], [ -133.147938605999883, 55.818426825000031 ], [ -133.142974412999934, 55.832261460000112 ], [ -133.139881964999944, 55.85455963700015 ], [ -133.139800584999961, 55.876613674000069 ], [ -133.144195115999935, 55.889837958 ], [ -133.156361456999946, 55.896226304000109 ], [ -133.15884355399993, 55.890204169000029 ], [ -133.156646287999962, 55.880764065 ], [ -133.154774542999917, 55.876776434000035 ], [ -133.161122199999909, 55.865668036 ], [ -133.175038214999915, 55.865668036 ], [ -133.217681443999936, 55.883693752000127 ], [ -133.227284308999913, 55.890570380000142 ], [ -133.236724412999934, 55.900336005000085 ], [ -133.240874803999873, 55.909979559000035 ], [ -133.248646613999966, 55.935980536000116 ], [ -133.25413977799991, 55.941351630000085 ], [ -133.259755011999914, 55.945298570000077 ], [ -133.25035559799997, 55.953436591000084 ], [ -133.236805792999917, 55.959784247000115 ], [ -133.229888475999928, 55.958685614000061 ], [ -133.231760219999899, 55.970363674000069 ], [ -133.244130011999914, 55.996568101000108 ], [ -133.246205206999946, 56.035589911000088 ], [ -133.25023352799991, 56.055975653000147 ], [ -133.279123501999919, 56.076402085000112 ], [ -133.278146938999839, 56.102484442 ], [ -133.26463782499988, 56.147406317 ], [ -133.285511847999942, 56.167385158000073 ], [ -133.331206834999961, 56.172552802000084 ], [ -133.425404425999943, 56.167914130000057 ], [ -133.443470831999974, 56.169826565 ], [ -133.457753058999884, 56.174994208000115 ], [ -133.490305141999841, 56.191473700000088 ], [ -133.508371548999946, 56.191717841000141 ], [ -133.561919725999871, 56.183783270000092 ], [ -133.573109503999973, 56.184963283000016 ], [ -133.575998501999919, 56.188177802000055 ], [ -133.593006964999887, 56.202053127000156 ], [ -133.606271938999896, 56.20994700700011 ], [ -133.610991990999935, 56.210760809000035 ], [ -133.612172003999945, 56.212347723000065 ], [ -133.614735480999855, 56.222479559000121 ], [ -133.615386522999898, 56.23041413 ], [ -133.613392706999946, 56.247137762000122 ], [ -133.614735480999855, 56.257269598000065 ], [ -133.619048631999931, 56.260321356000148 ], [ -133.62710527299987, 56.264064846000011 ], [ -133.633900519999912, 56.269517320000134 ], [ -133.634592251999862, 56.277777411000116 ], [ -133.619618292999917, 56.289496161000116 ], [ -133.576324022999927, 56.292629299000097 ], [ -133.566314256999931, 56.304429429000052 ], [ -133.572661912999877, 56.314398505000057 ], [ -133.587798631999874, 56.327337958000058 ], [ -133.614735480999855, 56.345404364000089 ], [ -133.614735480999855, 56.352850653000147 ], [ -133.586781378999916, 56.352850653000147 ] ] ], [ [ [ -157.821888800999943, 56.317531643000123 ], [ -157.833322719999899, 56.313666083000115 ], [ -157.848825649999924, 56.319810289000102 ], [ -157.86742102799991, 56.329250393 ], [ -157.884877081999889, 56.333563544000114 ], [ -157.898386196999923, 56.339056708000143 ], [ -157.897409633999956, 56.347398179000109 ], [ -157.856556769999912, 56.362127997000115 ], [ -157.826161261999943, 56.361639716000028 ], [ -157.811390753999888, 56.356146552 ], [ -157.811268683999913, 56.353705145000148 ], [ -157.812733527999853, 56.34902578300013 ], [ -157.812326626999948, 56.342922268000152 ], [ -157.812326626999948, 56.34288157800016 ], [ -157.807321743999921, 56.335882880000085 ], [ -157.806019660999908, 56.328802802000112 ], [ -157.812448696999923, 56.323309637000179 ], [ -157.821888800999943, 56.317531643000123 ] ] ], [ [ [ -132.64085852799991, 56.442206122000172 ], [ -132.632679816999939, 56.430650132000054 ], [ -132.623402472999942, 56.408758856000119 ], [ -132.612904425999886, 56.400620835 ], [ -132.624379035999937, 56.387600002000013 ], [ -132.659657355999883, 56.368231512000094 ], [ -132.66820227799991, 56.352850653000147 ], [ -132.663929816999882, 56.341864325000088 ], [ -132.634632941999968, 56.304429429000052 ], [ -132.647206183999856, 56.282416083000058 ], [ -132.667958136999857, 56.274603583000058 ], [ -132.691639777999882, 56.270697333000058 ], [ -132.732736782999865, 56.251654364000061 ], [ -132.819650844999842, 56.236151434000149 ], [ -132.868885870999861, 56.243475653000147 ], [ -132.99087480399993, 56.311916408000044 ], [ -133.038889126999919, 56.330511786000116 ], [ -133.055246548999946, 56.344794012000122 ], [ -133.048939581999889, 56.362779039000046 ], [ -132.992827928999873, 56.418605861000131 ], [ -132.969838019999884, 56.434800523 ], [ -132.946685350999928, 56.445786851000051 ], [ -132.924224412999934, 56.451971747000115 ], [ -132.874256964999915, 56.455267645000148 ], [ -132.85757402299987, 56.453273830000015 ], [ -132.825591600999871, 56.444281317 ], [ -132.80874589799987, 56.442206122000172 ], [ -132.796742316999939, 56.443915106000176 ], [ -132.757557745999918, 56.455267645000148 ], [ -132.702951626999862, 56.462103583000058 ], [ -132.652902798999946, 56.448675848000065 ], [ -132.64085852799991, 56.442206122000172 ] ] ], [ [ [ -132.151519334999961, 56.351996161000145 ], [ -132.123890753999945, 56.343207098000093 ], [ -132.103016730999911, 56.349107164000102 ], [ -132.080881313999924, 56.361314195 ], [ -132.052805141999897, 56.362046617000132 ], [ -132.025135870999918, 56.353908596000011 ], [ -132.004017706999889, 56.339178778000118 ], [ -131.992746548999918, 56.322333075000117 ], [ -131.977691209999904, 56.285467841000141 ], [ -131.940093553999901, 56.233058986000074 ], [ -131.928049282999893, 56.210516669000086 ], [ -131.928334113999938, 56.194566148 ], [ -131.952219204999892, 56.185858466000084 ], [ -131.976877407999893, 56.190904039000131 ], [ -131.996205206999917, 56.188544012000179 ], [ -132.004017706999889, 56.157375393000095 ], [ -132.013254360999895, 56.141343492000104 ], [ -132.034291144999884, 56.128322658000016 ], [ -132.057281053999873, 56.12034739800005 ], [ -132.072336391999897, 56.11945221600017 ], [ -132.085031704999864, 56.132147528000033 ], [ -132.090728318999936, 56.148871161000059 ], [ -132.099191860999895, 56.162909247000115 ], [ -132.120106574999937, 56.167914130000057 ], [ -132.118031378999916, 56.156724351000136 ], [ -132.128773566999939, 56.158148505000113 ], [ -132.144642706999946, 56.167059637000065 ], [ -132.15794837099989, 56.178127346000096 ], [ -132.175770636999857, 56.189439195000077 ], [ -132.243031378999888, 56.202053127000156 ], [ -132.270415818999936, 56.214016018000095 ], [ -132.306467251999919, 56.23456452000012 ], [ -132.338246222999942, 56.257798570000048 ], [ -132.352894660999965, 56.277777411000116 ], [ -132.327137824999909, 56.330267645000092 ], [ -132.330189581999917, 56.34243398600016 ], [ -132.346669074999909, 56.35968659100017 ], [ -132.346506313999839, 56.370428778000175 ], [ -132.342355923999889, 56.376898505 ], [ -132.337025519999941, 56.383368231000091 ], [ -132.33299719999988, 56.393784898 ], [ -132.33336341099988, 56.407945054000024 ], [ -132.338937954999892, 56.422430731000148 ], [ -132.349191860999923, 56.437160549000126 ], [ -132.363392706999946, 56.451849677000141 ], [ -132.376616990999878, 56.47186920800003 ], [ -132.37535559799997, 56.488470770000063 ], [ -132.362049933999856, 56.494574286000059 ], [ -132.339222785999937, 56.483221747000172 ], [ -132.260894334999961, 56.458929755 ], [ -132.239898240999935, 56.445298570000048 ], [ -132.227609829999864, 56.429266669000171 ], [ -132.209136522999927, 56.395453192 ], [ -132.195871548999889, 56.380194403000033 ], [ -132.178130662999934, 56.367132880000142 ], [ -132.151519334999961, 56.351996161000145 ] ] ], [ [ [ -153.893503383999956, 56.535223700000145 ], [ -153.928171352999925, 56.516669012000037 ], [ -153.965687628999945, 56.504624742000132 ], [ -153.99071204299986, 56.507066148000078 ], [ -154.005970831999946, 56.51300690300009 ], [ -154.024647589999915, 56.511053778000033 ], [ -154.059274868999893, 56.503648179000052 ], [ -154.100331183999913, 56.502386786000145 ], [ -154.120594855999911, 56.50413646000014 ], [ -154.137806769999941, 56.510484117000075 ], [ -154.119089321999951, 56.523749091000113 ], [ -154.09312903599988, 56.536688544000114 ], [ -154.069040493999921, 56.541408596000011 ], [ -154.055816209999904, 56.530340887000179 ], [ -154.043649868999921, 56.54759349199999 ], [ -154.020456508999871, 56.555487372000144 ], [ -153.877145962999947, 56.565130927000112 ], [ -153.877145962999947, 56.552069403000147 ], [ -153.893503383999956, 56.535223700000145 ] ] ], [ [ [ -157.060617641999897, 56.582220770000063 ], [ -157.044748501999891, 56.572984117000104 ], [ -157.008778449999909, 56.563950914000102 ], [ -156.992380337999919, 56.555161851000136 ], [ -156.978260870999861, 56.53652578300013 ], [ -156.988352016999954, 56.530585028000118 ], [ -157.006296352999897, 56.533433335000055 ], [ -157.025949673999946, 56.549953518000123 ], [ -157.048939581999917, 56.552923895000148 ], [ -157.139475063999868, 56.552069403000147 ], [ -157.14549719999988, 56.548895575000174 ], [ -157.155873175999886, 56.534409898000135 ], [ -157.159982876999919, 56.530340887000179 ], [ -157.168568488999938, 56.531236070000077 ], [ -157.177927212999862, 56.535834052000027 ], [ -157.18773352799991, 56.538641669000143 ], [ -157.205433722999885, 56.530178127000013 ], [ -157.308705206999889, 56.530666408000101 ], [ -157.331247524999895, 56.524155992000104 ], [ -157.327097133999928, 56.534857489000117 ], [ -157.317575649999952, 56.548488674000069 ], [ -157.30711829299986, 56.560207424000069 ], [ -157.300526495999918, 56.565130927000112 ], [ -157.286366339999859, 56.568670966000113 ], [ -157.25926673099994, 56.583400783000101 ], [ -157.242502407999922, 56.585638739000089 ], [ -157.202626105999855, 56.582098700000088 ], [ -157.098581508999928, 56.593980210000055 ], [ -157.060617641999897, 56.582220770000063 ] ] ], [ [ [ -154.461415167999917, 56.60537344 ], [ -154.425160285999937, 56.593044338000155 ], [ -154.425160285999937, 56.593003648000078 ], [ -154.415638800999943, 56.587469794000143 ], [ -154.407907680999926, 56.579006252000013 ], [ -154.402088995999861, 56.568833726000079 ], [ -154.398508266999897, 56.558294989 ], [ -154.410633917999888, 56.54759349199999 ], [ -154.424061652999882, 56.541408596000011 ], [ -154.44013424399995, 56.538519598000093 ], [ -154.446644660999851, 56.538641669000143 ], [ -154.434519008999956, 56.54181549700003 ], [ -154.424794074999909, 56.548041083000086 ], [ -154.419016079999949, 56.558294989 ], [ -154.430287238999938, 56.556789455000157 ], [ -154.440744594999899, 56.554144598000065 ], [ -154.450510219999956, 56.550238348000065 ], [ -154.45995032499988, 56.544663804000052 ], [ -154.44281979099992, 56.581203518 ], [ -154.47484290299991, 56.598089911 ], [ -154.516713019999941, 56.590155341000028 ], [ -154.528879360999923, 56.552069403000147 ], [ -154.497995571999866, 56.530666408000101 ], [ -154.487538214999887, 56.516791083000115 ], [ -154.504953579999949, 56.510484117000075 ], [ -154.530995245999918, 56.508002020000148 ], [ -154.559681769999884, 56.501532294000143 ], [ -154.610788540999863, 56.483221747000172 ], [ -154.670725063999896, 56.441229559000092 ], [ -154.699818488999881, 56.426906643 ], [ -154.716908331999889, 56.410874742000132 ], [ -154.738229946999866, 56.398260809000035 ], [ -154.76781165299991, 56.400620835 ], [ -154.79124915299991, 56.430853583 ], [ -154.770497199999909, 56.470851955000128 ], [ -154.731434699999937, 56.508205471000011 ], [ -154.700144008999871, 56.530340887000179 ], [ -154.536325649999895, 56.597601630000113 ], [ -154.499338344999956, 56.60545482 ], [ -154.461415167999917, 56.60537344 ] ] ], [ [ [ -154.082590298999889, 56.606105861000131 ], [ -154.077463344999899, 56.591782945000048 ], [ -154.068430141999897, 56.580511786000059 ], [ -154.058094855999855, 56.570135809000149 ], [ -154.049061652999853, 56.558294989 ], [ -154.080759243999921, 56.576849677000112 ], [ -154.09345455599987, 56.578802802000055 ], [ -154.103993292999945, 56.574896552000055 ], [ -154.102040167999917, 56.566148179 ], [ -154.09308834499987, 56.557074286 ], [ -154.082590298999889, 56.552069403000147 ], [ -154.090565558999856, 56.546698309000092 ], [ -154.138905402999853, 56.531683661000059 ], [ -154.141550258999956, 56.530340887000179 ], [ -154.158314581999889, 56.52619049700003 ], [ -154.191395636999914, 56.507879950000174 ], [ -154.210072394999884, 56.503648179000052 ], [ -154.280140753999888, 56.50657786699999 ], [ -154.322132941999882, 56.515082098 ], [ -154.333811001999862, 56.519598700000145 ], [ -154.341623501999948, 56.528143622000087 ], [ -154.350087042999917, 56.544663804000052 ], [ -154.337757941999939, 56.563910223 ], [ -154.310414191999882, 56.583807684000092 ], [ -154.279001430999926, 56.597805080000157 ], [ -154.247670050999886, 56.606105861000131 ], [ -154.226185675999886, 56.608343817000119 ], [ -154.165720180999955, 56.606105861000131 ], [ -154.124094204999892, 56.612616278000033 ], [ -154.103016730999883, 56.61318594 ], [ -154.082590298999889, 56.606105861000131 ] ] ], [ [ [ -169.742990688999896, 56.62034739800005 ], [ -169.608021613999938, 56.603338934000178 ], [ -169.580881313999924, 56.609523830000157 ], [ -169.556996222999857, 56.618109442000062 ], [ -169.523142055999898, 56.616278387000179 ], [ -169.491525844999899, 56.606919664000046 ], [ -169.47435462099989, 56.593003648000078 ], [ -169.515085415999948, 56.578517971000124 ], [ -169.550160285999937, 56.556952216000028 ], [ -169.586903449999937, 56.541408596000011 ], [ -169.632679816999939, 56.544663804000052 ], [ -169.653024868999921, 56.554144598000065 ], [ -169.678456183999941, 56.576117255000085 ], [ -169.693470831999889, 56.585638739000089 ], [ -169.766224738999938, 56.606878973000065 ], [ -169.789051886999943, 56.62034739800005 ], [ -169.742990688999896, 56.62034739800005 ] ] ], [ [ [ -132.882232225999871, 56.801174221000011 ], [ -132.870513475999871, 56.797837632000082 ], [ -132.833648240999906, 56.79913971600017 ], [ -132.816314256999931, 56.797349351 ], [ -132.751942511999914, 56.759222723 ], [ -132.74388587099989, 56.746975002000127 ], [ -132.733265753999945, 56.725978908000101 ], [ -132.709787563999896, 56.709906317000119 ], [ -132.686268683999913, 56.698675848000121 ], [ -132.675648566999968, 56.692084052000141 ], [ -132.671457485999838, 56.683823960000055 ], [ -132.661529100999928, 56.679632880000113 ], [ -132.64085852799991, 56.674994208 ], [ -132.629139777999939, 56.669012762000179 ], [ -132.623361782999893, 56.66526927300005 ], [ -132.608387824999937, 56.648016669000143 ], [ -132.599191860999895, 56.633775132000139 ], [ -132.593088344999899, 56.626532294000114 ], [ -132.583811001999834, 56.618109442000062 ], [ -132.577219204999864, 56.614081122000087 ], [ -132.558338995999918, 56.606105861000131 ], [ -132.548491990999906, 56.603745835 ], [ -132.53970292899993, 56.603501695000048 ], [ -132.53343665299991, 56.60032786699999 ], [ -132.530995245999947, 56.589300848000121 ], [ -132.53343665299991, 56.580308335000112 ], [ -132.539458787999877, 56.576402085000112 ], [ -132.54735266799986, 56.573879299000012 ], [ -132.555246548999946, 56.56854889500012 ], [ -132.573719855999855, 56.559475002000127 ], [ -132.621571417999888, 56.555731512000094 ], [ -132.637766079999835, 56.548407294000086 ], [ -132.650461391999897, 56.537054755000113 ], [ -132.66616777299987, 56.529730536000116 ], [ -132.683990037999934, 56.527167059000121 ], [ -132.702951626999862, 56.530340887000179 ], [ -132.717844204999892, 56.540961005000113 ], [ -132.732045050999943, 56.554510809000178 ], [ -132.747059699999852, 56.559515692000119 ], [ -132.764393683999941, 56.544663804000052 ], [ -132.730132615999963, 56.521185614 ], [ -132.722767706999946, 56.510484117000075 ], [ -132.740549282999865, 56.508246161 ], [ -132.77367102799991, 56.499090887000094 ], [ -132.79165605399993, 56.496893622000115 ], [ -132.91860917899993, 56.507025458000086 ], [ -132.937489386999886, 56.517564195000134 ], [ -132.945179816999882, 56.536566473000121 ], [ -132.954497850999928, 56.592271226000051 ], [ -132.952219204999892, 56.601629950000174 ], [ -132.942494269999941, 56.612941799000154 ], [ -132.928049282999865, 56.619696356000091 ], [ -132.890858527999882, 56.629380601000051 ], [ -132.88109290299991, 56.640204169000143 ], [ -132.886586066999939, 56.650580145000148 ], [ -132.922027147999955, 56.688666083000143 ], [ -132.924143032999893, 56.702215887000094 ], [ -132.923410610999838, 56.717922268000066 ], [ -132.92015540299991, 56.732814846000039 ], [ -132.914621548999946, 56.743841864000061 ], [ -132.92442786399991, 56.757554429 ], [ -132.959584113999966, 56.787990627000156 ], [ -132.962798631999931, 56.79979075700011 ], [ -132.951527472999942, 56.81045156500015 ], [ -132.922027147999955, 56.825832424000097 ], [ -132.882232225999871, 56.801174221000011 ] ] ], [ [ [ -133.98668372299997, 56.865627346000096 ], [ -133.99083411399991, 56.832017320000077 ], [ -133.971262173999946, 56.836411851000051 ], [ -133.964100714999915, 56.83112213700015 ], [ -133.956695115999935, 56.797837632000082 ], [ -133.951486782999922, 56.802394924000012 ], [ -133.941029425999943, 56.80784739800005 ], [ -133.935617641999897, 56.812201239000146 ], [ -133.930083787999962, 56.801581122000115 ], [ -133.919260219999899, 56.770249742000047 ], [ -133.912668423999889, 56.763739325000145 ], [ -133.90489661399991, 56.76064687700007 ], [ -133.904855923999918, 56.753851630000057 ], [ -133.909331834999875, 56.746975002000127 ], [ -133.923003709999932, 56.740708726 ], [ -133.922840949999852, 56.733099677000055 ], [ -133.920806443999936, 56.723944403000175 ], [ -133.922596808999913, 56.715969143000038 ], [ -133.927316860999895, 56.712225653000175 ], [ -133.93879146999987, 56.706203518000066 ], [ -133.943023240999878, 56.702337958000086 ], [ -133.955067511999914, 56.678412177000112 ], [ -133.959828253999888, 56.671291408000158 ], [ -133.972645636999914, 56.660142320000134 ], [ -133.987172003999945, 56.655178127000099 ], [ -134.025013800999886, 56.653876044000086 ], [ -133.993763800999943, 56.639227606000176 ], [ -133.96434485599994, 56.643255927000141 ], [ -133.938099738999938, 56.659369208000115 ], [ -133.916371222999942, 56.681219794000143 ], [ -133.916249152999882, 56.687201239000089 ], [ -133.919829881999931, 56.694159247000144 ], [ -133.920765753999945, 56.699896552000141 ], [ -133.912668423999889, 56.702337958000086 ], [ -133.903187628999888, 56.703273830000157 ], [ -133.885487433999913, 56.707505601000079 ], [ -133.877552863999938, 56.708563544000029 ], [ -133.870757615999906, 56.714911200000145 ], [ -133.863107876999891, 56.729681708000143 ], [ -133.856678839999859, 56.745917059000178 ], [ -133.853667772999955, 56.756903387000037 ], [ -133.858225063999896, 56.780259507000139 ], [ -133.86587480399993, 56.800970770000148 ], [ -133.862375454999835, 56.809881903000175 ], [ -133.833159959999904, 56.797837632000082 ], [ -133.813059048999946, 56.781480210000055 ], [ -133.801177537999905, 56.777004299000097 ], [ -133.768422003999973, 56.785711981000176 ], [ -133.750152147999927, 56.783758856000034 ], [ -133.732533331999889, 56.77814362200003 ], [ -133.717152472999942, 56.771185614000146 ], [ -133.775135870999918, 56.698879299000069 ], [ -133.780344204999921, 56.686428127000156 ], [ -133.773101365999906, 56.676459052000055 ], [ -133.760080532999922, 56.669907945 ], [ -133.732167120999861, 56.663153387000037 ], [ -133.728627081999889, 56.65306224199999 ], [ -133.730295376999891, 56.641791083000086 ], [ -133.730132615999935, 56.633978583 ], [ -133.70567786399991, 56.604152736000103 ], [ -133.709543423999918, 56.594712632000082 ], [ -133.735910610999895, 56.567124742000075 ], [ -133.745432094999899, 56.561957098000065 ], [ -133.756947394999941, 56.559149481000119 ], [ -133.771799282999893, 56.558294989 ], [ -133.779693162999877, 56.563381252000127 ], [ -133.792103644999912, 56.588690497000172 ], [ -133.79906165299991, 56.59870026200015 ], [ -133.823841925999943, 56.60773346600017 ], [ -133.905100063999868, 56.62034739800005 ], [ -133.922596808999913, 56.616644598 ], [ -133.91038977799991, 56.601467190000037 ], [ -133.857736782999922, 56.587469794000143 ], [ -133.847482876999891, 56.565130927000112 ], [ -133.851958787999934, 56.563910223 ], [ -133.871896938999839, 56.535956122000172 ], [ -133.874175584999932, 56.530340887000179 ], [ -133.886545376999862, 56.524400132000054 ], [ -133.909250454999892, 56.520086981000148 ], [ -133.919504360999923, 56.513617255000142 ], [ -133.920236782999865, 56.50519440300009 ], [ -133.910145636999886, 56.497544664000074 ], [ -133.895985480999855, 56.492132880000113 ], [ -133.884673631999874, 56.490057684000092 ], [ -133.869292772999927, 56.486802476000051 ], [ -133.862904425999915, 56.478583075000145 ], [ -133.859608527999882, 56.467352606000148 ], [ -133.853667772999955, 56.455267645000148 ], [ -133.847808397999927, 56.450628973000121 ], [ -133.825754360999923, 56.442206122000172 ], [ -133.845204230999911, 56.434393622000172 ], [ -133.887847459999932, 56.44009023600016 ], [ -133.908924933999856, 56.434800523 ], [ -133.897368943999936, 56.424302476000108 ], [ -133.883534308999941, 56.418443101000079 ], [ -133.875355597999942, 56.410589911 ], [ -133.880970831999946, 56.393784898 ], [ -133.887847459999932, 56.39264557500006 ], [ -133.898793097999913, 56.394476630000113 ], [ -133.909575975999928, 56.390814520000063 ], [ -133.916371222999942, 56.373358466000113 ], [ -133.859364386999943, 56.359116929000024 ], [ -133.843739386999857, 56.349107164000102 ], [ -133.841623501999834, 56.337591864000089 ], [ -133.853586391999897, 56.310492255000057 ], [ -133.847482876999891, 56.298244533000101 ], [ -133.868967251999919, 56.284735419000114 ], [ -133.898752407999922, 56.306341864000117 ], [ -133.930246548999946, 56.339300848000093 ], [ -133.956695115999935, 56.35968659100017 ], [ -133.972523566999939, 56.360500393000095 ], [ -133.97508704299986, 56.351385809000092 ], [ -133.971913214999915, 56.336167710000112 ], [ -133.970366990999935, 56.318752346000124 ], [ -133.975941535999937, 56.296210028000147 ], [ -133.981271938999924, 56.283880927000112 ], [ -133.978505011999857, 56.278753973 ], [ -133.959828253999888, 56.277777411000116 ], [ -133.923085089999915, 56.280829169000029 ], [ -133.908111131999959, 56.276353257000054 ], [ -133.891916469999899, 56.229803778000033 ], [ -133.895578579999864, 56.219956773000106 ], [ -133.943837042999888, 56.21198151200015 ], [ -133.94469153599988, 56.201605536000059 ], [ -133.92625891799986, 56.173488674000154 ], [ -133.920236782999865, 56.166896877000099 ], [ -133.916167772999898, 56.159002997000115 ], [ -133.919504360999923, 56.150539455000072 ], [ -133.93773352799991, 56.137030341000084 ], [ -133.940988735999838, 56.130194403000175 ], [ -133.935617641999897, 56.11945221600017 ], [ -133.941477016999841, 56.103094794000143 ], [ -133.949126756999959, 56.092352606000034 ], [ -133.961252407999865, 56.086493231000091 ], [ -133.980336066999939, 56.084662177000112 ], [ -133.993967251999891, 56.087876695000077 ], [ -134.030506964999915, 56.104722398000078 ], [ -134.03929602799991, 56.112616278000147 ], [ -134.036691860999895, 56.1231957050001 ], [ -134.00926673099994, 56.185126044000171 ], [ -134.017241990999906, 56.196966864000117 ], [ -134.030100063999924, 56.207220770000148 ], [ -134.03929602799991, 56.216294664000046 ], [ -134.037993943999908, 56.238714911000059 ], [ -134.031849738999938, 56.274562893000066 ], [ -134.032582160999937, 56.306830145 ], [ -134.052316860999895, 56.318752346000124 ], [ -134.069081183999913, 56.302801825000031 ], [ -134.067697719999927, 56.273993231000091 ], [ -134.072417772999927, 56.248602606000176 ], [ -134.107533331999889, 56.242987372000172 ], [ -134.090240037999905, 56.192694403000118 ], [ -134.121978318999965, 56.179754950000117 ], [ -134.167103644999941, 56.182114976000079 ], [ -134.190093553999901, 56.178127346000096 ], [ -134.162180141999869, 56.139960028000118 ], [ -134.150624152999939, 56.136948960000112 ], [ -134.145415818999936, 56.139960028000118 ], [ -134.140980597999942, 56.144842841000084 ], [ -134.131174282999837, 56.147406317 ], [ -134.103586391999926, 56.140285549000126 ], [ -134.099720831999917, 56.123846747000144 ], [ -134.100453253999945, 56.105292059000035 ], [ -134.086415167999917, 56.092189846000068 ], [ -134.091949022999927, 56.082709052000084 ], [ -134.100493943999936, 56.076076565 ], [ -134.121205206999946, 56.064846096000011 ], [ -134.107980923999889, 56.053045966000028 ], [ -134.100982225999928, 56.032294012000037 ], [ -134.102406378999888, 56.01072825700011 ], [ -134.114369269999941, 55.996568101000108 ], [ -134.129383917999945, 55.999457098000121 ], [ -134.148589647999927, 56.011664130000113 ], [ -134.157541469999927, 56.028143622000087 ], [ -134.141672329999892, 56.043768622000172 ], [ -134.163238084999932, 56.053615627000013 ], [ -134.210682745999918, 56.06281159100017 ], [ -134.224232550999886, 56.078517971000124 ], [ -134.210031704999892, 56.087225653000033 ], [ -134.207753058999913, 56.098578192 ], [ -134.216216600999957, 56.10838450700011 ], [ -134.234201626999891, 56.112616278000147 ], [ -134.236887173999946, 56.11810944200009 ], [ -134.225412563999924, 56.130194403000175 ], [ -134.200062628999888, 56.150539455000072 ], [ -134.197173631999959, 56.162054755000028 ], [ -134.212717251999891, 56.168361721000153 ], [ -134.231271938999896, 56.170111395000148 ], [ -134.23729407499988, 56.167914130000057 ], [ -134.247303839999859, 56.178371486000131 ], [ -134.250111456999917, 56.188177802000055 ], [ -134.251535610999895, 56.216294664000046 ], [ -134.255197719999927, 56.228461005000142 ], [ -134.263050910999937, 56.246283270000035 ], [ -134.264556443999965, 56.260402736000131 ], [ -134.257232225999957, 56.271633205000128 ], [ -134.22476152299987, 56.257635809000178 ], [ -134.217396613999881, 56.267238674000069 ], [ -134.217193162999934, 56.282294012000179 ], [ -134.214670376999919, 56.291327216000084 ], [ -134.206654425999943, 56.297593492000047 ], [ -134.190093553999901, 56.304429429000052 ], [ -134.164418097999942, 56.306097723000065 ], [ -134.160064256999931, 56.31240469 ], [ -134.169585740999935, 56.332342841000084 ], [ -134.184071417999917, 56.326157945000134 ], [ -134.231068488999938, 56.311916408000044 ], [ -134.244618292999888, 56.301499742000132 ], [ -134.251535610999895, 56.298244533000101 ], [ -134.262115037999934, 56.295314846000068 ], [ -134.272084113999938, 56.293890692 ], [ -134.281971808999941, 56.294663804000109 ], [ -134.292551235999895, 56.298244533000101 ], [ -134.292551235999895, 56.304429429000052 ], [ -134.259917772999927, 56.315904039000102 ], [ -134.265980597999942, 56.330552476000108 ], [ -134.282704230999855, 56.346625067 ], [ -134.281971808999941, 56.362779039000046 ], [ -134.270171678999958, 56.365708726000079 ], [ -134.237700975999871, 56.365545966000113 ], [ -134.231068488999938, 56.369614976000079 ], [ -134.239165818999936, 56.404486395 ], [ -134.23729407499988, 56.41429271000014 ], [ -134.228423631999931, 56.420233466000141 ], [ -134.218495245999918, 56.416734117000075 ], [ -134.20767167899993, 56.410549221000011 ], [ -134.19627844999988, 56.408107815000065 ], [ -134.180409308999941, 56.412502346000153 ], [ -134.177235480999883, 56.418687242000104 ], [ -134.180246548999975, 56.427232164000046 ], [ -134.182687954999921, 56.438544012000122 ], [ -134.17837480399993, 56.441351630000085 ], [ -134.169016079999892, 56.434637762000122 ], [ -134.159575975999957, 56.423000393000038 ], [ -134.155344204999835, 56.411200262000065 ], [ -134.155344204999835, 56.365912177000112 ], [ -134.146229620999947, 56.373683986000131 ], [ -134.114369269999941, 56.393784898 ], [ -134.115386522999898, 56.396063544000143 ], [ -134.116322394999969, 56.400946356000119 ], [ -134.113636847999885, 56.405829169000086 ], [ -134.104115363999881, 56.408107815000065 ], [ -134.080230272999927, 56.400620835 ], [ -134.069488084999932, 56.389593817000147 ], [ -134.060373501999919, 56.375921942000033 ], [ -134.050892706999917, 56.367743231000091 ], [ -134.03929602799991, 56.373358466000113 ], [ -134.036000128999945, 56.383042710000055 ], [ -134.036040818999936, 56.409613348000036 ], [ -134.031849738999938, 56.42112864800005 ], [ -134.040923631999931, 56.432806708000143 ], [ -134.060414191999911, 56.448065497000115 ], [ -134.066558397999898, 56.462103583000058 ], [ -134.067372199999909, 56.477606512000179 ], [ -134.061594204999835, 56.484320380000113 ], [ -134.049549933999913, 56.483384507000139 ], [ -134.031849738999938, 56.475734768 ], [ -134.034413214999915, 56.485907294000143 ], [ -134.039784308999884, 56.497300523000106 ], [ -134.047189907999893, 56.506659247000144 ], [ -134.056019660999937, 56.510484117000075 ], [ -134.059478318999936, 56.515285549000154 ], [ -134.064198370999918, 56.537502346000039 ], [ -134.066558397999898, 56.544663804000052 ], [ -134.081776495999861, 56.551581122000144 ], [ -134.092640753999945, 56.535956122000172 ], [ -134.104115363999881, 56.512844143000123 ], [ -134.121205206999946, 56.496893622000115 ], [ -134.139149542999888, 56.498724677 ], [ -134.155669725999957, 56.512355861000131 ], [ -134.172230597999942, 56.530178127000013 ], [ -134.190093553999901, 56.544663804000052 ], [ -134.218006964999944, 56.556789455000157 ], [ -134.246937628999945, 56.563381252000127 ], [ -134.276478644999912, 56.564032294000171 ], [ -134.30614173099994, 56.558294989 ], [ -134.30614173099994, 56.565130927000112 ], [ -134.227609829999921, 56.607407945000048 ], [ -134.184071417999917, 56.615912177000084 ], [ -134.159535285999965, 56.629950262000122 ], [ -134.141672329999892, 56.633978583 ], [ -134.10610917899993, 56.628973700000145 ], [ -134.093332485999895, 56.631537177000055 ], [ -134.086415167999917, 56.647040106000148 ], [ -134.116810675999943, 56.653794664000102 ], [ -134.144032355999855, 56.651922919000057 ], [ -134.224720831999974, 56.623683986000074 ], [ -134.246896938999868, 56.620103257000025 ], [ -134.266021287999934, 56.626857815000122 ], [ -134.285715298999946, 56.647040106000148 ], [ -134.263498501999919, 56.655422268000123 ], [ -134.241281704999864, 56.656073309000178 ], [ -134.224232550999886, 56.661688544000171 ], [ -134.217396613999881, 56.684881903000118 ], [ -134.222727016999841, 56.694403387000094 ], [ -134.234486456999946, 56.696966864000117 ], [ -134.246245897999927, 56.695379950000174 ], [ -134.251535610999895, 56.692084052000141 ], [ -134.253570115999906, 56.676336981000091 ], [ -134.259877081999946, 56.670599677000112 ], [ -134.306752081999889, 56.665757554000137 ], [ -134.333973761999914, 56.668361721000124 ], [ -134.357574022999927, 56.67658112200003 ], [ -134.367583787999934, 56.692084052000141 ], [ -134.391835089999915, 56.719061591000113 ], [ -134.397084113999881, 56.72955963700015 ], [ -134.395130988999938, 56.741644598000065 ], [ -134.388091600999871, 56.756903387000037 ], [ -134.391184048999946, 56.780096747000172 ], [ -134.405384894999969, 56.819769598 ], [ -134.408558722999942, 56.842922268000123 ], [ -134.405669725999928, 56.852687893000066 ], [ -134.398304816999911, 56.860256252000127 ], [ -134.388498501999891, 56.865057684000121 ], [ -134.378163214999887, 56.866848049000012 ], [ -134.361154751999919, 56.863592841000141 ], [ -134.350982225999957, 56.855414130000142 ], [ -134.333485480999911, 56.832017320000077 ], [ -134.300648566999911, 56.803412177000084 ], [ -134.280873175999886, 56.792792059000035 ], [ -134.272043423999946, 56.801581122000115 ], [ -134.277211066999939, 56.821356512000037 ], [ -134.289784308999913, 56.83478424700003 ], [ -134.305287238999938, 56.846258856000148 ], [ -134.319203253999916, 56.859930731000091 ], [ -134.328236456999946, 56.888739325000031 ], [ -134.30614173099994, 56.897894598000036 ], [ -134.234201626999891, 56.894110419000086 ], [ -134.220326300999886, 56.889960028000147 ], [ -134.182687954999921, 56.859930731000091 ], [ -134.166818813999896, 56.853989976000079 ], [ -134.146555141999897, 56.848944403000061 ], [ -134.125559048999946, 56.846014716000028 ], [ -134.107533331999889, 56.846340236000131 ], [ -134.107533331999889, 56.853094794000086 ], [ -134.121937628999973, 56.862005927000112 ], [ -134.141428188999868, 56.884955145 ], [ -134.155344204999835, 56.894110419000086 ], [ -134.197132941999968, 56.900336005000057 ], [ -134.213449673999889, 56.90713125200007 ], [ -134.210560675999943, 56.922023830000128 ], [ -134.223459438999896, 56.929022528000118 ], [ -134.264556443999965, 56.941880601000136 ], [ -134.239613410999937, 56.941148179000109 ], [ -134.175852016999897, 56.922023830000128 ], [ -134.1283259759999, 56.917059637000179 ], [ -134.10594641799986, 56.9122582050001 ], [ -134.086415167999917, 56.900336005000057 ], [ -134.051747199999909, 56.895209052000141 ], [ -134.012684699999852, 56.885158596000068 ], [ -133.98668372299997, 56.865627346000096 ] ] ], [ [ [ -133.764637824999852, 57.076808986000017 ], [ -133.671945766999897, 57.060248114000146 ], [ -133.582875128999916, 57.050034898000106 ], [ -133.545806443999908, 57.038072007000082 ], [ -133.49058997299997, 57.031236070000048 ], [ -133.464711066999968, 57.024562893 ], [ -133.413482225999928, 57.003322658000016 ], [ -133.388172980999883, 56.997137762000065 ], [ -133.335113084999961, 56.99738190300009 ], [ -133.315907355999911, 56.990871486000103 ], [ -133.298736131999874, 56.969183661000116 ], [ -133.2904353509999, 56.950751044000086 ], [ -133.279896613999938, 56.933335679000109 ], [ -133.263254360999895, 56.925279038999989 ], [ -133.236724412999934, 56.935044664000102 ], [ -133.275257941999911, 56.966253973 ], [ -133.293283657999837, 56.988348700000174 ], [ -133.298736131999874, 57.010199286000116 ], [ -133.239125128999973, 56.996405341000028 ], [ -133.109120245999861, 56.998724677000084 ], [ -133.052357550999886, 56.982855536000059 ], [ -133.043324347999885, 56.965806382 ], [ -133.025217251999891, 56.950506903000033 ], [ -133.002674933999913, 56.939357815000122 ], [ -132.980376756999931, 56.935044664000102 ], [ -132.969960089999859, 56.92597077000012 ], [ -132.955922003999916, 56.905096747000144 ], [ -132.935658331999889, 56.866848049000012 ], [ -132.937001105999911, 56.850287177000141 ], [ -132.9486384759999, 56.83462148600016 ], [ -132.966664191999939, 56.822943427000055 ], [ -132.987172003999973, 56.818426825000117 ], [ -132.991078253999973, 56.808417059000121 ], [ -132.979237433999913, 56.786810614000117 ], [ -132.956166144999941, 56.756903387000037 ], [ -132.952748175999943, 56.746730861000103 ], [ -132.949086066999882, 56.709051825000117 ], [ -132.950835740999878, 56.701971747000144 ], [ -132.949330206999946, 56.695461330000157 ], [ -132.946197068999965, 56.691066799000069 ], [ -132.94163977799991, 56.687648830000072 ], [ -132.937489386999886, 56.683823960000055 ], [ -132.935658331999889, 56.678127346000068 ], [ -132.933949347999885, 56.641587632000139 ], [ -132.941395636999886, 56.626532294000114 ], [ -132.963002081999974, 56.612941799000154 ], [ -132.973500128999945, 56.609442450000174 ], [ -132.999175584999904, 56.605536200000174 ], [ -133.010812954999892, 56.606105861000131 ], [ -133.024647589999915, 56.612738348 ], [ -133.050119594999899, 56.635321356000176 ], [ -133.062001105999855, 56.640204169000143 ], [ -133.085560675999915, 56.646144924000069 ], [ -133.110910610999838, 56.660589911000116 ], [ -133.185658331999946, 56.721625067 ], [ -133.198109503999945, 56.736761786 ], [ -133.207427537999905, 56.770941473 ], [ -133.218413865999963, 56.787665106000034 ], [ -133.233631964999944, 56.801906643000123 ], [ -133.25035559799997, 56.812201239000146 ], [ -133.257883266999841, 56.80068594 ], [ -133.275990363999938, 56.80463288 ], [ -133.331288214999944, 56.834377346000011 ], [ -133.346424933999941, 56.837591864000061 ], [ -133.350738084999932, 56.832261460000026 ], [ -133.323638475999928, 56.799058335 ], [ -133.322417772999898, 56.786688544000143 ], [ -133.325754360999923, 56.775620835000112 ], [ -133.326730923999889, 56.763739325000145 ], [ -133.319691535999937, 56.75023021 ], [ -133.305083787999905, 56.735419012000122 ], [ -133.286732550999943, 56.727118231000034 ], [ -133.268381313999896, 56.73305898600016 ], [ -133.251047329999921, 56.742743231000119 ], [ -133.234364386999886, 56.742010809000092 ], [ -133.221791144999884, 56.731634833 ], [ -133.216867641999926, 56.712225653000175 ], [ -133.216867641999926, 56.678127346000068 ], [ -133.220855272999898, 56.67011139500012 ], [ -133.239125128999973, 56.657375393000066 ], [ -133.244130011999914, 56.647040106000148 ], [ -133.242339647999927, 56.634100653000147 ], [ -133.235218878999973, 56.63556549700003 ], [ -133.227447068999879, 56.642767645000063 ], [ -133.223703579999835, 56.647040106000148 ], [ -133.212635870999918, 56.646389065000122 ], [ -133.192250128999916, 56.641424872000172 ], [ -133.161936001999834, 56.63808828300013 ], [ -133.132883266999869, 56.63165924700003 ], [ -133.107085740999935, 56.62099844 ], [ -133.093373175999886, 56.606105861000131 ], [ -133.107004360999838, 56.59870026200015 ], [ -133.120025193999936, 56.605047919000086 ], [ -133.135894334999961, 56.609849351000079 ], [ -133.15269934799997, 56.612738348 ], [ -133.168446417999917, 56.612941799000154 ], [ -133.168446417999917, 56.606105861000131 ], [ -133.114084438999896, 56.593003648000078 ], [ -133.100738084999904, 56.585638739000089 ], [ -133.09390214799987, 56.57367584800015 ], [ -133.086984829999892, 56.543646552 ], [ -133.079090949999909, 56.530340887000179 ], [ -133.134348110999923, 56.530340887000179 ], [ -133.124419725999928, 56.51072825700011 ], [ -133.123850063999839, 56.491766669000114 ], [ -133.131906704999892, 56.475002346000096 ], [ -133.147938605999883, 56.462103583000058 ], [ -133.160023566999882, 56.457709052 ], [ -133.172963019999884, 56.455755927000141 ], [ -133.199533657999837, 56.455267645000148 ], [ -133.223703579999835, 56.462103583000058 ], [ -133.228871222999942, 56.465521552000084 ], [ -133.233021613999881, 56.470119533000016 ], [ -133.236683722999942, 56.475734768 ], [ -133.26431230399993, 56.479071356000034 ], [ -133.319976365999963, 56.471991278000175 ], [ -133.346587693999908, 56.475734768 ], [ -133.357899542999888, 56.48379140800013 ], [ -133.36266028599988, 56.49298737200003 ], [ -133.369048631999902, 56.500555731000148 ], [ -133.385080532999893, 56.503648179000052 ], [ -133.435943162999934, 56.503648179000052 ], [ -133.426625128999973, 56.49876536699999 ], [ -133.418853318999879, 56.492661851 ], [ -133.412831183999884, 56.485093492000047 ], [ -133.408599412999934, 56.475734768 ], [ -133.429310675999943, 56.475083726000079 ], [ -133.422474738999938, 56.463609117000104 ], [ -133.441314256999874, 56.453802802 ], [ -133.527170376999919, 56.439032294000114 ], [ -133.621245897999927, 56.442206122000172 ], [ -133.659413214999915, 56.46417877800009 ], [ -133.654164191999939, 56.556708075000174 ], [ -133.689198370999918, 56.571966864000146 ], [ -133.679432745999861, 56.584051825000145 ], [ -133.646066860999895, 56.592596747000172 ], [ -133.634592251999862, 56.606105861000131 ], [ -133.654652472999913, 56.605536200000174 ], [ -133.659047003999888, 56.614732164000046 ], [ -133.658029751999834, 56.628241278000118 ], [ -133.661854620999947, 56.640204169000143 ], [ -133.674224412999877, 56.648260809000178 ], [ -133.685861782999893, 56.65253327 ], [ -133.695668097999913, 56.659369208000115 ], [ -133.702870245999947, 56.674994208 ], [ -133.701527472999942, 56.694647528000147 ], [ -133.692982550999943, 56.711249091000113 ], [ -133.687855597999942, 56.730129299000126 ], [ -133.69664466099988, 56.756903387000037 ], [ -133.68211829299986, 56.759588934000121 ], [ -133.677316860999866, 56.765285549000012 ], [ -133.679432745999861, 56.772853908000158 ], [ -133.68578040299991, 56.781154690000122 ], [ -133.692697719999899, 56.792792059000035 ], [ -133.688954230999883, 56.798773505000057 ], [ -133.677642381999874, 56.798325914000074 ], [ -133.661854620999947, 56.791083075000031 ], [ -133.670033331999946, 56.813421942000062 ], [ -133.673085089999944, 56.837347723000121 ], [ -133.679269985999895, 56.853705145000148 ], [ -133.69664466099988, 56.853094794000086 ], [ -133.697580532999893, 56.849554755 ], [ -133.695912238999938, 56.836004950000031 ], [ -133.69664466099988, 56.832017320000077 ], [ -133.702056443999936, 56.829413153000147 ], [ -133.71532141799986, 56.825506903000147 ], [ -133.720570441999939, 56.822088934000149 ], [ -133.729237433999856, 56.814642645000092 ], [ -133.740589972999942, 56.808905341000113 ], [ -133.75291907499988, 56.807318427000084 ], [ -133.764963344999899, 56.812201239000146 ], [ -133.751291469999842, 56.818426825000117 ], [ -133.751291469999842, 56.825832424000097 ], [ -133.766509568999936, 56.824937242000104 ], [ -133.781239386999914, 56.826564846000124 ], [ -133.794789191999882, 56.83112213700015 ], [ -133.806507941999968, 56.839504299000126 ], [ -133.803700324999909, 56.843329169000143 ], [ -133.79906165299991, 56.853094794000086 ], [ -133.811879035999937, 56.85252513200011 ], [ -133.820139126999919, 56.855414130000142 ], [ -133.822906053999873, 56.862250067000062 ], [ -133.819569464999944, 56.872992255000085 ], [ -133.836333787999962, 56.87189362200003 ], [ -133.850331183999913, 56.868150132 ], [ -133.863433397999898, 56.867743231000091 ], [ -133.877552863999938, 56.876410223000093 ], [ -133.890451626999834, 56.893377997000144 ], [ -133.888172980999883, 56.901434637000094 ], [ -133.876535610999866, 56.902899481000148 ], [ -133.861154751999919, 56.900336005000057 ], [ -133.79552161399991, 56.881496486000017 ], [ -133.763010219999842, 56.880072333000143 ], [ -133.737619594999899, 56.894110419000086 ], [ -133.754953579999892, 56.900580145 ], [ -133.839182094999899, 56.919501044000114 ], [ -133.888417120999918, 56.955511786000088 ], [ -134.018177863999881, 57.017564195000105 ], [ -134.018177863999881, 57.023830471000068 ], [ -134.01317298099994, 57.029242255000113 ], [ -134.011219855999911, 57.03611888200011 ], [ -134.011341925999943, 57.055161851000108 ], [ -134.004383917999888, 57.063666083000058 ], [ -133.988107876999834, 57.066473700000088 ], [ -133.95641028599988, 57.065375067000062 ], [ -133.945383266999926, 57.066880601000108 ], [ -133.9330134759999, 57.070746161000116 ], [ -133.921457485999895, 57.076320705000043 ], [ -133.912668423999889, 57.082749742000132 ], [ -133.900705532999893, 57.089341539000102 ], [ -133.887033657999837, 57.090033270000148 ], [ -133.764637824999852, 57.076808986000017 ] ] ], [ [ [ -153.180856899999867, 57.174994208 ], [ -153.212351040999891, 57.133693752000127 ], [ -153.154408331999889, 57.164536851000108 ], [ -153.123768683999913, 57.170599677000027 ], [ -153.10106360599994, 57.179754950000088 ], [ -153.089466925999943, 57.181463934000092 ], [ -153.079660610999895, 57.17910390800013 ], [ -153.068470831999889, 57.170355536000059 ], [ -153.058420376999919, 57.168443101000108 ], [ -152.979237433999941, 57.17641836100016 ], [ -152.952259894999884, 57.174627997000172 ], [ -152.933664516999897, 57.162054755000085 ], [ -152.920277472999885, 57.157945054000137 ], [ -152.907866990999878, 57.164740302000055 ], [ -152.899973110999895, 57.164740302000055 ], [ -152.888742641999897, 57.158840236000046 ], [ -152.884510870999861, 57.149969794000171 ], [ -152.910511847999942, 57.13190338700015 ], [ -152.926136847999942, 57.125962632000139 ], [ -153.006906704999949, 57.113836981000034 ], [ -153.01593990799995, 57.117499091000084 ], [ -153.020130988999881, 57.123358466000056 ], [ -153.024606899999924, 57.127875067 ], [ -153.034250454999892, 57.127427476 ], [ -153.059030727999868, 57.11469147300015 ], [ -153.083363410999937, 57.098374742000104 ], [ -153.11078854099992, 57.088812567000119 ], [ -153.144724087999947, 57.096136786000145 ], [ -153.159535285999937, 57.097113348 ], [ -153.194081183999913, 57.08295319200009 ], [ -153.20921790299991, 57.079046942 ], [ -153.215646938999924, 57.072211005000085 ], [ -153.218739386999914, 57.057033596000096 ], [ -153.219797329999892, 57.034654039000074 ], [ -153.235585089999915, 57.009833075000117 ], [ -153.27216549399995, 56.998521226000136 ], [ -153.313221808999941, 56.997626044000029 ], [ -153.342722133999928, 57.003973700000145 ], [ -153.32555091099988, 57.022040106000176 ], [ -153.322214321999866, 57.023830471000068 ], [ -153.326852993999893, 57.031724351000051 ], [ -153.333688930999926, 57.035711981000119 ], [ -153.342722133999928, 57.038072007000082 ], [ -153.341379360999952, 57.05292389500012 ], [ -153.331898566999939, 57.059881903000033 ], [ -153.321156378999916, 57.06464264500012 ], [ -153.316029425999886, 57.072821356000034 ], [ -153.32909094999988, 57.080023505000057 ], [ -153.359364386999857, 57.068508205000128 ], [ -153.391835089999859, 57.06073639500012 ], [ -153.411610480999883, 57.079046942 ], [ -153.395130988999881, 57.08331940300009 ], [ -153.362172003999916, 57.096747137000094 ], [ -153.338327602999925, 57.10175202000012 ], [ -153.338612433999884, 57.106675523000021 ], [ -153.344593878999888, 57.111517645000092 ], [ -153.353586391999897, 57.113836981000034 ], [ -153.361683722999942, 57.112250067 ], [ -153.379953579999892, 57.106390692000062 ], [ -153.391102667999917, 57.106390692000062 ], [ -153.378977016999926, 57.117621161000059 ], [ -153.342722133999928, 57.141099351000136 ], [ -153.309763149999952, 57.170314846000068 ], [ -153.298329230999911, 57.174627997000172 ], [ -153.290760870999947, 57.178656317000147 ], [ -153.270130988999938, 57.19822825700011 ], [ -153.260487433999856, 57.205633856000091 ], [ -153.244374152999882, 57.211004950000145 ], [ -153.229237433999884, 57.210638739000146 ], [ -153.221140102999954, 57.203517971000096 ], [ -153.22602291599992, 57.188299872000115 ], [ -153.187326626999891, 57.185003973000065 ], [ -153.180856899999867, 57.174994208 ] ] ], [ [ [ -170.136789516999897, 57.224554755000113 ], [ -170.145375128999888, 57.209418036000116 ], [ -170.149525519999941, 57.205755927000084 ], [ -170.154245571999923, 57.199896552000112 ], [ -170.158029751999862, 57.192572333000115 ], [ -170.162180141999897, 57.174790757000139 ], [ -170.168568488999938, 57.16901276200015 ], [ -170.203073696999923, 57.154364325000145 ], [ -170.25523841099988, 57.141099351000136 ], [ -170.254099087999919, 57.129299221000068 ], [ -170.262806769999912, 57.118882554000081 ], [ -170.276437954999949, 57.110988674000012 ], [ -170.289987758999928, 57.106390692000062 ], [ -170.275339321999923, 57.127142645000063 ], [ -170.272206183999941, 57.136542059000178 ], [ -170.275705532999922, 57.147935289000046 ], [ -170.281727667999917, 57.147609768000123 ], [ -170.319894985999895, 57.154689846000096 ], [ -170.347279425999886, 57.14736562700007 ], [ -170.365956183999941, 57.1485863300001 ], [ -170.385202602999897, 57.15355052300005 ], [ -170.399240688999953, 57.161037502000013 ], [ -170.407093878999916, 57.171128648 ], [ -170.412098761999857, 57.184800523000106 ], [ -170.409901495999861, 57.196844794000029 ], [ -170.396107550999886, 57.201971747000144 ], [ -170.358265753999916, 57.201971747000144 ], [ -170.34788977799991, 57.204250393000038 ], [ -170.333119269999941, 57.214016018000152 ], [ -170.323801235999895, 57.216253973000121 ], [ -170.262806769999912, 57.214016018000152 ], [ -170.241566535999937, 57.216253973000121 ], [ -170.147409633999928, 57.234076239000117 ], [ -170.135690883999928, 57.242743231000119 ], [ -170.123036261999857, 57.2501488300001 ], [ -170.104440883999956, 57.250392971000124 ], [ -170.113352016999897, 57.239894924000069 ], [ -170.136789516999897, 57.224554755000113 ] ] ], [ [ [ -135.568714972999942, 57.241197007000082 ], [ -135.553781704999892, 57.229925848000065 ], [ -135.570871548999861, 57.222967841000084 ], [ -135.591053839999887, 57.224310614000089 ], [ -135.628244594999899, 57.236721096000011 ], [ -135.614369269999884, 57.223578192000147 ], [ -135.606271938999868, 57.209458726000108 ], [ -135.602447068999936, 57.192775783000073 ], [ -135.601551886999857, 57.171576239000089 ], [ -135.595570441999939, 57.154608466000113 ], [ -135.580881313999839, 57.148138739 ], [ -135.562733527999939, 57.145819403000033 ], [ -135.546294725999928, 57.141099351000136 ], [ -135.565012173999918, 57.112290757 ], [ -135.601633266999841, 57.035549221000153 ], [ -135.628244594999899, 57.010199286000116 ], [ -135.642079230999883, 57.008205471000096 ], [ -135.674183722999942, 57.01170482 ], [ -135.686879035999908, 57.007025458000058 ], [ -135.696685350999928, 57.001044012000037 ], [ -135.707508917999917, 56.998439846000153 ], [ -135.841135219999899, 56.989691473000065 ], [ -135.831532355999911, 57.050482489 ], [ -135.823150193999965, 57.079779364000117 ], [ -135.806996222999913, 57.099554755000142 ], [ -135.791371222999942, 57.106105861000131 ], [ -135.762074347999913, 57.11416250200007 ], [ -135.727202928999873, 57.142523505 ], [ -135.717518683999913, 57.153469143000066 ], [ -135.710804816999968, 57.168443101000108 ], [ -135.779693162999934, 57.165716864000117 ], [ -135.809722459999875, 57.173000393000152 ], [ -135.820668097999942, 57.195746161000088 ], [ -135.815052863999938, 57.207709052000112 ], [ -135.797718878999945, 57.228827216000028 ], [ -135.80016028599988, 57.236721096000011 ], [ -135.812408006999959, 57.23859284100017 ], [ -135.842355923999833, 57.226507880000057 ], [ -135.855376756999931, 57.223089911000059 ], [ -135.839222785999937, 57.245672919000029 ], [ -135.837513800999943, 57.255519924000154 ], [ -135.847971157999922, 57.264634507000139 ], [ -135.825266079999892, 57.284084377000127 ], [ -135.833973761999857, 57.306341864 ], [ -135.843739386999914, 57.324693101000051 ], [ -135.824086066999939, 57.33234284100017 ], [ -135.724761522999927, 57.328924872000144 ], [ -135.615223761999914, 57.284491278000147 ], [ -135.598622199999937, 57.271918036000059 ], [ -135.568714972999942, 57.241197007000082 ] ] ], [ [ [ -152.298183320999925, 57.363154677000026 ], [ -152.315124213999894, 57.363121231000108 ], [ -152.29993522399991, 57.374117520000183 ], [ -152.288188698999875, 57.396984506000123 ], [ -152.262730041999902, 57.390629629000117 ], [ -152.25592217499991, 57.384243442000084 ], [ -152.267743681999946, 57.375086879 ], [ -152.298183320999925, 57.363154677000026 ] ] ], [ [ [ -153.829294399999924, 57.451076565 ], [ -153.843576626999919, 57.436224677000141 ], [ -153.86778723899991, 57.45258209800015 ], [ -153.881459113999938, 57.476141669000086 ], [ -153.887074347999942, 57.494940497000144 ], [ -153.887806769999884, 57.508978583 ], [ -153.880360480999911, 57.515204169000143 ], [ -153.875843878999945, 57.521714585000055 ], [ -153.875721808999884, 57.533107815 ], [ -153.867909308999884, 57.543361721000124 ], [ -153.846750454999892, 57.540594794000171 ], [ -153.83149166599992, 57.525702216000028 ], [ -153.831776495999947, 57.509995835000055 ], [ -153.833811001999891, 57.502020575000117 ], [ -153.830677863999881, 57.485256252000099 ], [ -153.829294399999924, 57.451076565 ] ] ], [ [ [ -135.409779425999943, 57.448960679 ], [ -135.396066860999895, 57.442694403000033 ], [ -135.382923956999946, 57.445298570000134 ], [ -135.354562954999921, 57.462632554000109 ], [ -135.316517706999917, 57.478338934000178 ], [ -135.295033331999889, 57.481634833000115 ], [ -135.28563391799986, 57.472845770000063 ], [ -135.277414516999869, 57.461330471000124 ], [ -135.258290167999917, 57.466294663999989 ], [ -135.236643032999893, 57.477199611000131 ], [ -135.220773891999897, 57.483099677 ], [ -135.180287238999938, 57.48069896000014 ], [ -135.142241990999935, 57.469427802000055 ], [ -135.153309699999909, 57.452948309000149 ], [ -135.191232876999919, 57.443182684000121 ], [ -135.203684048999946, 57.428534247000115 ], [ -135.181996222999942, 57.436753648000106 ], [ -135.156239386999914, 57.44131094000015 ], [ -135.130279100999928, 57.441107489 ], [ -135.060373501999891, 57.422919012000122 ], [ -135.052845831999946, 57.418605861000017 ], [ -135.04515540299991, 57.411444403000147 ], [ -135.008127407999893, 57.403469143 ], [ -134.994781053999873, 57.397772528000033 ], [ -134.909494594999899, 57.339789130000057 ], [ -134.909494594999899, 57.33234284100017 ], [ -134.95246334499987, 57.342474677000112 ], [ -134.99819902299987, 57.34658437700007 ], [ -134.99819902299987, 57.339789130000057 ], [ -134.950428839999944, 57.325506903000147 ], [ -134.950428839999944, 57.319281317 ], [ -134.971058722999942, 57.312445380000085 ], [ -134.978830532999893, 57.306830145000092 ], [ -134.984527147999927, 57.298163153000175 ], [ -134.965972459999932, 57.29828522300015 ], [ -134.958322719999899, 57.300482489000146 ], [ -134.950428839999944, 57.305609442000062 ], [ -134.939076300999943, 57.299505927000084 ], [ -134.93297278599988, 57.291245835 ], [ -134.930409308999884, 57.280829169000086 ], [ -134.930002407999893, 57.26776764500012 ], [ -134.923491990999963, 57.259222723 ], [ -134.908680792999917, 57.256333726000079 ], [ -134.852853969999927, 57.260321356000034 ], [ -134.838978644999941, 57.257798570000134 ], [ -134.833119269999884, 57.246649481000091 ], [ -134.832834438999868, 57.232814846000011 ], [ -134.834055141999897, 57.221625067 ], [ -134.840240037999934, 57.215399481000034 ], [ -134.854847785999937, 57.216253973000121 ], [ -134.826161261999914, 57.197455145000092 ], [ -134.808257615999935, 57.181382554000109 ], [ -134.808257615999935, 57.164007880000113 ], [ -134.833119269999884, 57.141099351000136 ], [ -134.810658331999974, 57.133978583000086 ], [ -134.78648841099988, 57.117987372000172 ], [ -134.775380011999943, 57.098089911000088 ], [ -134.792144334999961, 57.079046942 ], [ -134.774525519999941, 57.07916901200015 ], [ -134.761219855999911, 57.072821356000034 ], [ -134.751576300999943, 57.062811591000141 ], [ -134.744984503999973, 57.05174388200011 ], [ -134.743316209999961, 57.043890692000119 ], [ -134.746815558999856, 57.03143952 ], [ -134.744984503999973, 57.023830471000068 ], [ -134.74071204299986, 57.021185614000089 ], [ -134.734486456999917, 57.020738023 ], [ -134.728260870999947, 57.01837799700003 ], [ -134.723866339999859, 57.010199286000116 ], [ -134.723947719999842, 56.99603913 ], [ -134.732533331999946, 56.976752020000063 ], [ -134.731312628999945, 56.962958075000145 ], [ -134.723540818999936, 56.952948309000178 ], [ -134.713734503999916, 56.94603099199999 ], [ -134.709339972999942, 56.937323309000092 ], [ -134.717681443999908, 56.922023830000128 ], [ -134.693592902999882, 56.908392645000092 ], [ -134.686187303999901, 56.893500067000119 ], [ -134.689768032999865, 56.849676825000174 ], [ -134.683176235999895, 56.835638739000117 ], [ -134.641346808999856, 56.797837632000082 ], [ -134.651926235999923, 56.778062242000047 ], [ -134.646148240999935, 56.765326239 ], [ -134.63304602799991, 56.755316473 ], [ -134.621490037999962, 56.743841864000061 ], [ -134.616118943999908, 56.728461005000113 ], [ -134.607818162999934, 56.595892645 ], [ -134.612456834999932, 56.565090236000131 ], [ -134.614613410999937, 56.558294989 ], [ -134.624175584999932, 56.547430731000119 ], [ -134.62828528599988, 56.548570054000052 ], [ -134.63219153599988, 56.556341864000061 ], [ -134.641346808999856, 56.565130927000112 ], [ -134.642567511999886, 56.5704613300001 ], [ -134.650298631999902, 56.582261460000055 ], [ -134.659006313999896, 56.588080145000035 ], [ -134.663075324999937, 56.575384833000058 ], [ -134.669260219999899, 56.537827867000047 ], [ -134.626047329999892, 56.486232815000093 ], [ -134.624908006999874, 56.472642320000134 ], [ -134.634999152999939, 56.455511786 ], [ -134.632679816999968, 56.439113674000097 ], [ -134.625559048999918, 56.424017645000092 ], [ -134.621490037999962, 56.411200262000065 ], [ -134.622466600999928, 56.390773830000072 ], [ -134.626454230999911, 56.372137762000179 ], [ -134.634755011999914, 56.355047919000143 ], [ -134.648793097999942, 56.339178778000118 ], [ -134.62759355399993, 56.330389716000141 ], [ -134.631743943999879, 56.309271552000141 ], [ -134.663075324999937, 56.257269598000065 ], [ -134.634632941999939, 56.269720770000092 ], [ -134.626372850999928, 56.261460679000024 ], [ -134.632964647999927, 56.24087148600016 ], [ -134.648793097999942, 56.216294664000046 ], [ -134.641346808999856, 56.208889065000065 ], [ -134.656239386999914, 56.17470937700007 ], [ -134.667469855999911, 56.170396226000079 ], [ -134.689768032999865, 56.181545315 ], [ -134.672596808999941, 56.205633856000119 ], [ -134.669260219999899, 56.216294664000046 ], [ -134.673736131999874, 56.219427802000112 ], [ -134.682932094999842, 56.229315497000059 ], [ -134.694650844999927, 56.233343817 ], [ -134.699574347999885, 56.23041413 ], [ -134.702219204999892, 56.225287177000084 ], [ -134.707142706999946, 56.222479559000121 ], [ -134.735707160999937, 56.217922268000066 ], [ -134.749989386999914, 56.217352606000119 ], [ -134.765492316999939, 56.222479559000121 ], [ -134.751210089999944, 56.236151434000149 ], [ -134.772124803999901, 56.237209377000013 ], [ -134.787342902999882, 56.244818427000055 ], [ -134.796498175999943, 56.257635809000178 ], [ -134.799631313999839, 56.274359442000119 ], [ -134.803374803999873, 56.281561591000141 ], [ -134.8119197259999, 56.284979559000149 ], [ -134.821197068999936, 56.287176825000145 ], [ -134.826975063999896, 56.290757554000109 ], [ -134.829172329999892, 56.29954661699999 ], [ -134.829213019999884, 56.30988190300009 ], [ -134.826975063999896, 56.325588283000158 ], [ -134.847564256999931, 56.329046942000062 ], [ -134.867502407999837, 56.32538483300003 ], [ -134.882435675999972, 56.329575914000046 ], [ -134.888335740999906, 56.356268622000144 ], [ -134.892201300999915, 56.361070054000052 ], [ -134.91144771999987, 56.376776434000121 ], [ -134.919097459999875, 56.380194403000033 ], [ -134.925689256999959, 56.385158596000068 ], [ -134.931019660999937, 56.396226304000109 ], [ -134.936838344999899, 56.41429271000014 ], [ -134.942372199999909, 56.421576239000146 ], [ -134.99819902299987, 56.472642320000134 ], [ -135.003895636999857, 56.490708726000051 ], [ -135.017893032999922, 56.509019273000106 ], [ -135.035715298999889, 56.525458075000117 ], [ -135.052845831999946, 56.537827867000047 ], [ -135.043446417999917, 56.539252020000035 ], [ -135.034535285999965, 56.542222398000135 ], [ -135.02635657499988, 56.546535549000126 ], [ -135.019357876999891, 56.552069403000147 ], [ -135.033273891999869, 56.560288804000052 ], [ -135.037505662999877, 56.56854889500012 ], [ -135.032622850999928, 56.576849677000112 ], [ -135.019357876999891, 56.585638739000089 ], [ -134.998361782999837, 56.58860911699999 ], [ -134.947010870999918, 56.587307033000101 ], [ -134.936838344999899, 56.595892645 ], [ -134.927601691999939, 56.620428778000033 ], [ -134.904855923999975, 56.646063544000086 ], [ -134.84740149599989, 56.688666083000143 ], [ -134.868560350999871, 56.688177802000055 ], [ -134.883778449999852, 56.685492255000085 ], [ -134.897084113999881, 56.678208726000051 ], [ -134.912587042999917, 56.664455471000124 ], [ -134.933705206999917, 56.639960028000118 ], [ -134.945871548999889, 56.630438544000114 ], [ -134.961008266999897, 56.626532294000114 ], [ -134.978627081999917, 56.631984768000152 ], [ -134.983713344999842, 56.644924221000153 ], [ -134.981597459999932, 56.660793361000074 ], [ -134.971913214999859, 56.692572333000115 ], [ -134.964466925999886, 56.702541408000044 ], [ -134.953358527999853, 56.709051825000117 ], [ -134.936838344999899, 56.715969143000038 ], [ -134.962635870999918, 56.721136786000116 ], [ -134.984730597999885, 56.714544989000146 ], [ -134.999989386999857, 56.69757721600017 ], [ -135.012318488999938, 56.650213934000035 ], [ -135.028472459999875, 56.631333726000108 ], [ -135.048410610999866, 56.616156317000119 ], [ -135.066517706999974, 56.606105861000131 ], [ -135.092762824999909, 56.597967841000028 ], [ -135.109771287999962, 56.601752020000148 ], [ -135.119007941999939, 56.61713288 ], [ -135.121734178999901, 56.64362213700015 ], [ -135.119496222999913, 56.662502346000096 ], [ -135.112212693999908, 56.678697007000139 ], [ -135.099354620999861, 56.693589585 ], [ -135.080189581999917, 56.708563544000029 ], [ -135.014271613999966, 56.739406643000095 ], [ -134.994781053999873, 56.753485419000029 ], [ -134.998850063999839, 56.761664130000142 ], [ -135.01463782499988, 56.771063544000171 ], [ -135.031809048999889, 56.775132554000109 ], [ -135.039784308999856, 56.767523505 ], [ -135.044992641999869, 56.759222723 ], [ -135.137033657999865, 56.694525458000086 ], [ -135.164133266999897, 56.685207424000126 ], [ -135.175770636999914, 56.679022528000147 ], [ -135.187896287999877, 56.676743882 ], [ -135.200550910999937, 56.684881903000118 ], [ -135.202259894999941, 56.69472890800013 ], [ -135.194081183999856, 56.702826239000061 ], [ -135.182932094999927, 56.709784247000144 ], [ -135.175770636999914, 56.715969143000038 ], [ -135.177357550999943, 56.725978908000101 ], [ -135.184437628999973, 56.734930731000034 ], [ -135.185536261999914, 56.741400458000115 ], [ -135.154693162999962, 56.745917059000178 ], [ -135.152088995999861, 56.751654364000061 ], [ -135.154855923999946, 56.760321356000148 ], [ -135.158924933999913, 56.792059637000094 ], [ -135.158680792999945, 56.800238348000036 ], [ -135.152740037999934, 56.80878327000012 ], [ -135.143299933999913, 56.815619208000058 ], [ -135.13540605399993, 56.819322007 ], [ -135.128529425999943, 56.823472398000135 ], [ -135.121734178999901, 56.832017320000077 ], [ -135.174224412999934, 56.826361395000063 ], [ -135.269276495999947, 56.789007880000113 ], [ -135.320952928999901, 56.797837632000082 ], [ -135.307362433999941, 56.820868231000034 ], [ -135.325672980999911, 56.825506903000147 ], [ -135.353342251999891, 56.824164130000085 ], [ -135.367543097999913, 56.828924872000172 ], [ -135.367787238999938, 56.874009507000139 ], [ -135.360259568999879, 56.887600002000099 ], [ -135.340891079999892, 56.879828192 ], [ -135.324574347999942, 56.890773830000157 ], [ -135.305897589999887, 56.890692450000174 ], [ -135.294504360999895, 56.892157294000143 ], [ -135.299916144999941, 56.907700914000046 ], [ -135.313791469999842, 56.92072174700003 ], [ -135.33421790299991, 56.93105703300013 ], [ -135.356271938999924, 56.938299872000144 ], [ -135.374989386999886, 56.941880601000136 ], [ -135.369048631999959, 56.943833726 ], [ -135.363758917999888, 56.94627513200011 ], [ -135.354562954999921, 56.955511786000088 ], [ -135.350005662999962, 56.970404364000117 ], [ -135.330881313999896, 56.97858307500006 ], [ -135.30894934799997, 56.982123114000117 ], [ -135.289377407999893, 56.982855536000059 ], [ -135.282338019999941, 56.98529694200009 ], [ -135.262928839999915, 56.996893622000115 ], [ -135.258900519999941, 57.000555731000148 ], [ -135.253977016999897, 57.003729559000121 ], [ -135.229562954999835, 57.004543361000131 ], [ -135.20335852799991, 57.013495184000149 ], [ -135.164051886999914, 57.013617255000142 ], [ -135.156564907999837, 57.020697333 ], [ -135.165353969999899, 57.041734117000132 ], [ -135.185902472999942, 57.045640367000132 ], [ -135.227609829999892, 57.038072007000082 ], [ -135.267933722999942, 57.039862372000144 ], [ -135.310292120999861, 57.047349351000136 ], [ -135.348133917999917, 57.063910223 ], [ -135.374989386999886, 57.092718817000119 ], [ -135.378163214999944, 57.128729559000092 ], [ -135.35024980399993, 57.149359442000119 ], [ -135.30760657499988, 57.158758856000063 ], [ -135.266428188999896, 57.161037502000013 ], [ -135.266428188999896, 57.168443101000108 ], [ -135.289662238999938, 57.174627997000172 ], [ -135.310129360999895, 57.177679755000057 ], [ -135.329172329999892, 57.176092841000028 ], [ -135.348296678999958, 57.168443101000108 ], [ -135.376861131999931, 57.150091864000146 ], [ -135.394154425999943, 57.14736562700007 ], [ -135.412912563999896, 57.157904364000146 ], [ -135.412587042999888, 57.169623114000117 ], [ -135.397694464999915, 57.182074286000145 ], [ -135.378285285999937, 57.191839911 ], [ -135.364409959999932, 57.195746161000088 ], [ -135.364165818999879, 57.204046942000062 ], [ -135.334055141999869, 57.250392971000124 ], [ -135.412953253999888, 57.244777736000131 ], [ -135.429595506999931, 57.246649481000091 ], [ -135.455962693999936, 57.253322658000158 ], [ -135.481516079999835, 57.248968817000062 ], [ -135.506011522999955, 57.241034247000115 ], [ -135.529204881999902, 57.236721096000011 ], [ -135.542836066999939, 57.242987372000144 ], [ -135.577707485999895, 57.287909247000144 ], [ -135.639230923999833, 57.316839911000059 ], [ -135.648752407999837, 57.328924872000144 ], [ -135.673207160999965, 57.349676825000145 ], [ -135.674956834999961, 57.358628648 ], [ -135.662424282999893, 57.363755601000108 ], [ -135.645822719999899, 57.366197007000139 ], [ -135.604237433999913, 57.367743231000176 ], [ -135.485666469999899, 57.35101959800015 ], [ -135.475331183999856, 57.354315497000087 ], [ -135.471180792999917, 57.363592841000141 ], [ -135.478586391999897, 57.368312893000152 ], [ -135.525786912999877, 57.373928127000156 ], [ -135.56704667899993, 57.389471747000144 ], [ -135.585845506999874, 57.392564195000134 ], [ -135.608998175999943, 57.387600002000099 ], [ -135.602202928999901, 57.397894598 ], [ -135.591623501999862, 57.404974677000055 ], [ -135.550648566999939, 57.423773505000113 ], [ -135.547596808999941, 57.427435614000061 ], [ -135.547434048999889, 57.431789455000157 ], [ -135.540109829999892, 57.442206122000144 ], [ -135.533192511999886, 57.447211005 ], [ -135.516468878999945, 57.454413153000033 ], [ -135.508778449999909, 57.459540106000034 ], [ -135.504709438999868, 57.466498114000117 ], [ -135.506581183999913, 57.472357489000061 ], [ -135.510365363999938, 57.477728583000115 ], [ -135.512115037999934, 57.483099677 ], [ -135.512806769999884, 57.490464585000083 ], [ -135.517811652999939, 57.501613674000012 ], [ -135.519032355999855, 57.507310288999989 ], [ -135.515370245999918, 57.515611070000077 ], [ -135.506743943999879, 57.517767645000063 ], [ -135.496571417999945, 57.518011786 ], [ -135.488270636999857, 57.520982164000102 ], [ -135.436512824999852, 57.549994208 ], [ -135.381174282999865, 57.55361562700007 ], [ -135.327056443999879, 57.53839752800009 ], [ -135.279408331999889, 57.511053778000118 ], [ -135.310536261999914, 57.490871486000074 ], [ -135.381825324999909, 57.471340236000017 ], [ -135.409779425999943, 57.448960679 ] ] ], [ [ [ -152.422800258999928, 57.96426015800013 ], [ -152.42430579299986, 57.952093817000147 ], [ -152.417103644999941, 57.943996486000017 ], [ -152.416981574999852, 57.938869533000016 ], [ -152.422963019999884, 57.934312242000075 ], [ -152.417103644999941, 57.930365302000084 ], [ -152.388295050999886, 57.926499742000075 ], [ -152.360829230999855, 57.92674388200011 ], [ -152.355295376999948, 57.92597077 ], [ -152.34390214799987, 57.923325914000102 ], [ -152.336374477999925, 57.921698309000178 ], [ -152.325388149999952, 57.916001695000105 ], [ -152.330148891999954, 57.907456773 ], [ -152.356190558999913, 57.893947658000016 ], [ -152.360666469999899, 57.888902085000083 ], [ -152.369374152999882, 57.886419989000146 ], [ -152.38117428299995, 57.889227606000091 ], [ -152.397328253999916, 57.896063544000114 ], [ -152.485951300999886, 57.914536851000136 ], [ -152.504831508999928, 57.925726630000057 ], [ -152.492624477999954, 57.940619208 ], [ -152.483143683999941, 57.948472398 ], [ -152.487863735999952, 57.95026276200015 ], [ -152.489084438999896, 57.954006252000013 ], [ -152.490305141999897, 57.956691799000097 ], [ -152.492014126999891, 57.957220770000063 ], [ -152.49445553299995, 57.958197333000143 ], [ -152.492746548999946, 57.96157461100016 ], [ -152.483957485999952, 57.963120835 ], [ -152.474680141999897, 57.960882880000113 ], [ -152.463449673999889, 57.959540106000034 ], [ -152.432321743999921, 57.969183661 ], [ -152.422800258999928, 57.96426015800013 ] ] ], [ [ [ -153.260812954999892, 57.887844143000038 ], [ -153.22874915299991, 57.853908596000068 ], [ -153.212961391999954, 57.83030833500014 ], [ -153.212351040999891, 57.81268952 ], [ -153.224110480999883, 57.81159088700015 ], [ -153.281239386999943, 57.818915106000148 ], [ -153.283924933999913, 57.821437893000095 ], [ -153.287464972999913, 57.826361395000148 ], [ -153.292958136999943, 57.831040757000054 ], [ -153.301747199999909, 57.833197333000058 ], [ -153.319650844999956, 57.834540106000148 ], [ -153.327707485999895, 57.836411851000108 ], [ -153.335886196999923, 57.839422919000029 ], [ -153.331044074999909, 57.841294663999989 ], [ -153.327015753999859, 57.843736070000134 ], [ -153.32249915299991, 57.845851955000128 ], [ -153.316029425999886, 57.846869208 ], [ -153.325266079999864, 57.858628648 ], [ -153.342518683999856, 57.862250067000147 ], [ -153.380563930999955, 57.860500393000152 ], [ -153.396921352999868, 57.863836981000176 ], [ -153.522450324999909, 57.92096588700015 ], [ -153.541940883999928, 57.935614325000145 ], [ -153.528269008999871, 57.953192450000088 ], [ -153.506662563999896, 57.96979401200015 ], [ -153.482248501999948, 57.977769273000106 ], [ -153.460031704999892, 57.969712632000082 ], [ -153.432687954999892, 57.963568427 ], [ -153.326649542999945, 57.926581122000144 ], [ -153.279733852999897, 57.902899481000034 ], [ -153.260812954999892, 57.887844143000038 ] ] ], [ [ [ -152.764108852999925, 57.930080471000124 ], [ -152.785959438999896, 57.925523179 ], [ -152.809885219999927, 57.929103908000073 ], [ -152.827097133999928, 57.93695709800015 ], [ -152.852243618999921, 57.944077867000104 ], [ -152.86070716099988, 57.954657294000143 ], [ -152.853627081999917, 57.967433986000103 ], [ -152.833078579999892, 57.974595445000048 ], [ -152.753610805999955, 57.98065827000012 ], [ -152.74437415299991, 57.983832098 ], [ -152.730091925999886, 57.982245184000149 ], [ -152.729196743999921, 57.973863023000106 ], [ -152.739003058999941, 57.968573309000035 ], [ -152.74164791599992, 57.962591864000117 ], [ -152.739857550999943, 57.951646226000051 ], [ -152.747995571999951, 57.939154364000146 ], [ -152.764108852999925, 57.930080471000124 ] ] ], [ [ [ -153.012766079999892, 57.929103908000073 ], [ -152.993234829999892, 57.928778387000037 ], [ -153.004709438999953, 57.948553778000147 ], [ -152.982655402999853, 57.951483466000084 ], [ -152.862294074999909, 57.934515692000119 ], [ -152.831979946999923, 57.923651434000035 ], [ -152.808298305999898, 57.908270575000088 ], [ -152.854603644999884, 57.895453192000062 ], [ -152.87763424399995, 57.886175848 ], [ -152.890817837999919, 57.874172268000095 ], [ -152.872629360999895, 57.876044012000065 ], [ -152.856678839999915, 57.880316473000065 ], [ -152.856678839999915, 57.874172268000095 ], [ -152.893503383999871, 57.86041901200015 ], [ -152.903675910999937, 57.837591864000146 ], [ -152.904855923999946, 57.81159088700015 ], [ -152.92524166599992, 57.768255927 ], [ -152.915516730999911, 57.755764065000093 ], [ -152.899362758999928, 57.745794989 ], [ -152.890817837999919, 57.73330312700007 ], [ -152.885568813999924, 57.728705145000148 ], [ -152.873768683999941, 57.730169989 ], [ -152.862009243999864, 57.735012111000074 ], [ -152.856678839999915, 57.74042389500012 ], [ -152.85773678299995, 57.749945380000113 ], [ -152.862497524999952, 57.765529690000122 ], [ -152.86351477799991, 57.774237372000115 ], [ -152.858713344999927, 57.814398505000113 ], [ -152.843698696999923, 57.845282294000171 ], [ -152.817982550999886, 57.86041901200015 ], [ -152.780995245999918, 57.85370514500012 ], [ -152.766224738999938, 57.843410549000012 ], [ -152.754139777999939, 57.832464911000116 ], [ -152.741810675999886, 57.826890367000132 ], [ -152.726389126999948, 57.833197333000058 ], [ -152.713978644999941, 57.846869208 ], [ -152.698068813999896, 57.875718492000132 ], [ -152.685373501999948, 57.887844143000038 ], [ -152.668771938999896, 57.880804755000142 ], [ -152.635568813999896, 57.871568101 ], [ -152.623972133999956, 57.860500393000152 ], [ -152.612741665999948, 57.87490469 ], [ -152.61571204299986, 57.890448309000121 ], [ -152.626088019999884, 57.904730536000031 ], [ -152.636952277999853, 57.915106512000094 ], [ -152.624582485999923, 57.932847398000106 ], [ -152.607899542999888, 57.935044664000017 ], [ -152.590402798999946, 57.928900458000115 ], [ -152.575510219999899, 57.921332098000065 ], [ -152.570423956999946, 57.916164455000157 ], [ -152.565012173999889, 57.908433335000055 ], [ -152.558908657999922, 57.903225002000156 ], [ -152.551625128999888, 57.905218817 ], [ -152.542469855999911, 57.91152578300013 ], [ -152.532704230999883, 57.914455471000153 ], [ -152.506947394999941, 57.915106512000094 ], [ -152.486317511999914, 57.910711981000034 ], [ -152.472727016999954, 57.900336005000113 ], [ -152.460886196999923, 57.887844143000038 ], [ -152.445505337999862, 57.87726471600017 ], [ -152.428334113999938, 57.868068752000099 ], [ -152.422800258999928, 57.859279690000122 ], [ -152.426706508999928, 57.84845612200003 ], [ -152.438343878999916, 57.833197333000058 ], [ -152.421131964999915, 57.821966864000061 ], [ -152.402211066999882, 57.823472398000106 ], [ -152.382557745999918, 57.83323802300005 ], [ -152.363270636999914, 57.846869208 ], [ -152.356312628999888, 57.838202216000113 ], [ -152.348255988999881, 57.831691799000012 ], [ -152.33922278599988, 57.82746002800009 ], [ -152.329090949999909, 57.825751044000086 ], [ -152.357289191999882, 57.799017645000063 ], [ -152.458973761999943, 57.768133856000119 ], [ -152.49669348899991, 57.747259833000058 ], [ -152.535023566999939, 57.719794012000094 ], [ -152.551136847999913, 57.70331452000012 ], [ -152.541371222999885, 57.695990302000112 ], [ -152.520619269999884, 57.702622788999989 ], [ -152.498036261999914, 57.715887762000122 ], [ -152.473093227999868, 57.726019598000065 ], [ -152.46308346299989, 57.72288646 ], [ -152.468495245999918, 57.714016018000152 ], [ -152.465646938999896, 57.692328192000062 ], [ -152.46898352799991, 57.67869700700011 ], [ -152.476877407999893, 57.672023830000157 ], [ -152.486154751999948, 57.666083075000031 ], [ -152.49360104099992, 57.655096747000172 ], [ -152.467762824999909, 57.657171942 ], [ -152.420847133999956, 57.68195221600017 ], [ -152.397409633999899, 57.688544012000037 ], [ -152.415516730999911, 57.674953518000095 ], [ -152.428293423999946, 57.655951239000089 ], [ -152.435861782999893, 57.635443427000112 ], [ -152.438343878999916, 57.617173570000048 ], [ -152.426340298999889, 57.613511460000026 ], [ -152.342762824999937, 57.633978583000058 ], [ -152.160878058999913, 57.627142645000148 ], [ -152.147084113999938, 57.622626044000086 ], [ -152.155466274999867, 57.612860419000143 ], [ -152.178293423999889, 57.599798895000092 ], [ -152.24970455599987, 57.541489976000079 ], [ -152.270619269999941, 57.528509833000086 ], [ -152.291086391999897, 57.519842841000084 ], [ -152.308908657999893, 57.509019273 ], [ -152.322255011999886, 57.489935614 ], [ -152.328114386999914, 57.465399481000176 ], [ -152.33031165299991, 57.445949611000074 ], [ -152.338693813999896, 57.433172919000057 ], [ -152.362985805999955, 57.428534247000115 ], [ -152.417917446999923, 57.435288804000052 ], [ -152.425729946999923, 57.437445380000057 ], [ -152.433094855999911, 57.441107489 ], [ -152.440541144999912, 57.442816473 ], [ -152.44892330599987, 57.438788153000033 ], [ -152.453724738999881, 57.435248114000061 ], [ -152.460031704999892, 57.431952216000028 ], [ -152.466623501999891, 57.429429429000109 ], [ -152.472523566999911, 57.428534247000115 ], [ -152.486154751999948, 57.428534247000115 ], [ -152.47435462099989, 57.436753648000106 ], [ -152.459706183999884, 57.450628973 ], [ -152.452259894999884, 57.463690497000172 ], [ -152.46226966099988, 57.469427802000055 ], [ -152.487660285999908, 57.471869208000086 ], [ -152.501332160999937, 57.469427802000055 ], [ -152.507272915999863, 57.459540106000034 ], [ -152.508859829999892, 57.449530341000141 ], [ -152.513417120999947, 57.444322007000054 ], [ -152.520822719999927, 57.442450262000094 ], [ -152.530832485999895, 57.442206122000144 ], [ -152.536366339999915, 57.444077867000104 ], [ -152.55414791599992, 57.453314520000092 ], [ -152.562489386999886, 57.456447658000158 ], [ -152.570139126999919, 57.456447658000158 ], [ -152.575306769999941, 57.453762111000074 ], [ -152.57978268099987, 57.450588283000016 ], [ -152.585438605999883, 57.448960679 ], [ -152.591013149999895, 57.450913804000137 ], [ -152.593332485999952, 57.45526764500012 ], [ -152.594431118999893, 57.459865627000156 ], [ -152.596018032999922, 57.462632554000109 ], [ -152.60094153599988, 57.467230536000059 ], [ -152.605580206999917, 57.47394440300009 ], [ -152.612497524999924, 57.480129299000069 ], [ -152.623972133999956, 57.483099677 ], [ -152.634144660999908, 57.481268622000115 ], [ -152.653513149999924, 57.471828518000095 ], [ -152.66429602799991, 57.469427802000055 ], [ -152.674061652999853, 57.469916083000143 ], [ -152.684519008999928, 57.471625067000147 ], [ -152.69432532499988, 57.474839585 ], [ -152.72240149599989, 57.494818427000084 ], [ -152.722604946999923, 57.497463283000158 ], [ -152.72724361899995, 57.499497788999989 ], [ -152.73407955599987, 57.504217841000084 ], [ -152.742909308999913, 57.508978583 ], [ -152.753651495999947, 57.511053778000118 ], [ -152.801747199999909, 57.503607489000146 ], [ -152.814523891999954, 57.505438544000114 ], [ -152.832468227999925, 57.514349677000055 ], [ -152.84239661399991, 57.517889716000028 ], [ -152.856068488999938, 57.518133856000176 ], [ -152.890817837999919, 57.511053778000118 ], [ -152.911976691999911, 57.51471588700015 ], [ -152.933216925999886, 57.521226304000052 ], [ -152.953968878999888, 57.524359442000119 ], [ -152.973378058999913, 57.517889716000028 ], [ -152.960438605999911, 57.511867580000128 ], [ -152.917225714999915, 57.50088125200007 ], [ -152.910715298999889, 57.489935614 ], [ -152.928659633999928, 57.482367255000057 ], [ -153.02802486899995, 57.476263739000061 ], [ -153.02802486899995, 57.469427802000055 ], [ -153.023264126999948, 57.468491929000081 ], [ -153.020619269999884, 57.467189846000068 ], [ -153.014352993999921, 57.462632554000109 ], [ -153.036203579999949, 57.447251695 ], [ -153.044870571999951, 57.436712958000115 ], [ -153.041696743999893, 57.428534247000115 ], [ -153.028635219999899, 57.429510809000178 ], [ -153.000965949999909, 57.450913804000137 ], [ -152.990183071999923, 57.456447658000158 ], [ -152.832468227999925, 57.476263739000061 ], [ -152.800648566999882, 57.470770575000031 ], [ -152.726389126999948, 57.428534247000115 ], [ -152.634103969999899, 57.405747788999989 ], [ -152.617136196999923, 57.387600002000099 ], [ -152.613392706999889, 57.388169664000046 ], [ -152.608835415999863, 57.386460679000052 ], [ -152.603138800999886, 57.381903387000094 ], [ -152.596018032999922, 57.373928127000156 ], [ -152.606190558999884, 57.363592841000141 ], [ -152.630970831999946, 57.34979889500012 ], [ -152.644398566999939, 57.339789130000057 ], [ -152.643299933999884, 57.320502020000035 ], [ -152.663075324999909, 57.299546617000075 ], [ -152.692209438999868, 57.283270575000031 ], [ -152.718861456999889, 57.277655341000028 ], [ -152.712269660999937, 57.302801825000117 ], [ -152.731678839999915, 57.30744049700003 ], [ -152.798695441999939, 57.291571356000119 ], [ -152.817250128999945, 57.278957424000126 ], [ -152.837473110999952, 57.270738023000135 ], [ -152.86351477799991, 57.277655341000028 ], [ -152.858469204999892, 57.2950707050001 ], [ -152.872181769999912, 57.299953518000066 ], [ -152.891916469999956, 57.304022528000033 ], [ -152.905100063999896, 57.319281317 ], [ -152.880686001999948, 57.337591864000061 ], [ -152.877186652999853, 57.343166408000073 ], [ -152.882150844999899, 57.352484442000033 ], [ -152.893503383999871, 57.350246486000131 ], [ -152.914418097999942, 57.339789130000057 ], [ -152.976511196999866, 57.33234284100017 ], [ -153.00731360599994, 57.340236721000153 ], [ -153.023874477999925, 57.342230536000088 ], [ -153.057321743999864, 57.326320705000072 ], [ -153.088368292999888, 57.318793036000031 ], [ -153.12079830599987, 57.315741278000118 ], [ -153.144032355999911, 57.319281317 ], [ -153.152292446999894, 57.327134507000082 ], [ -153.158640102999925, 57.346625067000062 ], [ -153.165150519999912, 57.35276927300005 ], [ -153.174753383999899, 57.351385809000149 ], [ -153.177072719999956, 57.341009833000058 ], [ -153.174997524999924, 57.328111070000048 ], [ -153.171376105999883, 57.319281317 ], [ -153.183542446999951, 57.311265367000047 ], [ -153.172922329999921, 57.305080471000096 ], [ -153.096872524999924, 57.290472723000065 ], [ -153.073719855999883, 57.28929271000014 ], [ -153.03258216099988, 57.304917710000112 ], [ -153.003000454999949, 57.294989325000117 ], [ -152.976185675999943, 57.275539455000015 ], [ -152.959095831999889, 57.257147528000175 ], [ -153.061512824999909, 57.223089911000059 ], [ -153.096302863999853, 57.218247788999989 ], [ -153.195261196999951, 57.229925848000065 ], [ -153.20262610599994, 57.228013414000102 ], [ -153.209584113999938, 57.224554755000113 ], [ -153.216379360999952, 57.222967841000084 ], [ -153.222889777999853, 57.226507880000057 ], [ -153.253285285999937, 57.236721096000011 ], [ -153.264475063999924, 57.232814846000011 ], [ -153.282419399999867, 57.219183661000059 ], [ -153.298329230999911, 57.216253973000121 ], [ -153.307321743999921, 57.211981512000037 ], [ -153.324167446999923, 57.193060614 ], [ -153.335886196999923, 57.188299872000115 ], [ -153.350168423999889, 57.191148179000052 ], [ -153.37665768099987, 57.205796617000075 ], [ -153.391102667999917, 57.209418036000116 ], [ -153.378651495999918, 57.193833726000136 ], [ -153.373280402999853, 57.185003973000065 ], [ -153.37372799399995, 57.178045966000084 ], [ -153.408192511999857, 57.147935289000046 ], [ -153.426096157999922, 57.140122789000074 ], [ -153.440663214999859, 57.125433661000059 ], [ -153.455270962999862, 57.116848049000126 ], [ -153.473011847999885, 57.127427476 ], [ -153.479074673999889, 57.144029039000046 ], [ -153.480051235999952, 57.161688544000171 ], [ -153.486073370999947, 57.175726630000113 ], [ -153.50719153599988, 57.181463934000092 ], [ -153.531605597999913, 57.179754950000088 ], [ -153.541859503999945, 57.175848700000088 ], [ -153.548166469999899, 57.168443101000108 ], [ -153.544260219999899, 57.164455471000124 ], [ -153.513132290999891, 57.170355536000059 ], [ -153.500355597999942, 57.168443101000108 ], [ -153.524525519999941, 57.137396552 ], [ -153.526844855999911, 57.126695054000081 ], [ -153.518910285999851, 57.11737702000012 ], [ -153.507801886999914, 57.108587958000058 ], [ -153.500355597999942, 57.099554755000142 ], [ -153.498158331999946, 57.074286200000088 ], [ -153.513172980999883, 57.06972890800013 ], [ -153.559030727999954, 57.079046942 ], [ -153.711374477999925, 57.067043361000074 ], [ -153.761057094999899, 57.05174388200011 ], [ -153.761057094999899, 57.044907945 ], [ -153.607126430999926, 57.05174388200011 ], [ -153.59125729099992, 57.048163153000033 ], [ -153.590443488999881, 57.039984442000119 ], [ -153.598947719999927, 57.030666408000101 ], [ -153.610829230999883, 57.023830471000068 ], [ -153.627145962999919, 57.021144924000097 ], [ -153.643055792999917, 57.021633205000072 ], [ -153.658070441999939, 57.019842841000084 ], [ -153.671620245999918, 57.010199286000116 ], [ -153.576120571999923, 57.003973700000145 ], [ -153.555124477999868, 56.998724677000084 ], [ -153.559763149999895, 56.986517645 ], [ -153.589100714999915, 56.962958075000145 ], [ -153.592111782999893, 56.962225653000033 ], [ -153.600209113999938, 56.963527736000046 ], [ -153.603382941999882, 56.962958075000145 ], [ -153.603952602999868, 56.960353908000158 ], [ -153.602772589999944, 56.951239325000174 ], [ -153.603382941999882, 56.948716539000046 ], [ -153.617990688999924, 56.939154364000061 ], [ -153.626779751999891, 56.93618398600016 ], [ -153.640939907999893, 56.935044664000102 ], [ -153.666940883999899, 56.93768952 ], [ -153.671579555999926, 56.945379950000031 ], [ -153.670236782999922, 56.958441473 ], [ -153.678456183999913, 56.976629950000088 ], [ -153.713612433999913, 56.914536851000079 ], [ -153.738880988999938, 56.889146226000136 ], [ -153.767893032999922, 56.900336005000057 ], [ -153.778879360999895, 56.877020575000145 ], [ -153.756906704999892, 56.874945380000113 ], [ -153.702707485999895, 56.887274481000176 ], [ -153.694162563999896, 56.883002020000063 ], [ -153.694935675999915, 56.873602606000034 ], [ -153.70140540299991, 56.864203192000033 ], [ -153.709828253999888, 56.859930731000091 ], [ -153.767893032999922, 56.853094794000086 ], [ -153.772897915999863, 56.850490627000099 ], [ -153.775624152999939, 56.841376044000086 ], [ -153.780873175999943, 56.839504299000126 ], [ -153.786936001999919, 56.84080638200011 ], [ -153.79662024599989, 56.845892645000148 ], [ -153.824452277999939, 56.846909898000106 ], [ -153.837717251999891, 56.844183661000145 ], [ -153.843576626999919, 56.835760809000092 ], [ -153.850168423999889, 56.814520575000117 ], [ -153.86620032499988, 56.80170319200009 ], [ -153.905018683999913, 56.784857489000089 ], [ -153.941843227999868, 56.75877513200011 ], [ -153.962513800999886, 56.748236395000148 ], [ -153.987253383999956, 56.743841864000061 ], [ -154.015207485999895, 56.748480536 ], [ -154.035145636999886, 56.757269598000065 ], [ -154.055002407999893, 56.762518622000144 ], [ -154.082590298999889, 56.756903387000037 ], [ -154.108347133999928, 56.744614976 ], [ -154.122629360999952, 56.741197007000082 ], [ -154.137806769999941, 56.743841864000061 ], [ -154.149525519999912, 56.750921942000119 ], [ -154.148264126999891, 56.756252346000096 ], [ -154.141713019999912, 56.762884833000058 ], [ -154.137806769999941, 56.774318752000013 ], [ -154.130116339999915, 56.786525783000101 ], [ -154.063791469999956, 56.847398179000024 ], [ -154.000599738999881, 56.872992255000085 ], [ -153.976796027999882, 56.892564195000048 ], [ -153.968088344999899, 56.90550364800005 ], [ -153.955922003999916, 56.91010163 ], [ -153.931752081999889, 56.914536851000079 ], [ -153.888986782999893, 56.930365302 ], [ -153.810495571999866, 56.97089264500012 ], [ -153.774728969999956, 56.997137762000065 ], [ -153.780873175999943, 57.003973700000145 ], [ -153.833811001999891, 56.972235419000114 ], [ -153.849802212999862, 56.969183661000116 ], [ -153.855661587999919, 56.976019598000121 ], [ -153.832020636999886, 57.001532294000029 ], [ -153.836130337999919, 57.017564195000105 ], [ -153.852406378999888, 57.02362702000012 ], [ -153.862416144999855, 57.011135158000016 ], [ -153.869577602999897, 56.991644598000121 ], [ -153.877145962999947, 56.976629950000088 ], [ -153.896921352999868, 56.965887762000179 ], [ -153.922474738999881, 56.96214427300005 ], [ -153.973337368999893, 56.962958075000145 ], [ -153.96898352799991, 56.979966539000131 ], [ -153.962635870999861, 56.99510325700011 ], [ -153.953928188999896, 57.008612372000087 ], [ -153.929514126999919, 57.035060940000065 ], [ -153.910878058999941, 57.061224677000112 ], [ -153.898182745999861, 57.072821356000034 ], [ -153.882639126999891, 57.080511786000059 ], [ -153.834828253999945, 57.096584377000127 ], [ -153.818714972999885, 57.099554755000142 ], [ -153.810495571999866, 57.102118231000148 ], [ -153.795887824999852, 57.114935614000089 ], [ -153.788319464999915, 57.120062567 ], [ -153.77672278599988, 57.12409088700015 ], [ -153.765573696999866, 57.126288153000147 ], [ -153.739938930999898, 57.127427476 ], [ -153.739938930999898, 57.133693752000127 ], [ -153.782785610999895, 57.150213934000121 ], [ -153.805734829999892, 57.154201565 ], [ -153.815663214999859, 57.144598700000031 ], [ -153.820668097999913, 57.133368231000119 ], [ -153.832468227999868, 57.126654364000089 ], [ -153.857248501999948, 57.120062567 ], [ -153.973581508999928, 57.061916408000158 ], [ -154.006947394999912, 57.03929271 ], [ -154.049549933999941, 56.99603913 ], [ -154.075062628999945, 56.975572007000139 ], [ -154.099558071999866, 56.964829820000134 ], [ -154.114979620999918, 56.985785223000065 ], [ -154.134103969999899, 56.995184637000094 ], [ -154.137806769999941, 57.003973700000145 ], [ -154.134836391999897, 57.008734442000062 ], [ -154.121774868999921, 57.019110419000143 ], [ -154.117298956999889, 57.023830471000068 ], [ -154.110463019999941, 57.038072007000082 ], [ -154.080026821999894, 57.066595770000063 ], [ -153.95966549399995, 57.120062567 ], [ -154.083200649999952, 57.127427476 ], [ -154.091257290999891, 57.130682684000035 ], [ -154.109974738999881, 57.14476146 ], [ -154.120432094999956, 57.147935289000046 ], [ -154.174916144999941, 57.146226304000052 ], [ -154.240834113999881, 57.154771226000079 ], [ -154.299183722999885, 57.147935289000046 ], [ -154.360666469999956, 57.147935289000046 ], [ -154.373361782999893, 57.145168361000103 ], [ -154.397409633999928, 57.131822007000082 ], [ -154.411569790999863, 57.127427476 ], [ -154.46825110599994, 57.124457098000093 ], [ -154.494943813999896, 57.113592841000084 ], [ -154.484120245999861, 57.089585679000052 ], [ -154.460764126999891, 57.07111237200003 ], [ -154.437814907999893, 57.057277736000131 ], [ -154.412953253999945, 57.050197658000073 ], [ -154.384226040999891, 57.05174388200011 ], [ -154.361317511999914, 57.059068101000108 ], [ -154.346058722999942, 57.069037177000112 ], [ -154.319040493999864, 57.096136786000145 ], [ -154.29718990799995, 57.110296942000062 ], [ -154.272409633999871, 57.11737702000012 ], [ -154.121205206999889, 57.123724677000055 ], [ -154.103708462999919, 57.113836981000034 ], [ -154.10374915299991, 57.097967841000113 ], [ -154.11192786399991, 57.076727606000034 ], [ -154.130970831999889, 57.044907945 ], [ -154.153187628999888, 57.019761460000112 ], [ -154.158314581999889, 57.010199286000116 ], [ -154.160267706999917, 56.998724677000084 ], [ -154.157582160999937, 56.976996161000031 ], [ -154.158314581999889, 56.969183661000116 ], [ -154.172474738999881, 56.952622789000046 ], [ -154.193837042999945, 56.944566148000106 ], [ -154.247670050999886, 56.941880601000136 ], [ -154.230336066999911, 56.933050848000093 ], [ -154.221791144999884, 56.925360419000143 ], [ -154.221913214999859, 56.916449286000116 ], [ -154.230295376999919, 56.903998114 ], [ -154.237985805999926, 56.899562893000123 ], [ -154.245920376999891, 56.90135325700011 ], [ -154.253854946999866, 56.905462958000058 ], [ -154.261586066999882, 56.907700914000046 ], [ -154.281809048999889, 56.887274481000176 ], [ -154.276600714999915, 56.897772528000061 ], [ -154.277577277999882, 56.905951239000146 ], [ -154.284250454999949, 56.911607164000046 ], [ -154.296091274999895, 56.914536851000079 ], [ -154.300648566999939, 56.873521226000051 ], [ -154.299183722999885, 56.866848049000012 ], [ -154.282582160999937, 56.869574286000059 ], [ -154.255604620999861, 56.882757880000113 ], [ -154.240834113999881, 56.887274481000176 ], [ -154.240834113999881, 56.879828192 ], [ -154.271839972999885, 56.863714911000116 ], [ -154.281809048999889, 56.859930731000091 ], [ -154.299549933999913, 56.855414130000142 ], [ -154.304921027999939, 56.855780341000141 ], [ -154.304880337999947, 56.874904690000122 ], [ -154.305002407999922, 56.90228913 ], [ -154.31346594999988, 56.918280341000084 ], [ -154.328317837999919, 56.929673570000077 ], [ -154.388742641999954, 56.963853257000054 ], [ -154.411610480999855, 56.972967841000141 ], [ -154.448190883999899, 56.978705145000035 ], [ -154.473255988999881, 56.98769765800013 ], [ -154.484120245999861, 56.989691473000065 ], [ -154.514881964999859, 56.989691473000065 ], [ -154.528553839999915, 56.991644598000121 ], [ -154.531686977999868, 56.996568101 ], [ -154.529855923999889, 57.00315989800005 ], [ -154.527170376999919, 57.032904364000061 ], [ -154.52000891799986, 57.055975653000033 ], [ -154.516346808999913, 57.077582098000121 ], [ -154.533395962999862, 57.112046617000047 ], [ -154.53148352799991, 57.153143622000144 ], [ -154.535023566999882, 57.174627997000172 ], [ -154.548573370999861, 57.192816473000065 ], [ -154.588693813999896, 57.231105861000103 ], [ -154.59711666599992, 57.246649481000091 ], [ -154.601511196999923, 57.258937893000066 ], [ -154.612172003999945, 57.266302802000055 ], [ -154.625599738999938, 57.269964911000031 ], [ -154.672556118999864, 57.270900783000101 ], [ -154.681345180999926, 57.272894598000121 ], [ -154.684315558999941, 57.277492580000072 ], [ -154.684763149999924, 57.28217194200009 ], [ -154.685861782999893, 57.284491278000147 ], [ -154.716053839999915, 57.281683661 ], [ -154.75141354099992, 57.273830471000011 ], [ -154.783151821999866, 57.272935289000131 ], [ -154.802561001999891, 57.29132721600017 ], [ -154.787668423999946, 57.291571356000119 ], [ -154.768299933999913, 57.294989325000117 ], [ -154.755116339999859, 57.30263906500015 ], [ -154.758168097999857, 57.315578518000152 ], [ -154.771433071999894, 57.325384833000086 ], [ -154.798451300999943, 57.336086330000015 ], [ -154.810007290999948, 57.34658437700007 ], [ -154.787546352999954, 57.357733466000084 ], [ -154.763498501999919, 57.354193427000112 ], [ -154.736927863999881, 57.345119533000016 ], [ -154.706979946999923, 57.339789130000057 ], [ -154.711008266999869, 57.347723700000117 ], [ -154.71711178299995, 57.353827216000113 ], [ -154.724964972999942, 57.358058986000017 ], [ -154.734242316999882, 57.360256252000013 ], [ -154.734242316999882, 57.367092190000122 ], [ -154.714711066999911, 57.378119208000086 ], [ -154.708444790999863, 57.395697333000115 ], [ -154.71320553299995, 57.41425202000012 ], [ -154.726877407999893, 57.428534247000115 ], [ -154.686146613999938, 57.452704169000029 ], [ -154.653391079999892, 57.460760809000149 ], [ -154.644276495999918, 57.466742255000085 ], [ -154.658558722999913, 57.476263739000061 ], [ -154.650217251999948, 57.49603913 ], [ -154.634632941999939, 57.513739325000088 ], [ -154.61473548099994, 57.526556708000115 ], [ -154.582956508999899, 57.534084377000099 ], [ -154.562489386999943, 57.54393138200011 ], [ -154.549305792999888, 57.544582424000154 ], [ -154.540028449999937, 57.539496161000116 ], [ -154.521433071999923, 57.517889716000028 ], [ -154.509755011999943, 57.528387762000094 ], [ -154.523426886999886, 57.570013739000061 ], [ -154.514881964999859, 57.579291083000115 ], [ -154.455555792999888, 57.576727606000119 ], [ -154.398508266999897, 57.566310940000122 ], [ -154.409901495999947, 57.572902736000103 ], [ -154.446888800999886, 57.586127020000148 ], [ -154.398508266999897, 57.613470770000035 ], [ -154.364369269999884, 57.627142645000148 ], [ -154.362009243999921, 57.631048895000148 ], [ -154.356434699999909, 57.645453192000033 ], [ -154.356922980999911, 57.648260809000149 ], [ -154.33759518099987, 57.650213934000121 ], [ -154.300648566999939, 57.645697333000058 ], [ -154.281809048999889, 57.648260809000149 ], [ -154.268259243999921, 57.655503648 ], [ -154.254709438999868, 57.665228583000143 ], [ -154.239328579999921, 57.673285223000065 ], [ -154.220326300999943, 57.675523179000052 ], [ -154.202626105999911, 57.671820380000113 ], [ -154.169300910999937, 57.659247137000122 ], [ -154.151437954999892, 57.655096747000172 ], [ -154.055856899999895, 57.655096747000172 ], [ -154.018625454999892, 57.647202867000104 ], [ -154.000559048999889, 57.629706122000144 ], [ -153.973337368999893, 57.572495835 ], [ -153.999948696999923, 57.555650132 ], [ -154.110463019999941, 57.544582424000154 ], [ -154.068348761999914, 57.537054755 ], [ -153.974802212999947, 57.549953518 ], [ -153.935495571999923, 57.534979559000178 ], [ -153.920277472999885, 57.507228908000101 ], [ -153.90693111899995, 57.434963283000044 ], [ -153.890736456999889, 57.408026434000149 ], [ -153.875314907999893, 57.399155992000104 ], [ -153.840524868999921, 57.38666413 ], [ -153.825632290999863, 57.37726471600017 ], [ -153.777821417999917, 57.322333075000088 ], [ -153.747303839999915, 57.303412177000084 ], [ -153.630686001999891, 57.270900783000101 ], [ -153.644520636999886, 57.284002997000144 ], [ -153.669138149999867, 57.297308661000088 ], [ -153.696156378999945, 57.307684637000179 ], [ -153.743763800999915, 57.318915106000176 ], [ -153.753895636999857, 57.336371161000145 ], [ -153.758249477999954, 57.35883209800015 ], [ -153.767893032999922, 57.380764065000065 ], [ -153.784738735999923, 57.394354559000121 ], [ -153.80011959499987, 57.401312567000033 ], [ -153.811350063999896, 57.412339585000055 ], [ -153.81977291599992, 57.484930731000148 ], [ -153.818348761999943, 57.506293036000116 ], [ -153.808827277999853, 57.517889716000028 ], [ -153.843698696999894, 57.550970770000092 ], [ -153.849802212999862, 57.558823960000055 ], [ -153.850819464999915, 57.577297268000095 ], [ -153.842518683999856, 57.58197663 ], [ -153.830067511999943, 57.577785549000069 ], [ -153.818714972999885, 57.569403387000122 ], [ -153.792429165999948, 57.555975653000118 ], [ -153.749623175999858, 57.544378973 ], [ -153.706369594999956, 57.539048570000134 ], [ -153.678456183999913, 57.544582424000154 ], [ -153.691029425999915, 57.553778387000037 ], [ -153.705148891999954, 57.557928778000147 ], [ -153.740589972999942, 57.558823960000055 ], [ -153.753977016999954, 57.561957098000121 ], [ -153.868723110999895, 57.628607489000032 ], [ -153.884592251999919, 57.648260809000149 ], [ -153.852772589999887, 57.658677476000051 ], [ -153.810902472999885, 57.659002997000172 ], [ -153.667591925999943, 57.64183177300005 ], [ -153.64110266799986, 57.62921784100017 ], [ -153.630686001999891, 57.599798895000092 ], [ -153.61750240799995, 57.605210679000109 ], [ -153.591013149999952, 57.601385809000121 ], [ -153.582875128999945, 57.607326565000122 ], [ -153.584584113999853, 57.617092190000065 ], [ -153.593332485999923, 57.628322658000073 ], [ -153.604685024999895, 57.637600002000127 ], [ -153.631052212999919, 57.646795966000113 ], [ -153.69896399599989, 57.682359117000075 ], [ -153.756092902999853, 57.693182684000149 ], [ -153.87641354099992, 57.701117255000113 ], [ -153.905751105999911, 57.711249091000084 ], [ -153.925526495999947, 57.729559637000065 ], [ -153.938221808999913, 57.775620835 ], [ -153.924631313999953, 57.810492255000113 ], [ -153.894479946999923, 57.837591864000146 ], [ -153.843454555999926, 57.870591539000102 ], [ -153.836130337999919, 57.874172268000095 ], [ -153.829782680999926, 57.87523021000014 ], [ -153.815500454999892, 57.873968817000119 ], [ -153.808827277999853, 57.874172268000095 ], [ -153.796701626999862, 57.878485419000086 ], [ -153.764475063999924, 57.894680080000128 ], [ -153.723825649999924, 57.902085679000109 ], [ -153.719471808999913, 57.900824286000116 ], [ -153.702707485999895, 57.891262111000046 ], [ -153.692575649999952, 57.887030341000113 ], [ -153.682240363999853, 57.889105536000116 ], [ -153.672800258999928, 57.893133856000091 ], [ -153.66547604099992, 57.894680080000128 ], [ -153.645090298999946, 57.88369375200007 ], [ -153.638295050999915, 57.867621161 ], [ -153.627797003999945, 57.853176174000126 ], [ -153.596262173999946, 57.846869208 ], [ -153.574411587999919, 57.839544989 ], [ -153.564564581999889, 57.821600653000147 ], [ -153.562204555999926, 57.799058335000055 ], [ -153.562448696999866, 57.777980861000131 ], [ -153.558298305999926, 57.738348700000117 ], [ -153.546945766999954, 57.698919989000146 ], [ -153.529408331999917, 57.661322333000143 ], [ -153.50719153599988, 57.627142645000148 ], [ -153.498158331999946, 57.642564195 ], [ -153.522165493999893, 57.695624091000113 ], [ -153.527658657999922, 57.723334052 ], [ -153.481027798999918, 57.702704169000143 ], [ -153.452341274999952, 57.69456614800005 ], [ -153.439523891999926, 57.69940827000012 ], [ -153.448435024999952, 57.716131903000147 ], [ -153.469553188999896, 57.728949286 ], [ -153.514027472999885, 57.743841864000146 ], [ -153.499134894999941, 57.760891018 ], [ -153.47431393099987, 57.773627020000148 ], [ -153.446237758999956, 57.777411200000174 ], [ -153.421823696999923, 57.767401434000092 ], [ -153.409413214999887, 57.751695054000109 ], [ -153.398386196999923, 57.733954169000029 ], [ -153.384388800999886, 57.718573309000092 ], [ -153.363148566999882, 57.709662177000055 ], [ -153.333566860999952, 57.713853257 ], [ -153.321278449999909, 57.730902411000145 ], [ -153.325795050999943, 57.749416408000158 ], [ -153.346424933999856, 57.758042710000055 ], [ -153.360340949999937, 57.761175848000121 ], [ -153.378977016999926, 57.774847723000065 ], [ -153.393747524999924, 57.780218817000119 ], [ -153.396433071999894, 57.78510163 ], [ -153.39818274599989, 57.789984442000062 ], [ -153.401356574999852, 57.79222239800005 ], [ -153.432077602999925, 57.79222239800005 ], [ -153.458811001999948, 57.802801825000088 ], [ -153.476673956999917, 57.821356512000094 ], [ -153.476429816999882, 57.839016018000038 ], [ -153.449167446999894, 57.846869208 ], [ -153.424997524999867, 57.842718817000062 ], [ -153.350168423999889, 57.81268952 ], [ -153.291371222999913, 57.798773505000113 ], [ -153.229725714999859, 57.79222239800005 ], [ -153.211048956999889, 57.785589911000088 ], [ -153.210031704999949, 57.769435940000122 ], [ -153.21454830599987, 57.74892812700007 ], [ -153.212351040999891, 57.729559637000065 ], [ -153.206491665999948, 57.720892645000148 ], [ -153.199330206999889, 57.714544989000117 ], [ -153.190297003999888, 57.710679429000109 ], [ -153.178822394999855, 57.709662177000055 ], [ -153.195261196999951, 57.727118231000119 ], [ -153.19774329299986, 57.751125393000152 ], [ -153.191883917999917, 57.805243231000034 ], [ -153.198679165999948, 57.857123114000117 ], [ -153.20453854099992, 57.86847565300009 ], [ -153.231882290999863, 57.888739325000117 ], [ -153.240305141999926, 57.902085679000109 ], [ -153.211984829999892, 57.901800848000093 ], [ -153.186838344999899, 57.893540757 ], [ -153.144032355999911, 57.867905992000132 ], [ -153.075062628999888, 57.837469794000171 ], [ -153.061512824999909, 57.825751044000086 ], [ -153.048451300999943, 57.833197333000058 ], [ -153.060617641999897, 57.841620184000121 ], [ -153.085072394999941, 57.852443752000013 ], [ -153.096913214999915, 57.860500393000152 ], [ -153.097727016999926, 57.869330145 ], [ -153.109486456999889, 57.883368231000148 ], [ -153.125965949999909, 57.896389065000122 ], [ -153.156076626999919, 57.907863674000097 ], [ -153.202463344999899, 57.946193752000013 ], [ -153.221018032999893, 57.955877997000172 ], [ -153.262806769999912, 57.966009833000115 ], [ -153.29515540299991, 57.986395575000117 ], [ -153.299916144999941, 57.991888739000146 ], [ -153.301747199999909, 58.000799872000172 ], [ -153.296457485999923, 58.008124091000084 ], [ -153.284250454999949, 58.010443427000141 ], [ -153.270578579999921, 58.008612372000172 ], [ -153.260812954999892, 58.003892320000077 ], [ -153.229562954999892, 57.997992255000113 ], [ -153.166940883999899, 57.97003815300009 ], [ -153.118763800999943, 57.960394598000121 ], [ -153.083566860999895, 57.946234442 ], [ -153.046213344999956, 57.940171617000104 ], [ -153.012766079999892, 57.929103908000073 ] ] ], [ [ [ -136.338368292999917, 58.014634507000082 ], [ -136.336822068999879, 58.007025458000143 ], [ -136.370025193999908, 57.999945380000085 ], [ -136.377919074999909, 57.990057684000149 ], [ -136.389800584999932, 57.963568427 ], [ -136.379058397999927, 57.935288804000137 ], [ -136.392486131999931, 57.898871161000059 ], [ -136.419911261999857, 57.86554596600017 ], [ -136.451283331999889, 57.846869208 ], [ -136.453846808999913, 57.863104559000035 ], [ -136.464100714999944, 57.872626044000057 ], [ -136.471180792999917, 57.881170966000141 ], [ -136.4642634759999, 57.894680080000128 ], [ -136.471831834999932, 57.898993231000034 ], [ -136.481800910999937, 57.902044989000117 ], [ -136.493397589999859, 57.903265692000147 ], [ -136.505930141999869, 57.902085679000109 ], [ -136.500152147999898, 57.910711981000034 ], [ -136.494292772999955, 57.917425848000065 ], [ -136.487416144999941, 57.923163153000061 ], [ -136.478586391999897, 57.928778387000037 ], [ -136.478586391999897, 57.935614325000145 ], [ -136.496937628999945, 57.938544012000179 ], [ -136.51024329299986, 57.93305084800015 ], [ -136.523182745999861, 57.925279039000046 ], [ -136.540353969999899, 57.921332098000065 ], [ -136.552845831999889, 57.92511627800009 ], [ -136.552805141999897, 57.9337425800001 ], [ -136.544748501999891, 57.943101304000137 ], [ -136.533192511999943, 57.949286200000088 ], [ -136.546376105999911, 57.962103583000115 ], [ -136.541981574999909, 57.978094794000029 ], [ -136.528146938999924, 57.993231512000037 ], [ -136.512766079999892, 58.003892320000077 ], [ -136.520619269999941, 58.013495184000035 ], [ -136.546742316999911, 58.012396552 ], [ -136.561146613999881, 58.017523505000028 ], [ -136.555531378999973, 58.024237372000144 ], [ -136.55125891799986, 58.031887111000074 ], [ -136.548451300999915, 58.040106512000179 ], [ -136.546294725999928, 58.060370184000092 ], [ -136.542836066999939, 58.065904039000102 ], [ -136.514719204999921, 58.086737372000087 ], [ -136.495513475999871, 58.094916083 ], [ -136.475331183999941, 58.09784577000012 ], [ -136.45750891799986, 58.093247788999989 ], [ -136.438059048999889, 58.072455145 ], [ -136.361927863999881, 58.031195380000142 ], [ -136.338368292999917, 58.014634507000082 ] ] ], [ [ [ -153.202707485999923, 58.098822333 ], [ -153.181955532999922, 58.093247788999989 ], [ -153.131052212999919, 58.10024648600016 ], [ -153.116769985999895, 58.100083726000022 ], [ -153.106190558999856, 58.094631252000156 ], [ -153.087961391999897, 58.076117255000142 ], [ -153.078928188999896, 58.072170315000065 ], [ -153.074208136999857, 58.068060614000032 ], [ -153.058420376999919, 58.042059637000037 ], [ -153.047596808999913, 58.037054755 ], [ -153.000070766999926, 58.031195380000142 ], [ -152.890817837999919, 57.997707424000097 ], [ -152.903513149999867, 57.990668036000116 ], [ -152.916574673999946, 57.991888739000146 ], [ -152.930409308999941, 57.995998440000093 ], [ -152.945423956999889, 57.997707424000097 ], [ -152.983713344999899, 57.985744533000158 ], [ -153.000070766999926, 57.984035549000154 ], [ -153.026926235999895, 57.988755601000079 ], [ -153.081654425999943, 58.007228908000101 ], [ -153.115549282999893, 58.013657945000105 ], [ -153.168649868999921, 58.032700914000017 ], [ -153.202707485999923, 58.029771226000079 ], [ -153.216053839999915, 58.034898179 ], [ -153.244455532999865, 58.071722723000065 ], [ -153.262644008999956, 58.085353908000016 ], [ -153.28807532499988, 58.086411851000079 ], [ -153.263172980999911, 58.059149481000176 ], [ -153.253285285999937, 58.052313544000143 ], [ -153.340321417999888, 58.046454169000114 ], [ -153.379587368999893, 58.049505927000027 ], [ -153.418365037999934, 58.065985419000086 ], [ -153.322214321999866, 58.127386786000088 ], [ -153.329660610999952, 58.134833075000145 ], [ -153.313059048999889, 58.141791083000143 ], [ -153.295480923999946, 58.146429755000085 ], [ -153.277780727999954, 58.146795966000084 ], [ -153.260812954999892, 58.141058661000116 ], [ -153.225087042999945, 58.112127997000115 ], [ -153.202707485999923, 58.098822333 ] ] ], [ [ [ -151.84618079299986, 58.175197658000016 ], [ -151.868885870999918, 58.173529364 ], [ -151.888661261999914, 58.178859768000066 ], [ -151.897084113999881, 58.192857164000131 ], [ -151.891835089999915, 58.206976630000057 ], [ -151.866078253999945, 58.257757880000113 ], [ -151.827137824999852, 58.26561107 ], [ -151.809885219999956, 58.262925523000106 ], [ -151.79344641799986, 58.244696356000034 ], [ -151.805978969999956, 58.212103583000086 ], [ -151.815052863999881, 58.196112372000172 ], [ -151.828846808999856, 58.182033596000124 ], [ -151.84618079299986, 58.175197658000016 ] ] ], [ [ [ -135.714995897999898, 58.229722398000021 ], [ -135.689361131999931, 58.226263739 ], [ -135.662464972999942, 58.230047919000029 ], [ -135.635650193999965, 58.230414130000142 ], [ -135.624012824999852, 58.225002346000096 ], [ -135.601429816999882, 58.206976630000057 ], [ -135.590972459999904, 58.203111070000048 ], [ -135.556304490999935, 58.199408270000035 ], [ -135.546294725999928, 58.196275132000139 ], [ -135.553781704999892, 58.189439195000105 ], [ -135.537180141999841, 58.181138414000046 ], [ -135.501942511999914, 58.173814195000134 ], [ -135.48485266799986, 58.162095445000048 ], [ -135.496693488999938, 58.150824286000059 ], [ -135.502268032999837, 58.138332424000154 ], [ -135.505970831999974, 58.125474351000108 ], [ -135.512115037999934, 58.113185940000065 ], [ -135.523426886999914, 58.102443752000156 ], [ -135.534047003999973, 58.099432684000149 ], [ -135.545643683999913, 58.098334052000027 ], [ -135.560617641999926, 58.093247788999989 ], [ -135.582142706999946, 58.075181382000054 ], [ -135.602365688999868, 58.054022528000147 ], [ -135.627308722999885, 58.041408596000068 ], [ -135.692372199999937, 58.053412177 ], [ -135.769398566999911, 58.046454169000114 ], [ -135.783070441999939, 58.042059637000037 ], [ -135.752797003999945, 58.027289130000142 ], [ -135.693226691999939, 58.040106512000179 ], [ -135.662424282999893, 58.031195380000142 ], [ -135.669829881999931, 58.024969794000086 ], [ -135.657297329999864, 58.020900783000044 ], [ -135.639515753999945, 58.017889716000028 ], [ -135.624826626999891, 58.013169664000102 ], [ -135.621408657999865, 58.003892320000077 ], [ -135.631662563999896, 57.997381903000147 ], [ -135.649973110999838, 57.995591538999989 ], [ -135.741281704999921, 58.002264716000056 ], [ -135.768544074999909, 57.998236395000063 ], [ -135.79332434799997, 57.984035549000154 ], [ -135.708973761999914, 57.978257554 ], [ -135.662464972999942, 57.970119533000073 ], [ -135.656158006999931, 57.949286200000088 ], [ -135.640736456999974, 57.952093817000147 ], [ -135.62743079299986, 57.958889065000065 ], [ -135.623402472999885, 57.967678127000127 ], [ -135.635650193999965, 57.97654857 ], [ -135.635650193999965, 57.984035549000154 ], [ -135.614369269999884, 57.983832098 ], [ -135.592884894999941, 57.987453518000066 ], [ -135.573109503999945, 57.995306708000143 ], [ -135.557199673999918, 58.007635809000092 ], [ -135.515533006999959, 58.058539130000113 ], [ -135.436431443999965, 58.079575914000046 ], [ -135.42446855399993, 58.09511953300013 ], [ -135.431711391999869, 58.104071356000176 ], [ -135.446441209999932, 58.112738348000065 ], [ -135.457508917999888, 58.127386786000088 ], [ -135.439808722999885, 58.128892320000134 ], [ -135.408029751999834, 58.138576565000093 ], [ -135.389271613999881, 58.141058661000116 ], [ -135.368804490999935, 58.139349677000112 ], [ -135.346547003999945, 58.134670315 ], [ -135.307362433999941, 58.120550848000065 ], [ -135.314686652999939, 58.11815013200011 ], [ -135.334055141999869, 58.106878973000121 ], [ -135.316761847999942, 58.100531317 ], [ -135.3002009759999, 58.101223049000126 ], [ -135.266428188999896, 58.106878973000121 ], [ -135.246164516999897, 58.104803778000118 ], [ -135.206857876999891, 58.095404364000089 ], [ -135.186634894999969, 58.093247788999989 ], [ -135.118031378999945, 58.100083726000022 ], [ -135.100575324999909, 58.096625067 ], [ -135.089588995999918, 58.089178778000033 ], [ -135.09032141799986, 58.08201732 ], [ -135.108062303999958, 58.079575914000046 ], [ -135.108062303999958, 58.072170315000065 ], [ -134.979969855999911, 58.050360419000114 ], [ -134.92479407499988, 58.0274925800001 ], [ -134.902007615999935, 57.973130601 ], [ -134.905262824999909, 57.96979401200015 ], [ -134.91226152299987, 57.96898021000014 ], [ -134.919300910999937, 57.967027085 ], [ -134.922515428999901, 57.960150458000086 ], [ -134.920074022999955, 57.953517971000039 ], [ -134.910227016999841, 57.942938544000171 ], [ -134.909494594999899, 57.935614325000145 ], [ -134.915760870999861, 57.921047268000123 ], [ -134.924427863999938, 57.914007880000057 ], [ -134.950428839999944, 57.902085679000109 ], [ -134.965077277999853, 57.886053778000033 ], [ -134.960316535999937, 57.871649481000148 ], [ -134.942005988999881, 57.858710028000147 ], [ -134.915679490999878, 57.846869208 ], [ -134.945952928999873, 57.851060289000131 ], [ -135.046701626999862, 57.902085679000109 ], [ -135.109120245999918, 57.919134833000086 ], [ -135.12828528599988, 57.921332098000065 ], [ -135.14468339799987, 57.924994208000115 ], [ -135.197499152999853, 57.949286200000088 ], [ -135.203684048999946, 57.943060614000146 ], [ -135.18423417899993, 57.921616929000024 ], [ -135.16030839799987, 57.903794664000131 ], [ -135.134266730999911, 57.88987864800005 ], [ -135.108062303999958, 57.880316473000065 ], [ -135.055653449999909, 57.87335846600017 ], [ -135.039784308999856, 57.867905992000132 ], [ -135.014719204999864, 57.846014716000084 ], [ -135.001210089999887, 57.840033270000092 ], [ -134.984527147999927, 57.846869208 ], [ -134.982004360999838, 57.829006252000127 ], [ -134.967844204999892, 57.820054429000109 ], [ -134.930002407999893, 57.81268952 ], [ -134.942453579999892, 57.806586005000113 ], [ -134.97093665299991, 57.80215078300013 ], [ -134.984527147999927, 57.798407294000114 ], [ -135.003977016999841, 57.788763739000146 ], [ -135.013783331999974, 57.785874742000104 ], [ -135.203033006999874, 57.78510163 ], [ -135.259388800999943, 57.795965887000179 ], [ -135.421213344999899, 57.863267320000105 ], [ -135.449777798999889, 57.871161200000174 ], [ -135.48110917899993, 57.874172268000095 ], [ -135.4916072259999, 57.877346096000153 ], [ -135.505686001999834, 57.891424872000087 ], [ -135.696441209999904, 57.936102606000148 ], [ -135.845814581999946, 57.992173570000077 ], [ -135.865956183999856, 57.99628327000012 ], [ -135.889556443999908, 57.997707424000097 ], [ -135.889556443999908, 57.990220445000134 ], [ -135.840565558999941, 57.975897528000033 ], [ -135.817005988999881, 57.963568427 ], [ -135.806996222999913, 57.946193752000013 ], [ -135.792225714999915, 57.934149481000091 ], [ -135.613758917999917, 57.89594147300015 ], [ -135.587880011999914, 57.884100653000175 ], [ -135.575306769999941, 57.880031643000123 ], [ -135.546986456999974, 57.875799872000115 ], [ -135.519764777999882, 57.861761786000059 ], [ -135.515533006999959, 57.860500393000152 ], [ -135.512847459999875, 57.85814036699999 ], [ -135.51585852799991, 57.845648505000085 ], [ -135.512115037999934, 57.839422919000029 ], [ -135.499908006999874, 57.834784247000087 ], [ -135.403228318999936, 57.814195054000052 ], [ -135.388661261999914, 57.81268952 ], [ -135.372385219999899, 57.805243231000034 ], [ -135.328968878999945, 57.769720770000148 ], [ -135.320952928999901, 57.758042710000055 ], [ -135.327300584999932, 57.751288153000118 ], [ -135.350738084999904, 57.746283270000092 ], [ -135.361317511999943, 57.737005927000112 ], [ -135.363880988999938, 57.726223049000041 ], [ -135.355091925999886, 57.724758205000157 ], [ -135.327504035999965, 57.729559637000065 ], [ -135.273671027999939, 57.730210679 ], [ -135.250233527999853, 57.726629950000031 ], [ -135.224191860999895, 57.716498114000061 ], [ -135.217111782999922, 57.711127020000035 ], [ -135.214466925999943, 57.707342841000084 ], [ -135.210031704999864, 57.706488348000093 ], [ -135.197499152999853, 57.709662177000055 ], [ -135.173898891999926, 57.72553131700009 ], [ -135.16270911399991, 57.729559637000065 ], [ -135.115834113999938, 57.733954169000029 ], [ -135.101307745999918, 57.737005927000112 ], [ -135.080189581999917, 57.750637111000074 ], [ -135.073475714999859, 57.751939195000077 ], [ -135.060414191999882, 57.752020575000145 ], [ -135.053456183999913, 57.754339911000116 ], [ -135.03880774599989, 57.755804755000085 ], [ -135.024322068999936, 57.750148830000072 ], [ -135.009836391999897, 57.746527411000116 ], [ -134.983021613999881, 57.761542059000064 ], [ -134.967518683999884, 57.764308986000017 ], [ -134.936512824999852, 57.764308986000017 ], [ -134.913889126999891, 57.755845445000077 ], [ -134.902943488999938, 57.735419012000094 ], [ -134.896717902999882, 57.710516669000143 ], [ -134.888335740999906, 57.688544012000037 ], [ -134.891713019999941, 57.673041083000115 ], [ -134.884348110999838, 57.654242255000085 ], [ -134.851226365999906, 57.604925848000093 ], [ -134.844878709999961, 57.588446356000091 ], [ -134.841623501999919, 57.570990302000141 ], [ -134.840565558999856, 57.552069403000033 ], [ -134.843413865999906, 57.533514716000028 ], [ -134.842681443999965, 57.522691148000106 ], [ -134.836822068999936, 57.517889716000028 ], [ -134.833973761999914, 57.514553127000013 ], [ -134.813872850999928, 57.497463283000158 ], [ -134.819569464999915, 57.486070054 ], [ -134.8568416009999, 57.498114325000117 ], [ -134.874745245999947, 57.489935614 ], [ -134.84740149599989, 57.469427802000055 ], [ -134.871408657999922, 57.461004950000088 ], [ -134.905995245999918, 57.457261460000055 ], [ -135.028960740999963, 57.460516669000114 ], [ -135.05687415299991, 57.466620184000092 ], [ -135.183176235999895, 57.519273179000109 ], [ -135.320790167999917, 57.584906317000119 ], [ -135.457508917999888, 57.633978583000058 ], [ -135.512115037999934, 57.648260809000149 ], [ -135.554432745999861, 57.671820380000113 ], [ -135.563710089999915, 57.675523179000052 ], [ -135.584217902999853, 57.68060944200009 ], [ -135.628041144999941, 57.706040757 ], [ -135.768177863999881, 57.759711005000085 ], [ -135.813221808999856, 57.764308986000017 ], [ -135.806304490999963, 57.754055080000072 ], [ -135.79625403599988, 57.743801174000154 ], [ -135.784413214999915, 57.735093492000075 ], [ -135.772287563999839, 57.729559637000065 ], [ -135.754383917999888, 57.728094794000086 ], [ -135.737538214999887, 57.729152736000131 ], [ -135.724354620999918, 57.725409247000115 ], [ -135.717640753999888, 57.709662177000055 ], [ -135.729562954999835, 57.702541408000101 ], [ -135.725168423999861, 57.694647528000033 ], [ -135.71353105399993, 57.685736395000092 ], [ -135.703968878999945, 57.675523179000052 ], [ -135.763417120999918, 57.670314846000153 ], [ -135.79116777299987, 57.660101630000113 ], [ -135.806996222999913, 57.641424872000144 ], [ -135.734974738999966, 57.651190497000087 ], [ -135.710804816999968, 57.648260809000149 ], [ -135.644602016999897, 57.617865302 ], [ -135.621693488999881, 57.613470770000035 ], [ -135.60484778599988, 57.607082424000097 ], [ -135.584868943999936, 57.592962958000058 ], [ -135.570627407999893, 57.578924872000115 ], [ -135.570464647999927, 57.572495835 ], [ -135.621083136999914, 57.575873114000117 ], [ -135.64386959499987, 57.570542710000055 ], [ -135.656158006999931, 57.552069403000033 ], [ -135.616118943999879, 57.56313711100016 ], [ -135.595773891999897, 57.56452057500006 ], [ -135.577707485999895, 57.55548737200003 ], [ -135.56704667899993, 57.54511139500012 ], [ -135.558257615999963, 57.533392645000148 ], [ -135.560047980999855, 57.523342190000065 ], [ -135.581044074999909, 57.517889716000028 ], [ -135.581044074999909, 57.511053778000118 ], [ -135.563628709999932, 57.508124091000084 ], [ -135.553049282999893, 57.498683986000074 ], [ -135.547718878999916, 57.484116929000052 ], [ -135.546294725999928, 57.466050523000135 ], [ -135.555897589999915, 57.453680731000091 ], [ -135.578114386999886, 57.448919989 ], [ -135.621408657999865, 57.448960679 ], [ -135.594715949999937, 57.428534247000115 ], [ -135.599110480999911, 57.419256903000147 ], [ -135.607248501999834, 57.41665273600016 ], [ -135.616607225999871, 57.415757554000081 ], [ -135.624826626999891, 57.411769924000097 ], [ -135.632150844999899, 57.411810614000089 ], [ -135.644886847999942, 57.414780992000019 ], [ -135.656971808999913, 57.416205145000063 ], [ -135.662424282999893, 57.411769924000097 ], [ -135.660878058999913, 57.403062242000104 ], [ -135.656727667999888, 57.396226304 ], [ -135.650461391999841, 57.391099351000079 ], [ -135.642486131999874, 57.387600002000099 ], [ -135.653228318999879, 57.387884833000115 ], [ -135.666859503999945, 57.38666413 ], [ -135.678537563999839, 57.383246161 ], [ -135.690785285999908, 57.367010809000149 ], [ -135.707427537999934, 57.366522528000147 ], [ -135.823557094999899, 57.386175848000036 ], [ -135.847971157999922, 57.394354559000121 ], [ -135.840646938999924, 57.414496161000059 ], [ -135.853871222999942, 57.425034898000106 ], [ -135.896351691999939, 57.435288804000052 ], [ -135.934437628999916, 57.452215887000037 ], [ -135.949086066999939, 57.461859442 ], [ -135.950347459999932, 57.469427802000055 ], [ -135.961252407999893, 57.483465887000094 ], [ -135.977406378999973, 57.497137762000037 ], [ -136.012440558999856, 57.517889716000028 ], [ -135.982533331999974, 57.52415599199999 ], [ -135.946766730999855, 57.51634349199999 ], [ -135.889556443999908, 57.489935614 ], [ -135.838978644999912, 57.454982815000093 ], [ -135.810210740999963, 57.439886786000088 ], [ -135.779693162999934, 57.435288804000052 ], [ -135.800892706999917, 57.465806382 ], [ -135.836577928999958, 57.488714911000088 ], [ -136.039418097999942, 57.57689036699999 ], [ -136.073882615999935, 57.607326565000122 ], [ -136.061024542999917, 57.611517645000063 ], [ -136.047718878999888, 57.613226630000085 ], [ -136.01927649599989, 57.613470770000035 ], [ -136.024403449999909, 57.601263739000146 ], [ -136.018544074999852, 57.593980210000112 ], [ -136.006092902999939, 57.591376044000029 ], [ -135.991322394999941, 57.592962958000058 ], [ -135.996449347999942, 57.607489325000088 ], [ -135.985503709999904, 57.613226630000085 ], [ -135.950347459999932, 57.613470770000035 ], [ -135.950347459999932, 57.620917059000092 ], [ -135.969309048999861, 57.622992255000113 ], [ -136.005726691999939, 57.632228908000073 ], [ -136.01927649599989, 57.633978583000058 ], [ -136.050404425999972, 57.628607489000032 ], [ -136.057118292999917, 57.630560614000061 ], [ -136.065581834999961, 57.639146226000079 ], [ -136.075917120999861, 57.647040106000063 ], [ -136.084584113999966, 57.648504950000117 ], [ -136.088205532999837, 57.637640692000119 ], [ -136.09666907499988, 57.622951565000122 ], [ -136.11546790299991, 57.621649481000119 ], [ -136.134266730999883, 57.630113023000078 ], [ -136.14281165299991, 57.644761460000083 ], [ -136.136545376999834, 57.657538153000118 ], [ -136.121449347999942, 57.669826565000065 ], [ -136.103505011999914, 57.678941148000078 ], [ -136.088205532999837, 57.682359117000075 ], [ -136.088205532999837, 57.688544012000037 ], [ -136.207630988999881, 57.748277085000112 ], [ -136.225697394999912, 57.766587632000082 ], [ -136.224720831999946, 57.784816799000154 ], [ -136.238392706999974, 57.79222239800005 ], [ -136.260365363999881, 57.77610911699999 ], [ -136.277251756999874, 57.775336005000057 ], [ -136.292836066999968, 57.785386460000112 ], [ -136.310373501999919, 57.801825262000122 ], [ -136.319935675999886, 57.806830145000063 ], [ -136.343576626999834, 57.81549713700015 ], [ -136.348255988999938, 57.822333075000174 ], [ -136.352284308999913, 57.83417389500012 ], [ -136.362416144999969, 57.840155341000141 ], [ -136.375884568999936, 57.841457424000154 ], [ -136.389800584999932, 57.839422919000029 ], [ -136.398304816999968, 57.821356512000094 ], [ -136.405873175999915, 57.81549713700015 ], [ -136.41649329299986, 57.825751044000086 ], [ -136.417225714999887, 57.835028387000037 ], [ -136.405913865999906, 57.854478257000139 ], [ -136.394846157999893, 57.885687567000119 ], [ -136.358225063999839, 57.913641669000143 ], [ -136.348255988999938, 57.928778387000037 ], [ -136.351063605999911, 57.935614325000145 ], [ -136.365956183999856, 57.952704169000114 ], [ -136.369374152999853, 57.963568427 ], [ -136.364369269999941, 57.975775458000058 ], [ -136.353138800999915, 57.983221747000144 ], [ -136.340443488999938, 57.98847077000012 ], [ -136.331166144999912, 57.993963934000149 ], [ -136.311919725999957, 57.995510158000101 ], [ -136.283843553999958, 57.981675523000106 ], [ -136.161732550999915, 57.902411200000145 ], [ -136.058583136999886, 57.850409247000172 ], [ -136.046009894999884, 57.847398179000081 ], [ -136.032948370999918, 57.846869208 ], [ -136.056711391999926, 57.86823151200015 ], [ -136.144032355999911, 57.907782294000114 ], [ -136.220692511999857, 57.968573309000035 ], [ -136.234974738999966, 57.97654857 ], [ -136.25064042899993, 57.98232656500015 ], [ -136.296945766999926, 58.010565497000115 ], [ -136.325510219999899, 58.039292710000083 ], [ -136.40965735599994, 58.079901434000149 ], [ -136.430775519999941, 58.106878973000121 ], [ -136.42418372299997, 58.122463283000016 ], [ -136.405262824999852, 58.133937893000066 ], [ -136.380238410999937, 58.140366929000081 ], [ -136.35570227799991, 58.141058661000116 ], [ -136.334095831999946, 58.135321356000063 ], [ -136.295521613999938, 58.115301825000174 ], [ -136.272531704999892, 58.106878973000121 ], [ -136.28160559799997, 58.117987372000144 ], [ -136.293527798999918, 58.125921942000119 ], [ -136.300038214999915, 58.134588934000121 ], [ -136.293039516999926, 58.147894598000121 ], [ -136.332386847999942, 58.179348049000154 ], [ -136.348947719999899, 58.196437893 ], [ -136.35570227799991, 58.219875393000066 ], [ -136.300404425999943, 58.216782945 ], [ -136.272694464999915, 58.22093333500014 ], [ -136.26317298099994, 58.216945705000157 ], [ -136.25951087099989, 58.199693101000051 ], [ -136.255116339999915, 58.190497137000179 ], [ -136.235951300999943, 58.171942450000174 ], [ -136.231556769999941, 58.158758856000119 ], [ -136.224680141999841, 58.14923737200003 ], [ -136.192738410999937, 58.134263413999989 ], [ -136.183176235999866, 58.120550848000065 ], [ -136.184966600999928, 58.117661851000136 ], [ -136.197987433999913, 58.088771877000013 ], [ -136.193714972999913, 58.083644924000012 ], [ -136.165638800999915, 58.067084052000141 ], [ -136.101185675999943, 58.058539130000113 ], [ -136.14671790299991, 58.08104075700011 ], [ -136.159535285999937, 58.089829820000077 ], [ -136.164784308999913, 58.101955471000068 ], [ -136.16551673099994, 58.119086005 ], [ -136.163319464999944, 58.134466864000146 ], [ -136.159535285999937, 58.141058661000116 ], [ -136.169504360999923, 58.146918036000059 ], [ -136.176991339999887, 58.160711981000148 ], [ -136.180246548999833, 58.176743882000054 ], [ -136.177561001999862, 58.189439195000105 ], [ -136.164621548999861, 58.196600653000147 ], [ -136.145904100999871, 58.201483466000028 ], [ -136.132883266999897, 58.207180080000015 ], [ -136.136586066999939, 58.216782945 ], [ -136.136586066999939, 58.223049221000124 ], [ -136.102935350999928, 58.221625067000062 ], [ -136.07095292899993, 58.211411851000136 ], [ -135.982289191999939, 58.167629299000069 ], [ -135.96532141799986, 58.164007880000028 ], [ -135.957834438999896, 58.17210521000014 ], [ -135.959543423999889, 58.196926174000097 ], [ -135.955881313999868, 58.204250393000095 ], [ -135.944203253999945, 58.216782945 ], [ -135.922840949999909, 58.231919663999989 ], [ -135.813547329999892, 58.274359442000062 ], [ -135.785064256999874, 58.276068427000084 ], [ -135.758859829999864, 58.268622137000094 ], [ -135.714995897999898, 58.229722398000021 ] ] ], [ [ [ -136.059997024999916, 58.267784924000111 ], [ -136.111953242999903, 58.258534061000105 ], [ -136.137572816999949, 58.265089394000185 ], [ -136.143689271999847, 58.285366327000034 ], [ -136.106983680999946, 58.303409468 ], [ -136.045053204999874, 58.318595512000073 ], [ -136.027939233999888, 58.294969352000052 ], [ -136.059997024999916, 58.267784924000111 ] ] ], [ [ [ -152.864857550999915, 58.335150458 ], [ -152.858265753999945, 58.33486562700007 ], [ -152.846058722999885, 58.337591864000117 ], [ -152.842152472999885, 58.336249091000141 ], [ -152.841420050999943, 58.334133205000128 ], [ -152.842844204999892, 58.332993882 ], [ -152.845407680999926, 58.333441473 ], [ -152.842884894999884, 58.332586981000091 ], [ -152.827381964999887, 58.329820054000137 ], [ -152.824045376999948, 58.326849677000112 ], [ -152.819325324999852, 58.321112372000144 ], [ -152.810739712999919, 58.316351630000057 ], [ -152.799875454999949, 58.31659577 ], [ -152.795480923999889, 58.312201239000032 ], [ -152.78844153599988, 58.297919012000122 ], [ -152.782419399999895, 58.288641669000143 ], [ -152.793812628999945, 58.287420966000141 ], [ -152.79544023299988, 58.287746486000074 ], [ -152.802154100999928, 58.288763739000117 ], [ -152.811350063999896, 58.290350653000147 ], [ -152.849354620999918, 58.301336981000034 ], [ -152.902699347999857, 58.30768463700015 ], [ -152.919056769999884, 58.31537506700009 ], [ -152.930612758999899, 58.328558661000116 ], [ -152.924672003999888, 58.338324286000059 ], [ -152.906239386999914, 58.342189846000068 ], [ -152.889597133999871, 58.341253973000093 ], [ -152.864857550999915, 58.335150458 ] ] ], [ [ [ -134.381255662999962, 58.27138906500015 ], [ -134.279367641999841, 58.220648505 ], [ -134.258412238999881, 58.196275132000139 ], [ -134.470326300999943, 58.225816148000106 ], [ -134.512277798999946, 58.223049221000124 ], [ -134.53538977799991, 58.224107164000102 ], [ -134.578033006999931, 58.234686591000141 ], [ -134.597279425999943, 58.237250067000062 ], [ -134.620472785999908, 58.246405341000056 ], [ -134.650786912999877, 58.267726955000015 ], [ -134.674956834999875, 58.29181549700003 ], [ -134.679839647999955, 58.309271552 ], [ -134.662831183999913, 58.31964752800009 ], [ -134.621083136999857, 58.323228257000054 ], [ -134.604115363999881, 58.329779364000146 ], [ -134.584339972999942, 58.340969143000152 ], [ -134.563343878999916, 58.34454987200003 ], [ -134.481841600999871, 58.333482163999989 ], [ -134.446278449999909, 58.315130927000141 ], [ -134.381255662999962, 58.27138906500015 ] ] ], [ [ [ -135.54334452899991, 58.334832238000061 ], [ -135.592221817999899, 58.327751381000112 ], [ -135.670622900999945, 58.330899652000099 ], [ -135.71850340199984, 58.346144494000086 ], [ -135.714230464999901, 58.370477950000023 ], [ -135.654903829999881, 58.379797404 ], [ -135.568898147999903, 58.373150673000012 ], [ -135.54334452899991, 58.334832238000061 ] ] ], [ [ [ -134.917062954999864, 58.373521226000108 ], [ -134.903920050999886, 58.371486721000096 ], [ -134.88817298099994, 58.371771552000112 ], [ -134.874745245999947, 58.367621161000088 ], [ -134.857329881999874, 58.354966539000102 ], [ -134.832183397999927, 58.344183661000031 ], [ -134.809437628999945, 58.330633856000063 ], [ -134.799631313999839, 58.309271552 ], [ -134.796050584999961, 58.298651434000064 ], [ -134.787668423999889, 58.292141018000152 ], [ -134.777577277999939, 58.287298895000063 ], [ -134.768910285999937, 58.281683661000088 ], [ -134.738148566999968, 58.244696356000034 ], [ -134.726877407999893, 58.23517487200003 ], [ -134.718332485999866, 58.229722398000021 ], [ -134.71129309799997, 58.223089911000116 ], [ -134.704009568999965, 58.209947007000082 ], [ -134.696156378999973, 58.174017645000092 ], [ -134.693186001999891, 58.168402411 ], [ -134.604156053999873, 58.171047268000066 ], [ -134.561350063999896, 58.178656317000119 ], [ -134.556385870999918, 58.180650132000054 ], [ -134.551258917999917, 58.1817894550001 ], [ -134.474354620999918, 58.182033596000124 ], [ -134.444650844999899, 58.177394924000012 ], [ -134.390736456999946, 58.155340887000122 ], [ -134.361398891999869, 58.147894598000121 ], [ -134.331613735999838, 58.148138739000089 ], [ -134.186390753999945, 58.168402411 ], [ -134.176991339999915, 58.163519598000121 ], [ -134.167062954999835, 58.152044989000089 ], [ -134.160755988999881, 58.138495184000121 ], [ -134.162180141999869, 58.127386786000088 ], [ -134.169992641999841, 58.123439846000096 ], [ -134.180816209999932, 58.123724677000112 ], [ -134.20376542899993, 58.127386786000088 ], [ -134.190541144999884, 58.115668036 ], [ -134.175852016999897, 58.106878973000121 ], [ -134.1693416009999, 58.077785549000154 ], [ -134.090240037999905, 58.026068427000112 ], [ -134.086415167999917, 57.997707424000097 ], [ -134.029367641999897, 57.96385325700011 ], [ -134.002308722999942, 57.939357815 ], [ -133.979562954999921, 57.877834377000127 ], [ -133.952219204999864, 57.844794012000179 ], [ -133.918568488999938, 57.816839911000145 ], [ -133.888417120999918, 57.798407294000114 ], [ -133.892730272999927, 57.789496161000088 ], [ -133.895008917999888, 57.779486395 ], [ -133.895578579999864, 57.768988348000121 ], [ -133.894642706999974, 57.758042710000055 ], [ -133.891428188999924, 57.746527411000116 ], [ -133.882801886999914, 57.729966539000046 ], [ -133.880970831999946, 57.719916083000086 ], [ -133.879139777999853, 57.693182684000149 ], [ -133.872629360999895, 57.673814195000048 ], [ -133.860015428999873, 57.658026434000092 ], [ -133.803944464999859, 57.610012111000017 ], [ -133.789296027999853, 57.58885325700011 ], [ -133.802805141999926, 57.579291083000115 ], [ -133.826161261999914, 57.58592357 ], [ -133.842152472999942, 57.602118231000034 ], [ -133.856312628999945, 57.622381903000147 ], [ -133.874175584999932, 57.641424872000144 ], [ -133.962961391999869, 57.692328192000062 ], [ -133.966216600999928, 57.703558661000059 ], [ -133.980702277999853, 57.715399481000034 ], [ -133.984038865999878, 57.726467190000065 ], [ -133.985463019999941, 57.738104559000149 ], [ -133.989125128999916, 57.745794989 ], [ -133.993763800999943, 57.75332265800013 ], [ -133.99828040299991, 57.764308986000017 ], [ -134.010609503999945, 57.806586005000113 ], [ -134.023793097999885, 57.82050202 ], [ -134.06883704299986, 57.831610419000029 ], [ -134.088042772999927, 57.84589264500012 ], [ -134.104074673999889, 57.863755601 ], [ -134.114369269999941, 57.880316473000065 ], [ -134.131092902999853, 57.937201239 ], [ -134.141672329999892, 57.956732489000089 ], [ -134.159331834999932, 57.97654857 ], [ -134.182118292999945, 57.995428778000118 ], [ -134.231068488999938, 58.024969794000086 ], [ -134.231068488999938, 58.031195380000142 ], [ -134.211293097999885, 58.026841539000046 ], [ -134.190825975999928, 58.016058661000145 ], [ -134.155344204999835, 57.990220445000134 ], [ -134.172678188999924, 58.013739325000174 ], [ -134.199615037999905, 58.040716864000146 ], [ -134.230091925999943, 58.062933661 ], [ -134.258046027999882, 58.072170315000065 ], [ -134.272084113999938, 58.073187567000119 ], [ -134.281239386999914, 58.076361395000092 ], [ -134.288197394999884, 58.081854559000121 ], [ -134.295643683999884, 58.089829820000077 ], [ -134.306752081999889, 58.098089911000059 ], [ -134.310129360999923, 58.093410549000126 ], [ -134.307932094999927, 58.084540106000091 ], [ -134.302398240999906, 58.079575914000046 ], [ -134.289133266999897, 58.073879299000069 ], [ -134.276437954999921, 58.05963776200015 ], [ -134.267241990999935, 58.041815497000087 ], [ -134.264556443999965, 58.024969794000086 ], [ -134.290842251999891, 58.035956122000059 ], [ -134.304188605999911, 58.039129950000117 ], [ -134.319203253999916, 58.038641669000029 ], [ -134.319203253999916, 58.031195380000142 ], [ -134.261626756999931, 58.009019273000078 ], [ -134.238107876999891, 57.992824611000017 ], [ -134.224232550999886, 57.969712632000082 ], [ -134.243967251999834, 57.97003815300009 ], [ -134.263539191999911, 57.975897528000033 ], [ -134.299387173999889, 57.993963934000149 ], [ -134.31663977799991, 57.996649481000034 ], [ -134.312245245999918, 57.979437567000119 ], [ -134.292551235999895, 57.946193752000013 ], [ -134.288929816999939, 57.935532945 ], [ -134.274077928999958, 57.906154690000093 ], [ -134.272043423999946, 57.887844143000038 ], [ -134.277821417999917, 57.869940497000144 ], [ -134.286284959999932, 57.852118231000176 ], [ -134.289173956999946, 57.836655992000075 ], [ -134.278228318999908, 57.825751044000086 ], [ -134.251779751999919, 57.856919663999989 ], [ -134.20872962099989, 57.839911200000117 ], [ -134.056996222999885, 57.695868231000063 ], [ -134.04710852799991, 57.683335679000052 ], [ -134.052845831999946, 57.67291901200015 ], [ -134.080230272999927, 57.661932684000092 ], [ -134.065541144999941, 57.650295315000093 ], [ -134.011138475999928, 57.653794663999989 ], [ -133.987416144999912, 57.644761460000083 ], [ -133.96849524599989, 57.632798570000048 ], [ -133.951405402999939, 57.62787506700009 ], [ -133.93785559799997, 57.61855703300013 ], [ -133.929432745999918, 57.592962958000058 ], [ -133.929432745999918, 57.55548737200003 ], [ -133.926177537999877, 57.544419664000017 ], [ -133.899322068999879, 57.506496486000074 ], [ -133.854237433999913, 57.476019598000121 ], [ -133.839995897999927, 57.462632554000109 ], [ -133.860707160999937, 57.456366278000175 ], [ -133.872181769999969, 57.466945705000043 ], [ -133.880441860999866, 57.482163804000024 ], [ -133.89159094999988, 57.489935614 ], [ -133.900949673999918, 57.490668036000116 ], [ -133.906849738999938, 57.491766669000171 ], [ -133.912831183999856, 57.492010809000121 ], [ -133.922596808999913, 57.489935614 ], [ -133.918080206999946, 57.485907294000029 ], [ -133.918120897999927, 57.475775458000086 ], [ -133.922922329999835, 57.468451239000089 ], [ -133.932484503999916, 57.472845770000063 ], [ -133.964222785999965, 57.482163804000024 ], [ -134.039865688999868, 57.495306708000058 ], [ -134.056019660999937, 57.500148830000128 ], [ -134.072824673999946, 57.511053778000118 ], [ -134.076324022999927, 57.508368231000034 ], [ -134.086415167999917, 57.497463283000158 ], [ -134.066965298999889, 57.487982489000061 ], [ -134.056630011999886, 57.484523830000157 ], [ -134.045480923999946, 57.483099677 ], [ -134.045480923999946, 57.476263739000061 ], [ -134.100697394999884, 57.476263739000061 ], [ -134.066273566999939, 57.461371161000116 ], [ -134.01235917899993, 57.458482163999989 ], [ -133.977040167999917, 57.449204820000134 ], [ -133.99828040299991, 57.415472723000121 ], [ -133.979603644999912, 57.413275458000143 ], [ -133.941273566999882, 57.425034898000106 ], [ -133.919504360999923, 57.428534247000115 ], [ -133.914458787999877, 57.431097723000121 ], [ -133.903797980999855, 57.435126044000086 ], [ -133.893218553999901, 57.435003973000036 ], [ -133.888417120999918, 57.42511627800009 ], [ -133.886545376999862, 57.42259349199999 ], [ -133.878732876999862, 57.405340887000179 ], [ -133.877552863999938, 57.401190497000059 ], [ -133.870513475999957, 57.392645575000117 ], [ -133.864491339999944, 57.373928127000156 ], [ -133.864979620999918, 57.355129299000012 ], [ -133.877552863999938, 57.34658437700007 ], [ -133.901722785999937, 57.343329169000029 ], [ -133.915598110999923, 57.334784247000115 ], [ -133.939320441999939, 57.308661200000145 ], [ -133.958078579999892, 57.303697007000025 ], [ -133.982411261999857, 57.308498440000093 ], [ -134.052316860999895, 57.339789130000057 ], [ -134.059925910999937, 57.346747137000037 ], [ -134.063140428999873, 57.353664455000128 ], [ -134.067941860999895, 57.356838283000016 ], [ -134.080230272999927, 57.35276927300005 ], [ -134.078928188999924, 57.346625067000062 ], [ -134.075021938999924, 57.335394598000065 ], [ -134.077137824999937, 57.326076565000122 ], [ -134.093902147999955, 57.325506903000147 ], [ -134.099598761999943, 57.329413153000147 ], [ -134.10289466099988, 57.344671942000119 ], [ -134.107533331999889, 57.35276927300005 ], [ -134.119536912999934, 57.363267320000105 ], [ -134.136830206999946, 57.375311591000028 ], [ -134.156564907999865, 57.384711005000057 ], [ -134.175852016999897, 57.387600002000099 ], [ -134.142241990999963, 57.350165106000148 ], [ -134.131825324999909, 57.32721588700015 ], [ -134.149159308999884, 57.311835028000118 ], [ -134.142323370999947, 57.304510809000121 ], [ -134.134877081999974, 57.298163153000175 ], [ -134.117298956999946, 57.306219794000029 ], [ -134.101429816999939, 57.300238348 ], [ -134.072824673999946, 57.277655341000028 ], [ -134.084787563999896, 57.256415106000063 ], [ -134.099476691999968, 57.256089585000112 ], [ -134.114491339999915, 57.263373114000117 ], [ -134.127430792999917, 57.264634507000139 ], [ -134.135080532999837, 57.253973700000117 ], [ -134.14712480399993, 57.216864325000088 ], [ -134.155344204999835, 57.201971747000144 ], [ -134.167388475999957, 57.191555080000157 ], [ -134.182036912999962, 57.183417059000035 ], [ -134.198841925999972, 57.177720445000048 ], [ -134.217396613999881, 57.174627997000172 ], [ -134.226470506999874, 57.17641836100016 ], [ -134.235991990999878, 57.180568752000099 ], [ -134.245594855999855, 57.182562567000119 ], [ -134.254953579999892, 57.178045966000084 ], [ -134.26146399599989, 57.173000393000152 ], [ -134.285715298999946, 57.161037502000013 ], [ -134.270090298999975, 57.141913153000061 ], [ -134.284779425999886, 57.135931708000115 ], [ -134.310170050999915, 57.135646877000099 ], [ -134.326649542999917, 57.133693752000127 ], [ -134.323557094999899, 57.129828192000147 ], [ -134.319203253999916, 57.120062567 ], [ -134.331450975999871, 57.120794989000117 ], [ -134.340931769999884, 57.123358466000056 ], [ -134.361398891999869, 57.133693752000127 ], [ -134.364572719999927, 57.122992255000113 ], [ -134.369943813999896, 57.115057684000149 ], [ -134.377756313999896, 57.10956452000012 ], [ -134.388091600999871, 57.106390692000062 ], [ -134.380686001999891, 57.101019598 ], [ -134.372303839999915, 57.09690989800005 ], [ -134.363352016999897, 57.094061591000028 ], [ -134.35399329299986, 57.092718817000119 ], [ -134.35399329299986, 57.086493231000148 ], [ -134.404408331999889, 57.067938544000143 ], [ -134.437367316999968, 57.060939846000096 ], [ -134.468617316999939, 57.039129950000031 ], [ -134.484934048999946, 57.031236070000048 ], [ -134.501820441999939, 57.028957424000097 ], [ -134.556304490999935, 57.031236070000048 ], [ -134.574615037999934, 57.029120184000064 ], [ -134.614613410999937, 57.010199286000116 ], [ -134.598459438999896, 57.049505927000112 ], [ -134.598500128999973, 57.069973049000097 ], [ -134.622914191999939, 57.110825914000046 ], [ -134.612863735999866, 57.127183335000055 ], [ -134.594105597999885, 57.141099351000136 ], [ -134.579904751999891, 57.154771226000079 ], [ -134.614369269999912, 57.175279039000131 ], [ -134.624908006999874, 57.18488190300009 ], [ -134.631581183999913, 57.195786851000079 ], [ -134.635568813999896, 57.210760809000121 ], [ -134.633290167999917, 57.224188544000114 ], [ -134.621490037999962, 57.229925848000065 ], [ -134.557687954999835, 57.215643622000172 ], [ -134.52554277299987, 57.215765692000147 ], [ -134.504750128999973, 57.236721096000011 ], [ -134.539702928999901, 57.239935614000061 ], [ -134.556711391999869, 57.244696356000148 ], [ -134.569976365999878, 57.25381094000015 ], [ -134.580474412999934, 57.264634507000139 ], [ -134.583159959999932, 57.269354559000149 ], [ -134.566883917999917, 57.284491278000147 ], [ -134.543568488999881, 57.301092841000113 ], [ -134.516509568999936, 57.309149481000034 ], [ -134.457020636999914, 57.311835028000118 ], [ -134.463775193999965, 57.319525458000143 ], [ -134.48924719999988, 57.336004950000031 ], [ -134.497954881999931, 57.339789130000057 ], [ -134.529896613999938, 57.339789130000057 ], [ -134.546050584999932, 57.342474677000112 ], [ -134.559396938999839, 57.35276927300005 ], [ -134.553822394999941, 57.363023179000081 ], [ -134.560170050999943, 57.386175848000036 ], [ -134.556304490999935, 57.397772528000033 ], [ -134.542103644999941, 57.403387762000037 ], [ -134.522124803999958, 57.403143622000087 ], [ -134.508208787999877, 57.395982164000046 ], [ -134.512277798999946, 57.380764065000065 ], [ -134.402414516999869, 57.360256252000013 ], [ -134.341664191999939, 57.335353908000073 ], [ -134.31297766799986, 57.33234284100017 ], [ -134.321034308999913, 57.344875393000066 ], [ -134.335438605999855, 57.354193427000112 ], [ -134.367583787999934, 57.367092190000122 ], [ -134.367583787999934, 57.373928127000156 ], [ -134.351429816999939, 57.375230210000055 ], [ -134.334787563999896, 57.378851630000113 ], [ -134.319162563999924, 57.38507721600017 ], [ -134.30614173099994, 57.394354559000121 ], [ -134.340972459999875, 57.397040106000091 ], [ -134.422027147999927, 57.385239976000136 ], [ -134.463856574999937, 57.394354559000121 ], [ -134.472727016999897, 57.400702216000141 ], [ -134.497954881999931, 57.428534247000115 ], [ -134.533680792999888, 57.457709052000055 ], [ -134.535511847999942, 57.462632554000109 ], [ -134.548898891999869, 57.468085028000147 ], [ -134.562733527999853, 57.480047919000086 ], [ -134.569162563999896, 57.492010809000121 ], [ -134.560047980999883, 57.497463283000158 ], [ -134.551096157999865, 57.496242580000128 ], [ -134.532582160999937, 57.491115627000127 ], [ -134.521839972999942, 57.489935614 ], [ -134.51235917899993, 57.49213288 ], [ -134.495961066999911, 57.501450914000046 ], [ -134.473255988999966, 57.506781317 ], [ -134.441721157999893, 57.520941473000121 ], [ -134.404530402999882, 57.52643463700015 ], [ -134.35399329299986, 57.544582424000154 ], [ -134.378000454999921, 57.552964585000112 ], [ -134.488148566999939, 57.532700914000102 ], [ -134.541127081999946, 57.511053778000118 ], [ -134.566883917999917, 57.511053778000118 ], [ -134.579741990999935, 57.523016669000143 ], [ -134.604562954999892, 57.563666083000143 ], [ -134.618031378999945, 57.572495835 ], [ -134.638742641999897, 57.579982815000065 ], [ -134.653553839999944, 57.598211981000063 ], [ -134.663482225999928, 57.620794989000117 ], [ -134.669260219999899, 57.641424872000144 ], [ -134.673654751999891, 57.672430731000148 ], [ -134.676665818999879, 57.682359117000075 ], [ -134.700062628999973, 57.706935940000093 ], [ -134.704009568999965, 57.713080145000063 ], [ -134.716053839999887, 57.745794989 ], [ -134.713978644999941, 57.750637111000074 ], [ -134.708078579999921, 57.755845445000077 ], [ -134.702707485999895, 57.768011786000145 ], [ -134.696603969999899, 57.79222239800005 ], [ -134.698882615999935, 57.812486070000048 ], [ -134.714100714999915, 57.855902411000031 ], [ -134.721262173999975, 57.897365627000013 ], [ -134.751210089999944, 57.956732489000089 ], [ -134.762196417999917, 57.972154039000102 ], [ -134.761952277999853, 57.980047919000171 ], [ -134.751210089999944, 57.990220445000134 ], [ -134.766590949999909, 58.005804755000113 ], [ -134.784820115999963, 58.01972077 ], [ -134.800038214999944, 58.035223700000117 ], [ -134.806467251999862, 58.055405992000047 ], [ -134.797474738999938, 58.071763414000046 ], [ -134.75633704299986, 58.094671942000147 ], [ -134.744984503999973, 58.113185940000065 ], [ -134.746327277999882, 58.12433502800009 ], [ -134.751088019999969, 58.135972398 ], [ -134.756174282999893, 58.144924221000124 ], [ -134.758656378999916, 58.147894598000121 ], [ -134.753041144999941, 58.160834052000141 ], [ -134.743763800999943, 58.167181708000086 ], [ -134.735178188999868, 58.171576239000061 ], [ -134.731312628999945, 58.178900458000058 ], [ -134.736154751999834, 58.188666083 ], [ -134.747141079999892, 58.186468817 ], [ -134.768910285999937, 58.175848700000145 ], [ -134.774973110999838, 58.171291408000016 ], [ -134.77476966099988, 58.160305080000157 ], [ -134.772531704999892, 58.146877346000068 ], [ -134.772328253999945, 58.134833075000145 ], [ -134.783680792999917, 58.110500393000095 ], [ -134.797840949999852, 58.112779039000074 ], [ -134.829986131999931, 58.151597398 ], [ -134.843169725999957, 58.172267971000096 ], [ -134.850209113999938, 58.179348049000154 ], [ -134.873768683999884, 58.184963283000158 ], [ -134.891468878999973, 58.192084052000112 ], [ -134.907622850999928, 58.201239325000088 ], [ -134.915679490999878, 58.209947007000082 ], [ -134.907948370999861, 58.230658270000092 ], [ -134.889637824999909, 58.245591539000131 ], [ -134.883615688999896, 58.254706122000115 ], [ -134.912587042999917, 58.257757880000113 ], [ -134.931874152999939, 58.263617255000057 ], [ -134.944894985999923, 58.278631903000175 ], [ -134.952870245999861, 58.298488674000097 ], [ -134.969146287999905, 58.36322663 ], [ -134.970570441999968, 58.38556549700003 ], [ -134.961008266999897, 58.404852606000148 ], [ -134.949289516999897, 58.40949127800009 ], [ -134.936634894999941, 58.405422268000123 ], [ -134.926625128999945, 58.395982164000131 ], [ -134.922515428999901, 58.384711005000113 ], [ -134.917062954999864, 58.373521226000108 ] ] ], [ [ [ -152.606800910999937, 58.468451239000146 ], [ -152.603464321999923, 58.456366278000147 ], [ -152.581654425999943, 58.466620184000178 ], [ -152.555490688999896, 58.467962958000058 ], [ -152.499826626999891, 58.46320221600017 ], [ -152.506174282999922, 58.449408270000063 ], [ -152.521433071999894, 58.428534247000087 ], [ -152.52708899599989, 58.414780992000075 ], [ -152.493763800999886, 58.414048570000048 ], [ -152.478871222999942, 58.410101630000057 ], [ -152.465646938999896, 58.401109117000132 ], [ -152.481312628999888, 58.388983466000141 ], [ -152.484689907999893, 58.373439846000124 ], [ -152.476877407999893, 58.361476955000015 ], [ -152.458851691999882, 58.360174872000115 ], [ -152.449086066999939, 58.366034247000144 ], [ -152.444569464999887, 58.372748114 ], [ -152.438669399999924, 58.376695054 ], [ -152.424672003999888, 58.373765367000075 ], [ -152.414906378999945, 58.369614976000108 ], [ -152.405588344999899, 58.36322663 ], [ -152.401600714999915, 58.354437567000119 ], [ -152.419667120999918, 58.322943427000112 ], [ -152.398548956999946, 58.329046942000033 ], [ -152.375111456999946, 58.344956773000135 ], [ -152.379994269999941, 58.353949286000145 ], [ -152.373483852999925, 58.36163971600017 ], [ -152.363758917999888, 58.379380601000079 ], [ -152.357899542999917, 58.399603583000086 ], [ -152.363270636999914, 58.414780992000075 ], [ -152.349354620999918, 58.421128648000106 ], [ -152.323435024999924, 58.414211330000015 ], [ -152.311756964999915, 58.418524481000091 ], [ -152.298817511999914, 58.426336981000091 ], [ -152.28644771999987, 58.425767320000134 ], [ -152.260202602999925, 58.414780992000075 ], [ -152.263254360999952, 58.41087474199999 ], [ -152.264515753999945, 58.407782294000086 ], [ -152.265370245999947, 58.404730536 ], [ -152.267038540999863, 58.401109117000132 ], [ -152.245920376999948, 58.394964911000059 ], [ -152.260568813999953, 58.388983466000141 ], [ -152.267038540999863, 58.388128973000121 ], [ -152.256784633999928, 58.372015692000062 ], [ -152.236073370999918, 58.360052802000141 ], [ -152.211903449999909, 58.353501695000048 ], [ -152.191273566999882, 58.353949286000145 ], [ -152.151682094999956, 58.385931708000143 ], [ -152.140736456999889, 58.392035223000121 ], [ -152.116810675999943, 58.401109117000132 ], [ -152.107655402999939, 58.389593817 ], [ -152.091867641999897, 58.380682684000149 ], [ -152.083200649999924, 58.373521226000108 ], [ -152.09508216099988, 58.367621161000088 ], [ -152.13609778599988, 58.302964585000055 ], [ -152.154164191999882, 58.261542059000035 ], [ -152.143544074999937, 58.23383209800015 ], [ -152.131947394999941, 58.237982489000089 ], [ -152.120920376999891, 58.255438544000143 ], [ -152.11266028599988, 58.277492580000128 ], [ -152.109364386999943, 58.295314846000039 ], [ -152.09992428299995, 58.311916408000073 ], [ -152.080759243999864, 58.316555080000015 ], [ -152.065622524999867, 58.306341864000061 ], [ -152.068430141999926, 58.278265692000062 ], [ -152.051625128999916, 58.289129950000145 ], [ -152.031320766999897, 58.306708075000174 ], [ -152.014149542999888, 58.32636139500012 ], [ -152.006947394999855, 58.343085028000147 ], [ -152.000803188999896, 58.351874091000028 ], [ -151.987049933999856, 58.348374742000047 ], [ -151.973011847999913, 58.339748440000122 ], [ -151.966013149999924, 58.33283112200003 ], [ -151.965891079999949, 58.320746161000116 ], [ -151.971180792999917, 58.309881903000147 ], [ -151.98582923099994, 58.291896877000013 ], [ -151.968820766999897, 58.284125067 ], [ -151.980905727999868, 58.253973700000088 ], [ -151.972238735999895, 58.237250067000062 ], [ -151.993031378999888, 58.225165106000148 ], [ -152.031361456999889, 58.209662177000141 ], [ -152.047922329999892, 58.196275132000139 ], [ -152.047067837999862, 58.195379950000145 ], [ -152.048410610999952, 58.189601955000072 ], [ -152.051136847999942, 58.182033596000124 ], [ -152.054798956999889, 58.175848700000145 ], [ -152.057484503999859, 58.173529364 ], [ -152.116810675999943, 58.147894598000121 ], [ -152.129994269999884, 58.166164455000015 ], [ -152.196400519999912, 58.185980536000116 ], [ -152.219227667999917, 58.203111070000048 ], [ -152.23265540299991, 58.246771552000055 ], [ -152.246164516999897, 58.268255927000084 ], [ -152.260202602999925, 58.257757880000113 ], [ -152.269032355999911, 58.263576565000065 ], [ -152.276560024999952, 58.264227606000119 ], [ -152.282663540999948, 58.259833075000031 ], [ -152.287546352999925, 58.250921942 ], [ -152.304392055999926, 58.257554429000052 ], [ -152.316477016999926, 58.249172268 ], [ -152.32453365799995, 58.233099677000112 ], [ -152.329090949999909, 58.216782945 ], [ -152.309681769999884, 58.214911200000031 ], [ -152.296742316999882, 58.207098700000031 ], [ -152.29462643099987, 58.197333075000088 ], [ -152.308054165999863, 58.189439195000105 ], [ -152.324330206999889, 58.190863348000093 ], [ -152.353830532999893, 58.205308335000055 ], [ -152.370065883999928, 58.203111070000048 ], [ -152.363880988999853, 58.193426825000088 ], [ -152.354318813999953, 58.189032294000114 ], [ -152.342355923999946, 58.188299872000087 ], [ -152.329090949999909, 58.189439195000105 ], [ -152.33531653599988, 58.173081773000106 ], [ -152.331125454999949, 58.165025132000082 ], [ -152.308054165999863, 58.155340887000122 ], [ -152.282541469999899, 58.138739325000145 ], [ -152.273874477999868, 58.134833075000145 ], [ -152.286854620999861, 58.130682684000121 ], [ -152.309519008999928, 58.135199286000088 ], [ -152.31883704299986, 58.131089585000112 ], [ -152.337269660999908, 58.110541083000086 ], [ -152.342762824999937, 58.106878973000121 ], [ -152.349232550999943, 58.109767971000153 ], [ -152.360422329999949, 58.124090887000037 ], [ -152.369740363999881, 58.127386786000088 ], [ -152.398426886999857, 58.124945380000142 ], [ -152.410715298999918, 58.125677802000084 ], [ -152.424387173999946, 58.131089585000112 ], [ -152.455067511999943, 58.137355861000074 ], [ -152.489369269999912, 58.12836334800015 ], [ -152.522165493999921, 58.10960521 ], [ -152.54820716099988, 58.086411851000079 ], [ -152.558176235999895, 58.100287177000055 ], [ -152.562245245999947, 58.111965236000131 ], [ -152.562936977999868, 58.178778387000179 ], [ -152.560902472999857, 58.196234442000147 ], [ -152.555043097999913, 58.209947007000082 ], [ -152.576649542999917, 58.206691799000126 ], [ -152.588246222999942, 58.197333075000088 ], [ -152.593495245999918, 58.182318427000084 ], [ -152.598622199999909, 58.144842841000141 ], [ -152.603138800999886, 58.132635809000149 ], [ -152.611887173999946, 58.120510158000073 ], [ -152.627064581999946, 58.103461005000113 ], [ -152.632394985999895, 58.094712632000139 ], [ -152.633615688999924, 58.087469794000029 ], [ -152.635935024999895, 58.080308335000083 ], [ -152.644398566999939, 58.072170315000065 ], [ -152.65367591099988, 58.069525458000086 ], [ -152.679554816999882, 58.066799221000011 ], [ -152.708078579999892, 58.052069403000118 ], [ -152.733265753999888, 58.053371486000017 ], [ -152.755848761999943, 58.063381252000099 ], [ -152.76732337099989, 58.079575914000046 ], [ -152.775013800999886, 58.063299872000115 ], [ -152.765817837999919, 58.022853908000073 ], [ -152.777536587999919, 58.000799872000172 ], [ -152.804921027999882, 57.991522528000033 ], [ -152.926828579999892, 58.014878648000106 ], [ -153.014352993999921, 58.045477606000034 ], [ -153.036813930999926, 58.058986721000011 ], [ -153.058298305999926, 58.078599351000079 ], [ -153.066354946999866, 58.097113348000093 ], [ -153.048451300999943, 58.106878973000121 ], [ -153.081166144999855, 58.111029364000061 ], [ -153.126820441999882, 58.10846588700015 ], [ -153.167469855999883, 58.111151434000035 ], [ -153.185047980999911, 58.131089585000112 ], [ -153.229603644999884, 58.16889069200009 ], [ -153.229562954999892, 58.182562567000033 ], [ -153.188465949999909, 58.219875393000066 ], [ -153.161813930999898, 58.219549872000144 ], [ -153.02802486899995, 58.196275132000139 ], [ -153.023508266999897, 58.192043361000017 ], [ -153.014230923999946, 58.178656317000119 ], [ -153.010609503999888, 58.175848700000145 ], [ -153.002390102999868, 58.178045966000141 ], [ -153.000436977999925, 58.18284739800005 ], [ -152.999216274999924, 58.187648830000128 ], [ -152.993234829999892, 58.189439195000105 ], [ -152.971750454999892, 58.185126044000029 ], [ -152.928659633999928, 58.17023346600017 ], [ -152.905100063999896, 58.168402411 ], [ -152.905100063999896, 58.175848700000145 ], [ -153.006906704999949, 58.213364976 ], [ -153.012928839999944, 58.222154039000046 ], [ -153.02704830599987, 58.229803778000175 ], [ -153.043080206999889, 58.235256252000013 ], [ -153.071034308999913, 58.240139065000093 ], [ -153.085072394999941, 58.247870184000092 ], [ -153.109934048999889, 58.27138906500015 ], [ -153.059152798999946, 58.298814195000105 ], [ -153.041696743999893, 58.305568752000127 ], [ -153.019479946999923, 58.307277736000131 ], [ -152.989572719999956, 58.304510809000092 ], [ -152.960886196999894, 58.298041083 ], [ -152.942005988999881, 58.288519598000093 ], [ -152.902333136999943, 58.279852606000091 ], [ -152.846547003999945, 58.28790924700003 ], [ -152.80300859299993, 58.288519598000093 ], [ -152.795358852999897, 58.287258205000072 ], [ -152.793283657999893, 58.286810614000089 ], [ -152.76732337099989, 58.257757880000113 ], [ -152.751820441999882, 58.272650458000058 ], [ -152.753529425999886, 58.285386460000112 ], [ -152.762155727999868, 58.298976955000072 ], [ -152.76732337099989, 58.316107489 ], [ -152.769113735999895, 58.332017320000134 ], [ -152.77485104099992, 58.337062893000152 ], [ -152.78538977799991, 58.341131903000118 ], [ -152.801462368999893, 58.353949286000145 ], [ -152.79047604099992, 58.353094794000143 ], [ -152.779774542999917, 58.353461005000057 ], [ -152.76976477799991, 58.355658270000148 ], [ -152.760487433999856, 58.360174872000115 ], [ -152.785104946999866, 58.370835679000137 ], [ -152.867380337999919, 58.394354559000092 ], [ -152.883371548999946, 58.408596096000011 ], [ -152.861887173999889, 58.414129950000031 ], [ -152.817372199999909, 58.413153387000065 ], [ -152.773508266999954, 58.417710679 ], [ -152.753651495999947, 58.43964264500012 ], [ -152.747670050999943, 58.451564846000153 ], [ -152.734242316999939, 58.45404694200009 ], [ -152.720285610999895, 58.451849677 ], [ -152.712717251999919, 58.449530341000028 ], [ -152.701893683999913, 58.44204336100016 ], [ -152.697499152999939, 58.434556382 ], [ -152.692982550999886, 58.432114976000051 ], [ -152.681630011999914, 58.43964264500012 ], [ -152.67414303299995, 58.450832424000126 ], [ -152.670602993999864, 58.463527736000103 ], [ -152.664784308999913, 58.475287177000084 ], [ -152.65062415299991, 58.483628648000135 ], [ -152.632923956999889, 58.484605210000112 ], [ -152.617421027999882, 58.478745835000083 ], [ -152.606800910999937, 58.468451239000146 ] ] ], [ [ [ -152.483021613999881, 58.480536200000145 ], [ -152.502023891999897, 58.473456122000087 ], [ -152.526437954999949, 58.47654857 ], [ -152.630604620999918, 58.507879950000031 ], [ -152.644398566999939, 58.51845937700007 ], [ -152.639149542999945, 58.528957424000154 ], [ -152.643015102999954, 58.53729889500012 ], [ -152.652455206999889, 58.543280341000028 ], [ -152.66429602799991, 58.546372789000102 ], [ -152.591867641999897, 58.555243231000148 ], [ -152.581735805999926, 58.56248607 ], [ -152.572621222999942, 58.580226955000072 ], [ -152.551218227999897, 58.590521552 ], [ -152.507272915999863, 58.600327867000132 ], [ -152.496652798999918, 58.604966539000074 ], [ -152.472523566999911, 58.620835679 ], [ -152.453684048999889, 58.628159898 ], [ -152.434641079999892, 58.628322658000158 ], [ -152.411081508999928, 58.631537177000112 ], [ -152.389841274999924, 58.636948960000055 ], [ -152.369577602999925, 58.638088283000101 ], [ -152.34898841099988, 58.628322658000158 ], [ -152.350819464999859, 58.620428778000175 ], [ -152.35020911399991, 58.61318594000015 ], [ -152.347482876999948, 58.606512762000094 ], [ -152.342762824999937, 58.600327867000132 ], [ -152.370350714999944, 58.575262762000037 ], [ -152.374867316999911, 58.56378815300009 ], [ -152.363270636999914, 58.551947333000115 ], [ -152.456044074999909, 58.50287506700009 ], [ -152.483021613999881, 58.480536200000145 ] ] ], [ [ [ -160.268045798999907, 58.638146242000104 ], [ -160.27718012099993, 58.636692727000181 ], [ -160.271296715999881, 58.651764529000118 ], [ -160.277877055999852, 58.665234125000111 ], [ -160.294265463999864, 58.671120751000032 ], [ -160.316259675999902, 58.683487176000042 ], [ -160.31415768099987, 58.689764716000028 ], [ -160.31415768099987, 58.698228257000082 ], [ -160.307632299999881, 58.705193458000124 ], [ -160.301547225999911, 58.708951698000035 ], [ -160.310747395999897, 58.715856506000179 ], [ -160.301242434999921, 58.729353976000155 ], [ -160.278065558999913, 58.718573309000149 ], [ -160.275987702999856, 58.704520917000181 ], [ -160.277449021999871, 58.691038961000132 ], [ -160.275867098999925, 58.679436258000166 ], [ -160.258737758999899, 58.678615627000013 ], [ -160.248158331999946, 58.67177969 ], [ -160.243845180999926, 58.662665106000091 ], [ -160.252449469999902, 58.651211367000101 ], [ -160.268045798999907, 58.638146242000104 ] ] ], [ [ [ -160.417185024999924, 58.681789455000072 ], [ -160.426136847999857, 58.680365302000112 ], [ -160.43309485599994, 58.684637762000122 ], [ -160.435536261999886, 58.691148179000109 ], [ -160.423695441999939, 58.724025783000016 ], [ -160.415353969999956, 58.738348700000088 ], [ -160.405997691999943, 58.751282330000052 ], [ -160.391468878999888, 58.73769765800013 ], [ -160.384592251999891, 58.730861721000124 ], [ -160.381947394999884, 58.726629950000088 ], [ -160.381459113999881, 58.721258856000063 ], [ -160.384226040999948, 58.710760809000178 ], [ -160.393015102999925, 58.699652411000145 ], [ -160.405344204999892, 58.689398505000113 ], [ -160.417185024999924, 58.681789455000072 ] ] ], [ [ [ -160.824211574999879, 58.654634656000113 ], [ -160.845091514999865, 58.634062308000139 ], [ -160.86057095599989, 58.614707383000095 ], [ -160.868467967999862, 58.592082448000113 ], [ -160.89785828499987, 58.570343310000155 ], [ -160.936059063999892, 58.559006034 ], [ -160.96625316399988, 58.549508364000118 ], [ -161.018937562999895, 58.558916075000027 ], [ -161.040547906999876, 58.55806141 ], [ -161.053562494999881, 58.550874314000069 ], [ -161.074125507999895, 58.54692394100006 ], [ -161.085978939999904, 58.553326076000147 ], [ -161.076547286999869, 58.572176387000113 ], [ -161.080416198999899, 58.580436518000013 ], [ -161.090067274999882, 58.589850651000106 ], [ -161.075424467999881, 58.600747761000051 ], [ -161.077818404999903, 58.611015747000081 ], [ -161.079486024999852, 58.629784047 ], [ -161.110178188999953, 58.651271877000127 ], [ -161.140311274999874, 58.668943513000087 ], [ -161.171902986999896, 58.690753703000055 ], [ -161.162094814999875, 58.690534864000156 ], [ -161.078029704999892, 58.639274569000108 ], [ -161.063710264999941, 58.676726219 ], [ -161.061675705999903, 58.700505074 ], [ -161.043844404999874, 58.702133704000104 ], [ -161.005209560999845, 58.716887322 ], [ -160.973087373999931, 58.731786746000083 ], [ -160.947643315999926, 58.737648466000152 ], [ -160.909536551999906, 58.745582714000093 ], [ -160.858243368999865, 58.747364926000117 ], [ -160.833857503999923, 58.75626412300015 ], [ -160.809399876999919, 58.765187682000047 ], [ -160.787576616999928, 58.773509584000081 ], [ -160.767007858999904, 58.775717184000044 ], [ -160.73915142099986, 58.797885165000068 ], [ -160.71224973199989, 58.804015864000164 ], [ -160.704106354999851, 58.813348607000179 ], [ -160.687786444999944, 58.818723910000031 ], [ -160.685923957999933, 58.810838610000147 ], [ -160.699522732999867, 58.792789023000111 ], [ -160.721063954999892, 58.767111383000142 ], [ -160.77263, 58.716292386000177 ], [ -160.800903451999943, 58.679913886000136 ], [ -160.824211574999879, 58.654634656000113 ] ] ], [ [ [ -152.013050910999937, 58.94529857000002 ], [ -152.01313229099992, 58.939846096000153 ], [ -152.042510545999903, 58.929754950000088 ], [ -152.050770636999914, 58.922715562000022 ], [ -152.055165167999917, 58.914292710000083 ], [ -152.065093553999901, 58.911281643000066 ], [ -152.074655727999868, 58.914292710000083 ], [ -152.075144008999871, 58.919663804000137 ], [ -152.070179816999939, 58.926540432000039 ], [ -152.063791469999899, 58.932481187000164 ], [ -152.061838344999956, 58.938096421000168 ], [ -152.062489386999914, 58.942775783000073 ], [ -152.060454881999874, 58.944403387000094 ], [ -152.047271287999934, 58.944240627000127 ], [ -152.044829881999874, 58.946397203000132 ], [ -152.041818813999896, 58.951564846000153 ], [ -152.035227016999897, 58.951686916000128 ], [ -152.013050910999937, 58.94529857000002 ] ] ], [ [ [ -152.273386196999894, 58.959418036000116 ], [ -152.253122524999867, 58.956691799000154 ], [ -152.157785610999952, 58.956691799000154 ], [ -152.157948370999918, 58.952337958000058 ], [ -152.159291144999884, 58.949286200000174 ], [ -152.164011196999923, 58.943019924000126 ], [ -152.176950649999924, 58.939113674000126 ], [ -152.200550910999851, 58.943101304000109 ], [ -152.212391730999911, 58.943019924000126 ], [ -152.221628383999871, 58.93854401200015 ], [ -152.239816860999952, 58.925279039000131 ], [ -152.249663865999878, 58.922512111000074 ], [ -152.24970455599987, 58.922512111000074 ], [ -152.33421790299991, 58.911932684000121 ], [ -152.363270636999914, 58.915716864000146 ], [ -152.363270636999914, 58.922512111000074 ], [ -152.34015865799995, 58.924790757000139 ], [ -152.327219204999949, 58.935044664000074 ], [ -152.323801235999923, 58.951117255000057 ], [ -152.329090949999909, 58.970892645000063 ], [ -152.309071417999917, 58.970404364000089 ], [ -152.273386196999894, 58.959418036000116 ] ] ], [ [ [ -151.646923563999877, 59.103935698000114 ], [ -151.662559555999906, 59.098189803000039 ], [ -151.678359566999859, 59.099919160000141 ], [ -151.699837802999923, 59.097939428000117 ], [ -151.713646687999926, 59.105835305000156 ], [ -151.721582178999881, 59.121897371000088 ], [ -151.70851436399991, 59.130720312 ], [ -151.687858947999928, 59.129656019000052 ], [ -151.670165641999944, 59.118080213999988 ], [ -151.643719647999916, 59.115749133000023 ], [ -151.646923563999877, 59.103935698000114 ] ] ], [ [ [ -151.428280631999883, 59.117301695000052 ], [ -151.438932717999904, 59.107286029000122 ], [ -151.459555899999884, 59.10901380899999 ], [ -151.481583517999923, 59.118187777000102 ], [ -151.508501224999918, 59.128566292000031 ], [ -151.500250539999911, 59.13732668800013 ], [ -151.465133178999849, 59.138190644000119 ], [ -151.44812698599992, 59.136439716000027 ], [ -151.433561007999884, 59.13529206300008 ], [ -151.438209260999884, 59.127182276000028 ], [ -151.428280631999883, 59.117301695000052 ] ] ], [ [ [ -151.788781505999907, 59.153052899000144 ], [ -151.800758342999927, 59.138892749000107 ], [ -151.853312335999931, 59.144766449000102 ], [ -151.893189972999892, 59.144364311000132 ], [ -151.888675805999867, 59.15718263100014 ], [ -151.858987185999865, 59.163867345000185 ], [ -151.816821979999958, 59.170664156000058 ], [ -151.788781505999907, 59.153052899000144 ] ] ], [ [ [ -150.699940558999913, 59.313910223000093 ], [ -150.731638149999895, 59.311509507000054 ], [ -150.761830206999889, 59.316799221000124 ], [ -150.779855923999946, 59.334051825000031 ], [ -150.746205206999917, 59.357855536000116 ], [ -150.723581508999956, 59.36603424700003 ], [ -150.714955206999946, 59.376857815000122 ], [ -150.704172329999949, 59.395453192000119 ], [ -150.681996222999885, 59.40517812700007 ], [ -150.653797980999911, 59.407212632 ], [ -150.626901821999923, 59.399847723 ], [ -150.608591274999867, 59.381170966000028 ], [ -150.655100063999896, 59.332993882000082 ], [ -150.677479620999918, 59.319769598000121 ], [ -150.699940558999913, 59.313910223000093 ] ] ], [ [ [ -153.405873175999915, 59.338568427 ], [ -153.498890753999888, 59.325425523000135 ], [ -153.524525519999941, 59.330267645 ], [ -153.535104946999923, 59.33722565300009 ], [ -153.54511471299989, 59.338934637000094 ], [ -153.552683071999923, 59.343085028000033 ], [ -153.555612758999956, 59.357611395000092 ], [ -153.550160285999937, 59.366888739000117 ], [ -153.538156704999892, 59.377101955000072 ], [ -153.525339321999951, 59.385239976 ], [ -153.517770962999919, 59.388617255 ], [ -153.504465298999889, 59.391750393000066 ], [ -153.476755337999919, 59.405422268 ], [ -153.463449673999889, 59.408514716000084 ], [ -153.39793860599994, 59.408514716000084 ], [ -153.357411261999914, 59.378119208000115 ], [ -153.354603644999884, 59.365179755000113 ], [ -153.376820441999939, 59.347723700000145 ], [ -153.405873175999915, 59.338568427 ] ] ], [ [ [ -146.340687628999888, 59.411444403000118 ], [ -146.358550584999932, 59.410101630000113 ], [ -146.358631964999915, 59.422430731000176 ], [ -146.323597785999937, 59.452134507000025 ], [ -146.313099738999938, 59.455755927000055 ], [ -146.308216925999886, 59.447088934000149 ], [ -146.322417772999898, 59.425848700000088 ], [ -146.340687628999888, 59.411444403000118 ] ] ], [ [ [ -150.302194790999863, 59.44916413 ], [ -150.303700324999909, 59.430487372000115 ], [ -150.314401821999951, 59.422186591000028 ], [ -150.321278449999852, 59.422349351 ], [ -150.325306769999941, 59.427476304000109 ], [ -150.328195766999954, 59.433539130000028 ], [ -150.331410285999908, 59.436428127000127 ], [ -150.338327602999925, 59.435248114000032 ], [ -150.349110480999911, 59.430243231000148 ], [ -150.355336066999882, 59.429632880000113 ], [ -150.379099087999862, 59.431382554000109 ], [ -150.385568813999896, 59.428656317000119 ], [ -150.396921352999954, 59.422186591000028 ], [ -150.415353969999899, 59.407131252000013 ], [ -150.426991339999915, 59.401678778000175 ], [ -150.443470831999889, 59.402289130000142 ], [ -150.423695441999882, 59.435980536000145 ], [ -150.410511847999913, 59.446275132000054 ], [ -150.334828253999916, 59.456976630000085 ], [ -150.306507941999882, 59.464260158000101 ], [ -150.294626430999926, 59.464585679000109 ], [ -150.293894008999899, 59.456976630000085 ], [ -150.302194790999863, 59.44916413 ] ] ], [ [ [ -144.578846808999913, 59.817775783000073 ], [ -144.605295376999891, 59.813177802000055 ], [ -144.552357550999943, 59.873236395000148 ], [ -144.53384355399993, 59.882066148000106 ], [ -144.509348110999895, 59.888983466000113 ], [ -144.442005988999881, 59.937323309000121 ], [ -144.392974412999905, 59.956610419000143 ], [ -144.341786261999857, 59.9845238300001 ], [ -144.308094855999855, 59.988755601000108 ], [ -144.245757615999878, 60.007554429000081 ], [ -144.208607550999886, 60.011786200000088 ], [ -144.213286912999877, 60.002264716000084 ], [ -144.220814581999946, 59.995794989000089 ], [ -144.23062089799987, 59.992377020000092 ], [ -144.242176886999914, 59.991359768 ], [ -144.37710527299987, 59.932359117000075 ], [ -144.403716600999928, 59.927191473000065 ], [ -144.412180141999954, 59.920355536000145 ], [ -144.418934699999909, 59.911525783000101 ], [ -144.427723761999857, 59.902533270000063 ], [ -144.554595506999902, 59.827093817000119 ], [ -144.578846808999913, 59.817775783000073 ] ] ], [ [ [ -147.995025193999908, 60.03266022300015 ], [ -148.081166144999884, 59.971665757000082 ], [ -148.112904425999943, 59.960842190000065 ], [ -148.142160610999952, 59.94672272300015 ], [ -148.155954555999955, 59.943548895000092 ], [ -148.244984503999888, 59.943548895000092 ], [ -148.229115363999938, 59.949367580000128 ], [ -148.196237758999928, 59.953355210000112 ], [ -148.182321743999864, 59.964056708000115 ], [ -148.18915768099987, 59.963446356000176 ], [ -148.203317837999919, 59.964341539000074 ], [ -148.210194464999915, 59.964056708000115 ], [ -148.205515102999897, 59.96946849199999 ], [ -148.20335852799991, 59.97284577 ], [ -148.199574347999885, 59.975246486000131 ], [ -148.18976803299995, 59.977687893000066 ], [ -148.18976803299995, 59.9845238300001 ], [ -148.197987433999941, 59.983954169000029 ], [ -148.214955206999917, 59.985052802000084 ], [ -148.223255988999881, 59.9845238300001 ], [ -148.223255988999881, 59.991359768 ], [ -148.202992316999882, 59.99555084800015 ], [ -148.186838344999899, 59.993150132 ], [ -148.172840949999852, 59.985663153000033 ], [ -148.159372524999867, 59.974269924000069 ], [ -148.14484615799995, 59.972398179000024 ], [ -148.10606848899991, 59.99209219000015 ], [ -148.078195766999954, 60.00104401200015 ], [ -148.032093878999945, 60.025458075000031 ], [ -148.026071743999921, 60.030829169000171 ], [ -148.020090298999889, 60.037787177000084 ], [ -148.013417120999947, 60.043931382000054 ], [ -148.005034959999875, 60.046576239000117 ], [ -147.993072068999879, 60.044582424000097 ], [ -147.990467902999853, 60.039496161000088 ], [ -147.995025193999908, 60.03266022300015 ] ] ], [ [ [ -147.981760219999899, 59.959051825000088 ], [ -148.035715298999889, 59.952582098000093 ], [ -148.046376105999911, 59.95709870000006 ], [ -148.035511847999942, 59.974269924000069 ], [ -148.007517055999926, 59.996242580000072 ], [ -147.947255011999857, 60.029038804 ], [ -147.891753709999904, 60.069037177000141 ], [ -147.876576300999915, 60.076361395000148 ], [ -147.861398891999926, 60.080755927000112 ], [ -147.846587693999879, 60.081244208000115 ], [ -147.829701300999886, 60.077866929 ], [ -147.819976365999935, 60.068915106000148 ], [ -147.82664954299986, 60.052801825000088 ], [ -147.843251105999911, 60.030462958000058 ], [ -147.867502407999922, 60.00885651200015 ], [ -147.89517167899993, 59.99042389500012 ], [ -147.938588019999884, 59.971909898000106 ], [ -147.981760219999899, 59.959051825000088 ] ] ], [ [ [ -147.953114386999914, 60.129461981000148 ], [ -147.953236456999889, 60.121649481000148 ], [ -147.914784308999884, 60.125474351000079 ], [ -147.899037238999938, 60.121975002000099 ], [ -147.881255662999934, 60.107367255000057 ], [ -147.896473761999914, 60.095607815000093 ], [ -147.918365037999877, 60.086004950000117 ], [ -147.963775193999936, 60.073919989 ], [ -148.019154425999943, 60.074652411000145 ], [ -148.044422980999883, 60.070298570000048 ], [ -148.059396938999896, 60.052801825000088 ], [ -148.050852016999897, 60.054266669000143 ], [ -148.032093878999945, 60.052801825000088 ], [ -148.093332485999952, 60.017767645 ], [ -148.124867316999882, 60.004136460000055 ], [ -148.14130611899995, 60.011786200000088 ], [ -148.13312740799995, 60.031073309000121 ], [ -148.109567837999919, 60.056301174000097 ], [ -148.080555792999917, 60.078192450000117 ], [ -148.045399542999945, 60.091782945000077 ], [ -148.018259243999921, 60.110581773000106 ], [ -148.001332160999851, 60.114813544000143 ], [ -147.998605923999889, 60.121161200000174 ], [ -147.975656704999892, 60.147894598000093 ], [ -147.970041469999899, 60.152736721000068 ], [ -147.966460740999935, 60.156561591000084 ], [ -147.95921790299991, 60.144964911000059 ], [ -147.953114386999914, 60.129461981000148 ] ] ], [ [ [ -152.558216925999886, 60.108343817000147 ], [ -152.580148891999897, 60.107245184000092 ], [ -152.611154751999919, 60.131048895000092 ], [ -152.62828528599988, 60.14862702000012 ], [ -152.635690883999928, 60.157945054000052 ], [ -152.638132290999891, 60.16730377800009 ], [ -152.632394985999895, 60.174790757000054 ], [ -152.62047278599988, 60.179266669000029 ], [ -152.604603644999941, 60.17861562700007 ], [ -152.58617102799991, 60.17206452 ], [ -152.569447394999884, 60.158758856000176 ], [ -152.563181118999921, 60.149969794000114 ], [ -152.558298305999955, 60.134995835000083 ], [ -152.558216925999886, 60.108343817000147 ] ] ], [ [ [ -148.081247524999952, 60.134995835000083 ], [ -148.08735104099992, 60.11823151200015 ], [ -148.090402798999946, 60.100246486000017 ], [ -148.099232550999886, 60.083482164000017 ], [ -148.113229946999951, 60.071234442000119 ], [ -148.131703253999888, 60.066473700000031 ], [ -148.137318488999881, 60.063544012000094 ], [ -148.159331834999875, 60.04315827000012 ], [ -148.159372524999867, 60.04315827000012 ], [ -148.168812628999888, 60.037746486000074 ], [ -148.258615688999896, 60.023138739000061 ], [ -148.286000128999888, 60.023993231000148 ], [ -148.313832160999937, 60.032294012000037 ], [ -148.287342902999853, 60.042669989000146 ], [ -148.219960089999944, 60.039780992000104 ], [ -148.18976803299995, 60.046576239000117 ], [ -148.213246222999913, 60.054266669000143 ], [ -148.299631313999896, 60.052801825000088 ], [ -148.299631313999896, 60.060248114000061 ], [ -148.271188930999898, 60.067206122000144 ], [ -148.215809699999909, 60.073675848000065 ], [ -148.18976803299995, 60.087551174000154 ], [ -148.263010219999899, 60.088690497000087 ], [ -148.285959438999896, 60.094387111000074 ], [ -148.27122962099989, 60.102972723000093 ], [ -148.140817837999862, 60.147894598000093 ], [ -148.118723110999895, 60.150295315000122 ], [ -148.114003058999884, 60.12909577000012 ], [ -148.101511196999866, 60.135687567000033 ], [ -148.088083462999862, 60.146714585000055 ], [ -148.077463344999927, 60.159979559000092 ], [ -148.069325324999909, 60.18695709800015 ], [ -148.060617641999926, 60.195135809000149 ], [ -148.049997524999895, 60.195705471000124 ], [ -148.040964321999866, 60.186590887000037 ], [ -148.051706508999899, 60.16893138200011 ], [ -148.081247524999952, 60.134995835000083 ] ] ], [ [ [ -147.472727016999897, 60.229559637000179 ], [ -147.491810675999886, 60.228827216000141 ], [ -147.494862433999856, 60.23712799700003 ], [ -147.492258266999954, 60.25259023600016 ], [ -147.500965949999937, 60.258368231000119 ], [ -147.49388587099989, 60.263128973000121 ], [ -147.467844204999892, 60.266669012000094 ], [ -147.450062628999945, 60.272284247000087 ], [ -147.444569464999915, 60.273098049000012 ], [ -147.438954230999911, 60.27334219000015 ], [ -147.366037563999896, 60.299017645000035 ], [ -147.360422329999892, 60.300726630000113 ], [ -147.349232550999886, 60.301703192 ], [ -147.343413865999906, 60.298732815000093 ], [ -147.343861456999889, 60.285101630000142 ], [ -147.347808397999898, 60.2735863300001 ], [ -147.370269334999875, 60.262844143000095 ], [ -147.472727016999897, 60.229559637000179 ] ] ], [ [ [ -147.114165818999879, 60.356675523000078 ], [ -147.120269334999875, 60.347601630000085 ], [ -147.011057094999927, 60.347601630000085 ], [ -147.026519334999847, 60.330755927000084 ], [ -147.107248501999862, 60.286200262000179 ], [ -147.080799933999884, 60.280340887000037 ], [ -146.922271287999877, 60.313462632000082 ], [ -146.922271287999877, 60.306626695000048 ], [ -146.92870032499988, 60.304836330000072 ], [ -146.933013475999871, 60.30141836100016 ], [ -146.937001105999855, 60.297186591000056 ], [ -146.942128058999884, 60.292954820000105 ], [ -146.970570441999882, 60.25918203300013 ], [ -147.010487433999856, 60.233710028000033 ], [ -147.233794725999871, 60.133124091000113 ], [ -147.328195766999926, 60.070257880000057 ], [ -147.371083136999914, 60.028876044000029 ], [ -147.376616990999935, 60.015529690000122 ], [ -147.369496222999885, 60.006781317000147 ], [ -147.358794725999928, 59.999660549000097 ], [ -147.353667772999927, 59.991359768 ], [ -147.367014126999948, 59.97284577 ], [ -147.427235480999911, 59.976629950000031 ], [ -147.452992316999939, 59.967474677000141 ], [ -147.483550584999875, 59.946966864000089 ], [ -147.487416144999884, 59.943548895000092 ], [ -147.490305141999897, 59.939195054 ], [ -147.478667772999927, 59.929754950000174 ], [ -147.456125454999921, 59.915594794000143 ], [ -147.453602667999917, 59.895900783000016 ], [ -147.468251105999911, 59.876776434000035 ], [ -147.492339647999927, 59.861802476 ], [ -147.518788214999915, 59.854193427000055 ], [ -147.601144985999952, 59.866766669000143 ], [ -147.643706834999932, 59.862616278000118 ], [ -147.668771938999896, 59.819281317000119 ], [ -147.68423417899993, 59.817084052000141 ], [ -147.716786261999914, 59.820013739000061 ], [ -147.800607876999891, 59.803290106000034 ], [ -147.840240037999934, 59.786525783000016 ], [ -147.861439581999917, 59.78245677300005 ], [ -147.878773566999911, 59.783148505 ], [ -147.915394660999937, 59.792669989 ], [ -147.915394660999937, 59.799546617000104 ], [ -147.898793097999885, 59.810207424000126 ], [ -147.894439256999874, 59.833807684000178 ], [ -147.886138475999928, 59.857611395000063 ], [ -147.85765540299991, 59.868475653000147 ], [ -147.825428839999859, 59.870794989000117 ], [ -147.793771938999896, 59.877752997000115 ], [ -147.76390540299991, 59.888495184000121 ], [ -147.737212693999879, 59.902533270000063 ], [ -147.760121222999885, 59.907660223000093 ], [ -147.790679490999906, 59.91095612200003 ], [ -147.80492102799991, 59.920355536000145 ], [ -147.77879798099994, 59.943548895000092 ], [ -147.752430792999945, 59.953843492000019 ], [ -147.695708787999877, 59.962144273000078 ], [ -147.66893469999988, 59.970892645000148 ], [ -147.674305792999917, 59.980292059000178 ], [ -147.682525193999936, 59.987046617000104 ], [ -147.703114386999857, 59.997503973000093 ], [ -147.680978969999899, 60.008734442 ], [ -147.533111131999902, 60.058579820000048 ], [ -147.515044725999871, 60.070135809000178 ], [ -147.424631313999896, 60.111232815000065 ], [ -147.380197719999899, 60.139593817 ], [ -147.387806769999941, 60.162665106000148 ], [ -147.374094204999892, 60.170558986000131 ], [ -147.342152472999885, 60.179754950000117 ], [ -147.329741990999878, 60.187201239 ], [ -147.303822394999884, 60.226874091000113 ], [ -147.295643683999856, 60.232163804 ], [ -147.285878058999913, 60.231024481000148 ], [ -147.265533006999931, 60.225897528000033 ], [ -147.254709438999953, 60.224676825000117 ], [ -147.246693488999881, 60.226874091000113 ], [ -147.228830532999922, 60.23623281500015 ], [ -147.201161261999914, 60.242173570000077 ], [ -147.19701087099989, 60.251206773 ], [ -147.202870245999918, 60.269110419000029 ], [ -147.203846808999913, 60.27464427300005 ], [ -147.206044074999909, 60.281561591000141 ], [ -147.20836341099988, 60.286566473 ], [ -147.209624803999958, 60.286200262000179 ], [ -147.207590298999946, 60.294989325000145 ], [ -147.204253709999932, 60.29791901200015 ], [ -147.200266079999949, 60.300116278000147 ], [ -147.196034308999913, 60.306626695000048 ], [ -147.191761847999885, 60.310248114000117 ], [ -147.184681769999941, 60.31354401200015 ], [ -147.178049282999893, 60.318589585 ], [ -147.175526495999861, 60.327093817000119 ], [ -147.179921027999939, 60.33201732 ], [ -147.198475714999944, 60.338934637000179 ], [ -147.202870245999918, 60.341376044000114 ], [ -147.189605272999898, 60.362209377000099 ], [ -147.155140753999888, 60.376450914000017 ], [ -147.11554928299995, 60.381659247000087 ], [ -147.086781378999888, 60.375555731000091 ], [ -147.106516079999949, 60.363918361000103 ], [ -147.114165818999879, 60.356675523000078 ] ] ], [ [ [ -148.014108852999897, 60.308335679000052 ], [ -148.018422003999888, 60.299790757000139 ], [ -148.042225714999887, 60.286566473 ], [ -148.073312954999892, 60.285142320000134 ], [ -148.104440883999871, 60.292873440000122 ], [ -148.12828528599988, 60.306626695000048 ], [ -148.135121222999885, 60.299790757000139 ], [ -148.127064581999946, 60.334947007 ], [ -148.075632290999948, 60.36937083500014 ], [ -148.014393683999913, 60.387925523000135 ], [ -147.977447068999879, 60.375555731000091 ], [ -147.983062303999873, 60.366441148000106 ], [ -148.004750128999859, 60.344468492000019 ], [ -148.006214972999913, 60.335638739000146 ], [ -148.014108852999897, 60.308335679000052 ] ] ], [ [ [ -145.119699673999946, 60.32440827000012 ], [ -145.12328040299991, 60.311753648000078 ], [ -145.136586066999939, 60.306626695000048 ], [ -145.145904100999957, 60.308905341000028 ], [ -145.163197394999884, 60.31867096600017 ], [ -145.181955532999922, 60.319769598 ], [ -145.202259894999941, 60.314642645 ], [ -145.211984829999892, 60.313462632000082 ], [ -145.233469204999892, 60.31732819200009 ], [ -145.261870897999927, 60.332668361000046 ], [ -145.284291144999941, 60.333929755000142 ], [ -145.284291144999941, 60.341376044000114 ], [ -145.174427863999881, 60.382391669000029 ], [ -145.11978105399993, 60.409816799000069 ], [ -145.095082160999937, 60.41632721600017 ], [ -145.092518683999913, 60.402167059000035 ], [ -145.099232550999886, 60.38886139500012 ], [ -145.114125128999916, 60.369940497000087 ], [ -145.11978105399993, 60.355047919000143 ], [ -145.119699673999946, 60.32440827000012 ] ] ], [ [ [ -166.102731899999952, 60.391994533000101 ], [ -166.092152472999913, 60.374660549000012 ], [ -166.080148891999897, 60.359320380000057 ], [ -166.061838344999927, 60.347601630000085 ], [ -166.067941860999895, 60.344671942000147 ], [ -166.070627407999893, 60.341620184000149 ], [ -166.072377081999889, 60.338080145000063 ], [ -166.075510219999956, 60.333929755000142 ], [ -166.051747199999852, 60.327948309000121 ], [ -165.988229946999951, 60.320624091000113 ], [ -165.921254035999851, 60.327093817000119 ], [ -165.897206183999913, 60.344427802000027 ], [ -165.886789516999926, 60.347601630000085 ], [ -165.810495571999894, 60.345892645000063 ], [ -165.787546352999897, 60.341376044000114 ], [ -165.779286261999914, 60.336981512000037 ], [ -165.766468878999888, 60.324652411000088 ], [ -165.760202602999925, 60.320949611000131 ], [ -165.74555416599992, 60.319037177000084 ], [ -165.718454555999898, 60.319525458000058 ], [ -165.70555579299986, 60.313462632000082 ], [ -165.726063605999911, 60.306626695000048 ], [ -165.684437628999859, 60.299790757000139 ], [ -165.686960415999863, 60.292873440000122 ], [ -165.688547329999892, 60.289984442 ], [ -165.691883917999917, 60.286200262000179 ], [ -165.679188605999883, 60.278509833000058 ], [ -165.685414191999939, 60.266831773000078 ], [ -165.700876430999955, 60.256089585000055 ], [ -165.715809699999909, 60.251410223000121 ], [ -165.718210415999948, 60.245550848000093 ], [ -165.705515102999868, 60.232367255000142 ], [ -165.678293423999889, 60.211086330000157 ], [ -165.721262173999946, 60.181586005 ], [ -165.732899542999945, 60.176336981000091 ], [ -165.724680141999954, 60.163885809000178 ], [ -165.711374477999925, 60.157049872000172 ], [ -165.695139126999891, 60.154730536 ], [ -165.678293423999889, 60.155829169000143 ], [ -165.682972785999908, 60.151068427000055 ], [ -165.687570766999926, 60.145209052000112 ], [ -165.691883917999917, 60.142157294000114 ], [ -165.691883917999917, 60.135321356000091 ], [ -165.682850714999915, 60.133856512000037 ], [ -165.679514126999891, 60.13182200700011 ], [ -165.67719479099992, 60.12815989800005 ], [ -165.671457485999952, 60.121649481000148 ], [ -165.681223110999895, 60.106756903000118 ], [ -165.693714972999913, 60.09320709800015 ], [ -165.726063605999911, 60.066473700000031 ], [ -165.691395636999943, 60.06777578300013 ], [ -165.67719479099992, 60.063177802 ], [ -165.66620846299989, 60.038763739000146 ], [ -165.653513149999924, 60.032904364 ], [ -165.623036261999857, 60.025458075000031 ], [ -165.630930141999954, 60.014797268000095 ], [ -165.63642330599987, 60.009670315000065 ], [ -165.643503383999928, 60.00495026200015 ], [ -165.643503383999928, 59.997503973000093 ], [ -165.628854946999923, 59.992905992000047 ], [ -165.613392706999889, 59.975653387000065 ], [ -165.602528449999909, 59.970892645000148 ], [ -165.58885657499988, 59.972601630000057 ], [ -165.557850714999944, 59.983058986000131 ], [ -165.541086391999926, 59.9845238300001 ], [ -165.553822394999884, 59.976507880000057 ], [ -165.567575649999895, 59.97011953300013 ], [ -165.578317837999919, 59.962551174000069 ], [ -165.582102016999954, 59.950995184000149 ], [ -165.569081183999856, 59.950995184000149 ], [ -165.559803839999915, 59.94940827000012 ], [ -165.554758266999869, 59.943548895000092 ], [ -165.554921027999939, 59.934637762000037 ], [ -165.558664516999954, 59.92963288 ], [ -165.56464596299989, 59.925523179000052 ], [ -165.571481899999895, 59.919338283000073 ], [ -165.598622199999909, 59.909654039000131 ], [ -165.692250128999945, 59.90298086100016 ], [ -165.715809699999909, 59.905991929000081 ], [ -165.727487758999899, 59.915757554000109 ], [ -165.742258266999897, 59.924221096000153 ], [ -165.754831508999956, 59.925116278000061 ], [ -165.760202602999925, 59.912543036000059 ], [ -165.771066860999895, 59.906968492000047 ], [ -165.864938930999898, 59.882757880000142 ], [ -165.883778449999909, 59.881008205000157 ], [ -165.927805141999926, 59.882066148000106 ], [ -165.944325324999909, 59.887437242000075 ], [ -165.958566860999923, 59.897528387000037 ], [ -165.973866339999887, 59.903509833000143 ], [ -165.99360104099992, 59.896307684000121 ], [ -165.963693813999924, 59.887884833000058 ], [ -165.979115363999881, 59.876166083000086 ], [ -166.010121222999885, 59.866644598000065 ], [ -166.027088995999861, 59.864691473000121 ], [ -166.04039466099988, 59.857611395000063 ], [ -166.122670050999943, 59.841131903000175 ], [ -166.132517055999955, 59.85822174700003 ], [ -166.187814907999865, 59.862250067 ], [ -166.246693488999938, 59.853908596000124 ], [ -166.26728268099987, 59.833685614 ], [ -166.259592251999948, 59.832709052000112 ], [ -166.215769008999899, 59.820013739000061 ], [ -166.157419399999895, 59.827460028000061 ], [ -166.134226040999863, 59.822333075000031 ], [ -166.11274166599992, 59.810858466000084 ], [ -166.094675258999928, 59.795599677000112 ], [ -166.081735805999926, 59.779038804000052 ], [ -166.104237433999913, 59.76585521 ], [ -166.144113735999895, 59.757961330000128 ], [ -166.182077602999897, 59.756293036000116 ], [ -166.199045376999862, 59.761664130000085 ], [ -166.205881313999896, 59.777899481000119 ], [ -166.222767706999889, 59.794745184000121 ], [ -166.244007941999882, 59.807847398 ], [ -166.275135870999947, 59.816351630000113 ], [ -166.298410610999866, 59.830511786000145 ], [ -166.311716274999895, 59.833685614 ], [ -166.329945441999882, 59.834906317000119 ], [ -166.406442837999862, 59.854803778000118 ], [ -166.438588019999941, 59.85822174700003 ], [ -166.470651821999923, 59.856634833 ], [ -166.500070766999897, 59.847967841000084 ], [ -166.506296352999954, 59.860174872000172 ], [ -166.521107550999943, 59.861029364000089 ], [ -166.555287238999938, 59.854193427000055 ], [ -166.613352016999897, 59.856390692000147 ], [ -166.630441860999923, 59.861029364000089 ], [ -166.670765753999888, 59.885443427000112 ], [ -166.68500729099992, 59.888902085000112 ], [ -166.726633266999869, 59.892401434000121 ], [ -166.748605923999889, 59.897609768 ], [ -166.787831183999913, 59.921128648000078 ], [ -167.020822719999899, 59.991359768 ], [ -167.00096594999988, 60.002346096000068 ], [ -166.993519660999908, 60.00495026200015 ], [ -167.011463995999947, 60.012274481000176 ], [ -167.028269008999956, 60.008937893000152 ], [ -167.044789191999939, 60.001654364000117 ], [ -167.062367316999882, 59.997503973000093 ], [ -167.060129360999895, 60.004584052000055 ], [ -167.060739712999947, 60.008124091000028 ], [ -167.062123175999943, 60.011867580000072 ], [ -167.062367316999882, 60.019273179000052 ], [ -167.074940558999856, 60.010077216000084 ], [ -167.079335089999944, 60.003404039000131 ], [ -167.085519985999923, 59.999212958 ], [ -167.103382941999882, 59.997503973000093 ], [ -167.121937628999888, 60.000718492000047 ], [ -167.15294348899991, 60.015814520000148 ], [ -167.167917446999951, 60.019273179000052 ], [ -167.189808722999885, 60.027777411000088 ], [ -167.21698971299989, 60.047756252000156 ], [ -167.241078253999916, 60.07050202 ], [ -167.254221157999893, 60.087551174000154 ], [ -167.260975714999915, 60.087551174000154 ], [ -167.267893032999893, 60.070298570000048 ], [ -167.286081508999899, 60.06549713700015 ], [ -167.306955532999865, 60.070013739000032 ], [ -167.321848110999923, 60.080755927000112 ], [ -167.321034308999913, 60.084377346000096 ], [ -167.321848110999923, 60.111070054000109 ], [ -167.323719855999883, 60.12099844 ], [ -167.328724738999938, 60.128607489000146 ], [ -167.343576626999891, 60.142157294000114 ], [ -167.436146613999881, 60.195379950000088 ], [ -167.452829555999926, 60.217230536000145 ], [ -167.436472133999899, 60.212062893000123 ], [ -167.421091274999952, 60.211737372000115 ], [ -167.342884894999855, 60.224269924000012 ], [ -167.332712368999921, 60.228461005000142 ], [ -167.321115688999896, 60.235419012000037 ], [ -167.304921027999939, 60.238836981000034 ], [ -167.288075324999937, 60.238714911000059 ], [ -167.274362758999928, 60.235296942000062 ], [ -167.258981899999867, 60.229559637000179 ], [ -167.246896938999868, 60.228257554 ], [ -167.158151821999923, 60.234523830000128 ], [ -166.873972133999871, 60.210638739000061 ], [ -166.820423956999861, 60.217596747000144 ], [ -166.794870571999866, 60.258856512000094 ], [ -166.797922329999892, 60.266831773000078 ], [ -166.80439205599987, 60.27073802300005 ], [ -166.807810024999895, 60.275458075000145 ], [ -166.801706508999899, 60.286200262000179 ], [ -166.79230709499987, 60.292303778000147 ], [ -166.760853644999941, 60.304429429000052 ], [ -166.72130286399991, 60.311102606000119 ], [ -166.667673305999926, 60.327704169000171 ], [ -166.636586066999911, 60.327093817000119 ], [ -166.597889777999853, 60.315130927 ], [ -166.577707485999923, 60.315252997000144 ], [ -166.568959113999881, 60.330511786000116 ], [ -166.566517706999917, 60.350490627000013 ], [ -166.558949347999885, 60.359442450000031 ], [ -166.459217902999853, 60.387152411000116 ], [ -166.421986456999889, 60.384344794000171 ], [ -166.390207485999923, 60.361273505000028 ], [ -166.394642706999889, 60.358221747000115 ], [ -166.399037238999881, 60.352240302 ], [ -166.403879360999952, 60.347601630000085 ], [ -166.379831508999928, 60.348944403000147 ], [ -166.308216925999886, 60.382391669000029 ], [ -166.185373501999919, 60.402167059000035 ], [ -166.189076300999886, 60.38564687700007 ], [ -166.173410610999895, 60.379380601000108 ], [ -166.151560024999952, 60.381170966000113 ], [ -166.136952277999939, 60.388576565000093 ], [ -166.134714321999951, 60.401556708000086 ], [ -166.140858527999939, 60.415594794000029 ], [ -166.157419399999895, 60.436957098000093 ], [ -166.131296352999925, 60.431463934000149 ], [ -166.119007941999882, 60.426214911000088 ], [ -166.108998175999915, 60.416489976000136 ], [ -166.116444464999887, 60.409654039000102 ], [ -166.102731899999952, 60.391994533000101 ] ] ], [ [ [ -146.541574673999889, 60.468573309000178 ], [ -146.544911261999914, 60.464911200000031 ], [ -146.445627407999893, 60.464911200000031 ], [ -146.423247850999957, 60.467922268000123 ], [ -146.401722785999937, 60.473334052000084 ], [ -146.379017706999889, 60.476060289000046 ], [ -146.353098110999895, 60.471136786000088 ], [ -146.362049933999913, 60.453802802 ], [ -146.361643032999893, 60.426214911000088 ], [ -146.366769985999923, 60.409654039000102 ], [ -146.323557094999927, 60.410711981000148 ], [ -146.238392706999946, 60.431626695000134 ], [ -146.15135657499988, 60.438788153000147 ], [ -146.129628058999913, 60.436224677000055 ], [ -146.120350714999944, 60.427069403000175 ], [ -146.129750128999888, 60.422837632000054 ], [ -146.174224412999877, 60.409491278000147 ], [ -146.188628709999875, 60.402167059000035 ], [ -146.093658006999931, 60.410345770000148 ], [ -146.078765428999873, 60.402167059000035 ], [ -146.085682745999861, 60.402655341000028 ], [ -146.090646938999924, 60.400620835 ], [ -146.094878709999875, 60.397894598000121 ], [ -146.09984290299991, 60.395982163999989 ], [ -146.183216925999886, 60.384222723 ], [ -146.188628709999875, 60.382391669000029 ], [ -146.192697719999899, 60.377346096000096 ], [ -146.193959113999938, 60.370754299000012 ], [ -146.194203253999888, 60.364650783000044 ], [ -146.19546464799987, 60.361273505000028 ], [ -146.22398841099988, 60.351385809000092 ], [ -146.251616990999878, 60.350287177000055 ], [ -146.305043097999913, 60.355047919000143 ], [ -146.333607550999886, 60.352240302 ], [ -146.493275519999941, 60.303778387000122 ], [ -146.553944464999915, 60.261216539000074 ], [ -146.578521287999934, 60.249904690000093 ], [ -146.600168423999918, 60.24518463700015 ], [ -146.621245897999927, 60.24868398600016 ], [ -146.648589647999927, 60.257879950000031 ], [ -146.67218990799995, 60.270941473 ], [ -146.682036912999877, 60.286200262000179 ], [ -146.65562903599988, 60.306789455000015 ], [ -146.490305141999954, 60.361273505000028 ], [ -146.504790818999879, 60.37042877800009 ], [ -146.567697719999927, 60.363226630000057 ], [ -146.593332485999895, 60.368109442000119 ], [ -146.579009568999908, 60.375555731000091 ], [ -146.599110480999855, 60.375474351000108 ], [ -146.615956183999856, 60.371079820000134 ], [ -146.647938605999855, 60.355047919000143 ], [ -146.613840298999946, 60.355047919000143 ], [ -146.655588344999899, 60.340643622000172 ], [ -146.70055091099988, 60.35480377800009 ], [ -146.722645636999857, 60.386216539000131 ], [ -146.695708787999905, 60.423325914000046 ], [ -146.660308397999898, 60.430161851000079 ], [ -146.65477454299986, 60.433905341000084 ], [ -146.652088995999918, 60.442206122000172 ], [ -146.645863410999937, 60.451646226 ], [ -146.634348110999895, 60.464911200000031 ], [ -146.612660285999937, 60.478094794000171 ], [ -146.58812415299991, 60.484035549000097 ], [ -146.530629035999908, 60.485419012000179 ], [ -146.530629035999908, 60.477972723 ], [ -146.536122199999937, 60.474839585000112 ], [ -146.539173956999946, 60.471828518000123 ], [ -146.541574673999889, 60.468573309000178 ] ] ], [ [ [ -147.689279751999891, 60.503729559000035 ], [ -147.682606574999909, 60.471136786000088 ], [ -147.65843665299991, 60.479966539000046 ], [ -147.645253058999856, 60.483099677000112 ], [ -147.634510870999918, 60.48167552300005 ], [ -147.627186652999939, 60.474432684000121 ], [ -147.628570115999935, 60.466986395000148 ], [ -147.634755011999886, 60.460882880000057 ], [ -147.641672329999892, 60.457464911000145 ], [ -147.641672329999892, 60.450628973000121 ], [ -147.633778449999909, 60.448635158000101 ], [ -147.614369269999884, 60.436957098000093 ], [ -147.629058397999898, 60.426174221000096 ], [ -147.634185350999928, 60.423325914000046 ], [ -147.662424282999893, 60.421210028000033 ], [ -147.710926886999857, 60.401800848000121 ], [ -147.737212693999879, 60.395982163999989 ], [ -147.71544348899991, 60.383286851000108 ], [ -147.69351152299987, 60.384711005000085 ], [ -147.671254035999937, 60.391791083000143 ], [ -147.648508266999897, 60.395982163999989 ], [ -147.625355597999885, 60.389593817000147 ], [ -147.631011522999927, 60.374823309000149 ], [ -147.662180141999954, 60.347601630000085 ], [ -147.6947322259999, 60.302801825000031 ], [ -147.738758917999917, 60.259833075000174 ], [ -147.738758917999917, 60.249986070000077 ], [ -147.710560675999943, 60.251410223000121 ], [ -147.723703579999892, 60.221380927000084 ], [ -147.741281704999949, 60.193589585000112 ], [ -147.765614386999914, 60.174383856000148 ], [ -147.798695441999939, 60.170111395000148 ], [ -147.796213344999899, 60.188055731000091 ], [ -147.811431443999879, 60.189357815000093 ], [ -147.830799933999913, 60.186916408000158 ], [ -147.840240037999934, 60.193670966000084 ], [ -147.792469855999883, 60.238348700000145 ], [ -147.798695441999939, 60.24518463700015 ], [ -147.822499152999939, 60.232367255000142 ], [ -147.85171464799987, 60.227932033000158 ], [ -147.881906704999892, 60.23045482 ], [ -147.908558722999913, 60.238348700000145 ], [ -147.903309699999937, 60.252875067 ], [ -147.895985480999911, 60.260321356000148 ], [ -147.867583787999905, 60.272528387000037 ], [ -147.877756313999953, 60.278265692000119 ], [ -147.898996548999946, 60.286932684000121 ], [ -147.908558722999913, 60.292954820000105 ], [ -147.870472785999937, 60.292425848000121 ], [ -147.822824673999861, 60.299139716000084 ], [ -147.780384894999884, 60.314846096000153 ], [ -147.757720506999931, 60.341376044000114 ], [ -147.784535285999937, 60.339178778000118 ], [ -147.833729620999918, 60.329413153000175 ], [ -147.860747850999871, 60.327093817000119 ], [ -147.872710740999935, 60.328924872000087 ], [ -147.874989386999886, 60.333400783000158 ], [ -147.870106574999909, 60.339056708000143 ], [ -147.860747850999871, 60.344468492000019 ], [ -147.84780839799987, 60.346421617000047 ], [ -147.820627407999893, 60.342759507 ], [ -147.806141730999911, 60.347601630000085 ], [ -147.846180792999945, 60.366278387000065 ], [ -147.860585089999915, 60.377386786000088 ], [ -147.847075975999928, 60.382391669000029 ], [ -147.820301886999943, 60.382798570000134 ], [ -147.801340298999946, 60.385891018 ], [ -147.786284959999932, 60.393988348000121 ], [ -147.771392381999874, 60.409654039000102 ], [ -147.785878058999913, 60.410549221000011 ], [ -147.821197068999936, 60.39948151200015 ], [ -147.840240037999934, 60.395982163999989 ], [ -147.812489386999943, 60.446234442000147 ], [ -147.792795376999891, 60.471747137000037 ], [ -147.771392381999874, 60.485419012000179 ], [ -147.772531704999892, 60.453924872000144 ], [ -147.776682094999956, 60.441717841000084 ], [ -147.785715298999946, 60.430812893 ], [ -147.72996985599994, 60.441392320000077 ], [ -147.710113084999847, 60.452582098000065 ], [ -147.720529751999948, 60.474554755 ], [ -147.723784959999875, 60.492905992000047 ], [ -147.708159959999904, 60.506781317000119 ], [ -147.689279751999891, 60.503729559000035 ] ] ], [ [ [ -152.03856360599994, 60.35040924700003 ], [ -152.061594204999892, 60.347601630000085 ], [ -152.072824673999889, 60.349758205000072 ], [ -152.083811001999891, 60.35443756700009 ], [ -152.089670376999891, 60.359116929000109 ], [ -152.085519985999895, 60.361273505000028 ], [ -152.037790493999921, 60.365708726 ], [ -152.027455206999889, 60.368109442000119 ], [ -152.021595831999889, 60.37620677300005 ], [ -152.021717902999939, 60.385321356000034 ], [ -152.023060675999943, 60.394273179000081 ], [ -152.020619269999884, 60.402167059000035 ], [ -152.01195227799991, 60.408189195000048 ], [ -151.990223761999914, 60.419094143000123 ], [ -151.98582923099994, 60.427069403000175 ], [ -151.980539516999954, 60.440415757 ], [ -151.971058722999885, 60.45209381700009 ], [ -151.967477993999893, 60.46580638200011 ], [ -151.979685024999952, 60.485419012000179 ], [ -151.953195766999897, 60.508490302000141 ], [ -151.943063930999926, 60.51162344 ], [ -151.921335415999863, 60.512111721000011 ], [ -151.904164191999939, 60.510565497000144 ], [ -151.884022589999915, 60.505682684000178 ], [ -151.866200324999909, 60.497300523000135 ], [ -151.85614986899995, 60.485419012000179 ], [ -151.869781053999901, 60.485419012000179 ], [ -151.869821743999893, 60.485419012000179 ], [ -151.879709438999896, 60.477362372000059 ], [ -151.891550258999956, 60.457709052 ], [ -151.897084113999881, 60.450628973000121 ], [ -151.908802863999881, 60.443589585000055 ], [ -151.918690558999884, 60.441310940000093 ], [ -151.929758266999897, 60.44025299700003 ], [ -151.944935675999886, 60.436957098000093 ], [ -151.96349036399991, 60.426174221000096 ], [ -151.978627081999889, 60.408270575000031 ], [ -151.98216712099989, 60.389471747000172 ], [ -151.966013149999924, 60.375555731000091 ], [ -152.03856360599994, 60.35040924700003 ] ] ], [ [ [ -172.533640102999897, 60.391506252000013 ], [ -172.503366665999891, 60.388576565000093 ], [ -172.410755988999938, 60.401678778000147 ], [ -172.379831508999871, 60.395982163999989 ], [ -172.297311977999868, 60.351345119000101 ], [ -172.297311977999868, 60.351304429000109 ], [ -172.284535285999937, 60.34259674700003 ], [ -172.225778774999924, 60.323635158000016 ], [ -172.208566860999923, 60.313462632000082 ], [ -172.22288977799991, 60.313706773000106 ], [ -172.263172980999883, 60.306626695000048 ], [ -172.278879360999952, 60.309800523000106 ], [ -172.303212042999917, 60.323960679000137 ], [ -172.366525844999956, 60.344468492000019 ], [ -172.38536536399991, 60.347601630000085 ], [ -172.424753383999899, 60.342474677000055 ], [ -172.474436001999891, 60.349839585000055 ], [ -172.50804602799991, 60.342962958000143 ], [ -172.540882941999911, 60.332505601000079 ], [ -172.571970180999926, 60.327093817000119 ], [ -172.599964972999942, 60.329820054 ], [ -172.625721808999884, 60.336981512000037 ], [ -172.674672003999945, 60.358140367000132 ], [ -172.686227993999864, 60.361639716000028 ], [ -172.711130337999919, 60.364935614000061 ], [ -172.722482876999891, 60.368109442000119 ], [ -172.735178188999953, 60.375474351000108 ], [ -172.751576300999943, 60.39276764500012 ], [ -172.763417120999918, 60.402167059000035 ], [ -172.783314581999917, 60.412339585 ], [ -173.004221157999893, 60.490179755000085 ], [ -173.057606574999937, 60.498439846000068 ], [ -173.043771938999924, 60.504339911 ], [ -173.037790493999921, 60.505845445000048 ], [ -173.041086391999954, 60.517157294000029 ], [ -173.04246985599994, 60.527573960000112 ], [ -173.041574673999946, 60.537298895000063 ], [ -173.037790493999921, 60.546820380000057 ], [ -173.036732550999858, 60.55377838700015 ], [ -173.038156704999921, 60.560370184000035 ], [ -173.037668423999946, 60.565375067000062 ], [ -173.030954555999898, 60.567328192000119 ], [ -173.021555141999869, 60.568101304000137 ], [ -173.013742641999897, 60.570135809000149 ], [ -173.003000454999864, 60.574164130000142 ], [ -172.952341274999895, 60.60097890800013 ], [ -172.925038214999915, 60.606675523000106 ], [ -172.914255337999919, 60.587836005000085 ], [ -172.926625128999945, 60.572821356000148 ], [ -172.921457485999952, 60.549627997000115 ], [ -172.906686977999954, 60.528265692000062 ], [ -172.890370245999918, 60.518947658000016 ], [ -172.876413540999863, 60.513495184000178 ], [ -172.811838344999899, 60.477972723 ], [ -172.533640102999897, 60.391506252000013 ] ] ], [ [ [ -146.096913214999887, 60.479681708 ], [ -146.294260219999899, 60.454779364000061 ], [ -146.332630988999938, 60.464911200000031 ], [ -146.317941860999923, 60.493841864000117 ], [ -146.305734829999949, 60.510158596000153 ], [ -146.286447719999899, 60.517320054 ], [ -146.120106574999909, 60.51947663 ], [ -146.093088344999956, 60.525783596000124 ], [ -146.10020911399991, 60.528631903000175 ], [ -146.120350714999944, 60.539374091000084 ], [ -146.034087693999936, 60.558294989000032 ], [ -145.949045376999891, 60.567328192000119 ], [ -145.949045376999891, 60.574164130000142 ], [ -145.956613735999952, 60.57705312700007 ], [ -145.961659308999884, 60.580511786000059 ], [ -145.969553188999953, 60.587836005000085 ], [ -145.85875403599988, 60.595607815000065 ], [ -145.805734829999864, 60.606187242000132 ], [ -145.757232225999871, 60.628729559000121 ], [ -145.749826626999891, 60.621323960000112 ], [ -145.770090298999918, 60.610419012000065 ], [ -145.777740037999934, 60.608303127000127 ], [ -145.75841223899991, 60.601874091000028 ], [ -145.749826626999891, 60.601467190000122 ], [ -145.756581183999941, 60.593207098000121 ], [ -145.764149542999888, 60.587103583000143 ], [ -145.773101365999935, 60.582953192 ], [ -145.783924933999913, 60.580389716000084 ], [ -145.871734178999873, 60.543890692000147 ], [ -145.913685675999886, 60.536810614000089 ], [ -145.962717251999948, 60.518947658000016 ], [ -146.014637824999909, 60.508937893000123 ], [ -146.06309973899991, 60.488267320000105 ], [ -146.096913214999887, 60.479681708 ] ] ], [ [ [ -173.05296790299991, 60.623928127000042 ], [ -173.058420376999948, 60.62128327000012 ], [ -173.068714972999857, 60.624212958000058 ], [ -173.104237433999941, 60.644842841000084 ], [ -173.113596157999893, 60.653021552 ], [ -173.111398891999897, 60.6642113300001 ], [ -173.093698696999866, 60.679836330000072 ], [ -173.071726040999863, 60.686224677000027 ], [ -173.062448696999923, 60.678534247000087 ], [ -173.062123175999886, 60.669623114000146 ], [ -173.060414191999882, 60.659165757000082 ], [ -173.062326626999948, 60.647894598000065 ], [ -173.064320441999882, 60.642523505000113 ], [ -173.054188605999911, 60.630560614000089 ], [ -173.05296790299991, 60.623928127000042 ] ] ], [ [ [ -147.406605597999885, 60.696275132000082 ], [ -147.385161912999848, 60.672552802000084 ], [ -147.374338344999956, 60.664862372000144 ], [ -147.364247199999909, 60.666327216000113 ], [ -147.3529353509999, 60.673773505 ], [ -147.338978644999941, 60.679348049000097 ], [ -147.324696417999917, 60.682806708 ], [ -147.31273352799991, 60.684027411000116 ], [ -147.325021938999953, 60.657171942000119 ], [ -147.339711066999882, 60.645575262000122 ], [ -147.359730597999942, 60.644476630000057 ], [ -147.387806769999941, 60.649237372000144 ], [ -147.402943488999938, 60.648382880000057 ], [ -147.449289516999897, 60.638128973000121 ], [ -147.477162238999881, 60.635646877000013 ], [ -147.461048956999889, 60.648342190000065 ], [ -147.454945441999882, 60.654933986000131 ], [ -147.449859178999873, 60.662909247000087 ], [ -147.474029100999871, 60.66111888200011 ], [ -147.497670050999915, 60.656683661000145 ], [ -147.487212693999936, 60.661281643000066 ], [ -147.449859178999873, 60.669745184000121 ], [ -147.448475714999915, 60.680975653000118 ], [ -147.455393032999893, 60.687811591000056 ], [ -147.466379360999952, 60.69082265800013 ], [ -147.477162238999881, 60.69017161699999 ], [ -147.466297980999855, 60.698065497000144 ], [ -147.428781704999949, 60.711371161000088 ], [ -147.42056230399993, 60.707098700000174 ], [ -147.413075324999909, 60.702053127000127 ], [ -147.406605597999885, 60.696275132000082 ] ] ], [ [ [ -147.936838344999899, 60.728827216000141 ], [ -147.92906653599988, 60.718166408000016 ], [ -147.925363735999923, 60.731878973000121 ], [ -147.919504360999895, 60.741644598000093 ], [ -147.909820115999935, 60.744818427000141 ], [ -147.881255662999934, 60.731512762000122 ], [ -147.86546790299991, 60.720119533000158 ], [ -147.852447068999908, 60.706732489000061 ], [ -147.847075975999928, 60.693996486000017 ], [ -147.857533331999946, 60.687201239000089 ], [ -147.922230597999857, 60.684027411000116 ], [ -147.923247850999928, 60.680853583000143 ], [ -147.924672003999888, 60.674221096000096 ], [ -147.928334113999938, 60.667141018000123 ], [ -147.935902472999885, 60.662909247000087 ], [ -147.941517706999889, 60.665106512000094 ], [ -147.966908331999917, 60.680324611000074 ], [ -148.012196417999917, 60.725002346000124 ], [ -147.994618292999917, 60.731350002000156 ], [ -147.97883053299995, 60.725978908000016 ], [ -147.963978644999884, 60.716620184000149 ], [ -147.94953365799995, 60.711371161000088 ], [ -147.96548417899993, 60.733832098000093 ], [ -147.969349738999853, 60.746649481000119 ], [ -147.960357225999928, 60.752346096000011 ], [ -147.949330206999889, 60.748724677000141 ], [ -147.942494269999884, 60.739976304000081 ], [ -147.936838344999899, 60.728827216000141 ] ] ], [ [ [ -148.107777472999913, 60.662909247000087 ], [ -148.12474524599989, 60.650539455000157 ], [ -148.140492316999939, 60.64866771 ], [ -148.155140753999945, 60.653998114000061 ], [ -148.16860917899993, 60.662909247000087 ], [ -148.168649868999921, 60.662909247000087 ], [ -148.194528774999924, 60.681463934000092 ], [ -148.222238735999923, 60.706122137000094 ], [ -148.230091925999915, 60.729722398000135 ], [ -148.196603969999956, 60.744818427000141 ], [ -148.211659308999884, 60.756048895000148 ], [ -148.21703040299991, 60.759100653000033 ], [ -148.158680792999917, 60.764715887000037 ], [ -148.14130611899995, 60.759100653000033 ], [ -148.124094204999949, 60.751125393000095 ], [ -148.111154751999948, 60.738104559000092 ], [ -148.110056118999893, 60.725327867000047 ], [ -148.12828528599988, 60.718166408000016 ], [ -148.12828528599988, 60.711371161000088 ], [ -148.108021613999881, 60.709702867000075 ], [ -148.098744269999912, 60.696844794000143 ], [ -148.099191860999895, 60.67914459800015 ], [ -148.107777472999913, 60.662909247000087 ] ] ], [ [ [ -146.734710765999921, 60.814519733000125 ], [ -146.765579556999882, 60.801955632 ], [ -146.796808535999901, 60.805938871000151 ], [ -146.81125463199993, 60.818283049000016 ], [ -146.820305752999928, 60.841693709000182 ], [ -146.806430064999915, 60.854186013000131 ], [ -146.775309757999935, 60.857094997000118 ], [ -146.761376255999892, 60.868210611000123 ], [ -146.761619617999884, 60.879249842000107 ], [ -146.738740584999931, 60.87107057600015 ], [ -146.712851457999875, 60.853251674000106 ], [ -146.704063325999897, 60.839485677000098 ], [ -146.718008542999883, 60.828393004000034 ], [ -146.734710765999921, 60.814519733000125 ] ] ], [ [ [ -147.136586066999882, 60.908270575000117 ], [ -147.135894334999932, 60.901312567000119 ], [ -147.127064581999889, 60.90232982 ], [ -147.119211391999897, 60.905666408000016 ], [ -147.119699673999889, 60.898138739000061 ], [ -147.131947394999941, 60.887681382 ], [ -147.158192511999857, 60.875474351000108 ], [ -147.152699347999942, 60.873521226000051 ], [ -147.131581183999913, 60.877997137000122 ], [ -147.121652798999946, 60.881781317000147 ], [ -147.112294074999909, 60.884426174000126 ], [ -147.107818162999934, 60.88735586100016 ], [ -147.10220292899993, 60.897691148000078 ], [ -147.097075975999928, 60.899644273000106 ], [ -147.094146287999877, 60.897935289000102 ], [ -147.078236456999889, 60.892767645 ], [ -147.076649542999945, 60.886908270000063 ], [ -147.083159959999932, 60.878485419000114 ], [ -147.104115363999881, 60.866156317000062 ], [ -147.139637824999852, 60.855617580000015 ], [ -147.16624915299991, 60.854925848000065 ], [ -147.182687954999892, 60.858221747000087 ], [ -147.190297003999945, 60.862982489 ], [ -147.185373501999891, 60.869452216000113 ], [ -147.182850714999859, 60.875718492000047 ], [ -147.189442511999943, 60.877508856000034 ], [ -147.209950324999909, 60.876410223000093 ], [ -147.216379360999895, 60.877101955000128 ], [ -147.221994594999899, 60.875433661000116 ], [ -147.219593878999888, 60.871405341000141 ], [ -147.229644334999932, 60.867824611000074 ], [ -147.253773566999854, 60.868109442000033 ], [ -147.310536261999914, 60.87445709800015 ], [ -147.318918423999889, 60.877264716000084 ], [ -147.318714972999942, 60.879624742000047 ], [ -147.310414191999939, 60.880804755000085 ], [ -147.303456183999856, 60.882717190000122 ], [ -147.298736131999874, 60.886623440000122 ], [ -147.290109829999949, 60.889308986000017 ], [ -147.277414516999897, 60.888128973000093 ], [ -147.266102667999917, 60.889227606000034 ], [ -147.256214972999885, 60.896673895 ], [ -147.246652798999889, 60.901800848000036 ], [ -147.233143683999913, 60.904689846000153 ], [ -147.226918097999885, 60.906805731000148 ], [ -147.215240037999877, 60.907294012000037 ], [ -147.212717251999948, 60.902044989000061 ], [ -147.217518683999941, 60.894680080000157 ], [ -147.214670376999891, 60.892482815000065 ], [ -147.205555792999917, 60.899074611000131 ], [ -147.194406704999892, 60.904242255000057 ], [ -147.180978969999899, 60.903143622000115 ], [ -147.175852016999897, 60.899969794000057 ], [ -147.180043097999913, 60.896633205000015 ], [ -147.177642381999874, 60.894354559000035 ], [ -147.168039516999897, 60.892523505000057 ], [ -147.142323370999947, 60.90916575700011 ], [ -147.136586066999882, 60.908270575000117 ] ] ], [ [ [ -148.032093878999945, 60.930405992000019 ], [ -147.967640753999945, 60.905585028000033 ], [ -147.940500454999921, 60.885809637000122 ], [ -147.943267381999874, 60.861558335000112 ], [ -147.919341600999928, 60.838324286 ], [ -147.912342902999939, 60.825425523 ], [ -147.915394660999937, 60.813137111000131 ], [ -147.92918860599994, 60.806341864 ], [ -147.942982550999943, 60.812201239000146 ], [ -147.955922003999859, 60.822211005000142 ], [ -147.966908331999917, 60.827378648000135 ], [ -148.008493618999893, 60.796332098000121 ], [ -148.023793097999942, 60.791205145 ], [ -148.087310350999928, 60.800116278000147 ], [ -148.08735104099992, 60.800116278000147 ], [ -148.116037563999896, 60.797552802000141 ], [ -148.127145962999919, 60.800604559000035 ], [ -148.135121222999885, 60.813137111000131 ], [ -148.136830206999889, 60.826361395000063 ], [ -148.134226040999891, 60.836818752000156 ], [ -148.130238410999937, 60.84662506700009 ], [ -148.12828528599988, 60.858099677000112 ], [ -148.111398891999897, 60.877508856000034 ], [ -148.08149166599992, 60.892035223000065 ], [ -148.069894985999895, 60.904242255000057 ], [ -148.107777472999913, 60.916815497000059 ], [ -148.107777472999913, 60.923000393 ], [ -148.089466925999943, 60.922430731000034 ], [ -148.032093878999945, 60.930405992000019 ] ] ], [ [ [ -150.227528449999852, 61.127183335000055 ], [ -150.265248175999943, 61.123439846000124 ], [ -150.276437954999949, 61.127386786000031 ], [ -150.259999152999939, 61.133124091000084 ], [ -150.245228644999884, 61.146063544000086 ], [ -150.231760219999899, 61.162909247000087 ], [ -150.22435462099989, 61.170396226000051 ], [ -150.210845506999931, 61.173041083000143 ], [ -150.184519008999928, 61.174261786000059 ], [ -150.177723761999886, 61.16136302300005 ], [ -150.196237758999899, 61.141302802 ], [ -150.227528449999852, 61.127183335000055 ] ] ], [ [ [ -165.946970180999898, 62.025702216000028 ], [ -165.944406704999892, 62.017971096000011 ], [ -165.947824673999889, 62.01593659100017 ], [ -165.956491665999891, 62.020086981000119 ], [ -165.963490363999881, 62.021795966000028 ], [ -165.968210415999891, 62.020697333000086 ], [ -165.973947719999956, 62.018744208000115 ], [ -165.980539516999926, 62.015611070000048 ], [ -165.985707160999937, 62.015366929000109 ], [ -165.989247199999909, 62.017971096000011 ], [ -165.99828040299991, 62.01850006700009 ], [ -166.009836391999954, 62.022935289000074 ], [ -166.008737758999899, 62.037258205000128 ], [ -165.99559485599994, 62.054266669000114 ], [ -165.982899542999888, 62.065904039000102 ], [ -165.972116665999891, 62.072170315000065 ], [ -165.966053839999887, 62.070379950000174 ], [ -165.97166907499988, 62.059515692 ], [ -165.976185675999943, 62.044582424000154 ], [ -165.961984829999921, 62.032904364000146 ], [ -165.948923305999955, 62.02952708500014 ], [ -165.946970180999898, 62.025702216000028 ] ] ], [ [ [ -164.567005988999881, 63.04629140800013 ], [ -164.583933071999923, 63.042059637000094 ], [ -164.599680141999897, 63.042792059000035 ], [ -164.611805792999888, 63.046698309000035 ], [ -164.611561652999939, 63.055894273000106 ], [ -164.596424933999941, 63.063218492000104 ], [ -164.586903449999852, 63.064439195000134 ], [ -164.577219204999892, 63.063218492000104 ], [ -164.563303188999924, 63.056219794000029 ], [ -164.567005988999881, 63.04629140800013 ] ] ], [ [ [ -169.782053188999868, 63.043402411 ], [ -169.777088995999918, 63.035060940000122 ], [ -169.85570227799991, 63.088690497000115 ], [ -169.880808071999923, 63.109564520000092 ], [ -169.93187415299991, 63.139146226000136 ], [ -169.927235480999883, 63.13869863500004 ], [ -169.868845180999898, 63.106146552000084 ], [ -169.809966600999928, 63.064642645000092 ], [ -169.790028449999909, 63.051662502000099 ], [ -169.782053188999868, 63.043402411 ] ] ], [ [ [ -169.508127407999865, 63.373358466000056 ], [ -169.440942859999922, 63.36353985600006 ], [ -169.489328579999921, 63.367824611000017 ], [ -169.512318488999881, 63.373765367000047 ], [ -169.529001430999926, 63.383368231000119 ], [ -169.508127407999865, 63.373358466000056 ] ] ], [ [ [ -170.38182532499988, 63.301418361000074 ], [ -170.296213344999899, 63.239406643000123 ], [ -170.369130011999914, 63.290594794000086 ], [ -170.449655727999868, 63.325100002000013 ], [ -170.707834438999924, 63.395209052000084 ], [ -170.485463019999884, 63.34467194200009 ], [ -170.38182532499988, 63.301418361000074 ] ] ], [ [ [ -171.029245571999923, 63.438666083000115 ], [ -170.784047003999888, 63.408514716000113 ], [ -170.975209113999938, 63.431219794000143 ], [ -171.058542446999951, 63.430121161 ], [ -171.072895484999947, 63.437325571000045 ], [ -171.029245571999923, 63.438666083000115 ] ] ], [ [ [ -171.070790167999917, 63.602484442000033 ], [ -171.074899868999864, 63.602240302000084 ], [ -171.08999589799987, 63.603908596000096 ], [ -171.070790167999917, 63.602484442000033 ] ] ], [ [ [ -171.144032355999883, 63.611761786000059 ], [ -171.090036587999862, 63.603908596000096 ], [ -171.157655715999908, 63.609736818000115 ], [ -171.144032355999883, 63.611761786000059 ] ] ], [ [ [ -162.382435675999915, 63.622992255000057 ], [ -162.340809699999852, 63.602484442000033 ], [ -162.341664191999882, 63.597072658000158 ], [ -162.344349738999938, 63.593695380000142 ], [ -162.348744269999912, 63.591498114000061 ], [ -162.354481574999909, 63.589422919000029 ], [ -162.358021613999881, 63.586615302 ], [ -162.360340949999937, 63.583889065000037 ], [ -162.363107876999891, 63.582098700000031 ], [ -162.368112758999928, 63.581976630000057 ], [ -162.349436001999948, 63.560492255000113 ], [ -162.347645636999857, 63.554754950000145 ], [ -162.359364386999857, 63.546210028000033 ], [ -162.373036261999914, 63.549750067000119 ], [ -162.384144660999937, 63.557766018000066 ], [ -162.388010219999927, 63.562201239000117 ], [ -162.498158331999946, 63.548529364 ], [ -162.614857550999943, 63.548529364 ], [ -162.626942511999914, 63.55068594 ], [ -162.648915167999945, 63.56000397300015 ], [ -162.678171352999868, 63.563666083 ], [ -162.717600063999953, 63.575181382000139 ], [ -162.676503058999856, 63.61151764500012 ], [ -162.666086391999897, 63.616766669000114 ], [ -162.633412238999938, 63.622626044000143 ], [ -162.621408657999922, 63.622992255000057 ], [ -162.610422329999949, 63.61920807500006 ], [ -162.602528449999909, 63.613714911000116 ], [ -162.593942837999862, 63.611232815000093 ], [ -162.580433722999885, 63.616766669000114 ], [ -162.584421352999868, 63.628485419000086 ], [ -162.556467251999948, 63.62982819200009 ], [ -162.482167120999918, 63.62189362200003 ], [ -162.461659308999884, 63.623683986000017 ], [ -162.443959113999881, 63.629461981000148 ], [ -162.436390753999945, 63.640326239000061 ], [ -162.428089972999857, 63.642157294000029 ], [ -162.409047003999888, 63.639349677000084 ], [ -162.374948696999951, 63.630438544000143 ], [ -162.382435675999915, 63.622992255000057 ] ] ], [ [ [ -171.672596808999856, 63.79633209800015 ], [ -171.652170376999891, 63.790432033000016 ], [ -171.63573157499988, 63.777289130000057 ], [ -171.625721808999913, 63.760728257 ], [ -171.636463995999918, 63.75409577000012 ], [ -171.645090298999918, 63.741848049000154 ], [ -171.649159308999884, 63.726874091000028 ], [ -171.646188930999955, 63.712347723000093 ], [ -171.633900519999912, 63.700384833000058 ], [ -171.616322394999884, 63.69354889500012 ], [ -171.446522589999887, 63.658636786000116 ], [ -171.40721594999988, 63.644110419000171 ], [ -171.429310675999858, 63.64451732 ], [ -171.46825110599994, 63.655015367000047 ], [ -171.489125128999916, 63.657700914000131 ], [ -171.504343227999897, 63.653265692000062 ], [ -171.530222133999899, 63.631293036000145 ], [ -171.543771938999868, 63.622992255000057 ], [ -171.543771938999868, 63.616766669000114 ], [ -171.529367641999897, 63.621649481000176 ], [ -171.518544074999909, 63.619696356000034 ], [ -171.508412238999853, 63.614650783000101 ], [ -171.495961066999939, 63.609930731000091 ], [ -171.487172003999888, 63.608954169000114 ], [ -171.343129035999908, 63.615301825000145 ], [ -171.310414191999882, 63.622992255000057 ], [ -171.325388149999924, 63.629706122000115 ], [ -171.342966274999924, 63.631659247000144 ], [ -171.379261847999942, 63.630438544000143 ], [ -171.379261847999942, 63.63666413 ], [ -171.159291144999941, 63.609808661000116 ], [ -171.164173956999917, 63.607733466000084 ], [ -171.168405727999925, 63.604885158000158 ], [ -171.171701626999891, 63.600897528000175 ], [ -171.173817511999886, 63.595648505 ], [ -171.125721808999913, 63.595648505 ], [ -171.112375454999892, 63.593491929 ], [ -171.096750454999921, 63.584173895000148 ], [ -171.087595180999926, 63.581976630000057 ], [ -170.975209113999938, 63.589422919000029 ], [ -170.977528449999909, 63.58612702 ], [ -170.97797604099992, 63.58502838700015 ], [ -170.978830532999893, 63.584295966000028 ], [ -170.98265540299991, 63.581976630000057 ], [ -170.936960415999891, 63.57168203300013 ], [ -170.888742641999954, 63.585394598000065 ], [ -170.840036587999919, 63.606105861000074 ], [ -170.773508266999926, 63.62051015800013 ], [ -170.721994594999956, 63.650864976000108 ], [ -170.662587042999888, 63.672512111000017 ], [ -170.64622962099989, 63.685044664000102 ], [ -170.624623175999886, 63.670599677000055 ], [ -170.595895962999919, 63.669663804000081 ], [ -170.496571417999917, 63.700100002000042 ], [ -170.47040768099987, 63.704087632 ], [ -170.440785285999937, 63.705511786000059 ], [ -170.428293423999918, 63.703436591000141 ], [ -170.401926235999923, 63.693996486000131 ], [ -170.389271613999938, 63.691839911000116 ], [ -170.337757941999882, 63.699286200000117 ], [ -170.310047980999883, 63.69867584800015 ], [ -170.297352667999917, 63.695542710000083 ], [ -170.27635657499988, 63.680853583000086 ], [ -170.266428188999896, 63.677679755000113 ], [ -170.25536048099994, 63.675685940000065 ], [ -170.241566535999937, 63.671372789000074 ], [ -170.188181118999893, 63.639105536000145 ], [ -170.167103644999884, 63.630438544000143 ], [ -170.110951300999858, 63.623195705000015 ], [ -170.082468227999954, 63.615179755000085 ], [ -170.067005988999938, 63.594142971000124 ], [ -170.052967902999882, 63.579413153000147 ], [ -170.049794074999909, 63.571478583 ], [ -170.052072719999899, 63.560614325000088 ], [ -170.055368618999921, 63.555405992000104 ], [ -170.05414791599992, 63.551581122000087 ], [ -170.042958136999886, 63.544745184000178 ], [ -170.038563605999911, 63.531927802000141 ], [ -170.053212042999917, 63.515773830000072 ], [ -170.07323157499988, 63.499335028000175 ], [ -170.084543423999889, 63.485825914000102 ], [ -170.068918423999889, 63.491359768000123 ], [ -170.051218227999868, 63.493719794000086 ], [ -169.953684048999946, 63.488714911000145 ], [ -169.891061977999925, 63.467352606000176 ], [ -169.847645636999886, 63.458075262000037 ], [ -169.755563930999898, 63.452337958000058 ], [ -169.774240688999896, 63.448187567000119 ], [ -169.820668097999942, 63.449448960000112 ], [ -169.843698696999923, 63.444891669000086 ], [ -169.782215949999937, 63.435370184000178 ], [ -169.657338019999941, 63.439642645 ], [ -169.597279425999943, 63.424383856000034 ], [ -169.579904751999948, 63.410793361000074 ], [ -169.565622524999952, 63.379055080000015 ], [ -169.549509243999893, 63.362941799000154 ], [ -169.521555141999954, 63.35297272300015 ], [ -169.481068488999938, 63.347398179000052 ], [ -169.440663214999887, 63.348049221000096 ], [ -169.412953253999888, 63.356675523000021 ], [ -169.424265102999868, 63.360663153000175 ], [ -169.436146613999938, 63.363226630000085 ], [ -169.325550910999908, 63.363104559000121 ], [ -169.291493292999917, 63.35932038 ], [ -169.262155727999897, 63.349269924000012 ], [ -169.205922003999888, 63.307318427000112 ], [ -169.186716274999952, 63.301459052000084 ], [ -169.123972133999956, 63.300604559000178 ], [ -169.092518683999941, 63.306057033000016 ], [ -169.070301886999886, 63.32135651200015 ], [ -169.102853969999956, 63.332709052000141 ], [ -169.143259243999921, 63.339056708000086 ], [ -169.221140102999868, 63.342474677 ], [ -169.221140102999868, 63.349269924000012 ], [ -169.070301886999886, 63.342474677 ], [ -169.007639126999891, 63.349269924000012 ], [ -168.99242102799991, 63.346869208000058 ], [ -168.961496548999889, 63.337144273000106 ], [ -168.715199347999885, 63.31195709800015 ], [ -168.686105923999889, 63.301459052000084 ], [ -168.699696417999945, 63.295599677000141 ], [ -168.727528449999909, 63.28733958500014 ], [ -168.74071204299986, 63.280991929000109 ], [ -168.717111782999922, 63.260891018000066 ], [ -168.728871222999913, 63.233832098000121 ], [ -168.775502081999917, 63.19159577 ], [ -168.811838344999899, 63.170111395000063 ], [ -168.850819464999887, 63.162827867000075 ], [ -168.951608852999954, 63.166001695000134 ], [ -169.00291907499988, 63.174302476000108 ], [ -169.018503383999871, 63.181341864000089 ], [ -169.039255337999862, 63.188055731000119 ], [ -169.283640102999925, 63.178290106000176 ], [ -169.331003383999956, 63.16494375200007 ], [ -169.287912563999924, 63.179836330000043 ], [ -169.265370245999947, 63.183539130000057 ], [ -169.187123175999943, 63.187445380000057 ], [ -169.159250454999892, 63.193752346000011 ], [ -169.14484615799995, 63.205877997000087 ], [ -169.287342902999853, 63.193304755000028 ], [ -169.351144985999895, 63.176214911000059 ], [ -169.412953253999888, 63.15070221600017 ], [ -169.399281378999945, 63.143215236000103 ], [ -169.399281378999945, 63.136948960000055 ], [ -169.415964321999894, 63.130357163999989 ], [ -169.445668097999913, 63.11318594000015 ], [ -169.504872199999909, 63.101141669000029 ], [ -169.526478644999912, 63.091376044000086 ], [ -169.53583736899995, 63.078599351000051 ], [ -169.541859503999859, 63.072088934000149 ], [ -169.569447394999884, 63.051947333000115 ], [ -169.577463344999927, 63.040757554000109 ], [ -169.578236456999946, 63.022650458 ], [ -169.571156378999888, 63.011379299000012 ], [ -169.54267330599987, 62.993597723000121 ], [ -169.559396938999896, 62.986517645000063 ], [ -169.597523566999882, 62.983872788999989 ], [ -169.61469479099992, 62.976223049000126 ], [ -169.636830206999889, 62.955796617000075 ], [ -169.64940344999988, 62.948431708000086 ], [ -169.66620846299989, 62.945217190000122 ], [ -169.70921790299991, 62.961493231000148 ], [ -169.731760219999899, 62.965887762000037 ], [ -169.755563930999898, 62.965643622000087 ], [ -169.747181769999941, 62.979885158000101 ], [ -169.746815558999913, 62.992173570000048 ], [ -169.752390102999925, 63.00324127800009 ], [ -169.761789516999954, 63.014105536000088 ], [ -169.73798580599987, 63.015936591000141 ], [ -169.716175910999908, 63.024847723000093 ], [ -169.705311652999939, 63.040187893000123 ], [ -169.71458899599989, 63.061265367000075 ], [ -169.722116665999948, 63.064764716000141 ], [ -169.742990688999896, 63.067206122000087 ], [ -169.751820441999882, 63.071844794000114 ], [ -169.77607174399995, 63.096014716000028 ], [ -169.817453579999892, 63.126776434000092 ], [ -169.866932745999918, 63.144476630000028 ], [ -169.974680141999897, 63.16494375200007 ], [ -169.974680141999897, 63.157456773000106 ], [ -170.024606899999924, 63.170640367000047 ], [ -170.039865688999896, 63.181341864000089 ], [ -170.049265102999925, 63.185207424000069 ], [ -170.071400519999912, 63.184393622000172 ], [ -170.080799933999941, 63.188177802 ], [ -170.084706183999913, 63.194769598000065 ], [ -170.08495032499988, 63.20042552300005 ], [ -170.08653723899991, 63.204413153000033 ], [ -170.094471808999884, 63.205877997000087 ], [ -170.113392706999889, 63.202785549000012 ], [ -170.145700649999924, 63.188706773000078 ], [ -170.159657355999883, 63.184759833000086 ], [ -170.184315558999884, 63.186224677000141 ], [ -170.236032680999926, 63.197455145000148 ], [ -170.262033657999893, 63.198431708000115 ], [ -170.255726691999854, 63.20917389500012 ], [ -170.244740363999881, 63.211655992000075 ], [ -170.232248501999891, 63.212836005 ], [ -170.221058722999885, 63.21954987200003 ], [ -170.218373175999886, 63.227932033000101 ], [ -170.216013149999924, 63.254706122000087 ], [ -170.217640753999888, 63.260484117000075 ], [ -170.222971157999922, 63.264797268000066 ], [ -170.228260870999918, 63.274155992000019 ], [ -170.234974738999853, 63.283514716000028 ], [ -170.244984503999945, 63.287787177000141 ], [ -170.261341925999943, 63.289129950000031 ], [ -170.329823370999918, 63.305853583000058 ], [ -170.41234290299991, 63.338690497000144 ], [ -170.444325324999909, 63.359198309000121 ], [ -170.596424933999913, 63.399155992000075 ], [ -170.663034633999899, 63.403876044000171 ], [ -170.666452602999897, 63.40615469000015 ], [ -170.668324347999885, 63.411037502000013 ], [ -170.671131964999915, 63.415920315000093 ], [ -170.677316860999895, 63.418158270000063 ], [ -170.77635657499988, 63.420558986000017 ], [ -170.796457485999923, 63.424383856000034 ], [ -170.807077602999954, 63.429754950000088 ], [ -170.822499152999882, 63.44525788 ], [ -170.831247524999952, 63.452337958000058 ], [ -170.844675258999956, 63.458563544000029 ], [ -170.856149868999893, 63.460353908000016 ], [ -171.083851691999911, 63.444891669000086 ], [ -171.083119269999884, 63.442938544000029 ], [ -171.082020636999914, 63.441229559000035 ], [ -171.079172329999892, 63.438177802000141 ], [ -171.121896938999896, 63.432196356000119 ], [ -171.140736456999946, 63.425238348000121 ], [ -171.156442837999919, 63.414740302000055 ], [ -171.183705206999889, 63.402289130000142 ], [ -171.252797003999916, 63.396063544000086 ], [ -171.28368079299986, 63.383368231000119 ], [ -171.290516730999883, 63.383368231000119 ], [ -171.294870571999866, 63.362046617000047 ], [ -171.325144008999871, 63.351223049000154 ], [ -171.361032680999955, 63.345282294000029 ], [ -171.382394985999923, 63.338690497000144 ], [ -171.407948370999918, 63.322577216000084 ], [ -171.439320441999939, 63.319769598000121 ], [ -171.557443813999896, 63.335028387000094 ], [ -171.558949347999857, 63.336737372000115 ], [ -171.572580532999893, 63.346177476000136 ], [ -171.578561977999925, 63.349269924000012 ], [ -171.586415167999917, 63.350490627000127 ], [ -171.612375454999892, 63.349269924000012 ], [ -171.626047329999921, 63.351385809000121 ], [ -171.654367641999869, 63.36078522300015 ], [ -171.70482337099989, 63.367824611000017 ], [ -171.735585089999887, 63.375921942000147 ], [ -171.759144660999937, 63.390326239000032 ], [ -171.821237758999871, 63.441717841000028 ], [ -171.827870245999918, 63.450751044000029 ], [ -171.829457160999851, 63.467678127000013 ], [ -171.841786261999914, 63.485174872000144 ], [ -171.847279425999943, 63.496975002000127 ], [ -171.851144985999923, 63.509588934000121 ], [ -171.852894660999937, 63.521185614000117 ], [ -171.85057532499988, 63.520656643000152 ], [ -171.845773891999897, 63.523749091000028 ], [ -171.840931769999884, 63.528794664000074 ], [ -171.83857174399995, 63.534247137000094 ], [ -171.839548305999926, 63.539862372000115 ], [ -171.845448370999947, 63.554754950000145 ], [ -171.841379360999895, 63.576971747000115 ], [ -171.837025519999912, 63.58340078300013 ], [ -171.828073696999866, 63.592515367000104 ], [ -171.819691535999908, 63.598374742000075 ], [ -171.809641079999949, 63.603949286000088 ], [ -171.801136847999913, 63.610663153000118 ], [ -171.797596808999913, 63.61985911699999 ], [ -171.800282355999911, 63.62604401200015 ], [ -171.805531378999888, 63.630764065000065 ], [ -171.809396938999896, 63.635158596000153 ], [ -171.807850714999944, 63.640326239000061 ], [ -171.800485805999955, 63.64447663 ], [ -171.779774542999945, 63.647894598 ], [ -171.770334438999924, 63.650864976000108 ], [ -171.751657680999955, 63.664048570000077 ], [ -171.747873501999948, 63.674994208000115 ], [ -171.749948696999951, 63.687445380000057 ], [ -171.749216274999924, 63.705511786000059 ], [ -171.727731899999895, 63.734523830000157 ], [ -171.720570441999854, 63.752671617000047 ], [ -171.732492641999897, 63.760728257 ], [ -171.735422329999921, 63.764837958000143 ], [ -171.738840298999918, 63.774074611000103 ], [ -171.740834113999881, 63.784247137000065 ], [ -171.739328579999921, 63.79120514500012 ], [ -171.728016730999911, 63.796128648000021 ], [ -171.715524868999921, 63.794256903000033 ], [ -171.703806118999921, 63.790838934000121 ], [ -171.694569464999859, 63.79120514500012 ], [ -171.672596808999856, 63.79633209800015 ] ] ], [ [ [ -168.048410610999895, 64.958929755 ], [ -168.078724738999881, 64.956854559000178 ], [ -168.096750454999892, 64.965399481000091 ], [ -168.087595180999926, 64.978827216000084 ], [ -168.065541144999912, 64.984849351000022 ], [ -168.035511847999885, 64.985296942 ], [ -168.027699347999885, 64.979925848000121 ], [ -168.026560024999924, 64.968085028000175 ], [ -168.048410610999895, 64.958929755 ] ] ], [ [ [ -168.899606899999895, 65.747626044000171 ], [ -168.909860805999926, 65.739569403000033 ], [ -168.926218227999925, 65.739894924000069 ], [ -168.942128058999941, 65.743719794000086 ], [ -168.951730923999918, 65.753159898 ], [ -168.942982550999943, 65.764715887000122 ], [ -168.920114712999947, 65.768866278000147 ], [ -168.90790768099987, 65.76829661699999 ], [ -168.902780727999954, 65.761542059000149 ], [ -168.899606899999895, 65.747626044000171 ] ] ], [ [ [ -167.827219204999864, 65.73859284100017 ], [ -167.843332485999952, 65.737779039000046 ], [ -167.848703579999892, 65.742824611000074 ], [ -167.833566860999895, 65.752875067000062 ], [ -167.819406704999892, 65.759344794000143 ], [ -167.777007615999878, 65.773016669000086 ], [ -167.751169399999867, 65.77676015800013 ], [ -167.738270636999943, 65.777167059000035 ], [ -167.743397589999859, 65.772528387000122 ], [ -167.760446743999921, 65.764634507000139 ], [ -167.780018683999884, 65.759588934000092 ], [ -167.794056769999941, 65.753973700000117 ], [ -167.808949347999885, 65.745510158000073 ], [ -167.827219204999864, 65.73859284100017 ] ] ], [ [ [ -167.662831183999913, 65.782049872000115 ], [ -167.65953528599988, 65.773016669000086 ], [ -167.639963344999899, 65.773423570000105 ], [ -167.695423956999889, 65.740912177000112 ], [ -167.71698971299989, 65.738226630000057 ], [ -167.730539516999954, 65.745672919000029 ], [ -167.723744269999912, 65.758124091000141 ], [ -167.719431118999921, 65.76894765800013 ], [ -167.718617316999911, 65.777818101 ], [ -167.703236456999861, 65.78538646000014 ], [ -167.670969204999921, 65.793687242000104 ], [ -167.670928514999929, 65.793727932000095 ], [ -167.566477016999897, 65.816636460000026 ], [ -167.556467251999919, 65.817368882000139 ], [ -167.572702602999868, 65.809230861000017 ], [ -167.647287563999896, 65.791327216000141 ], [ -167.662831183999913, 65.782049872000115 ] ] ], [ [ [ -167.211130337999947, 65.91274648600016 ], [ -167.226022915999891, 65.909125067 ], [ -167.239491339999887, 65.90924713700015 ], [ -167.232045050999915, 65.917914130000057 ], [ -166.869862433999913, 66.036078192000119 ], [ -166.859486456999917, 66.039740302000084 ], [ -166.839792446999894, 66.043605861000074 ], [ -166.835804816999911, 66.041815497000087 ], [ -166.863148566999882, 66.027980861000103 ], [ -166.987172003999888, 65.983547268000066 ], [ -167.027048305999926, 65.974676825000031 ], [ -167.10883541599992, 65.948553778000175 ], [ -167.125843878999888, 65.939886786000088 ], [ -167.123605923999889, 65.939032294000086 ], [ -167.13023841099988, 65.936590887000037 ], [ -167.164906378999945, 65.931708075000174 ], [ -167.211130337999947, 65.91274648600016 ] ] ], [ [ [ -166.733143683999856, 66.067816473000065 ], [ -166.800526495999861, 66.051499742000047 ], [ -166.795399542999945, 66.058294989000089 ], [ -166.762766079999892, 66.071193752000099 ], [ -166.322214321999951, 66.192857164000046 ], [ -166.283518032999922, 66.200628973000121 ], [ -166.28347734299993, 66.200628973000121 ], [ -166.187082485999923, 66.210272528000118 ], [ -166.225412563999953, 66.201849677000055 ], [ -166.249867316999911, 66.192938544000029 ], [ -166.273182745999918, 66.186835028000033 ], [ -166.313547329999864, 66.18260325700011 ], [ -166.386545376999891, 66.160711981000176 ], [ -166.468861456999917, 66.145900783000016 ], [ -166.486520962999919, 66.140285549000012 ], [ -166.504709438999924, 66.132513739 ], [ -166.546701626999919, 66.122748114000061 ], [ -166.59703528599988, 66.104803778000118 ], [ -166.686634894999941, 66.084784247000144 ], [ -166.733143683999856, 66.067816473000065 ] ] ], [ [ [ -166.127878383999928, 66.225816148000106 ], [ -166.147409633999928, 66.220363674000069 ], [ -166.156117316999911, 66.226263739 ], [ -166.147409633999928, 66.235419012000094 ], [ -166.127512173999918, 66.243801174000154 ], [ -166.088531053999844, 66.256170966000084 ], [ -166.053944464999944, 66.262030341000028 ], [ -166.041818813999953, 66.259995835 ], [ -166.04710852799991, 66.254828192 ], [ -166.103098110999866, 66.238836981000091 ], [ -166.127878383999928, 66.225816148000106 ] ] ], [ [ [ -165.964466925999943, 66.264471747000144 ], [ -166.010365363999938, 66.257717190000122 ], [ -166.006214972999885, 66.26691315300009 ], [ -165.982980923999889, 66.281073309000035 ], [ -165.970041469999956, 66.286688544000029 ], [ -165.864328579999921, 66.316880601000136 ], [ -165.864287889999929, 66.316880601000136 ], [ -165.814645962999919, 66.326361395000148 ], [ -165.814035610999866, 66.322455145000148 ], [ -165.873158331999889, 66.300116278000118 ], [ -165.897206183999913, 66.294134833 ], [ -165.943674282999865, 66.271185614000032 ], [ -165.964466925999943, 66.264471747000144 ] ] ], [ [ [ -165.533762173999918, 66.39862702000012 ], [ -165.601389126999891, 66.376654364 ], [ -165.626332160999908, 66.377630927000084 ], [ -165.635487433999884, 66.374497789000102 ], [ -165.647653774999867, 66.368719794000057 ], [ -165.680531378999859, 66.359320380000113 ], [ -165.697743292999888, 66.356838283000101 ], [ -165.704579230999911, 66.361721096000068 ], [ -165.690866665999863, 66.370754299000069 ], [ -165.488718227999954, 66.40900299700003 ], [ -165.48969479099992, 66.408677476 ], [ -165.495187954999949, 66.406398830000015 ], [ -165.533762173999918, 66.39862702000012 ] ] ], [ [ [ -165.423939574999935, 66.421332099000054 ], [ -165.4886930159999, 66.409009622000141 ], [ -165.484771287999877, 66.410305080000015 ], [ -165.448312954999892, 66.418768622000144 ], [ -165.423939574999935, 66.421332099000054 ] ] ], [ [ [ -165.381662563999924, 66.425685940000065 ], [ -165.423039482999911, 66.421448993000141 ], [ -165.342640753999859, 66.436712958 ], [ -165.378366665999891, 66.428900458000115 ], [ -165.381662563999924, 66.425685940000065 ] ] ], [ [ [ -165.322702602999868, 66.440415757000054 ], [ -165.34262798899988, 66.436715109000104 ], [ -165.32640540299991, 66.440252997000087 ], [ -165.322702602999868, 66.440415757000054 ] ] ], [ [ [ -165.262074347999913, 66.444281317000062 ], [ -165.320849656999854, 66.440581937000118 ], [ -165.042092698999909, 66.493518053000017 ], [ -164.763335740999935, 66.546454169000114 ], [ -164.752023891999954, 66.545477606000034 ], [ -164.745961066999939, 66.540920315000093 ], [ -164.758249477999897, 66.538031317000062 ], [ -164.77122962099989, 66.536607163999989 ], [ -164.777414516999954, 66.534491278000175 ], [ -164.783151821999923, 66.531927802000084 ], [ -164.795358852999925, 66.529120184000121 ], [ -164.831613735999923, 66.52855052300005 ], [ -164.844349738999881, 66.524725653000033 ], [ -164.850453253999859, 66.517645575000174 ], [ -164.857858852999954, 66.511419989000117 ], [ -164.862131313999953, 66.509019273000078 ], [ -164.866566535999937, 66.507025458000115 ], [ -164.882923956999946, 66.504828192000147 ], [ -164.929310675999915, 66.504828192000147 ], [ -165.062611456999861, 66.479681708000058 ], [ -165.123727993999921, 66.477932033000073 ], [ -165.140980597999942, 66.473822333000115 ], [ -165.181467251999948, 66.458563544000143 ], [ -165.262074347999913, 66.444281317000062 ] ] ], [ [ [ -163.17406165299991, 69.56329987200003 ], [ -163.176258917999917, 69.482245184000092 ], [ -163.184641079999892, 69.511053778000033 ], [ -163.189076300999943, 69.539943752000127 ], [ -163.191151495999861, 69.546535549000012 ], [ -163.185373501999891, 69.61025625200007 ], [ -163.185332811999899, 69.61025625200007 ], [ -163.17162024599989, 69.657782294000171 ], [ -163.152902798999918, 69.678290106000034 ], [ -163.136219855999883, 69.682521877000127 ], [ -163.129099087999919, 69.681545315000065 ], [ -163.152536587999919, 69.668117580000072 ], [ -163.167917446999923, 69.638495184000035 ], [ -163.174183722999885, 69.60447825700011 ], [ -163.170033331999946, 69.577866929000081 ], [ -163.17406165299991, 69.56329987200003 ] ] ], [ [ [ -141.396636522999927, 69.705877997000059 ], [ -141.385121222999885, 69.694525458000058 ], [ -141.412912563999868, 69.705064195000134 ], [ -141.472564256999959, 69.720770575000088 ], [ -141.58421790299991, 69.76642487200003 ], [ -141.645415818999936, 69.774562893000152 ], [ -141.713449673999918, 69.793280341000028 ], [ -141.765736456999917, 69.799750067000119 ], [ -141.800282355999911, 69.809149481000034 ], [ -141.857980923999889, 69.815090236000074 ], [ -141.898426886999914, 69.824896552 ], [ -141.80923417899993, 69.821926174000097 ], [ -141.528635219999899, 69.760321356000034 ], [ -141.423085089999915, 69.721869208000143 ], [ -141.408802863999938, 69.714992580000128 ], [ -141.396636522999927, 69.705877997000059 ] ] ], [ [ [ -163.095448370999918, 69.731390692000119 ], [ -163.129099087999919, 69.701971747000144 ], [ -163.055775519999884, 69.804510809000121 ], [ -163.030140753999916, 69.832912502000127 ], [ -162.999948696999923, 69.855780341000141 ], [ -162.841135219999956, 69.934759833000086 ], [ -162.877919074999852, 69.901678778000033 ], [ -163.011789516999869, 69.83234284100017 ], [ -163.042185024999924, 69.801581122000087 ], [ -163.095448370999918, 69.731390692000119 ] ] ], [ [ [ -162.737172003999945, 69.978094794000143 ], [ -162.806345180999926, 69.948391018000038 ], [ -162.728138800999915, 69.998602606000091 ], [ -162.702056443999879, 70.022040106000176 ], [ -162.701771613999938, 70.022324937000022 ], [ -162.677357550999886, 70.044134833000058 ], [ -162.641794399999895, 70.065578518 ], [ -162.600819464999887, 70.082831122000115 ], [ -162.559925910999937, 70.092433986000074 ], [ -162.556467251999948, 70.090277411000088 ], [ -162.606068488999881, 70.069240627000156 ], [ -162.675363735999923, 70.029486395000148 ], [ -162.699330206999889, 69.999741929000137 ], [ -162.737172003999945, 69.978094794000143 ] ] ], [ [ [ -162.539133266999954, 70.113714911000059 ], [ -162.559925910999937, 70.106024481000034 ], [ -162.50328528599988, 70.161281643000152 ], [ -162.484527147999898, 70.17316315300009 ], [ -162.308542446999923, 70.241278387000037 ], [ -162.162709113999881, 70.269924221000011 ], [ -162.343739386999886, 70.220200914000102 ], [ -162.491037563999896, 70.153876044000143 ], [ -162.509877081999946, 70.140814520000092 ], [ -162.539133266999954, 70.113714911000059 ] ] ], [ [ [ -161.88813229099992, 70.353949286000059 ], [ -161.551136847999885, 70.325995184000035 ], [ -161.837839321999951, 70.343410549000012 ], [ -161.912098761999857, 70.339911200000117 ], [ -161.977121548999918, 70.312160549000126 ], [ -161.969960089999887, 70.321234442000119 ], [ -161.943063930999898, 70.339585679 ], [ -161.88813229099992, 70.353949286000059 ] ] ], [ [ [ -149.236276821999951, 70.553290106000034 ], [ -148.994577602999897, 70.492905992000104 ], [ -148.971669074999909, 70.493841864 ], [ -148.943348761999943, 70.50018952000012 ], [ -148.922922329999892, 70.501450914000131 ], [ -148.894357876999891, 70.496405341000084 ], [ -148.81969153599988, 70.46979401200015 ], [ -148.822092251999891, 70.468695380000028 ], [ -148.912220831999946, 70.488592841000113 ], [ -148.950388149999924, 70.486273505000142 ], [ -148.979115363999881, 70.480902411000088 ], [ -149.015695766999897, 70.484930731000148 ], [ -149.194040493999921, 70.536932684000121 ], [ -149.25438391799986, 70.545599677000112 ], [ -149.31318111899995, 70.544867255000085 ], [ -149.303822394999941, 70.547837632 ], [ -149.277414516999926, 70.552679755000085 ], [ -149.236276821999951, 70.553290106000034 ] ] ], [ [ [ -156.434803839999944, 71.40648021 ], [ -156.398264126999891, 71.39350006700009 ], [ -156.371652798999861, 71.380316473000121 ], [ -156.400135870999861, 71.377427476000108 ], [ -156.458485480999855, 71.395168361000103 ], [ -156.488352016999954, 71.393988348000065 ], [ -156.55211341099988, 71.364976304 ], [ -156.588815883999899, 71.358343817000119 ], [ -156.604440883999871, 71.353664455000015 ], [ -156.572214321999923, 71.336371161 ], [ -156.556467251999891, 71.324693101000108 ], [ -156.549794074999909, 71.308986721000124 ], [ -156.534250454999921, 71.30011627800009 ], [ -156.433705206999889, 71.292181708000115 ], [ -156.447336391999954, 71.276800848 ], [ -156.443308071999866, 71.268377997000059 ], [ -156.428415493999921, 71.264960028000033 ], [ -156.237009243999921, 71.269191799000154 ], [ -156.141061977999925, 71.256496486000103 ], [ -156.097360805999926, 71.243801174000126 ], [ -156.107858852999925, 71.227240302000055 ], [ -156.110951300999886, 71.223334052000055 ], [ -156.059193488999881, 71.220648505 ], [ -156.04271399599989, 71.215887762000094 ], [ -156.057932094999956, 71.204494533000044 ], [ -156.110951300999886, 71.182318427000055 ], [ -156.110951300999886, 71.174872137000179 ], [ -156.072336391999926, 71.176703192000062 ], [ -156.034128383999871, 71.182847398000135 ], [ -155.999338344999899, 71.194525458000115 ], [ -155.971018032999893, 71.212795315 ], [ -155.959909633999928, 71.218247789000046 ], [ -155.944894985999923, 71.220363674000154 ], [ -155.931711391999869, 71.217027085000112 ], [ -155.92601477799991, 71.206244208000115 ], [ -155.916005011999914, 71.196478583000086 ], [ -155.893137173999889, 71.19855377800009 ], [ -155.851511196999923, 71.209662177000112 ], [ -155.800892706999946, 71.208807684000035 ], [ -155.624745245999918, 71.183539130000085 ], [ -155.596791144999884, 71.169989325000117 ], [ -155.573435024999867, 71.150376695000048 ], [ -155.556101040999891, 71.127101955000128 ], [ -155.551503058999856, 71.10089752800009 ], [ -155.566639777999853, 71.081529038999989 ], [ -155.593739386999886, 71.069728908000016 ], [ -155.64000403599988, 71.063137111000131 ], [ -155.653920050999858, 71.056830145 ], [ -155.679921027999939, 71.041449286000059 ], [ -155.689279751999891, 71.039048570000105 ], [ -155.709095831999889, 71.038316148 ], [ -155.717152472999942, 71.034613348000121 ], [ -155.720651821999923, 71.029282945 ], [ -155.728016730999911, 71.01105377800009 ], [ -155.744699673999946, 71.004461981000119 ], [ -155.765370245999861, 70.999986070000048 ], [ -155.806507941999939, 70.996771552 ], [ -155.812936977999954, 70.994614976 ], [ -155.823353644999941, 70.98525625200007 ], [ -155.830759243999921, 70.983099677000055 ], [ -156.072092251999891, 70.973944403000175 ], [ -156.097360805999926, 70.968817450000145 ], [ -156.104725714999915, 70.968817450000145 ], [ -156.079213019999941, 70.962388414000046 ], [ -156.053171352999954, 70.962388414000046 ], [ -156.028635219999956, 70.958929755000057 ], [ -156.007923956999946, 70.942124742000047 ], [ -156.047230597999942, 70.929429429 ], [ -156.145008917999917, 70.932684637000037 ], [ -156.187326626999919, 70.921698309000149 ], [ -156.154286261999857, 70.919094143000066 ], [ -156.087228969999899, 70.92698802300005 ], [ -156.056345180999926, 70.921698309000149 ], [ -156.066354946999923, 70.916978257000054 ], [ -156.097360805999926, 70.908026434000035 ], [ -156.067941860999952, 70.902492580000015 ], [ -156.004831508999928, 70.90912506700009 ], [ -155.981271938999896, 70.894354559000092 ], [ -155.994862433999856, 70.88690827000012 ], [ -155.982248501999891, 70.87641022300015 ], [ -155.953195766999897, 70.865423895 ], [ -155.940297003999888, 70.852769273000106 ], [ -155.953684048999889, 70.846340236000017 ], [ -155.968617316999939, 70.842352606000034 ], [ -155.981190558999913, 70.83673737200003 ], [ -155.987497524999952, 70.82542552300005 ], [ -155.985788540999948, 70.815252997000115 ], [ -155.972767706999889, 70.80149974199999 ], [ -155.967600063999868, 70.791327216000141 ], [ -155.97093665299991, 70.779689846000124 ], [ -155.978260870999918, 70.767279364 ], [ -155.978098110999952, 70.759670315000065 ], [ -155.923939581999889, 70.766506252000099 ], [ -155.909047003999916, 70.771226304 ], [ -155.899362758999956, 70.784491278000033 ], [ -155.912831183999941, 70.790513414000131 ], [ -155.922800258999928, 70.799953518000152 ], [ -155.926218227999925, 70.81183502800009 ], [ -155.919789191999939, 70.82542552300005 ], [ -155.891428188999896, 70.836655992000047 ], [ -155.808908657999893, 70.830715236000046 ], [ -155.775827602999925, 70.836004950000088 ], [ -155.750599738999881, 70.844224351000022 ], [ -155.72040768099987, 70.846096096000068 ], [ -155.691232876999919, 70.841131903000118 ], [ -155.658762173999946, 70.824164130000142 ], [ -155.650827602999868, 70.828680731000091 ], [ -155.647043423999946, 70.835882880000113 ], [ -155.649159308999856, 70.839748440000122 ], [ -155.655140753999888, 70.842962958 ], [ -155.660227016999897, 70.850531317000147 ], [ -155.663929816999939, 70.85936107000002 ], [ -155.665964321999866, 70.866400458000058 ], [ -155.645578579999892, 70.86806875200007 ], [ -155.603138800999915, 70.846177476000051 ], [ -155.577137824999909, 70.845933335000026 ], [ -155.542429165999863, 70.866400458000058 ], [ -155.534616665999863, 70.877264716000141 ], [ -155.533192511999914, 70.885931708000058 ], [ -155.536203579999892, 70.904608466000028 ], [ -155.535715298999918, 70.92568594000015 ], [ -155.531076626999891, 70.941799221000039 ], [ -155.51789303299995, 70.95213450700011 ], [ -155.468088344999956, 70.960435289000102 ], [ -155.405873175999886, 70.996771552 ], [ -155.390329555999955, 71.00287506700009 ], [ -155.344431118999864, 71.01105377800009 ], [ -155.331898566999882, 71.016017971000124 ], [ -155.308583136999886, 71.028753973 ], [ -155.296009894999884, 71.031561591000141 ], [ -155.274973110999952, 71.02558014500012 ], [ -155.243723110999895, 70.997137762000122 ], [ -155.217152472999942, 70.990545966000056 ], [ -155.191721157999922, 70.995062567 ], [ -155.182077602999954, 71.006822007000082 ], [ -155.184885219999899, 71.023179429 ], [ -155.196726040999863, 71.041449286000059 ], [ -155.217152472999942, 71.056463934000178 ], [ -155.267323370999918, 71.072943427000084 ], [ -155.289173956999889, 71.08612702000012 ], [ -155.26923580599987, 71.099107164000102 ], [ -155.209665493999864, 71.122992255 ], [ -155.18614661399991, 71.127101955000128 ], [ -155.163075324999852, 71.119818427000112 ], [ -155.124012824999909, 71.090236721000068 ], [ -155.097401495999947, 71.08612702000012 ], [ -155.103138800999915, 71.104234117000132 ], [ -155.101633266999869, 71.119859117000104 ], [ -155.104969855999911, 71.132310289000131 ], [ -155.125314907999893, 71.140773830000072 ], [ -155.109323696999894, 71.150376695000048 ], [ -155.089670376999948, 71.154933986000103 ], [ -155.06969153599988, 71.15326569200009 ], [ -155.052683071999894, 71.144191799000069 ], [ -155.04320227799991, 71.130926825000145 ], [ -155.045643683999913, 71.121771552000084 ], [ -155.052479620999947, 71.11261627800009 ], [ -155.056467251999919, 71.099798895000063 ], [ -155.053049282999893, 71.087713934000149 ], [ -155.039784308999884, 71.063055731000148 ], [ -155.039377407999893, 71.05573151200015 ], [ -155.05443274599989, 71.045233466000084 ], [ -155.086740688999896, 71.031154690000122 ], [ -155.097401495999947, 71.017279364000061 ], [ -155.065012173999946, 71.012111721000153 ], [ -155.039011196999951, 71.017401434000035 ], [ -155.021717902999853, 71.032294012000179 ], [ -155.013539191999882, 71.064113674000012 ], [ -155.004587368999921, 71.083482164000131 ], [ -155.001820441999882, 71.092962958000143 ], [ -155.005441860999923, 71.107163804000052 ], [ -155.012806769999941, 71.113348700000031 ], [ -155.011097785999937, 71.115912177000112 ], [ -154.987538214999859, 71.119696356000148 ], [ -154.971669074999937, 71.120062567000062 ], [ -154.918934699999852, 71.11347077 ], [ -154.906849738999938, 71.107163804000052 ], [ -154.894276495999947, 71.095200914000102 ], [ -154.87958736899995, 71.088202216000056 ], [ -154.860910610999895, 71.096380927000055 ], [ -154.839955206999946, 71.101263739000117 ], [ -154.808176235999895, 71.095933335000055 ], [ -154.775257941999882, 71.083970445000105 ], [ -154.725819464999944, 71.055121161 ], [ -154.631214972999942, 71.031561591000141 ], [ -154.608143683999884, 71.020982164000017 ], [ -154.600168423999918, 71.012884833000058 ], [ -154.59711666599992, 71.000474351000051 ], [ -154.601999477999897, 70.992132880000085 ], [ -154.613270636999886, 70.981634833 ], [ -154.625843878999888, 70.97260163 ], [ -154.64325924399995, 70.96572500200007 ], [ -154.647206183999913, 70.958197333000115 ], [ -154.649159308999884, 70.949367580000072 ], [ -154.65172278599988, 70.942124742000047 ], [ -154.662464972999885, 70.925523179 ], [ -154.668202277999882, 70.920599677000112 ], [ -154.679676886999914, 70.91425202 ], [ -154.712880011999914, 70.90558502800009 ], [ -154.788685675999886, 70.896307684000064 ], [ -154.810007290999948, 70.880682684000149 ], [ -154.699818488999881, 70.886216538999989 ], [ -154.675974087999862, 70.876939195000134 ], [ -154.66771399599989, 70.871527411000088 ], [ -154.631214972999942, 70.852769273000106 ], [ -154.63031979099992, 70.848863023000135 ], [ -154.632150844999899, 70.836249091000141 ], [ -154.631214972999942, 70.832261460000083 ], [ -154.590280727999925, 70.82542552300005 ], [ -154.538807745999918, 70.826157945 ], [ -154.435170050999886, 70.83926015800013 ], [ -154.384226040999891, 70.839748440000122 ], [ -154.309071417999888, 70.830796617000104 ], [ -154.270822719999956, 70.819037177000112 ], [ -154.247670050999886, 70.798773505000113 ], [ -154.256703253999888, 70.789129950000145 ], [ -154.247873501999948, 70.782416083 ], [ -154.230336066999911, 70.778387762000037 ], [ -154.213571743999893, 70.777044989000146 ], [ -154.171742316999882, 70.781642971000096 ], [ -154.130970831999889, 70.791327216000141 ], [ -154.042103644999884, 70.833644924000154 ], [ -153.985340949999909, 70.846909898 ], [ -153.940134243999864, 70.881903387000179 ], [ -153.918690558999913, 70.894354559000092 ], [ -153.893545934333702, 70.89838258214543 ], [ -153.893544074999852, 70.898382880000057 ], [ -153.514027472999885, 70.88690827000012 ], [ -153.448963995999918, 70.899481512000122 ], [ -153.379831508999928, 70.900091864000061 ], [ -153.35680091099988, 70.902777411000059 ], [ -153.302438930999926, 70.928656317000062 ], [ -153.255686001999891, 70.932766018 ], [ -153.164865688999896, 70.927883205000128 ], [ -153.148793097999885, 70.924750067000062 ], [ -153.131174282999893, 70.91111888200011 ], [ -153.117054816999939, 70.908026434000035 ], [ -153.10688229099992, 70.906927802 ], [ -153.086740688999953, 70.902289130000057 ], [ -153.075795050999886, 70.90119049700003 ], [ -153.069528774999924, 70.903021552 ], [ -153.052683071999923, 70.911525783000044 ], [ -153.041696743999893, 70.91425202 ], [ -152.955677863999881, 70.908026434000035 ], [ -152.942697719999899, 70.903387762000094 ], [ -152.935251430999926, 70.892564195000105 ], [ -152.928537563999896, 70.879950262000037 ], [ -152.917551235999923, 70.869818427000084 ], [ -152.903146938999953, 70.863959052000141 ], [ -152.884592251999948, 70.859076239000061 ], [ -152.865589972999942, 70.857001044000143 ], [ -152.84984290299991, 70.85960521000014 ], [ -152.840646938999896, 70.86806875200007 ], [ -152.838205532999893, 70.877427476000108 ], [ -152.833078579999892, 70.884711005000113 ], [ -152.815744594999899, 70.88690827000012 ], [ -152.807810024999924, 70.883856512000037 ], [ -152.799020962999947, 70.877183335000083 ], [ -152.784413214999915, 70.862982489000061 ], [ -152.773793097999885, 70.855658270000063 ], [ -152.747019008999871, 70.843451239000089 ], [ -152.714914516999897, 70.821030992000075 ], [ -152.696888800999886, 70.821193752000127 ], [ -152.657460089999915, 70.845933335000026 ], [ -152.673085089999915, 70.866644598 ], [ -152.694081183999913, 70.876939195000134 ], [ -152.719105597999942, 70.880357164000046 ], [ -152.746815558999913, 70.880682684000149 ], [ -152.712513800999886, 70.890366929000109 ], [ -152.545847133999928, 70.887518622000087 ], [ -152.32750403599988, 70.856878973000065 ], [ -152.219227667999917, 70.818019924000069 ], [ -152.219227667999917, 70.812445380000057 ], [ -152.274159308999913, 70.799994208000143 ], [ -152.37547766799986, 70.749253648 ], [ -152.430897589999944, 70.743557033000101 ], [ -152.430897589999944, 70.736029364000146 ], [ -152.415231899999867, 70.731146552000084 ], [ -152.413400844999899, 70.722113348000065 ], [ -152.421335415999948, 70.713324286 ], [ -152.434641079999892, 70.709377346000011 ], [ -152.477772589999915, 70.705511786 ], [ -152.500843878999945, 70.699204820000077 ], [ -152.514108852999868, 70.68891022300015 ], [ -152.509144660999937, 70.663885809000035 ], [ -152.482167120999861, 70.641791083000058 ], [ -152.447946743999893, 70.626044012000094 ], [ -152.253407355999911, 70.599514065000122 ], [ -152.155222133999928, 70.603216864000089 ], [ -152.10383053299995, 70.598781643 ], [ -152.075266079999949, 70.579046942000062 ], [ -152.107533331999889, 70.574937242000104 ], [ -152.166737433999884, 70.582586981000148 ], [ -152.41734778599988, 70.586737372000087 ], [ -152.456735805999955, 70.581732489000146 ], [ -152.517201300999886, 70.592718817 ], [ -152.544992641999954, 70.590155341000084 ], [ -152.580555792999917, 70.582953192000062 ], [ -152.612741665999948, 70.572211005000057 ], [ -152.630116339999915, 70.558539130000113 ], [ -152.618031378999945, 70.555812893000152 ], [ -152.585764126999891, 70.558539130000113 ], [ -152.572621222999942, 70.556708075000031 ], [ -152.547311977999897, 70.547796942 ], [ -152.53453528599988, 70.544867255000085 ], [ -152.507557745999918, 70.545314846000068 ], [ -152.456166144999884, 70.555853583000143 ], [ -151.969105597999913, 70.57160065300009 ], [ -151.848703579999892, 70.558539130000113 ], [ -151.760365363999938, 70.566717841000028 ], [ -151.733265753999888, 70.558539130000113 ], [ -151.748768683999913, 70.554999091000028 ], [ -151.761463995999861, 70.548163153000118 ], [ -151.784169074999909, 70.52753327 ], [ -151.803212042999917, 70.518744208000115 ], [ -151.847645636999914, 70.523016669000029 ], [ -151.869821743999893, 70.517645575000174 ], [ -151.847849087999862, 70.509751695000105 ], [ -151.79039466099988, 70.502386786000031 ], [ -151.886301235999895, 70.492865302000112 ], [ -151.943308071999866, 70.48045482 ], [ -151.979685024999952, 70.448716539000131 ], [ -151.736439581999946, 70.435614325000145 ], [ -151.454172329999892, 70.438950913999989 ], [ -151.407826300999886, 70.426906643000066 ], [ -151.352487758999928, 70.426418361000103 ], [ -151.331654425999943, 70.417954820000048 ], [ -151.315866665999891, 70.409125067 ], [ -151.278757290999863, 70.399725653000147 ], [ -151.24360104099992, 70.379299221000011 ], [ -151.222279425999943, 70.375718492000132 ], [ -151.17711341099988, 70.37978750200007 ], [ -151.17711341099988, 70.387193101000079 ], [ -151.199045376999919, 70.401800848000093 ], [ -151.208811001999862, 70.422430731000119 ], [ -151.202951626999919, 70.440741278000175 ], [ -151.177723761999857, 70.448716539000131 ], [ -150.979115363999938, 70.456122137000122 ], [ -150.972889777999853, 70.458400783000101 ], [ -150.959095831999946, 70.467189846000153 ], [ -150.951161261999886, 70.46979401200015 ], [ -150.862416144999941, 70.46979401200015 ], [ -150.854929165999948, 70.472479559000035 ], [ -150.840891079999892, 70.480698960000112 ], [ -150.835072394999855, 70.482855536000116 ], [ -150.812489386999886, 70.481146552000112 ], [ -150.765695766999897, 70.472235419000086 ], [ -150.74510657499988, 70.476629950000174 ], [ -150.773793097999942, 70.484930731000148 ], [ -150.78612219999988, 70.492254950000145 ], [ -150.793527798999889, 70.503322658000101 ], [ -150.619089321999923, 70.510728257 ], [ -150.608998175999886, 70.509670315000122 ], [ -150.590077277999853, 70.504584052 ], [ -150.581247524999895, 70.503322658000101 ], [ -150.567372199999909, 70.505031643 ], [ -150.540231899999895, 70.511460679000109 ], [ -150.526600714999944, 70.510728257 ], [ -150.513132290999948, 70.503892320000077 ], [ -150.507028774999867, 70.494370835000055 ], [ -150.502268032999893, 70.48456452000012 ], [ -150.49250240799995, 70.476629950000174 ], [ -150.464100714999915, 70.479925848 ], [ -150.419992641999897, 70.491929429000137 ], [ -150.379383917999917, 70.497015692000062 ], [ -150.361520962999947, 70.47972239800005 ], [ -150.369089321999894, 70.467352606000119 ], [ -150.416737433999856, 70.421372789000074 ], [ -150.416737433999856, 70.414536851000051 ], [ -150.383778449999909, 70.416083075000088 ], [ -150.253041144999941, 70.442084052000055 ], [ -150.119130011999943, 70.442857163999989 ], [ -149.889719204999949, 70.512762762000094 ], [ -149.868641730999911, 70.512030341000084 ], [ -149.811634894999884, 70.496161200000145 ], [ -149.784616665999948, 70.497992255000113 ], [ -149.724720831999917, 70.510728257 ], [ -149.567087368999893, 70.510728257 ], [ -149.514352993999921, 70.52277252800009 ], [ -149.488514777999882, 70.523016669000029 ], [ -149.463978644999884, 70.510728257 ], [ -149.469593878999859, 70.504055080000043 ], [ -149.475819464999915, 70.499904690000093 ], [ -149.482980923999861, 70.497788804000081 ], [ -149.491322394999941, 70.497056382000054 ], [ -149.383778449999909, 70.48818594 ], [ -149.354115363999881, 70.497056382000054 ], [ -149.368397589999887, 70.503322658000101 ], [ -149.344471808999913, 70.510077216000028 ], [ -149.044504360999952, 70.468573309000035 ], [ -149.015858527999853, 70.459662177 ], [ -148.992298956999917, 70.448716539000131 ], [ -148.979440883999899, 70.439520575000145 ], [ -148.972157355999883, 70.433050848000065 ], [ -148.964548305999926, 70.429266669000029 ], [ -148.95067298099994, 70.428208726 ], [ -148.917469855999911, 70.440619208 ], [ -148.902902798999889, 70.441839911000116 ], [ -148.825510219999899, 70.41828034100017 ], [ -148.795847133999871, 70.414536851000051 ], [ -148.721018032999893, 70.422023830000015 ], [ -148.682443813999924, 70.420111395000148 ], [ -148.652780727999897, 70.404364325000088 ], [ -148.641061977999897, 70.399725653000147 ], [ -148.586984829999921, 70.394110419000171 ], [ -148.551380988999881, 70.38410065300009 ], [ -148.518177863999938, 70.369208075000031 ], [ -148.50413977799991, 70.356390692 ], [ -148.500965949999909, 70.339911200000117 ], [ -148.511830206999889, 70.318345445000105 ], [ -148.381418423999889, 70.312486070000048 ], [ -148.340565558999941, 70.318345445000105 ], [ -148.257394985999895, 70.354478257000139 ], [ -148.223255988999881, 70.359320380000113 ], [ -148.150746222999885, 70.356431382 ], [ -148.118967251999919, 70.348334052000055 ], [ -148.064808722999885, 70.318833726 ], [ -148.053089972999885, 70.314683335000055 ], [ -148.038929816999939, 70.312160549000126 ], [ -148.02318274599989, 70.313177802 ], [ -148.008534308999884, 70.316839911000059 ], [ -147.993723110999895, 70.318101304000052 ], [ -147.977447068999879, 70.312160549000126 ], [ -147.984283006999902, 70.304673570000077 ], [ -147.962228969999899, 70.301418361000017 ], [ -147.88805091099988, 70.312160549000126 ], [ -147.865874803999901, 70.311224677000055 ], [ -147.842762824999937, 70.307521877000013 ], [ -147.819935675999943, 70.300685940000093 ], [ -147.798695441999939, 70.290432033000158 ], [ -147.80679277299987, 70.286363023000106 ], [ -147.81187903599988, 70.281887111000131 ], [ -147.819813605999855, 70.269924221000011 ], [ -147.810414191999939, 70.268052476000051 ], [ -147.801625128999888, 70.265285549000069 ], [ -147.793365037999877, 70.261460679000081 ], [ -147.785715298999946, 70.256903387000122 ], [ -147.794016079999921, 70.246039130000142 ], [ -147.798898891999897, 70.240912177000112 ], [ -147.806141730999911, 70.236476955000128 ], [ -147.782785610999923, 70.227932033000044 ], [ -147.679595506999902, 70.212225653000147 ], [ -147.416493292999917, 70.202297268000066 ], [ -147.23696855399993, 70.181219794000029 ], [ -147.231434699999909, 70.181789455000015 ], [ -147.221506313999924, 70.187730210000112 ], [ -147.21711178299995, 70.188666083000115 ], [ -147.211537238999938, 70.185858466000141 ], [ -147.20091712099989, 70.177394924000041 ], [ -147.196034308999913, 70.174953518000095 ], [ -147.123687303999958, 70.167547919000086 ], [ -146.880686001999891, 70.174953518000095 ], [ -146.876820441999882, 70.190171617000075 ], [ -146.848784959999875, 70.193426825000117 ], [ -146.741118943999879, 70.192328192000062 ], [ -146.433257615999935, 70.182440497000144 ], [ -146.230580206999946, 70.186021226000108 ], [ -146.082630988999881, 70.15566640800013 ], [ -145.983143683999913, 70.153876044000143 ], [ -145.967762824999852, 70.156927802000055 ], [ -145.940012173999889, 70.166164455000015 ], [ -145.928578253999945, 70.167547919000086 ], [ -145.88914954299986, 70.152411200000088 ], [ -145.872670050999886, 70.152818101000108 ], [ -145.880197719999927, 70.174953518000095 ], [ -145.840443488999938, 70.167425848000121 ], [ -145.771229620999947, 70.134100653000033 ], [ -145.713286912999877, 70.123195705000072 ], [ -145.654855923999889, 70.098578192000062 ], [ -145.613189256999931, 70.088812567000119 ], [ -145.599680141999954, 70.080755927 ], [ -145.613880988999881, 70.07135651200015 ], [ -145.59780839799987, 70.07135651200015 ], [ -145.587717251999919, 70.07526276200015 ], [ -145.572336391999897, 70.085598049000069 ], [ -145.558257615999935, 70.090480861000131 ], [ -145.547474738999938, 70.092352606000091 ], [ -145.52049719999988, 70.092433986000074 ], [ -145.500965949999909, 70.086004950000174 ], [ -145.471180792999888, 70.057806708 ], [ -145.455637173999889, 70.051459052000055 ], [ -145.426909959999932, 70.048163153000033 ], [ -145.368519660999937, 70.033636786 ], [ -145.339222785999937, 70.03034088700015 ], [ -145.215402798999889, 70.044012762000094 ], [ -145.215402798999889, 70.037176825000174 ], [ -145.236154751999891, 70.030707098000065 ], [ -145.301380988999881, 69.999660549000154 ], [ -145.274891730999911, 69.99306875200007 ], [ -145.153920050999915, 70.003078518000066 ], [ -144.941558397999955, 69.977972723000065 ], [ -144.886463995999918, 69.995266018000066 ], [ -144.871571417999945, 69.997992255000142 ], [ -144.825103318999908, 69.986476955000015 ], [ -144.706450975999957, 69.976019598000121 ], [ -144.590158657999893, 69.982814846000153 ], [ -144.564930792999917, 69.989406643000123 ], [ -144.509266730999911, 70.019964911000059 ], [ -144.3861384759999, 70.044012762000094 ], [ -144.1869197259999, 70.043605861000074 ], [ -144.15453040299991, 70.048407294000171 ], [ -144.140370245999861, 70.061346747000172 ], [ -144.129546678999873, 70.067694403000118 ], [ -144.105132615999935, 70.064398505000085 ], [ -144.079253709999932, 70.055365302000055 ], [ -144.064035610999952, 70.044012762000094 ], [ -144.069325324999909, 70.036281643000066 ], [ -144.071115688999896, 70.030462958000115 ], [ -144.069325324999909, 70.024603583000086 ], [ -144.064035610999952, 70.016750393 ], [ -144.068918423999889, 70.009914455000072 ], [ -144.070423956999946, 70.004055080000128 ], [ -144.071441209999932, 69.989406643000123 ], [ -144.057118292999917, 69.998480536000116 ], [ -144.04328365799995, 70.015122788999989 ], [ -144.023060675999915, 70.051459052000055 ], [ -144.047352667999917, 70.064764716000084 ], [ -144.057199673999918, 70.073431708000086 ], [ -144.064035610999952, 70.085598049000069 ], [ -144.017445441999911, 70.092596747000144 ], [ -144.002552863999881, 70.089016018000066 ], [ -143.982736782999837, 70.078802802000141 ], [ -143.975453253999945, 70.077866929000052 ], [ -143.962635870999918, 70.079087632000082 ], [ -143.954741990999935, 70.078802802000141 ], [ -143.931019660999937, 70.071030992000047 ], [ -143.918934699999909, 70.07135651200015 ], [ -143.913807745999918, 70.082180080000157 ], [ -143.905588344999899, 70.088609117000075 ], [ -143.886545376999891, 70.089178778000033 ], [ -143.85171464799987, 70.085598049000069 ], [ -143.824859178999873, 70.089300848 ], [ -143.770578579999835, 70.104437567 ], [ -143.742502407999837, 70.106024481000034 ], [ -143.694081183999941, 70.092433986000074 ], [ -143.674387173999889, 70.090399481000148 ], [ -143.576527472999942, 70.09393952000012 ], [ -143.564361131999959, 70.098578192000062 ], [ -143.560454881999874, 70.106878973000121 ], [ -143.563954230999855, 70.115952867000047 ], [ -143.564198370999918, 70.123358466000028 ], [ -143.550689256999931, 70.126613674000069 ], [ -143.545521613999938, 70.123032945000105 ], [ -143.526193813999896, 70.102362372000087 ], [ -143.510568813999924, 70.096665757000025 ], [ -143.358143683999913, 70.106146552000112 ], [ -143.354115363999938, 70.105617580000128 ], [ -143.352528449999909, 70.101874091000084 ], [ -143.31676184799997, 70.055650132 ], [ -143.29751542899993, 70.043402411000116 ], [ -143.276356574999909, 70.051459052000055 ], [ -143.289906378999973, 70.06313711100016 ], [ -143.302479620999861, 70.07941315300009 ], [ -143.307972785999908, 70.098049221000096 ], [ -143.300282355999883, 70.116644598000093 ], [ -143.277088995999947, 70.120998440000065 ], [ -143.235666469999842, 70.118231512000122 ], [ -143.166493292999945, 70.106024481000034 ], [ -143.154611782999893, 70.100083726000108 ], [ -143.144683397999898, 70.09369538 ], [ -143.133778449999909, 70.088364976000108 ], [ -143.118723110999895, 70.085598049000069 ], [ -143.036488410999937, 70.092433986000074 ], [ -143.023060675999943, 70.08982982 ], [ -143.013539191999939, 70.083482164000046 ], [ -142.998890753999945, 70.068264065000065 ], [ -142.984120245999947, 70.062933661000031 ], [ -142.963612433999913, 70.062648830000072 ], [ -142.942738410999937, 70.065985419000114 ], [ -142.926909959999875, 70.07135651200015 ], [ -142.933745897999927, 70.078802802000141 ], [ -142.87954667899993, 70.074042059000035 ], [ -142.650746222999885, 70.019029038999989 ], [ -142.600819464999859, 70.013128973000121 ], [ -142.596099412999934, 70.00389232 ], [ -142.611643032999865, 69.975734768000095 ], [ -142.597645636999914, 69.971502997000172 ], [ -142.581776495999861, 69.969916083000143 ], [ -142.566314256999931, 69.972235419000086 ], [ -142.553863084999932, 69.979437567000119 ], [ -142.538482225999871, 69.985012111000131 ], [ -142.518177863999881, 69.981878973000065 ], [ -142.481271938999924, 69.96954987200003 ], [ -142.491607225999928, 69.972560940000122 ], [ -142.502064581999917, 69.973537502000013 ], [ -142.512562628999973, 69.972560940000122 ], [ -142.522816535999908, 69.96954987200003 ], [ -142.496896938999896, 69.953843492000047 ], [ -142.437814907999893, 69.948960679 ], [ -142.412953253999945, 69.934759833000086 ], [ -142.418568488999938, 69.931463934000035 ], [ -142.421050584999961, 69.928208726 ], [ -142.422759568999965, 69.924750067 ], [ -142.42601477799991, 69.920477606000176 ], [ -142.397450324999909, 69.92096588700015 ], [ -142.384103969999899, 69.91933828300013 ], [ -142.371408657999837, 69.91425202000012 ], [ -142.377430792999945, 69.904933986000074 ], [ -142.376128709999932, 69.899155992000104 ], [ -142.369496222999885, 69.895453192000062 ], [ -142.343861456999917, 69.888495184000178 ], [ -142.333363410999937, 69.887762762000065 ], [ -142.324289516999841, 69.885239976000136 ], [ -142.293690558999913, 69.863104559000149 ], [ -142.270904100999928, 69.856024481000091 ], [ -142.107329881999959, 69.848944403000033 ], [ -142.04946855399993, 69.834865627000099 ], [ -142.0423884759999, 69.804388739000146 ], [ -142.015126105999911, 69.796291408000016 ], [ -141.988189256999931, 69.792669989000061 ], [ -141.963693813999896, 69.795721747000144 ], [ -141.943430141999897, 69.807806708000058 ], [ -141.920562303999873, 69.815375067 ], [ -141.891184048999889, 69.808823960000112 ], [ -141.837025519999912, 69.790757554 ], [ -141.653309699999937, 69.762152411000116 ], [ -141.573801235999838, 69.730169989000117 ], [ -141.524728969999899, 69.718085028000118 ], [ -141.501210089999915, 69.708807684000149 ], [ -141.48412024599989, 69.697577216000141 ], [ -141.440337693999936, 69.661078192 ], [ -141.412912563999868, 69.650376695 ], [ -141.291086391999869, 69.634019273000078 ], [ -141.267241990999878, 69.644517320000048 ], [ -141.246245897999927, 69.66095612200003 ], [ -141.220611131999959, 69.674058335000026 ], [ -141.248036261999914, 69.680894273000106 ], [ -141.267933722999913, 69.682114976000051 ], [ -141.29149329299986, 69.68585846600017 ], [ -141.316232876999834, 69.68773021000014 ], [ -141.316232876999834, 69.694525458000058 ], [ -141.015207485999895, 69.654201565 ], [ -141.006459113999938, 69.65127187700007 ], [ -141.005563930999926, 69.650946356000148 ], [ -141.005548637108888, 69.650941218272649 ], [ -141.005471151, 69.505164286000181 ], [ -141.005393636999969, 69.359385071000148 ], [ -141.005316121999954, 69.213605856000143 ], [ -141.005290283999841, 69.067826640000149 ], [ -141.00523860699991, 68.922047425000059 ], [ -141.005161092999913, 68.776268209000037 ], [ -141.005083577999983, 68.630488994000032 ], [ -141.005006062999968, 68.484709779000028 ], [ -141.004928548999942, 68.338982239000032 ], [ -141.004851033999927, 68.193203023000095 ], [ -141.004773518999912, 68.04742380800009 ], [ -141.004747681999902, 67.901644593000086 ], [ -141.004696004999971, 67.75581370100015 ], [ -141.004618489999956, 67.610086162000172 ], [ -141.00454097599993, 67.464281108000151 ], [ -141.004463460999915, 67.318476054000044 ], [ -141.0043859459999, 67.172722677000039 ], [ -141.004308431999789, 67.026917624000035 ], [ -141.004230916999859, 66.881138408000098 ], [ -141.004205077999927, 66.735410868000102 ], [ -141.004153401999929, 66.589579976 ], [ -141.004075887999818, 66.443774923 ], [ -141.003998372999888, 66.298021546000157 ], [ -141.003920857999873, 66.152268169000152 ], [ -141.003843343999847, 66.006514791000157 ], [ -141.003765828999917, 65.860735576000152 ], [ -141.003688313999817, 65.714956361000148 ], [ -141.003636638999893, 65.56917714500004 ], [ -141.0036108, 65.423372091000132 ], [ -141.003533284999776, 65.277567037000111 ], [ -141.003455769999846, 65.131787821 ], [ -141.003378255999905, 64.986008606 ], [ -141.003300740999805, 64.840229391 ], [ -141.003223225999875, 64.694501851999988 ], [ -141.003145711999963, 64.548670960000081 ], [ -141.003094034999947, 64.402891744000058 ], [ -141.003068197999937, 64.257112529000054 ], [ -141.002990681999904, 64.111281637000118 ], [ -141.002913167999907, 63.965502422000114 ], [ -141.002835653999966, 63.819774883000107 ], [ -141.002758137999933, 63.674099020000043 ], [ -141.002680623999936, 63.528268128000107 ], [ -141.00260311, 63.382488912000028 ], [ -141.002551432999894, 63.236658020000093 ], [ -141.002525593999906, 63.090878805000088 ], [ -141.002448079999965, 62.945099590000055 ], [ -141.002370565999854, 62.799320374000061 ], [ -141.002293049999935, 62.653592835000055 ], [ -141.002215536, 62.507761943000119 ], [ -141.002138021999883, 62.361982728000115 ], [ -141.002060505999964, 62.21622935000012 ], [ -141.002008830999955, 62.0703726200001 ], [ -141.001982991999938, 61.924619243000095 ], [ -141.001905477999912, 61.7788658650001 ], [ -141.001827962999812, 61.633086650000095 ], [ -141.001750447999882, 61.487333272000072 ], [ -141.001672933999942, 61.341579896000084 ], [ -141.001595418999841, 61.195826518000089 ], [ -141.001517903999911, 61.049969788000126 ], [ -141.0014403899998, 60.904216411000149 ], [ -141.00136287499987, 60.758411357000128 ], [ -141.00128536, 60.612683818000122 ], [ -141.001207845999943, 60.466878765000118 ], [ -141.001156168999927, 60.321073710000107 ], [ -140.994929159999913, 60.304382223000161 ], [ -140.97955542099993, 60.295803935000137 ], [ -140.90914628099992, 60.283659973000127 ], [ -140.768457195, 60.25926869700011 ], [ -140.660505127999954, 60.240510153000017 ], [ -140.533742838999927, 60.218547669000046 ], [ -140.518704996999929, 60.22387034100008 ], [ -140.506664388999866, 60.236324361000172 ], [ -140.475322631999944, 60.276476950000173 ], [ -140.46279109799994, 60.289137675000021 ], [ -140.447804932999873, 60.294460348000158 ], [ -140.424111287999835, 60.293168437000119 ], [ -140.324970052999902, 60.267536927000052 ], [ -140.169243123999877, 60.22722931 ], [ -140.0157899579998, 60.187386780000068 ], [ -139.967756713999933, 60.188368632000149 ], [ -139.916932943999939, 60.207850647000143 ], [ -139.826318319, 60.256478170000051 ], [ -139.728417317999913, 60.309033102000129 ], [ -139.679815632999805, 60.326809795000074 ], [ -139.628345907999915, 60.334096171000127 ], [ -139.517965047999922, 60.336731670000134 ], [ -139.413992065999878, 60.339212138000121 ], [ -139.262192545999937, 60.342777812000108 ], [ -139.101608033, 60.346601868000121 ], [ -139.079464680999877, 60.341020813000014 ], [ -139.068690145999938, 60.322055563000063 ], [ -139.07318599499979, 60.299834697000122 ], [ -139.113467773999929, 60.226815898 ], [ -139.149615438999945, 60.161186829000073 ], [ -139.183230956999978, 60.100156963000174 ], [ -139.182145752999986, 60.073388570000091 ], [ -139.112305054999808, 60.031375631000074 ], [ -139.060206621999953, 60.000058906 ], [ -139.05161108499982, 59.994892070000063 ], [ -139.003758707999907, 59.977218730000075 ], [ -138.842424886999879, 59.937686259000131 ], [ -138.74258601899993, 59.913191631000174 ], [ -138.704888061999895, 59.898463847000173 ], [ -138.697188273999927, 59.89370961600018 ], [ -138.692098144999932, 59.886888326000033 ], [ -138.654348510999966, 59.805497945000113 ], [ -138.637450317999878, 59.784052226000185 ], [ -138.599209757999802, 59.753821513000062 ], [ -138.488880574999826, 59.696357321000065 ], [ -138.363616902999979, 59.631141663000122 ], [ -138.219543009999938, 59.556004130000034 ], [ -138.067614298999956, 59.476990865000161 ], [ -137.910569621999798, 59.395187073000116 ], [ -137.758305013999916, 59.315915426000103 ], [ -137.611363077999897, 59.239330954000181 ], [ -137.594180664999925, 59.225274964000064 ], [ -137.582088378999941, 59.206568096000083 ], [ -137.549299683999834, 59.134531149000011 ], [ -137.521006836999845, 59.072364401000115 ], [ -137.484394084999906, 58.991904196000135 ], [ -137.50775183199994, 58.93996938100004 ], [ -137.508759521999821, 58.914906312000042 ], [ -137.48687455299978, 58.900075175000026 ], [ -137.453465738999796, 58.899144999000058 ], [ -137.423105835999934, 58.907723287000081 ], [ -137.338098104999943, 58.95547231100015 ], [ -137.281899983999779, 58.987149964000153 ], [ -137.172345947999816, 59.027147523000124 ], [ -137.062367316999882, 59.067572333 ], [ -137.04710852799991, 59.073309638000168 ], [ -136.942282471, 59.111070048000116 ], [ -136.840815796999834, 59.148173727000099 ], [ -136.785496175999896, 59.157217102000075 ], [ -136.671911377999834, 59.150809225000117 ], [ -136.613491170999964, 59.154219870000148 ], [ -136.569488688999911, 59.172151591000116 ], [ -136.484791015999804, 59.253800355000024 ], [ -136.483550781999952, 59.257469381000121 ], [ -136.466549235999935, 59.287803447000059 ], [ -136.467091837999988, 59.384490052000118 ], [ -136.467556925999816, 59.461642965000081 ], [ -136.415958007999905, 59.452237854000131 ], [ -136.366839559999846, 59.449550680000087 ], [ -136.319994872999928, 59.45905914300009 ], [ -136.275036377999811, 59.486447653000127 ], [ -136.244728149999958, 59.528202210000174 ], [ -136.258474081999907, 59.556107483000133 ], [ -136.299350138999898, 59.575744528000186 ], [ -136.35032894, 59.592384339000105 ], [ -136.258499918999917, 59.621581523000046 ], [ -136.145406046999881, 59.63682607 ], [ -136.02686031099978, 59.652845765000123 ], [ -135.923817505999978, 59.66674672500001 ], [ -135.830954955999943, 59.693256734000116 ], [ -135.6412507739999, 59.747361960000106 ], [ -135.482759155999929, 59.792475484000178 ], [ -135.465137492999929, 59.789684957000119 ], [ -135.404391845999839, 59.753304749000122 ], [ -135.34579077199993, 59.731032207000069 ], [ -135.25987870299997, 59.698217672000069 ], [ -135.221896524999948, 59.675273336000132 ], [ -135.192027547999942, 59.647109680000156 ], [ -135.157791910999947, 59.62328684500001 ], [ -135.106683919999853, 59.613158265000052 ], [ -135.087873698999942, 59.606543681000161 ], [ -135.032941650999817, 59.57310902900015 ], [ -135.018523926, 59.559363099000123 ], [ -135.016198486999969, 59.543446757000098 ], [ -135.01947994, 59.493165589000157 ], [ -135.023252319999983, 59.477145895000021 ], [ -135.037489176999941, 59.461591289000168 ], [ -135.078597778999921, 59.438336894000045 ], [ -135.095754353999894, 59.418854879000051 ], [ -134.993254150999917, 59.381906230000126 ], [ -135.004829671999971, 59.367126770000098 ], [ -135.014441488999978, 59.351520488000162 ], [ -135.016198486999969, 59.336172587000092 ], [ -134.979973307999927, 59.297415263000161 ], [ -134.957829955999898, 59.2809821580001 ], [ -134.93243099, 59.270646872 ], [ -134.83946508799994, 59.258141174000102 ], [ -134.743450277999955, 59.245118714000157 ], [ -134.70551977599996, 59.2401061 ], [ -134.692083902999912, 59.235248515000151 ], [ -134.682859660999895, 59.223001201000145 ], [ -134.671439169, 59.193752340000103 ], [ -134.660380412999984, 59.18129832000001 ], [ -134.610771038, 59.14455637600004 ], [ -134.582788248999918, 59.128846741000146 ], [ -134.556717489999926, 59.123058980000096 ], [ -134.509071818999871, 59.12280059900003 ], [ -134.477575032999823, 59.114945781000088 ], [ -134.4510133469999, 59.09789255800014 ], [ -134.398019165999813, 59.051952210000152 ], [ -134.387167114999954, 59.036862692000071 ], [ -134.385590983999919, 59.018827616000166 ], [ -134.39938859199998, 58.974954326000145 ], [ -134.343423014999871, 58.96885650600008 ], [ -134.329651244999923, 58.963017070000106 ], [ -134.320039428999905, 58.952681784 ], [ -134.32314001499995, 58.949167786000046 ], [ -134.330323038999893, 58.94534373 ], [ -134.333036051999954, 58.934129945000151 ], [ -134.327403320999906, 58.916456604000146 ], [ -134.316938843999964, 58.903795878000111 ], [ -134.222190104999925, 58.84271433500011 ], [ -134.108837850999919, 58.808246155000134 ], [ -133.98310909099996, 58.769902242000128 ], [ -133.871229614999777, 58.735899150000094 ], [ -133.83112870399998, 58.718019104000135 ], [ -133.79640214099993, 58.693421123000135 ], [ -133.700077270999941, 58.599370016000094 ], [ -133.626283325999907, 58.546401673 ], [ -133.547063354999892, 58.505577291000023 ], [ -133.463089151999782, 58.462220764000122 ], [ -133.392240763999922, 58.403878072000097 ], [ -133.430119588999901, 58.372097067000041 ], [ -133.415030069999915, 58.330549215000147 ], [ -133.374567423999906, 58.290965068 ], [ -133.25726192299993, 58.210298157000082 ], [ -133.165587931999937, 58.147304586000175 ], [ -133.142126831999974, 58.120587870000023 ], [ -133.094842895999932, 58.033099670000141 ], [ -133.075154174999966, 58.007881571999988 ], [ -132.993350382999949, 57.941916606000163 ], [ -132.917153483999925, 57.880499166000092 ], [ -132.832119913999918, 57.791564026000017 ], [ -132.709440063999807, 57.663303122000158 ], [ -132.629057372999966, 57.579277242000117 ], [ -132.552447062999931, 57.499075420000125 ], [ -132.455734619999873, 57.420992330000118 ], [ -132.362303629999985, 57.345699768000074 ], [ -132.304684407999929, 57.280354919000118 ], [ -132.230993815999909, 57.196819967000025 ], [ -132.276365722999913, 57.148890076 ], [ -132.341219645999956, 57.080392965000087 ], [ -132.162289998999938, 57.050317281000034 ], [ -132.0318586839999, 57.028406474000164 ], [ -132.107383789999915, 56.858752747000054 ], [ -131.871558390999951, 56.793459575000114 ], [ -131.865873983999904, 56.785708110000101 ], [ -131.872411051999876, 56.772969869000136 ], [ -131.882617147999952, 56.759146424 ], [ -131.887965657999899, 56.747958476000164 ], [ -131.886027791999965, 56.737054749 ], [ -131.880705118999913, 56.728838196000154 ], [ -131.864788777999905, 56.713490296000018 ], [ -131.838976400999798, 56.682277731000013 ], [ -131.830423950999943, 56.664759420000152 ], [ -131.826574055999913, 56.644605610999989 ], [ -131.832103434999908, 56.603367818000081 ], [ -131.825592203999946, 56.593342591000138 ], [ -131.799108032999953, 56.587658183000102 ], [ -131.692292846999919, 56.58507436100011 ], [ -131.585891072999914, 56.595047913000101 ], [ -131.560362914999985, 56.594066061000049 ], [ -131.536436727999899, 56.585229391000141 ], [ -131.491659098999918, 56.560166321000125 ], [ -131.345699015999969, 56.503270569000065 ], [ -131.215603597999916, 56.452550151000096 ], [ -131.100546020999957, 56.407669169000101 ], [ -131.016933553999934, 56.387050273000099 ], [ -130.839089111999897, 56.372451681000129 ], [ -130.760334229999899, 56.345192363000123 ], [ -130.645767579, 56.261941631000113 ], [ -130.602256022999967, 56.247058818000156 ], [ -130.495518351999863, 56.232434388000101 ], [ -130.472289795999956, 56.224889628000042 ], [ -130.458052938999884, 56.21065277100017 ], [ -130.4279255779999, 56.143964335000149 ], [ -130.418158732999927, 56.129701640000079 ], [ -130.403973551999798, 56.121898499000153 ], [ -130.290311239999909, 56.100969544000165 ], [ -130.243156495, 56.092391256000141 ], [ -130.211246297999935, 56.089962464000067 ], [ -130.116755941999941, 56.105646261000132 ], [ -130.094328369999857, 56.10148630800002 ], [ -130.07153906299996, 56.08412302699999 ], [ -130.039318807999905, 56.045520732000014 ], [ -130.026632242999966, 56.024100851000085 ], [ -130.0190099699999, 56.002215882000044 ], [ -130.014694987999917, 55.963251852000056 ], [ -130.016787882999893, 55.918913473000103 ], [ -130.019611704999932, 55.907977949000085 ], [ -130.019618444449407, 55.90795184963342 ], [ -130.022816535999908, 55.901353257000139 ], [ -130.049387173999946, 55.87140534100017 ], [ -130.104725714999944, 55.825262762000065 ], [ -130.136626756999959, 55.806463934000092 ], [ -130.148833787999934, 55.795355536000059 ], [ -130.163482225999928, 55.771144924000069 ], [ -130.16730709499987, 55.766262111000103 ], [ -130.170806443999936, 55.759833075000088 ], [ -130.173654751999891, 55.749497788999989 ], [ -130.170806443999936, 55.740952867000075 ], [ -130.163807745999861, 55.73456452000012 ], [ -130.160064256999931, 55.727118231000148 ], [ -130.167388475999928, 55.715399481000176 ], [ -130.155913865999906, 55.700140692 ], [ -130.142893032999922, 55.689520575000145 ], [ -130.13182532499988, 55.676581122000144 ], [ -130.126454230999911, 55.653998114000089 ], [ -130.128570115999935, 55.636419989000146 ], [ -130.135121222999913, 55.619126695000048 ], [ -130.153146938999839, 55.585109768000123 ], [ -130.148671027999882, 55.578192450000031 ], [ -130.146880662999877, 55.569322007000082 ], [ -130.14696204299986, 55.547186591000113 ], [ -130.112172003999945, 55.509344794000143 ], [ -130.101673956999946, 55.481146552 ], [ -130.09508216099988, 55.472113348000065 ], [ -130.065419074999937, 55.446112372000087 ], [ -130.057525193999965, 55.43488190300009 ], [ -130.052561001999919, 55.414007880000113 ], [ -130.054310675999915, 55.366644598000093 ], [ -130.050119594999899, 55.345445054 ], [ -130.03929602799991, 55.330755927 ], [ -129.98924719999988, 55.284002997000115 ], [ -130.031239386999857, 55.264349677000055 ], [ -130.050038214999915, 55.252875067000033 ], [ -130.067494269999941, 55.238999742000132 ], [ -130.078236456999974, 55.23379140800013 ], [ -130.100493943999936, 55.230292059000035 ], [ -130.104725714999944, 55.225653387000122 ], [ -130.10570227799991, 55.211127020000063 ], [ -130.109120245999918, 55.200751044000171 ], [ -130.115793423999975, 55.19159577 ], [ -130.126454230999911, 55.180975653000147 ], [ -130.151966925999915, 55.163275458000143 ], [ -130.159982876999862, 55.153713283000158 ], [ -130.167591925999886, 55.129584052000141 ], [ -130.173695441999882, 55.117743231000176 ], [ -130.200266079999835, 55.104152736000131 ], [ -130.211781378999973, 55.084133205000157 ], [ -130.228871222999913, 55.043850002000099 ], [ -130.238677537999934, 55.034409898000078 ], [ -130.261341925999886, 55.022894598000121 ], [ -130.269846157999837, 55.016546942 ], [ -130.275705532999893, 55.006984768000038 ], [ -130.286366339999915, 54.983221747000115 ], [ -130.294341600999957, 54.971869208000143 ], [ -130.326568162999905, 54.952093817000119 ], [ -130.335560675999943, 54.938706773000106 ], [ -130.365386522999927, 54.907294012000179 ], [ -130.385243292999917, 54.896551825000174 ], [ -130.430816209999875, 54.881252346000011 ], [ -130.48875891799986, 54.844183661 ], [ -130.58031165299991, 54.806382554000137 ], [ -130.604603644999941, 54.802150783000016 ], [ -130.602528449999937, 54.814520575000145 ], [ -130.568430141999841, 54.841498114000117 ], [ -130.560943162999962, 54.851385809000035 ], [ -130.567209438999924, 54.854396877000127 ], [ -130.578277147999955, 54.853583075000117 ], [ -130.585113084999875, 54.851996161000088 ], [ -130.606516079999921, 54.83860911699999 ], [ -130.671457485999895, 54.772040106000091 ], [ -130.680775519999941, 54.765448309000121 ], [ -130.691273566999911, 54.762640692000062 ], [ -130.703724738999938, 54.765448309000121 ], [ -130.718413865999935, 54.773016669000143 ], [ -130.728871222999913, 54.784125067 ], [ -130.728505011999914, 54.797430731000119 ], [ -130.713286912999934, 54.803778387000037 ], [ -130.690785285999937, 54.806789455000128 ], [ -130.677845831999917, 54.814520575000145 ], [ -130.691273566999911, 54.834947007000139 ], [ -130.705148891999897, 54.850490627000127 ], [ -130.715809699999909, 54.868231512000037 ], [ -130.723540818999936, 54.887396552 ], [ -130.728505011999914, 54.907294012000179 ], [ -130.728830532999922, 54.917181708 ], [ -130.726877407999893, 54.93878815300009 ], [ -130.728505011999914, 54.948187567000119 ], [ -130.73412024599989, 54.956732489000146 ], [ -130.743560350999928, 54.966294664000131 ], [ -130.752512173999946, 54.969387111000017 ], [ -130.756459113999938, 54.957831122000087 ], [ -130.754383917999917, 54.892767645000148 ], [ -130.750233527999853, 54.872503973000121 ], [ -130.738758917999917, 54.853949286000116 ], [ -130.734038865999906, 54.843085028000147 ], [ -130.735951300999943, 54.831529039000131 ], [ -130.745187954999835, 54.821722723000093 ], [ -130.75609290299991, 54.819525458 ], [ -130.767201300999943, 54.823391018 ], [ -130.776926235999895, 54.831529039000131 ], [ -130.788889126999919, 54.803941148000106 ], [ -130.806630011999914, 54.778753973000121 ], [ -130.831898566999939, 54.765366929000137 ], [ -130.866322394999884, 54.773179429000109 ], [ -130.918324347999942, 54.802923895000148 ], [ -130.934234178999873, 54.824448960000055 ], [ -130.927805141999869, 54.851996161000088 ], [ -130.931996222999885, 54.85342031500015 ], [ -130.942005988999881, 54.858872789000017 ], [ -130.933420376999891, 54.880194403000147 ], [ -130.941761847999942, 54.895331122000144 ], [ -130.955189581999946, 54.90936920800003 ], [ -130.96190344999988, 54.927720445000077 ], [ -130.941232876999862, 54.925360419000114 ], [ -130.932687954999835, 54.94017161699999 ], [ -130.93968665299991, 54.958929755000142 ], [ -130.965321417999888, 54.968085028000118 ], [ -130.974029100999871, 54.981756903000147 ], [ -130.982248501999891, 54.991115627000099 ], [ -130.992909308999913, 54.99542877800009 ], [ -131.009388800999886, 54.99827708500014 ], [ -131.009673631999931, 55.005357164000017 ], [ -130.996652798999946, 55.023382880000113 ], [ -130.986968553999873, 55.043524481000148 ], [ -130.971018032999893, 55.061224677000055 ], [ -130.949696417999917, 55.073797919000143 ], [ -130.901234503999916, 55.083441473000121 ], [ -130.85415605399993, 55.103094794000171 ], [ -130.832142706999889, 55.105292059000149 ], [ -130.821156378999945, 55.100246486000131 ], [ -130.817372199999909, 55.092352606000148 ], [ -130.815663214999915, 55.08421458500014 ], [ -130.811105923999975, 55.078599351000051 ], [ -130.799549933999941, 55.076849677000055 ], [ -130.763335740999935, 55.078680731000034 ], [ -130.753325975999928, 55.081976630000057 ], [ -130.744211391999869, 55.083156643000095 ], [ -130.731516079999892, 55.079820054000052 ], [ -130.720326300999972, 55.08100006700009 ], [ -130.712473110999895, 55.106634833000058 ], [ -130.705067511999914, 55.118841864000117 ], [ -130.687570766999869, 55.140082098000036 ], [ -130.648833787999934, 55.172512111000017 ], [ -130.566029425999886, 55.223334052000055 ], [ -130.473459438999896, 55.310126044000143 ], [ -130.461577928999958, 55.331854559000035 ], [ -130.480132615999963, 55.330755927 ], [ -130.492502407999893, 55.323472398000078 ], [ -130.502308722999942, 55.315252997000172 ], [ -130.523548956999917, 55.307359117000104 ], [ -130.552561001999891, 55.287746486000131 ], [ -130.561268683999913, 55.280259507000082 ], [ -130.594146287999877, 55.225653387000122 ], [ -130.615467902999853, 55.199530341000141 ], [ -130.668446417999888, 55.18040599199999 ], [ -130.694203253999945, 55.161200262000037 ], [ -130.759917772999927, 55.09699127800009 ], [ -130.774281378999888, 55.092515367000132 ], [ -130.791167772999898, 55.099066473 ], [ -130.79751542899993, 55.108465887000037 ], [ -130.805409308999913, 55.136297919000086 ], [ -130.811105923999975, 55.146877346000124 ], [ -130.842762824999852, 55.137274481000148 ], [ -130.852040167999917, 55.133205471000011 ], [ -130.883168097999885, 55.108954169000029 ], [ -130.890207485999895, 55.105292059000149 ], [ -130.970814581999917, 55.085435289000074 ], [ -130.996652798999946, 55.085394598000065 ], [ -131.015736456999917, 55.093573309000178 ], [ -131.038238084999932, 55.108384507000054 ], [ -131.057036912999962, 55.126288153000118 ], [ -131.064930792999917, 55.143459377000127 ], [ -131.065297003999945, 55.186224677000141 ], [ -131.057606574999909, 55.19867584800015 ], [ -131.001942511999914, 55.240139065000065 ], [ -130.979807094999927, 55.251369533000158 ], [ -130.958485480999855, 55.256089585000083 ], [ -130.956776495999861, 55.260484117000047 ], [ -130.938303188999839, 55.287095445 ], [ -130.924712693999879, 55.294012762000094 ], [ -130.910227016999841, 55.294989325000145 ], [ -130.879994269999941, 55.29026927300005 ], [ -130.632150844999899, 55.291001695 ], [ -130.622181769999884, 55.2931175800001 ], [ -130.612456834999932, 55.297064520000092 ], [ -130.656809048999975, 55.315741278000147 ], [ -130.669422980999855, 55.328517971000011 ], [ -130.646595831999946, 55.338609117000075 ], [ -130.65640214799987, 55.352280992000104 ], [ -130.670399542999917, 55.349920966000141 ], [ -130.712391730999911, 55.320868231000176 ], [ -130.726307745999918, 55.31464264500012 ], [ -130.833851691999911, 55.304388739 ], [ -130.861887173999918, 55.312160549000097 ], [ -130.873158331999917, 55.342027085000083 ], [ -130.886789516999869, 55.451605536000116 ], [ -130.873524542999917, 55.534125067000119 ], [ -130.866322394999884, 55.550279038999989 ], [ -130.873158331999917, 55.622951565000065 ], [ -130.878529425999972, 55.636379299000154 ], [ -130.902170376999891, 55.665716864000061 ], [ -130.907297329999921, 55.68187083500014 ], [ -130.904042120999861, 55.690252997000087 ], [ -130.890207485999895, 55.700384833000143 ], [ -130.886789516999869, 55.708563544000143 ], [ -130.889881964999944, 55.715277411 ], [ -130.904042120999861, 55.72748444200009 ], [ -130.91466223899991, 55.746893622000087 ], [ -130.949940558999941, 55.771144924000069 ], [ -130.96190344999988, 55.783026434000121 ], [ -130.928130662999877, 55.800238348000121 ], [ -130.920399542999888, 55.810451565000065 ], [ -130.934559699999909, 55.818426825000031 ], [ -130.940663214999915, 55.816799221000011 ], [ -130.968739386999914, 55.804754950000088 ], [ -130.983469204999892, 55.805650132 ], [ -130.996408657999893, 55.810532945000048 ], [ -131.006703253999916, 55.815863348000121 ], [ -131.013417120999947, 55.818426825000031 ], [ -131.022368943999879, 55.826727606000119 ], [ -131.061512824999909, 55.876776434000035 ], [ -131.077626105999911, 55.888495184000121 ], [ -131.133859829999892, 55.920843817000119 ], [ -131.131418423999946, 55.924546617000075 ], [ -131.126372850999928, 55.934515692000062 ], [ -131.146311001999891, 55.934800523000021 ], [ -131.165191209999932, 55.940578518000066 ], [ -131.176828579999835, 55.95197174700003 ], [ -131.174794074999909, 55.969305731000119 ], [ -131.196400519999912, 55.971421617000132 ], [ -131.184925910999965, 55.986721096000096 ], [ -131.140044725999928, 56.017035223000065 ], [ -131.044422980999883, 56.058050848000065 ], [ -131.052845831999946, 56.057318427000141 ], [ -131.07860266799986, 56.058050848000065 ], [ -131.068023240999935, 56.071926174000069 ], [ -131.009673631999931, 56.112616278000147 ], [ -131.063303188999896, 56.095933335000112 ], [ -131.085682745999918, 56.086167710000083 ], [ -131.106516079999892, 56.071682033000016 ], [ -131.124989386999914, 56.050441799000126 ], [ -131.136097785999965, 56.041327216000141 ], [ -131.165516730999855, 56.033270575000117 ], [ -131.192250128999945, 56.014553127000127 ], [ -131.290272589999887, 55.988348700000117 ], [ -131.303334113999938, 55.98167552300005 ], [ -131.314768032999922, 55.972642320000048 ], [ -131.341867641999841, 55.960923570000048 ], [ -131.371205206999946, 55.968573309000178 ], [ -131.397287563999924, 55.987616278000175 ], [ -131.414377407999865, 56.010199286000145 ], [ -131.433094855999911, 55.997544663999989 ], [ -131.458973761999943, 55.984686591000141 ], [ -131.483021613999966, 55.979437567000062 ], [ -131.49632727799991, 55.989732163999989 ], [ -131.564116990999906, 55.947007554000081 ], [ -131.589426235999866, 55.941351630000085 ], [ -131.618723110999895, 55.942694403000175 ], [ -131.627308722999885, 55.941351630000085 ], [ -131.63149980399993, 55.938299872000087 ], [ -131.634592251999891, 55.933986721000096 ], [ -131.638172980999883, 55.929999091000113 ], [ -131.655344204999892, 55.924994208000058 ], [ -131.680409308999913, 55.910467841000028 ], [ -131.70335852799991, 55.90436432500006 ], [ -131.725412563999896, 55.891099351000108 ], [ -131.735910610999866, 55.886704820000134 ], [ -131.753732876999834, 55.885077216000113 ], [ -131.786122199999937, 55.887396552000084 ], [ -131.804798956999917, 55.886704820000134 ], [ -131.817372199999909, 55.883002020000092 ], [ -131.841460740999935, 55.870306708000115 ], [ -131.853179490999935, 55.86627838700015 ], [ -131.869374152999853, 55.865383205000157 ], [ -131.885365363999966, 55.86627838700015 ], [ -131.900624152999939, 55.86546458500014 ], [ -131.914662238999881, 55.859442450000031 ], [ -131.893299933999913, 55.855373440000093 ], [ -131.825306769999941, 55.831488348 ], [ -131.777943488999938, 55.825384833000115 ], [ -131.76585852799991, 55.816880601 ], [ -131.763824022999898, 55.797349351000108 ], [ -131.774240688999896, 55.77049388200011 ], [ -131.782785610999895, 55.753892320000077 ], [ -131.790516730999911, 55.742743231000063 ], [ -131.808420376999891, 55.72947825700011 ], [ -131.825266079999892, 55.725490627000127 ], [ -131.866851365999935, 55.729071356000119 ], [ -131.832102016999897, 55.696966864000146 ], [ -131.827707485999895, 55.667873440000065 ], [ -131.847971157999922, 55.641913153000175 ], [ -131.88731848899991, 55.619208075000031 ], [ -131.884632941999939, 55.613674221000011 ], [ -131.882435675999943, 55.604193427000112 ], [ -131.880523240999878, 55.598700262000179 ], [ -132.004017706999889, 55.667629299000126 ], [ -131.994740363999938, 55.657049872000172 ], [ -131.968495245999918, 55.633490302000112 ], [ -131.963042772999898, 55.622951565000065 ], [ -131.953480597999885, 55.611517645000035 ], [ -131.936268683999884, 55.598089911000116 ], [ -131.928944464999887, 55.58930084800015 ], [ -131.948801235999895, 55.591945705000128 ], [ -131.948801235999895, 55.585109768000123 ], [ -131.934641079999864, 55.576971747000115 ], [ -131.926014777999853, 55.563625393 ], [ -131.923695441999882, 55.547267971000096 ], [ -131.928334113999938, 55.530462958000086 ], [ -131.934071417999917, 55.526597398000078 ], [ -131.943267381999959, 55.523382880000113 ], [ -131.951893683999856, 55.517564195000048 ], [ -131.955637173999889, 55.506252346000068 ], [ -131.96141516799986, 55.501044012000179 ], [ -131.974436001999862, 55.504828192 ], [ -131.996571417999917, 55.516791083000143 ], [ -132.134632941999968, 55.565171617000047 ], [ -132.171620245999918, 55.588527736000131 ], [ -132.185292120999947, 55.615627346000068 ], [ -132.211903449999909, 55.698065497000087 ], [ -132.226551886999914, 55.715399481000176 ], [ -132.244455532999865, 55.722967841000028 ], [ -132.261545376999891, 55.739650783000158 ], [ -132.266184048999946, 55.756293036000031 ], [ -132.24673417899993, 55.763861395000063 ], [ -132.227365688999924, 55.757757880000085 ], [ -132.188710089999859, 55.730292059000035 ], [ -132.167876756999874, 55.722845770000148 ], [ -132.177357550999886, 55.751776434000149 ], [ -132.182199673999946, 55.776841539000046 ], [ -132.176869269999912, 55.794867255000085 ], [ -132.168853318999936, 55.802313544000143 ], [ -132.140614386999914, 55.804754950000088 ], [ -132.073597785999908, 55.802801825000145 ], [ -132.058664516999869, 55.804754950000088 ], [ -132.046213344999842, 55.817287502000099 ], [ -132.053944464999944, 55.828314520000148 ], [ -132.086008266999926, 55.845770575000088 ], [ -132.070179816999882, 55.862860419000143 ], [ -132.049631313999839, 55.878363348000065 ], [ -132.036040818999879, 55.893784898 ], [ -132.041330532999893, 55.910956122000115 ], [ -132.056304490999906, 55.930365302000112 ], [ -132.056874152999882, 55.944525458000143 ], [ -132.04360917899993, 55.954657294000114 ], [ -132.017079230999883, 55.961859442000119 ], [ -131.968373175999943, 55.958685614000061 ], [ -131.955637173999889, 55.961859442000119 ], [ -131.949818488999938, 55.972113348000065 ], [ -131.953724738999938, 55.992824611000074 ], [ -131.945057745999947, 55.996568101000108 ], [ -131.943511522999927, 56.006903387000122 ], [ -131.963042772999898, 56.071682033000016 ], [ -131.963042772999898, 56.157375393000095 ], [ -131.950306769999941, 56.166693427000141 ], [ -131.888742641999897, 56.183823960000083 ], [ -131.813791469999927, 56.195990302000055 ], [ -131.698394334999932, 56.196234442 ], [ -131.599029100999928, 56.178656317000062 ], [ -131.579497850999928, 56.179103908000158 ], [ -131.558420376999834, 56.188381252000013 ], [ -131.529286261999857, 56.214016018000095 ], [ -131.513417120999947, 56.222072658000016 ], [ -131.489491339999887, 56.222479559000121 ], [ -131.513335740999963, 56.229315497000059 ], [ -131.537831183999913, 56.225409247000144 ], [ -131.586333787999962, 56.208889065000065 ], [ -131.613840298999889, 56.205145575000031 ], [ -131.637928839999915, 56.206366278000147 ], [ -131.688710089999887, 56.216294664000046 ], [ -131.876820441999939, 56.223089911000088 ], [ -131.907826300999943, 56.232733466000141 ], [ -131.959339972999942, 56.294501044000143 ], [ -131.965240037999877, 56.310777085 ], [ -131.971302863999966, 56.35643138200011 ], [ -131.980132615999935, 56.365912177000112 ], [ -132.00609290299991, 56.367254950000117 ], [ -132.060658331999889, 56.381008205000128 ], [ -132.077015753999916, 56.381903387000037 ], [ -132.089019334999932, 56.376776434000121 ], [ -132.105091925999915, 56.373724677000112 ], [ -132.143788214999859, 56.388739325000145 ], [ -132.154896613999881, 56.380194403000033 ], [ -132.161040818999965, 56.380194403000033 ], [ -132.185292120999947, 56.428697007 ], [ -132.188384568999936, 56.451849677000141 ], [ -132.203277147999898, 56.471258856000148 ], [ -132.236154751999891, 56.483099677000112 ], [ -132.284006313999896, 56.493475653000118 ], [ -132.289418097999942, 56.498480536000145 ], [ -132.337147589999915, 56.523749091000113 ], [ -132.344878709999932, 56.528998114000089 ], [ -132.349720831999889, 56.536932684000149 ], [ -132.352894660999965, 56.552069403000147 ], [ -132.350209113999881, 56.579413153000118 ], [ -132.337798631999959, 56.60179271000014 ], [ -132.305043097999942, 56.640204169000143 ], [ -132.329823370999918, 56.639146226 ], [ -132.371693488999938, 56.624212958000058 ], [ -132.447417772999898, 56.607163804 ], [ -132.476877407999893, 56.60447825700011 ], [ -132.520008917999917, 56.627671617000047 ], [ -132.540191209999932, 56.63149648600016 ], [ -132.550038214999944, 56.638983466000028 ], [ -132.538441535999937, 56.661322333000058 ], [ -132.521962042999945, 56.674953518 ], [ -132.503325975999957, 56.678371486000017 ], [ -132.456532355999883, 56.674994208 ], [ -132.468739386999857, 56.691880601 ], [ -132.487294074999852, 56.698675848000121 ], [ -132.509022589999915, 56.702093817000119 ], [ -132.530995245999947, 56.708563544000029 ], [ -132.47948157499988, 56.742824611000103 ], [ -132.462717251999862, 56.756903387000037 ], [ -132.462635870999861, 56.76483795800003 ], [ -132.414906378999916, 56.784857489000089 ], [ -132.412220831999946, 56.792303778000147 ], [ -132.413807745999861, 56.801255601 ], [ -132.412464972999885, 56.808905341000113 ], [ -132.400949673999946, 56.812201239000146 ], [ -132.379302537999934, 56.812323309000121 ], [ -132.369496222999942, 56.814113674000012 ], [ -132.359689907999893, 56.818426825000117 ], [ -132.378407355999855, 56.826483466000141 ], [ -132.398671027999882, 56.824896552000112 ], [ -132.418202277999853, 56.816839911000088 ], [ -132.434803839999915, 56.805365302000112 ], [ -132.432728644999884, 56.793524481000148 ], [ -132.452951626999919, 56.788031317000147 ], [ -132.477853969999842, 56.785101630000113 ], [ -132.490061001999834, 56.781154690000122 ], [ -132.497181769999969, 56.761297919000029 ], [ -132.514800584999904, 56.755438544000086 ], [ -132.537098761999943, 56.758124091000141 ], [ -132.673207160999937, 56.802801825000031 ], [ -132.761382615999935, 56.845770575000174 ], [ -132.774647589999859, 56.856512762000094 ], [ -132.778228318999936, 56.862046617000104 ], [ -132.782622850999928, 56.875230210000055 ], [ -132.784820115999906, 56.879828192 ], [ -132.790923631999902, 56.885443427 ], [ -132.844715949999852, 56.913153387000179 ], [ -132.856556769999912, 56.914536851000079 ], [ -132.860422329999921, 56.91885000200007 ], [ -132.859527147999927, 56.937648830000015 ], [ -132.863677537999962, 56.941880601000136 ], [ -132.877919074999852, 56.946722723000036 ], [ -132.896555141999841, 56.958075262000179 ], [ -132.913197394999884, 56.971625067000147 ], [ -132.922027147999955, 56.982855536000059 ], [ -132.895497199999909, 56.989243882000082 ], [ -132.881581183999913, 56.991115627000127 ], [ -132.86742102799991, 56.989691473000065 ], [ -132.852121548999946, 56.974025783000101 ], [ -132.841053839999915, 56.967718817000062 ], [ -132.829579230999855, 56.972967841000141 ], [ -132.811756964999887, 56.974188544000143 ], [ -132.786203579999892, 56.967596747000087 ], [ -132.767689581999974, 56.969671942 ], [ -132.771229620999861, 56.997137762000065 ], [ -132.809803839999915, 57.05565013200011 ], [ -132.80874589799987, 57.065375067000062 ], [ -132.799549933999913, 57.06972890800013 ], [ -132.792836066999939, 57.079046942 ], [ -132.790842251999919, 57.088446356000119 ], [ -132.79539954299986, 57.092718817000119 ], [ -132.805531378999916, 57.090480861000131 ], [ -132.831166144999884, 57.078436591000028 ], [ -132.839466925999943, 57.072821356000034 ], [ -132.861073370999861, 57.036363023000078 ], [ -132.877674933999913, 57.021307684000149 ], [ -132.897816535999937, 57.027533270000035 ], [ -132.921620245999947, 57.042792059000178 ], [ -132.945708787999877, 57.046820380000057 ], [ -132.983509894999941, 57.044907945 ], [ -132.993804490999935, 57.047756252000127 ], [ -133.0423884759999, 57.069240627000156 ], [ -133.066477016999926, 57.076727606000034 ], [ -133.079701300999943, 57.082749742000132 ], [ -133.093006964999887, 57.086493231000148 ], [ -133.112619594999842, 57.088324286000145 ], [ -133.131906704999892, 57.087388414000074 ], [ -133.144195115999935, 57.082749742000132 ], [ -133.149769660999937, 57.081488348000121 ], [ -133.157866990999878, 57.08295319200009 ], [ -133.165191209999875, 57.086004950000174 ], [ -133.168446417999917, 57.089585679000052 ], [ -133.166330532999922, 57.096828518000066 ], [ -133.161691860999895, 57.101874091000113 ], [ -133.154774542999917, 57.106390692000062 ], [ -133.150502081999974, 57.116115627000013 ], [ -133.144602016999841, 57.122503973000121 ], [ -133.141997850999928, 57.129584052 ], [ -133.147938605999883, 57.141099351000136 ], [ -133.121083136999914, 57.144273179 ], [ -133.136301235999895, 57.161078192 ], [ -133.167551235999838, 57.169623114000117 ], [ -133.1888728509999, 57.147935289000046 ], [ -133.175282355999855, 57.147935289000046 ], [ -133.175282355999855, 57.141099351000136 ], [ -133.211496548999946, 57.141994533000044 ], [ -133.220366990999935, 57.147650458000115 ], [ -133.209380662999934, 57.161037502000013 ], [ -133.216623501999891, 57.170965887000122 ], [ -133.225941535999937, 57.174994208 ], [ -133.235707160999965, 57.173814195000077 ], [ -133.244130011999914, 57.168443101000108 ], [ -133.25035559799997, 57.133693752000127 ], [ -133.266468878999945, 57.113185940000093 ], [ -133.290109829999892, 57.101996161000088 ], [ -133.317005988999938, 57.102484442000062 ], [ -133.363596157999893, 57.128363348000093 ], [ -133.42357337099989, 57.145331122000144 ], [ -133.445912238999938, 57.147935289000046 ], [ -133.453033006999874, 57.151109117000104 ], [ -133.476144985999923, 57.165228583000143 ], [ -133.486887173999946, 57.168443101000108 ], [ -133.520578579999835, 57.172308661000031 ], [ -133.538156704999892, 57.176459052000055 ], [ -133.551991339999859, 57.181463934000092 ], [ -133.551991339999859, 57.188299872000115 ], [ -133.530018683999856, 57.19135163 ], [ -133.504750128999888, 57.203436591000113 ], [ -133.488636847999942, 57.220892645000063 ], [ -133.494007941999882, 57.239813544000086 ], [ -133.505116339999915, 57.25120677300005 ], [ -133.502674933999884, 57.253729559000149 ], [ -133.495025193999936, 57.256170966000113 ], [ -133.49058997299997, 57.26776764500012 ], [ -133.485096808999856, 57.277004299000069 ], [ -133.471913214999915, 57.281887111000131 ], [ -133.442209438999896, 57.284491278000147 ], [ -133.254790818999936, 57.281073309000035 ], [ -133.18211829299986, 57.305609442000062 ], [ -133.176096157999865, 57.30878327000012 ], [ -133.169545050999972, 57.315904038999989 ], [ -133.162220831999946, 57.319281317 ], [ -133.107289191999882, 57.319281317 ], [ -133.086293097999942, 57.322495835000055 ], [ -133.058420376999891, 57.331854559000178 ], [ -133.037668423999889, 57.346828518000123 ], [ -133.038075324999909, 57.367092190000122 ], [ -133.051096157999893, 57.366278387000122 ], [ -133.099273240999935, 57.339300848000065 ], [ -133.120676235999895, 57.33234284100017 ], [ -133.178700324999852, 57.33234284100017 ], [ -133.190337693999965, 57.330471096000011 ], [ -133.21157792899993, 57.321926174000097 ], [ -133.223703579999835, 57.319281317 ], [ -133.241118943999908, 57.32037995000006 ], [ -133.27196204299986, 57.330023505000113 ], [ -133.288238084999904, 57.33234284100017 ], [ -133.391468878999916, 57.335150458000115 ], [ -133.419504360999838, 57.343939520000092 ], [ -133.442128058999913, 57.358954169000114 ], [ -133.456450975999871, 57.380764065000065 ], [ -133.420806443999936, 57.394842841000113 ], [ -133.402902798999946, 57.399400132000054 ], [ -133.356678839999859, 57.40228913 ], [ -133.344797329999921, 57.405422268000066 ], [ -133.339751756999874, 57.411769924000097 ], [ -133.335519985999866, 57.42877838700015 ], [ -133.335926886999857, 57.438177802000084 ], [ -133.3431697259999, 57.442206122000144 ], [ -133.35179602799991, 57.440008856000148 ], [ -133.368519660999937, 57.43065013200011 ], [ -133.378244594999899, 57.428534247000115 ], [ -133.403920050999943, 57.433172919000057 ], [ -133.414458787999905, 57.432806708000115 ], [ -133.425404425999943, 57.42511627800009 ], [ -133.437408006999874, 57.423529364000061 ], [ -133.454213019999884, 57.431789455000157 ], [ -133.470285610999895, 57.443589585000112 ], [ -133.500396287999905, 57.476019598000121 ], [ -133.50454667899993, 57.486802476000136 ], [ -133.50487219999988, 57.503607489000146 ], [ -133.49742591099988, 57.53156159100017 ], [ -133.492543097999942, 57.538641669000029 ], [ -133.476918097999942, 57.552069403000033 ], [ -133.439035610999895, 57.569484768000095 ], [ -133.348866339999887, 57.575913804000109 ], [ -133.313099738999938, 57.592962958000058 ], [ -133.333851691999939, 57.596014716000141 ], [ -133.416127081999917, 57.595282294000029 ], [ -133.439076300999886, 57.589544989000146 ], [ -133.460845506999959, 57.579901434000178 ], [ -133.532948370999861, 57.572455145 ], [ -133.591420050999943, 57.574611721000011 ], [ -133.605091925999972, 57.579291083000115 ], [ -133.648548956999917, 57.617132880000057 ], [ -133.658802863999938, 57.620917059000092 ], [ -133.658070441999939, 57.632757880000057 ], [ -133.64663652299987, 57.687201239000146 ], [ -133.648264126999891, 57.702826239000117 ], [ -133.635731574999909, 57.708156643 ], [ -133.622141079999835, 57.71002838700015 ], [ -133.593006964999887, 57.709662177000055 ], [ -133.585519985999895, 57.710923570000077 ], [ -133.572865363999938, 57.716050523000078 ], [ -133.566314256999931, 57.716498114000061 ], [ -133.560414191999939, 57.713853257 ], [ -133.548329230999911, 57.704779364000089 ], [ -133.532704230999911, 57.700018622000087 ], [ -133.522816535999937, 57.693182684000149 ], [ -133.507964647999955, 57.678941148000078 ], [ -133.494984503999945, 57.672064520000148 ], [ -133.442209438999896, 57.668117580000072 ], [ -133.210438605999911, 57.588934637000094 ], [ -133.168446417999917, 57.579291083000115 ], [ -133.158599412999905, 57.573146877000127 ], [ -133.137928839999915, 57.555609442 ], [ -133.130930141999897, 57.552069403000033 ], [ -133.111398891999841, 57.544989325000145 ], [ -133.069488084999932, 57.512681382000139 ], [ -133.045521613999881, 57.503607489000146 ], [ -133.034291144999969, 57.504136460000112 ], [ -133.020334438999896, 57.507066148000135 ], [ -133.008534308999941, 57.511867580000128 ], [ -133.003977016999897, 57.517889716000028 ], [ -133.012115037999905, 57.521226304000052 ], [ -133.081857876999891, 57.53733958500014 ], [ -133.099598761999857, 57.550970770000092 ], [ -133.127512173999889, 57.579291083000115 ], [ -133.155425584999932, 57.5997582050001 ], [ -133.164784308999884, 57.612534898000135 ], [ -133.162220831999946, 57.627142645000148 ], [ -133.182728644999941, 57.623765367000132 ], [ -133.21226966099988, 57.627142645000148 ], [ -133.238880988999938, 57.63662344000015 ], [ -133.25035559799997, 57.651678778000175 ], [ -133.360259568999936, 57.682359117000075 ], [ -133.397694464999887, 57.709418036000031 ], [ -133.417591925999972, 57.719387111000103 ], [ -133.468983527999882, 57.727443752000127 ], [ -133.499989386999914, 57.737616278000175 ], [ -133.528920050999915, 57.750921942 ], [ -133.545806443999908, 57.764308986000017 ], [ -133.552316860999895, 57.792303778000033 ], [ -133.558176235999838, 57.889634507000025 ], [ -133.551991339999859, 57.915106512000094 ], [ -133.53929602799991, 57.917425848000065 ], [ -133.49058997299997, 57.908270575000088 ], [ -133.429107225999928, 57.908270575000088 ], [ -133.398548956999974, 57.903957424000097 ], [ -133.343129035999908, 57.884751695000134 ], [ -133.313099738999938, 57.880316473000065 ], [ -133.304514126999834, 57.881781317000119 ], [ -133.288441535999937, 57.887396552000112 ], [ -133.278309699999909, 57.887844143000038 ], [ -133.267567511999914, 57.885077216000141 ], [ -133.24429277299987, 57.876125393000123 ], [ -133.142486131999931, 57.854722398 ], [ -133.124094204999892, 57.857123114000117 ], [ -133.132232225999928, 57.865220445000048 ], [ -133.185699022999927, 57.889553127000042 ], [ -133.206288214999859, 57.894680080000128 ], [ -133.554310675999943, 57.929429429 ], [ -133.572865363999938, 57.92405833500014 ], [ -133.584584113999938, 57.910834052 ], [ -133.593006964999887, 57.887844143000038 ], [ -133.591297980999883, 57.881537177000084 ], [ -133.589833136999914, 57.867580471000011 ], [ -133.592640753999945, 57.857896226000051 ], [ -133.603871222999942, 57.86420319200009 ], [ -133.610747850999871, 57.87010325700011 ], [ -133.626088019999941, 57.879868882000054 ], [ -133.634592251999862, 57.887844143000038 ], [ -133.640126105999883, 57.867905992000132 ], [ -133.625965949999852, 57.828680731000119 ], [ -133.634592251999862, 57.805243231000034 ], [ -133.661366339999859, 57.786444403000175 ], [ -133.686350063999896, 57.790716864 ], [ -133.708566860999838, 57.808294989000117 ], [ -133.742258266999841, 57.845038153000033 ], [ -133.803089972999942, 57.898504950000145 ], [ -133.808420376999834, 57.904974677000055 ], [ -133.811634894999884, 57.91303131700009 ], [ -133.81273352799991, 57.925034898000106 ], [ -133.819081183999856, 57.932806708000115 ], [ -133.861154751999919, 57.956732489000089 ], [ -133.809803839999915, 57.985337632000054 ], [ -133.792225714999887, 57.990220445000134 ], [ -133.774891730999911, 57.988836981000063 ], [ -133.764068162999877, 57.980698960000112 ], [ -133.753732876999891, 57.968939520000148 ], [ -133.737619594999899, 57.956732489000089 ], [ -133.718129035999937, 57.946356512000179 ], [ -133.701812303999901, 57.940008856000063 ], [ -133.691395636999914, 57.942043361000074 ], [ -133.689198370999918, 57.956732489000089 ], [ -133.697580532999893, 57.989976304 ], [ -133.692046678999958, 58.001939195000105 ], [ -133.669341600999928, 58.011379299000126 ], [ -133.669341600999928, 58.017523505000028 ], [ -133.731841600999928, 58.019517320000048 ], [ -133.755482550999972, 58.030096747000087 ], [ -133.764963344999899, 58.062241929000052 ], [ -133.748646613999938, 58.078192450000145 ], [ -133.717600063999839, 58.09784577000012 ], [ -133.698231574999909, 58.115952867000132 ], [ -133.717152472999942, 58.127386786000088 ], [ -133.717152472999942, 58.134833075000145 ], [ -133.695179816999939, 58.139105536000059 ], [ -133.685047980999883, 58.142808335000112 ], [ -133.674916144999941, 58.147894598000121 ], [ -133.682362433999913, 58.155340887000122 ], [ -133.700266079999864, 58.148504950000088 ], [ -133.758127407999893, 58.134833075000145 ], [ -133.758127407999893, 58.127386786000088 ], [ -133.741688605999883, 58.119696356000148 ], [ -133.748646613999938, 58.106105861000017 ], [ -133.810129360999838, 58.044745184000092 ], [ -133.813343878999888, 58.028998114000146 ], [ -133.79906165299991, 58.011379299000126 ], [ -133.864369269999969, 57.986965236000074 ], [ -133.884673631999874, 57.984035549000154 ], [ -133.908680792999917, 57.983872789000017 ], [ -133.91844641799986, 57.985663153000175 ], [ -133.929432745999918, 57.990220445000134 ], [ -133.934071417999945, 57.993638414000131 ], [ -133.939076300999886, 58.000677802000027 ], [ -133.943023240999878, 58.003892320000077 ], [ -133.949574347999942, 58.006089585000055 ], [ -133.964955206999889, 58.009100653000147 ], [ -133.970366990999935, 58.011379299000126 ], [ -133.976226365999878, 58.020086981000119 ], [ -133.976470506999931, 58.028998114000146 ], [ -133.978016730999883, 58.035834052000084 ], [ -133.987416144999912, 58.038641669000029 ], [ -134.001291469999899, 58.039496161000116 ], [ -134.010853644999969, 58.042873440000122 ], [ -134.016428188999896, 58.049994208 ], [ -134.018177863999881, 58.062241929000052 ], [ -134.023426886999857, 58.071356512000065 ], [ -134.035633917999945, 58.072333075000031 ], [ -134.04946855399993, 58.070705471000011 ], [ -134.059722459999961, 58.072170315000065 ], [ -134.063832160999937, 58.079169012000037 ], [ -134.072824673999946, 58.113185940000065 ], [ -134.057443813999896, 58.111029364000061 ], [ -134.048451300999972, 58.113836981000119 ], [ -134.044789191999939, 58.119859117000132 ], [ -134.045480923999946, 58.127386786000088 ], [ -134.051421678999901, 58.134588934000121 ], [ -134.071888800999943, 58.146185614000117 ], [ -134.080230272999927, 58.155340887000122 ], [ -134.083485480999883, 58.163763739000061 ], [ -134.085926886999914, 58.174953518000066 ], [ -134.087066209999932, 58.186590887000179 ], [ -134.086415167999917, 58.196275132000139 ], [ -134.081613735999895, 58.208197333000086 ], [ -134.074818488999966, 58.214544989000032 ], [ -134.067128058999856, 58.220363674000069 ], [ -134.059722459999961, 58.230414130000142 ], [ -134.057036912999877, 58.239976304000109 ], [ -134.058013475999957, 58.247870184000092 ], [ -134.059885219999927, 58.255560614000117 ], [ -134.059722459999961, 58.264593817000119 ], [ -134.061268683999913, 58.268215236000103 ], [ -134.06493079299986, 58.273138739000146 ], [ -134.067697719999927, 58.278876044000029 ], [ -134.066558397999898, 58.285101630000085 ], [ -134.059396938999839, 58.288641669000143 ], [ -134.031849738999938, 58.285101630000085 ], [ -134.010365363999881, 58.29433828300013 ], [ -133.99083411399991, 58.305568752000127 ], [ -133.982411261999857, 58.315619208000115 ], [ -133.982533331999946, 58.320868231000091 ], [ -133.986724412999962, 58.325344143000066 ], [ -133.99083411399991, 58.33283112200003 ], [ -134.005848761999943, 58.372381903000175 ], [ -134.009999152999882, 58.392238674000097 ], [ -134.004505988999938, 58.408596096000011 ], [ -133.996937628999888, 58.412420966000028 ], [ -133.972523566999939, 58.418036200000117 ], [ -133.962961391999869, 58.422186591000141 ], [ -133.951771613999938, 58.432766018 ], [ -133.949777798999918, 58.43964264500012 ], [ -133.951039191999939, 58.44635651200015 ], [ -133.949859178999901, 58.456366278000147 ], [ -133.920074022999898, 58.497544664000102 ], [ -133.8763728509999, 58.510443427000141 ], [ -133.771799282999893, 58.51845937700007 ], [ -133.771799282999893, 58.52464427300005 ], [ -133.887806769999941, 58.52464427300005 ], [ -133.933908657999893, 58.518947658000158 ], [ -133.95962480399993, 58.512640692000119 ], [ -133.976633266999897, 58.504828192000119 ], [ -133.982411261999857, 58.487616278000118 ], [ -133.974680141999841, 58.449896552000141 ], [ -133.987416144999912, 58.442694403000118 ], [ -134.010161912999934, 58.439764716000084 ], [ -134.050363735999838, 58.426092841000141 ], [ -134.072824673999946, 58.422186591000141 ], [ -134.072824673999946, 58.414780992000075 ], [ -134.051828579999892, 58.408392645000148 ], [ -134.04710852799991, 58.389593817 ], [ -134.052886522999955, 58.367254950000174 ], [ -134.063140428999873, 58.350246486000017 ], [ -134.080962693999936, 58.337713934000092 ], [ -134.125070766999841, 58.318670966000113 ], [ -134.141672329999892, 58.305568752000127 ], [ -134.14712480399993, 58.284979559000121 ], [ -134.131743943999908, 58.273138739000146 ], [ -134.11107337099989, 58.263128973000065 ], [ -134.100697394999884, 58.247788804000109 ], [ -134.104359503999945, 58.239488023000135 ], [ -134.112863735999895, 58.232082424000154 ], [ -134.144927537999934, 58.20990631700009 ], [ -134.157866990999935, 58.204291083000086 ], [ -134.172230597999942, 58.202337958000143 ], [ -134.190093553999901, 58.203111070000048 ], [ -134.241607225999871, 58.214300848000065 ], [ -134.441070115999935, 58.32151927300005 ], [ -134.46043860599994, 58.326605536000088 ], [ -134.471302863999938, 58.330877997000087 ], [ -134.489816860999838, 58.349676825000031 ], [ -134.497954881999931, 58.353949286000145 ], [ -134.55321204299986, 58.353949286000145 ], [ -134.569162563999896, 58.356146552000141 ], [ -134.597320115999935, 58.365464585 ], [ -134.611236131999931, 58.367621161000088 ], [ -134.62173417899993, 58.363959052000141 ], [ -134.625843878999945, 58.356634833000115 ], [ -134.630197719999842, 58.351467190000122 ], [ -134.641346808999856, 58.353949286000145 ], [ -134.644886847999942, 58.36229075700011 ], [ -134.647694464999915, 58.376044012000037 ], [ -134.654449022999927, 58.386419989000117 ], [ -134.669911261999857, 58.384711005000113 ], [ -134.68455969999988, 58.379339911000088 ], [ -134.718861456999946, 58.37425364800005 ], [ -134.734771287999934, 58.373765367000075 ], [ -134.756174282999893, 58.381537177000055 ], [ -134.767323370999918, 58.400336005000113 ], [ -134.771595831999946, 58.42401764500012 ], [ -134.774566209999932, 58.475897528000033 ], [ -134.782866990999935, 58.493068752000156 ], [ -134.799549933999856, 58.50299713700015 ], [ -134.826975063999896, 58.510972398000106 ], [ -134.826975063999896, 58.51845937700007 ], [ -134.822661912999905, 58.519476630000142 ], [ -134.819976365999935, 58.520941473 ], [ -134.817534959999904, 58.522691148000021 ], [ -134.813872850999928, 58.52464427300005 ], [ -134.847238735999923, 58.535223700000088 ], [ -134.874989386999914, 58.553127346000153 ], [ -134.897572394999969, 58.575669664000046 ], [ -134.934966600999928, 58.623277085000112 ], [ -134.975656704999892, 58.658921617000075 ], [ -134.991444464999944, 58.682928778000118 ], [ -134.960764126999862, 58.667547919000171 ], [ -134.945139126999891, 58.66331614800005 ], [ -134.930002407999893, 58.669256903000175 ], [ -134.926828579999892, 58.664862372000087 ], [ -134.920643683999913, 58.660345770000148 ], [ -134.915679490999878, 58.655585028000061 ], [ -134.920765753999888, 58.678290106000091 ], [ -134.932728644999941, 58.697943427000141 ], [ -134.940541144999941, 58.716131903000033 ], [ -134.925852016999926, 58.754950262000065 ], [ -134.933990037999934, 58.777411200000145 ], [ -134.946115688999839, 58.79975006700009 ], [ -134.950428839999944, 58.820054429 ], [ -134.962025519999941, 58.814927476000079 ], [ -134.974436001999891, 58.812445380000142 ], [ -134.986683722999942, 58.81370677300005 ], [ -134.99819902299987, 58.820054429 ], [ -135.005482550999886, 58.807766018000123 ], [ -135.02603105399993, 58.79315827 ], [ -135.032378709999875, 58.785345770000035 ], [ -135.030100063999896, 58.776068427000055 ], [ -135.022572394999941, 58.768744208000058 ], [ -135.019886847999942, 58.761053778000033 ], [ -135.032378709999875, 58.751166083000115 ], [ -135.028309699999909, 58.744370835 ], [ -135.025542772999955, 58.737534898 ], [ -135.0521541009999, 58.752386786000145 ], [ -135.104644334999932, 58.809515692000119 ], [ -135.143625454999835, 58.833889065000093 ], [ -135.149037238999966, 58.843695380000113 ], [ -135.145985480999883, 58.857123114 ], [ -135.128570115999935, 58.895209052 ], [ -135.145659959999961, 58.906439520000092 ], [ -135.156117316999939, 58.922796942 ], [ -135.161284959999932, 58.943304755000057 ], [ -135.16270911399991, 58.967230536000116 ], [ -135.166900193999936, 58.990790106000148 ], [ -135.177398240999935, 59.004624742000075 ], [ -135.190785285999937, 59.016058661000116 ], [ -135.203684048999946, 59.032375393000152 ], [ -135.206613735999866, 59.040594794000143 ], [ -135.21117102799991, 59.066555080000128 ], [ -135.222727016999926, 59.093898830000015 ], [ -135.224191860999895, 59.104681708000115 ], [ -135.229603644999941, 59.125881252000013 ], [ -135.272572394999884, 59.183172919000143 ], [ -135.300282355999883, 59.211574611000074 ], [ -135.334706183999913, 59.238918361000131 ], [ -135.361805792999917, 59.270819403000147 ], [ -135.367543097999913, 59.312933661000116 ], [ -135.339711066999939, 59.400824286000088 ], [ -135.331695115999906, 59.451564846000124 ], [ -135.348296678999958, 59.470607815000122 ], [ -135.359486456999974, 59.456976630000085 ], [ -135.389271613999881, 59.374945380000057 ], [ -135.401112433999941, 59.319891669000114 ], [ -135.414377407999893, 59.300604559000149 ], [ -135.436431443999965, 59.312933661000116 ], [ -135.46703040299991, 59.305731512000179 ], [ -135.527902798999889, 59.31972890800013 ], [ -135.553781704999892, 59.319769598000121 ], [ -135.53384355399993, 59.310003973 ], [ -135.482004360999923, 59.295111395000148 ], [ -135.460926886999914, 59.282171942000119 ], [ -135.430246548999889, 59.2521019550001 ], [ -135.427642381999902, 59.247992255000142 ], [ -135.426258917999917, 59.241603908000044 ], [ -135.422759568999936, 59.237860419000086 ], [ -135.415109829999892, 59.234076239000061 ], [ -135.398752407999893, 59.230861721000011 ], [ -135.383900519999941, 59.222967841000056 ], [ -135.359527147999955, 59.21377187700007 ], [ -135.354562954999921, 59.206773179 ], [ -135.351958787999934, 59.196682033000016 ], [ -135.334055141999869, 59.161444403000175 ], [ -135.336537238999881, 59.162787177000055 ], [ -135.33934485599994, 59.159165757000025 ], [ -135.341175910999908, 59.153509833000115 ], [ -135.340891079999892, 59.14842357 ], [ -135.336781378999945, 59.143988348000036 ], [ -135.317250128999945, 59.131415106000034 ], [ -135.310292120999861, 59.121975002000013 ], [ -135.306996222999942, 59.111070054000137 ], [ -135.306385870999861, 59.099269924000069 ], [ -135.307362433999941, 59.086981512000094 ], [ -135.319569464999915, 59.101548570000134 ], [ -135.360747850999871, 59.113755601000108 ], [ -135.378407355999911, 59.124212958 ], [ -135.386626756999902, 59.138820705000015 ], [ -135.391184048999833, 59.170111395000063 ], [ -135.395497199999937, 59.183172919000143 ], [ -135.423329230999911, 59.205064195 ], [ -135.470448370999918, 59.225490627000156 ], [ -135.519642706999917, 59.236517645 ], [ -135.553781704999892, 59.230414130000113 ], [ -135.538644985999895, 59.215277411000116 ], [ -135.48485266799986, 59.183172919000143 ], [ -135.473378058999913, 59.17072174700003 ], [ -135.452137824999937, 59.14154694200009 ], [ -135.436431443999965, 59.127997137000122 ], [ -135.401966925999943, 59.111639716000113 ], [ -135.384592251999891, 59.10089752800009 ], [ -135.374989386999886, 59.086981512000094 ], [ -135.377552863999881, 59.070013739000117 ], [ -135.385609503999945, 59.053168036000116 ], [ -135.388335740999906, 59.03782786699999 ], [ -135.374989386999886, 59.02558014500012 ], [ -135.384836391999897, 59.016058661000116 ], [ -135.387521938999896, 59.006293036000088 ], [ -135.383900519999941, 58.997544664000102 ], [ -135.374989386999886, 58.991400458000115 ], [ -135.386341925999943, 58.975165106000176 ], [ -135.385812954999892, 58.954331773000106 ], [ -135.377186652999882, 58.936346747000172 ], [ -135.364409959999932, 58.928697007000139 ], [ -135.328195766999897, 58.919745184000121 ], [ -135.320952928999901, 58.915716864000146 ], [ -135.320790167999917, 58.904689846000096 ], [ -135.333363410999937, 58.887193101000051 ], [ -135.330637173999861, 58.877834377000013 ], [ -135.295969204999892, 58.835150458 ], [ -135.231027798999889, 58.771673895000092 ], [ -135.242176886999914, 58.747870184000178 ], [ -135.240589972999885, 58.730169989000089 ], [ -135.22996985599994, 58.715236721000124 ], [ -135.168446417999888, 58.645738023000106 ], [ -135.16270911399991, 58.634507554000109 ], [ -135.18114173099994, 58.624497789000046 ], [ -135.208729620999861, 58.620510158000158 ], [ -135.226185675999943, 58.612290757000054 ], [ -135.21422278599988, 58.589789130000085 ], [ -135.168446417999888, 58.544501044000143 ], [ -135.152902798999975, 58.519761460000083 ], [ -135.145497199999909, 58.515366929 ], [ -135.142241990999935, 58.510972398000106 ], [ -135.141672329999892, 58.506333726 ], [ -135.143177863999938, 58.495550848000093 ], [ -135.142241990999935, 58.491115627000013 ], [ -135.136382615999906, 58.483587958000143 ], [ -135.111195441999939, 58.459784247000144 ], [ -135.099680141999897, 58.443793036000059 ], [ -135.05728105399993, 58.351548570000105 ], [ -135.053863084999904, 58.332668361000074 ], [ -135.052845831999946, 58.309271552 ], [ -135.056955532999893, 58.298773505000113 ], [ -135.066802537999905, 58.30097077 ], [ -135.079213019999941, 58.305609442000119 ], [ -135.090687628999973, 58.30215078300013 ], [ -135.093251105999911, 58.295233466000056 ], [ -135.093820766999869, 58.264593817000119 ], [ -135.092396613999881, 58.254461981000176 ], [ -135.09007727799991, 58.248846747000172 ], [ -135.089670376999919, 58.244208075000145 ], [ -135.093820766999869, 58.237250067000062 ], [ -135.102447068999936, 58.232245184000121 ], [ -135.135161912999877, 58.219427802000084 ], [ -135.145619269999969, 58.216782945 ], [ -135.173085089999915, 58.21893952 ], [ -135.309559699999909, 58.252142645 ], [ -135.350453253999945, 58.276800848 ], [ -135.381581183999856, 58.310939846000011 ], [ -135.402943488999938, 58.353949286000145 ], [ -135.411691860999895, 58.385199286000116 ], [ -135.415923631999931, 58.394964911000059 ], [ -135.445871548999889, 58.422064520000092 ], [ -135.45531165299991, 58.446275132 ], [ -135.467518683999884, 58.467352606000091 ], [ -135.484934048999833, 58.483954169000143 ], [ -135.505360480999911, 58.483628648000135 ], [ -135.514149542999888, 58.465521552000112 ], [ -135.498361782999837, 58.445461330000072 ], [ -135.475819464999944, 58.426499742000075 ], [ -135.464426235999895, 58.411688544000086 ], [ -135.459828253999945, 58.388332424000097 ], [ -135.46312415299991, 58.378119208000058 ], [ -135.47801673099994, 58.373765367000075 ], [ -135.494130011999914, 58.375677802000112 ], [ -135.507069464999915, 58.380682684000149 ], [ -135.532622850999928, 58.394964911000059 ], [ -135.5931697259999, 58.419989325000145 ], [ -135.627512173999861, 58.426255601000108 ], [ -135.652455206999974, 58.418524481000091 ], [ -135.676584438999896, 58.406683661000145 ], [ -135.886708136999857, 58.379380601000079 ], [ -135.909413214999915, 58.381293036000116 ], [ -135.909494594999899, 58.395086981000034 ], [ -135.902170376999891, 58.421616929 ], [ -135.8900447259999, 58.448472398000078 ], [ -135.875884568999965, 58.46320221600017 ], [ -135.894683397999927, 58.463324286000145 ], [ -135.950347459999932, 58.456366278000147 ], [ -135.950347459999932, 58.46320221600017 ], [ -135.936675584999904, 58.463120835 ], [ -135.925852016999897, 58.467718817000119 ], [ -135.915516730999911, 58.473700262000037 ], [ -135.903187628999945, 58.477484442000062 ], [ -135.888661261999914, 58.477606512000037 ], [ -135.847971157999922, 58.470038153000175 ], [ -135.860463019999941, 58.49103424700003 ], [ -135.856597459999932, 58.499457098000065 ], [ -135.846750454999892, 58.507757880000057 ], [ -135.841135219999899, 58.528387762000179 ], [ -135.845285610999838, 58.546535549000069 ], [ -135.85610917899993, 58.559271552000141 ], [ -135.871693488999938, 58.567694403000175 ], [ -135.889556443999908, 58.573065497000059 ], [ -135.889556443999908, 58.579901434000149 ], [ -135.820668097999942, 58.600327867000132 ], [ -135.833729620999918, 58.60374583500014 ], [ -135.873646613999881, 58.608547268000123 ], [ -135.882069464999915, 58.61058177300005 ], [ -135.88695227799991, 58.612534898000106 ], [ -135.93968665299991, 58.681301174000097 ], [ -135.955067511999943, 58.69464752800009 ], [ -135.978342251999862, 58.696600653000147 ], [ -135.973866339999915, 58.701564846000011 ], [ -135.968332485999895, 58.711249091000141 ], [ -135.964019334999961, 58.716457424000154 ], [ -135.97435462099989, 58.729071356000034 ], [ -135.991322394999941, 58.745184637000094 ], [ -136.009348110999895, 58.758978583000115 ], [ -136.023019985999923, 58.764837958000058 ], [ -136.032093878999916, 58.771877346000124 ], [ -136.057525193999936, 58.803697007000082 ], [ -136.073882615999935, 58.8126488300001 ], [ -136.06029212099989, 58.825913804000109 ], [ -135.963124152999882, 58.862046617000075 ], [ -135.945871548999889, 58.870794989000146 ], [ -135.92983964799987, 58.881537177000055 ], [ -135.936634894999912, 58.864081122000087 ], [ -135.917836066999939, 58.863348700000145 ], [ -135.758615688999896, 58.888373114000061 ], [ -135.773019985999895, 58.90452708500014 ], [ -135.798085089999859, 58.912665106000148 ], [ -135.935454881999874, 58.916245835000112 ], [ -135.964019334999961, 58.922512111000074 ], [ -135.958648240999935, 58.91327545800003 ], [ -135.950754360999838, 58.908270575000145 ], [ -135.92983964799987, 58.902044989 ], [ -135.94359290299991, 58.892035223000121 ], [ -136.013824022999927, 58.858710028000033 ], [ -136.02993730399993, 58.855292059000035 ], [ -136.046538865999963, 58.861029364 ], [ -136.047678188999896, 58.868719794000029 ], [ -136.051096157999922, 58.873439846000124 ], [ -136.054107225999928, 58.878729559000092 ], [ -136.054066535999937, 58.888373114000061 ], [ -136.050445115999963, 58.896063544000086 ], [ -136.03734290299991, 58.9142113300001 ], [ -136.032948370999918, 58.922512111000074 ], [ -136.056467251999891, 58.930121161000031 ], [ -136.076893683999941, 58.946519273000106 ], [ -136.092355923999889, 58.966294664000046 ], [ -136.101185675999943, 58.983954169000143 ], [ -136.104074673999861, 58.998032945 ], [ -136.103911912999905, 59.00726959800015 ], [ -136.105865037999934, 59.015204169000029 ], [ -136.114857550999943, 59.02558014500012 ], [ -136.1263728509999, 59.032538153000118 ], [ -136.141713019999941, 59.037095445000048 ], [ -136.157378709999932, 59.037583726000136 ], [ -136.17007402299987, 59.032375393000152 ], [ -136.154855923999889, 59.023098049000097 ], [ -136.142445441999968, 59.007025458000115 ], [ -136.138783331999946, 58.989813544000086 ], [ -136.149647589999915, 58.977118231000034 ], [ -136.140980597999913, 58.954820054 ], [ -136.166574673999889, 58.942613023000106 ], [ -136.202381964999915, 58.934068101 ], [ -136.224720831999946, 58.922512111000074 ], [ -136.152658657999922, 58.932684637000122 ], [ -136.117787238999881, 58.933294989000089 ], [ -136.101185675999943, 58.915716864000146 ], [ -136.116525844999899, 58.909572658000158 ], [ -136.122303839999944, 58.908270575000145 ], [ -136.122303839999944, 58.902044989 ], [ -136.10415605399993, 58.89524974199999 ], [ -136.097523566999968, 58.876857815000122 ], [ -136.099924282999922, 58.853745835 ], [ -136.108631964999915, 58.833156643000152 ], [ -136.133290167999917, 58.806097723 ], [ -136.136586066999939, 58.795884507000082 ], [ -136.137115037999934, 58.786200262000122 ], [ -136.140126105999911, 58.782171942000147 ], [ -136.147043423999918, 58.778062242000104 ], [ -136.159535285999937, 58.768255927000084 ], [ -136.209706183999913, 58.750799872000115 ], [ -136.269113735999866, 58.764146226000108 ], [ -136.382394985999838, 58.806463934000035 ], [ -136.382394985999838, 58.8126488300001 ], [ -136.313588019999969, 58.809515692000119 ], [ -136.27757727799991, 58.812974351000108 ], [ -136.25951087099989, 58.826320705000128 ], [ -136.28774980399993, 58.825628973000093 ], [ -136.375843878999945, 58.833156643000152 ], [ -136.425892706999974, 58.824448960000055 ], [ -136.452015753999945, 58.824367580000072 ], [ -136.475209113999966, 58.83657461100016 ], [ -136.492990688999868, 58.864081122000087 ], [ -136.507923956999889, 58.904445705000157 ], [ -136.510812954999835, 58.942572333000115 ], [ -136.492258266999926, 58.963446356000091 ], [ -136.492258266999926, 58.970892645000063 ], [ -136.526193813999896, 58.96759674700003 ], [ -136.544097459999932, 58.957424221000096 ], [ -136.574126756999874, 58.915716864000146 ], [ -136.639312303999901, 58.967230536000116 ], [ -136.67398027299987, 59.002752997000087 ], [ -136.693104620999947, 59.017971096000068 ], [ -136.711984829999892, 59.02558014500012 ], [ -136.608265753999973, 58.908270575000145 ], [ -136.63345292899993, 58.891791083000086 ], [ -136.65770423099994, 58.89874909100017 ], [ -136.681467251999834, 58.914007880000142 ], [ -136.705148891999869, 58.922512111000074 ], [ -136.717844204999921, 58.923814195000077 ], [ -136.734771287999905, 58.927435614000117 ], [ -136.751291469999899, 58.932847398 ], [ -136.77672278599988, 58.948391018000095 ], [ -136.827381964999859, 58.956691799000154 ], [ -136.841420050999915, 58.96181875200007 ], [ -136.875843878999945, 58.983954169000143 ], [ -136.917551235999895, 59.001939195 ], [ -136.946359829999835, 59.022609768 ], [ -137.013010219999899, 59.052801825000117 ], [ -137.032215949999852, 59.067490953000018 ], [ -137.046091274999952, 59.069037177000055 ], [ -137.059478318999936, 59.063706773 ], [ -137.06391354099992, 59.055405992000104 ], [ -137.062977667999945, 59.04389069200009 ], [ -137.0502009759999, 59.038560289000102 ], [ -137.029042120999918, 59.033677476000051 ], [ -137.008046027999853, 59.021714585000112 ], [ -136.971424933999913, 58.991400458000115 ], [ -136.929310675999972, 58.968329169000171 ], [ -136.911244269999941, 58.954331773000106 ], [ -136.9037166009999, 58.932440497000172 ], [ -136.917958136999914, 58.920070705000128 ], [ -137.013010219999899, 58.922512111000074 ], [ -137.030506964999859, 58.912909247000087 ], [ -137.064198370999861, 58.874090887000179 ], [ -137.085316535999965, 58.869533596000124 ], [ -137.102447068999908, 58.858547268000066 ], [ -137.129709438999896, 58.833156643000152 ], [ -137.129709438999896, 58.826320705000128 ], [ -137.108957485999895, 58.82876211100016 ], [ -137.086903449999909, 58.837836005000057 ], [ -137.066314256999874, 58.850653387000094 ], [ -137.033314581999917, 58.878241278000118 ], [ -137.01496334499987, 58.887884833000086 ], [ -136.994699673999861, 58.893377997000115 ], [ -136.895863410999937, 58.892401434000035 ], [ -136.841704881999931, 58.882513739000117 ], [ -136.828195766999897, 58.877508856000176 ], [ -136.8177791009999, 58.870672919000171 ], [ -136.812489386999914, 58.862127997000144 ], [ -136.811431443999936, 58.854641018000066 ], [ -136.809193488999966, 58.847398179000052 ], [ -136.800119594999899, 58.839992580000072 ], [ -136.79149329299986, 58.854315497000144 ], [ -136.777007615999935, 58.865668036000116 ], [ -136.758859829999921, 58.872788804000081 ], [ -136.739247199999852, 58.874090887000179 ], [ -136.72752844999988, 58.870428778000033 ], [ -136.698312954999835, 58.853583075000031 ], [ -136.674549933999941, 58.85285065300009 ], [ -136.663726365999935, 58.851019598000036 ], [ -136.653309699999852, 58.843695380000113 ], [ -136.643055792999917, 58.839789130000113 ], [ -136.626128709999932, 58.838446356000034 ], [ -136.609038865999906, 58.839748440000122 ], [ -136.587554490999963, 58.848334052000141 ], [ -136.577300584999932, 58.84398021000014 ], [ -136.567290818999936, 58.836859442 ], [ -136.557362433999856, 58.833156643000152 ], [ -136.540598110999838, 58.829331773000135 ], [ -136.484771287999934, 58.799627997000115 ], [ -136.495432094999899, 58.784491278000118 ], [ -136.51187089799987, 58.780462958000143 ], [ -136.530506964999859, 58.780910549000126 ], [ -136.547474738999938, 58.779120184000149 ], [ -136.54002844999988, 58.771673895000092 ], [ -136.565907355999883, 58.785956122000172 ], [ -136.58885657499988, 58.808905341000141 ], [ -136.614857550999943, 58.825425523000135 ], [ -136.64989173099994, 58.820054429 ], [ -136.643055792999917, 58.806463934000035 ], [ -136.628041144999884, 58.805568752000127 ], [ -136.574126756999874, 58.779120184000149 ], [ -136.583159959999875, 58.773749091000084 ], [ -136.593373175999943, 58.771185614 ], [ -136.604318813999896, 58.770697333 ], [ -136.615793423999833, 58.771673895000092 ], [ -136.563303188999896, 58.760687567000119 ], [ -136.543934699999852, 58.751166083000115 ], [ -136.529042120999918, 58.751166083000115 ], [ -136.522613084999904, 58.747748114000117 ], [ -136.51968339799987, 58.74095286699999 ], [ -136.522328253999945, 58.735581773000135 ], [ -136.525868292999945, 58.730373440000122 ], [ -136.52574622299997, 58.723822333000058 ], [ -136.520497199999909, 58.71084219000015 ], [ -136.515858527999853, 58.702378648000106 ], [ -136.506825324999852, 58.697902736000131 ], [ -136.48851477799991, 58.696600653000147 ], [ -136.476673956999946, 58.692328192000147 ], [ -136.452626105999911, 58.673488674000012 ], [ -136.437611456999946, 58.669256903000175 ], [ -136.451771613999881, 58.689195054000081 ], [ -136.472401495999918, 58.70343659100017 ], [ -136.491037563999896, 58.720160223 ], [ -136.499094204999835, 58.747748114000117 ], [ -136.491851365999935, 58.749212958000086 ], [ -136.383859829999892, 58.725083726000051 ], [ -136.375559048999833, 58.720160223 ], [ -136.368397589999887, 58.711127020000092 ], [ -136.353911912999934, 58.701849677000141 ], [ -136.342600063999868, 58.691555080000015 ], [ -136.344838019999941, 58.679185288999989 ], [ -136.355336066999911, 58.671454169000171 ], [ -136.396636522999955, 58.655585028000061 ], [ -136.456654425999943, 58.623277085000112 ], [ -136.488636847999942, 58.613511460000083 ], [ -136.519520636999914, 58.620835679 ], [ -136.52574622299997, 58.613999742000075 ], [ -136.487782355999855, 58.595404364000061 ], [ -136.475209113999966, 58.592922268000152 ], [ -136.463856574999909, 58.596502997000115 ], [ -136.430775519999941, 58.620835679 ], [ -136.401193813999896, 58.625718492000047 ], [ -136.377268032999837, 58.617743231000091 ], [ -136.354400193999936, 58.60618724199999 ], [ -136.327748175999886, 58.600327867000132 ], [ -136.334624803999901, 58.608587958000115 ], [ -136.35220292899993, 58.6212425800001 ], [ -136.35570227799991, 58.628322658000158 ], [ -136.351918097999885, 58.638495184000092 ], [ -136.343617316999939, 58.642157294000143 ], [ -136.33433997299997, 58.642279364000117 ], [ -136.327748175999886, 58.641302802000055 ], [ -136.317128058999856, 58.637437242000047 ], [ -136.309071417999917, 58.631822007000139 ], [ -136.301747199999909, 58.629217841000141 ], [ -136.293039516999926, 58.634507554000109 ], [ -136.297189907999893, 58.647121486000103 ], [ -136.297840949999909, 58.658270575000031 ], [ -136.293039516999926, 58.669256903000175 ], [ -136.280506964999915, 58.660223700000174 ], [ -136.183176235999866, 58.613999742000075 ], [ -136.183176235999866, 58.607163804000052 ], [ -136.192372199999909, 58.607082424000069 ], [ -136.198638475999871, 58.605536200000031 ], [ -136.211048956999889, 58.600327867000132 ], [ -136.202219204999835, 58.594305731000034 ], [ -136.177561001999862, 58.573065497000059 ], [ -136.160878058999913, 58.571682033000158 ], [ -136.14281165299991, 58.573553778000033 ], [ -136.12824459499987, 58.570746161000088 ], [ -136.122303839999944, 58.55573151200015 ], [ -136.127552863999938, 58.551947333000115 ], [ -136.139068162999962, 58.55206940300009 ], [ -136.15062415299991, 58.548895575000031 ], [ -136.155832485999895, 58.535467841000141 ], [ -136.162749803999873, 58.526190497000087 ], [ -136.179066535999908, 58.52334219000015 ], [ -136.211048956999889, 58.52464427300005 ], [ -136.19859778599988, 58.508978583000086 ], [ -136.180287238999938, 58.507554429000024 ], [ -136.14281165299991, 58.51845937700007 ], [ -136.131906704999921, 58.519517320000134 ], [ -136.082508917999945, 58.516424872000144 ], [ -136.082183397999927, 58.511379299000012 ], [ -136.087391730999911, 58.504706122000144 ], [ -136.088205532999837, 58.497992255000113 ], [ -136.085560675999943, 58.491400458000143 ], [ -136.084299282999837, 58.484686591000084 ], [ -136.080677863999966, 58.479559637000179 ], [ -136.07079016799986, 58.477484442000062 ], [ -136.062326626999919, 58.474269924000012 ], [ -136.060658331999889, 58.466498114 ], [ -136.061390753999945, 58.457342841000028 ], [ -136.060210740999906, 58.449530341000028 ], [ -136.036203579999892, 58.397894598000093 ], [ -136.026722785999937, 58.388128973000121 ], [ -136.057281053999873, 58.359523830000157 ], [ -136.076283331999889, 58.345607815000093 ], [ -136.098052537999934, 58.339667059000149 ], [ -136.127512173999833, 58.336493231000091 ], [ -136.186838344999899, 58.322414455000128 ], [ -136.272816535999908, 58.312974351000136 ], [ -136.287505662999905, 58.318182684000035 ], [ -136.283314581999974, 58.329738674000154 ], [ -136.272084113999966, 58.341253973000093 ], [ -136.265695766999869, 58.346502997000172 ], [ -136.272450324999909, 58.35960521000014 ], [ -136.327748175999886, 58.408596096000011 ], [ -136.329741990999935, 58.380519924000012 ], [ -136.343088344999842, 58.37616608300003 ], [ -136.409291144999941, 58.393459377000013 ], [ -136.459055141999897, 58.41689687700007 ], [ -136.481678839999859, 58.422186591000141 ], [ -136.489409959999875, 58.426011460000083 ], [ -136.498646613999938, 58.441310940000122 ], [ -136.505930141999869, 58.442694403000118 ], [ -136.513498501999891, 58.436183986000017 ], [ -136.510365363999938, 58.42792389500012 ], [ -136.499094204999835, 58.414780992000075 ], [ -136.500314907999865, 58.385077216000141 ], [ -136.515126105999911, 58.38031647300015 ], [ -136.537505662999934, 58.382513739000146 ], [ -136.561146613999881, 58.373765367000075 ], [ -136.55223548099994, 58.37128327000012 ], [ -136.546009894999884, 58.366644598 ], [ -136.541127081999917, 58.362209377000127 ], [ -136.536610480999855, 58.360174872000115 ], [ -136.524973110999866, 58.35814036699999 ], [ -136.506988084999932, 58.348944403000118 ], [ -136.499094204999835, 58.346502997000172 ], [ -136.480336066999882, 58.346869208 ], [ -136.480865037999962, 58.352362372000115 ], [ -136.486195441999939, 58.362616278000061 ], [ -136.481678839999859, 58.377590236000074 ], [ -136.47329667899993, 58.385443427000055 ], [ -136.466664191999939, 58.386542059000092 ], [ -136.444447394999884, 58.381293036000116 ], [ -136.417103644999912, 58.381293036000116 ], [ -136.410064256999931, 58.379339911000088 ], [ -136.406727667999917, 58.37498607 ], [ -136.405018683999913, 58.370306708000058 ], [ -136.402902798999889, 58.367621161000088 ], [ -136.377674933999941, 58.359198309000035 ], [ -136.365712042999917, 58.352362372000115 ], [ -136.361968553999873, 58.340236721000124 ], [ -136.361927863999881, 58.316107489 ], [ -136.370594855999883, 58.299546617000047 ], [ -136.39122473899991, 58.302557684000035 ], [ -136.434193488999938, 58.319159247000087 ], [ -136.492827928999901, 58.314439195 ], [ -136.512766079999892, 58.319159247000087 ], [ -136.518788214999887, 58.324286200000117 ], [ -136.522613084999904, 58.331122137000037 ], [ -136.527455206999974, 58.337103583000143 ], [ -136.536610480999855, 58.339667059000149 ], [ -136.550648566999911, 58.34064362200003 ], [ -136.562814907999893, 58.343736070000105 ], [ -136.573882615999935, 58.349188544000143 ], [ -136.584706183999913, 58.357082424000126 ], [ -136.598947719999927, 58.359035549000069 ], [ -136.620513475999928, 58.353908596000153 ], [ -136.65672766799986, 58.339667059000149 ], [ -136.574777798999833, 58.28213125200007 ], [ -136.566029425999943, 58.277980861000131 ], [ -136.56069902299987, 58.271307684000178 ], [ -136.561146613999881, 58.257757880000113 ], [ -136.567290818999936, 58.249335028000147 ], [ -136.591867641999897, 58.227443752000127 ], [ -136.598378058999856, 58.223049221000124 ], [ -136.633412238999938, 58.227728583000058 ], [ -136.639312303999901, 58.226752020000092 ], [ -136.650990363999881, 58.220526434000035 ], [ -136.664784308999913, 58.220363674000069 ], [ -136.67870032499988, 58.224310614000146 ], [ -136.690825975999871, 58.230414130000142 ], [ -136.706939256999931, 58.247992255000085 ], [ -136.711415167999917, 58.268866278000033 ], [ -136.700754360999895, 58.284165757 ], [ -136.671009894999941, 58.285101630000085 ], [ -136.671742316999882, 58.290106512000122 ], [ -136.675119594999899, 58.301255601000051 ], [ -136.677235480999911, 58.305568752000127 ], [ -136.69383704299986, 58.299302476 ], [ -136.71108964799987, 58.297796942000147 ], [ -136.725249803999901, 58.301947333000086 ], [ -136.732492641999926, 58.312974351000136 ], [ -136.740223761999943, 58.306301174000069 ], [ -136.750559048999861, 58.300441799000126 ], [ -136.761870897999927, 58.297308661000059 ], [ -136.772775844999899, 58.298732815000122 ], [ -136.783599412999905, 58.306382554000052 ], [ -136.779611782999922, 58.312201239000032 ], [ -136.772206183999941, 58.318264065 ], [ -136.772775844999899, 58.326605536000088 ], [ -136.788156704999835, 58.332709052000055 ], [ -136.826242641999926, 58.318996486000131 ], [ -136.84911048099994, 58.326605536000088 ], [ -136.843251105999911, 58.331000067000062 ], [ -136.833119269999941, 58.34198639500012 ], [ -136.827381964999859, 58.346502997000172 ], [ -136.836537238999938, 58.36041901200015 ], [ -136.847523566999911, 58.372748114 ], [ -136.860503709999904, 58.382391669000171 ], [ -136.875843878999945, 58.388128973000121 ], [ -136.878041144999941, 58.363348700000174 ], [ -136.89012610599994, 58.349676825000031 ], [ -136.903635219999927, 58.350816148000078 ], [ -136.909982876999862, 58.370672919000171 ], [ -136.921009894999884, 58.388983466000141 ], [ -136.947499152999882, 58.400702216000028 ], [ -136.979359503999888, 58.406887111000103 ], [ -137.006825324999937, 58.408596096000011 ], [ -137.022775844999842, 58.407171942000119 ], [ -137.067616339999859, 58.394964911000059 ], [ -137.07835852799991, 58.393255927000055 ], [ -137.112294074999937, 58.394964911000059 ], [ -137.131418423999889, 58.40131256700009 ], [ -137.19790605399993, 58.442694403000118 ], [ -137.260080532999837, 58.456366278000147 ], [ -137.300038214999887, 58.4747582050001 ], [ -137.321888800999943, 58.48065827000012 ], [ -137.340443488999938, 58.49477773600016 ], [ -137.348215298999833, 58.497992255000113 ], [ -137.362538214999915, 58.50018952 ], [ -137.471424933999913, 58.554388739000061 ], [ -137.518544074999909, 58.564764716000141 ], [ -137.562814907999893, 58.590887762000122 ], [ -137.58836829299986, 58.600327867000132 ], [ -137.620757615999963, 58.602606512000094 ], [ -137.631459113999881, 58.60618724199999 ], [ -137.622466600999957, 58.613999742000075 ], [ -137.606841600999871, 58.617743231000091 ], [ -137.570464647999898, 58.617987372000144 ], [ -137.554269985999838, 58.620835679 ], [ -137.513824022999927, 58.642523505000057 ], [ -137.499623175999886, 58.648138739000061 ], [ -137.48412024599989, 58.649888414000074 ], [ -137.451975063999924, 58.650091864000117 ], [ -137.43814042899993, 58.655585028000061 ], [ -137.457671678999901, 58.672267971000096 ], [ -137.469471808999884, 58.679592190000093 ], [ -137.479115363999938, 58.682928778000118 ], [ -137.49543209499987, 58.680365302000112 ], [ -137.521636522999898, 58.665350653000175 ], [ -137.537464972999942, 58.661810614 ], [ -137.56663977799991, 58.658840236000103 ], [ -137.642974412999934, 58.634507554000109 ], [ -137.670643683999913, 58.633246161000116 ], [ -137.677845831999946, 58.646429755000057 ], [ -137.683176235999923, 58.666489976000108 ], [ -137.704741990999935, 58.68634674700003 ], [ -137.86961829299986, 58.765773830000128 ], [ -137.893137173999833, 58.782212632000139 ], [ -137.902170376999834, 58.786444403000147 ], [ -137.914784308999913, 58.790513414000102 ], [ -137.926096157999893, 58.795721747000115 ], [ -137.93097896999987, 58.803045966000028 ], [ -137.929554816999882, 58.815741278000175 ], [ -137.924061652999882, 58.834621486000017 ], [ -137.924183722999942, 58.847398179000052 ], [ -137.944243943999908, 58.888128973000121 ], [ -137.984364386999914, 58.919989325000145 ], [ -138.184885219999899, 59.02558014500012 ], [ -138.250803188999868, 59.047837632000082 ], [ -138.281158006999931, 59.06240469 ], [ -138.287912563999868, 59.080755927000055 ], [ -138.362660285999965, 59.079779364000089 ], [ -138.398915167999888, 59.083319403000147 ], [ -138.431263800999886, 59.093817450000031 ], [ -138.398671027999939, 59.09284088700015 ], [ -138.383208787999934, 59.094794012000094 ], [ -138.36978105399993, 59.101263739 ], [ -138.428456183999941, 59.111232815 ], [ -138.559396938999839, 59.106187242000075 ], [ -138.61001542899993, 59.127997137000122 ], [ -138.540435350999928, 59.122463283000101 ], [ -138.506947394999969, 59.124701239000089 ], [ -138.492746548999889, 59.138495184000178 ], [ -138.493763800999943, 59.14931875200007 ], [ -138.494781053999901, 59.152736721000096 ], [ -138.483062303999901, 59.165228583 ], [ -138.472889777999853, 59.170599677000055 ], [ -138.446522589999859, 59.176092841000084 ], [ -138.43809973899991, 59.183172919000143 ], [ -138.449086066999968, 59.19163646 ], [ -138.558257615999906, 59.180894273000078 ], [ -138.583119269999941, 59.171128648000135 ], [ -138.596058722999942, 59.168890692000147 ], [ -138.628570115999935, 59.168890692000147 ], [ -138.643869594999899, 59.16681549700003 ], [ -138.653635219999927, 59.163967190000093 ], [ -138.641184048999918, 59.153998114 ], [ -138.630482550999886, 59.142238674000041 ], [ -138.656076626999891, 59.157700914000046 ], [ -138.688343878999888, 59.176988023 ], [ -138.72679602799991, 59.191107489000032 ], [ -138.769846157999837, 59.199855861000074 ], [ -138.814035610999895, 59.214667059000149 ], [ -138.838286912999905, 59.228216864000117 ], [ -138.981678839999915, 59.274847723000121 ], [ -139.205881313999924, 59.319769598000121 ], [ -139.184193488999938, 59.32526276200015 ], [ -139.138091600999928, 59.310248114000146 ], [ -139.116525844999899, 59.312933661000116 ], [ -139.154123501999891, 59.336004950000174 ], [ -139.164906378999916, 59.340236721000011 ], [ -139.182118292999917, 59.341253973000065 ], [ -139.201730923999889, 59.33978913 ], [ -139.220122850999928, 59.340318101 ], [ -139.233794725999957, 59.347723700000145 ], [ -139.236927863999938, 59.360052802000112 ], [ -139.230295376999891, 59.368231512000122 ], [ -139.226877407999893, 59.374660549000126 ], [ -139.240061001999919, 59.381170966000028 ], [ -139.253325975999928, 59.381415106000148 ], [ -139.271595831999917, 59.378119208000115 ], [ -139.287709113999881, 59.372137762000122 ], [ -139.29466712099989, 59.364732164000131 ], [ -139.303700324999909, 59.350531317000119 ], [ -139.325754360999895, 59.355780341000113 ], [ -139.352894660999908, 59.368109442000147 ], [ -139.377512173999889, 59.374945380000057 ], [ -139.408029751999834, 59.378363348000065 ], [ -139.446278449999909, 59.387600002000127 ], [ -139.482655402999882, 59.400620835000112 ], [ -139.507557745999918, 59.415961005000085 ], [ -139.42796790299991, 59.40155670800003 ], [ -139.389149542999917, 59.382269598000065 ], [ -139.36546790299991, 59.38027578300013 ], [ -139.341664191999911, 59.38499583500014 ], [ -139.322580532999922, 59.395453192000119 ], [ -139.36392167899993, 59.410711981000091 ], [ -139.386382615999935, 59.41510651200015 ], [ -139.404855923999889, 59.412258205000128 ], [ -139.423451300999972, 59.406968492000047 ], [ -139.443511522999927, 59.407660223 ], [ -139.46312415299991, 59.412420966000084 ], [ -139.507557745999918, 59.429632880000113 ], [ -139.524728969999842, 59.440375067000119 ], [ -139.534250454999835, 59.443833726000108 ], [ -139.596913214999915, 59.456976630000085 ], [ -139.857004360999838, 59.546291408000016 ], [ -139.835845506999931, 59.558905341000084 ], [ -139.765777147999955, 59.547837632000054 ], [ -139.733509894999941, 59.552476304 ], [ -139.735910610999866, 59.556382554000081 ], [ -139.740305141999841, 59.566799221000068 ], [ -139.719593878999945, 59.565985419000143 ], [ -139.703439907999893, 59.570217190000065 ], [ -139.690297003999916, 59.579738674000069 ], [ -139.678863084999961, 59.594671942000119 ], [ -139.668853318999879, 59.584377346000011 ], [ -139.65758216099988, 59.575506903000147 ], [ -139.644886847999942, 59.572739976 ], [ -139.630441860999895, 59.580471096000011 ], [ -139.637847459999961, 59.587307033000016 ], [ -139.622954881999902, 59.595363674000154 ], [ -139.575795050999915, 59.614569403000118 ], [ -139.591379360999895, 59.622544664000074 ], [ -139.579213019999941, 59.639593817000119 ], [ -139.527170376999891, 59.678045966000028 ], [ -139.480051235999895, 59.704413153000118 ], [ -139.473378058999913, 59.717596747000172 ], [ -139.537953253999973, 59.757025458000143 ], [ -139.545074022999927, 59.764797268000152 ], [ -139.562082485999895, 59.772365627000099 ], [ -139.572010870999918, 59.790187893000066 ], [ -139.582630988999938, 59.827460028000061 ], [ -139.608713344999899, 59.863592841000084 ], [ -139.621083136999943, 59.890285549000012 ], [ -139.613352016999926, 59.902533270000063 ], [ -139.602284308999913, 59.906805731000176 ], [ -139.582386847999885, 59.925604559000035 ], [ -139.572377081999917, 59.929877020000148 ], [ -139.559071417999888, 59.931708075000117 ], [ -139.545765753999945, 59.936672268000066 ], [ -139.521839972999913, 59.950995184000149 ], [ -139.492502407999893, 59.984564520000092 ], [ -139.473215298999861, 59.993597723 ], [ -139.448882615999878, 59.981105861000074 ], [ -139.430002407999865, 59.96503327 ], [ -139.371001756999931, 59.929877020000148 ], [ -139.305165167999945, 59.864691473000121 ], [ -139.302357550999886, 59.848293361000017 ], [ -139.333607550999943, 59.813421942 ], [ -139.343088344999899, 59.786525783000016 ], [ -139.342884894999941, 59.773260809000178 ], [ -139.335601365999906, 59.738104559000121 ], [ -139.341908331999861, 59.726752020000148 ], [ -139.34203040299991, 59.720404364000117 ], [ -139.326730923999861, 59.715725002000013 ], [ -139.318592902999939, 59.711086330000072 ], [ -139.311390753999916, 59.705389716000084 ], [ -139.308338995999918, 59.700262762000179 ], [ -139.303130662999934, 59.680731512000094 ], [ -139.277658657999922, 59.646185614 ], [ -139.267323370999918, 59.621405341000028 ], [ -139.28661048099994, 59.620550848000121 ], [ -139.310902472999942, 59.616278387000122 ], [ -139.332346157999865, 59.609564520000063 ], [ -139.343088344999899, 59.600897528000175 ], [ -139.289906378999973, 59.576157945000105 ], [ -139.270741339999915, 59.572984117000132 ], [ -139.259755011999857, 59.579046942000119 ], [ -139.226389126999891, 59.621405341000028 ], [ -139.234852667999917, 59.633368231000148 ], [ -139.261626756999931, 59.659165757 ], [ -139.267323370999918, 59.666083075000088 ], [ -139.266997850999871, 59.698065497000087 ], [ -139.268869594999842, 59.715073960000055 ], [ -139.274159308999913, 59.731268622000115 ], [ -139.279693162999934, 59.736273505000142 ], [ -139.286488410999965, 59.73818594 ], [ -139.292225714999944, 59.742580471000096 ], [ -139.29466712099989, 59.755194403000147 ], [ -139.291330532999865, 59.760199286000031 ], [ -139.275746222999942, 59.775783596000011 ], [ -139.270741339999915, 59.779038804000052 ], [ -139.263335740999935, 59.785793361000074 ], [ -139.279611782999865, 59.81972890800013 ], [ -139.280384894999884, 59.833685614 ], [ -139.264637824999909, 59.841620184000149 ], [ -139.173695441999968, 59.850816148000135 ], [ -139.036366339999859, 59.846869208000058 ], [ -139.010975714999915, 59.842474677000084 ], [ -138.969593878999916, 59.816717841000028 ], [ -138.945301886999914, 59.807114976000051 ], [ -138.92007402299987, 59.804999091000141 ], [ -138.897368943999936, 59.813177802000055 ], [ -138.91051184799997, 59.812689520000063 ], [ -138.922596808999884, 59.813910223000093 ], [ -138.945179816999939, 59.820013739000061 ], [ -139.013783331999889, 59.857611395000063 ], [ -139.028309699999909, 59.861517645000063 ], [ -139.218739386999943, 59.871039130000057 ], [ -139.239003058999856, 59.878322658000073 ], [ -139.321197068999936, 59.938706773000021 ], [ -139.355295376999862, 59.94940827000012 ], [ -139.368316209999932, 59.963324286 ], [ -139.37954667899993, 59.979193427000112 ], [ -139.390248175999943, 59.991359768 ], [ -139.412424282999922, 60.001898505000085 ], [ -139.462066209999932, 60.011786200000088 ], [ -139.483306443999936, 60.022406317000119 ], [ -139.507232225999871, 60.046535549000126 ], [ -139.520904100999928, 60.051499742000019 ], [ -139.54165605399993, 60.046576239000117 ], [ -139.542958136999914, 60.037298895000092 ], [ -139.579945441999939, 60.007310289000131 ], [ -139.589466925999943, 59.987941799000012 ], [ -139.584380662999934, 59.96515534100017 ], [ -139.584828253999945, 59.955064195000105 ], [ -139.5931697259999, 59.950995184000149 ], [ -139.626128709999961, 59.949448960000112 ], [ -139.658355272999927, 59.943548895000092 ], [ -139.705962693999879, 59.921779690000037 ], [ -139.735218878999945, 59.89923737200003 ], [ -139.794422980999911, 59.854193427000055 ], [ -139.849029100999871, 59.819403387000094 ], [ -139.958241339999915, 59.794623114000146 ], [ -140.042713995999861, 59.76972077 ], [ -140.137074347999942, 59.739935614 ], [ -140.254221157999922, 59.710150458 ], [ -140.32274329299986, 59.701239325000145 ], [ -140.501210089999859, 59.705226955000128 ], [ -140.617014126999862, 59.708482163999989 ], [ -140.689808722999913, 59.718451239000061 ], [ -140.762684699999937, 59.728338934000178 ], [ -140.863148566999882, 59.745550848 ], [ -141.009836391999841, 59.790432033000016 ], [ -141.115223761999857, 59.809475002000013 ], [ -141.274159308999884, 59.849188544000114 ], [ -141.352284308999913, 59.864081122000172 ], [ -141.428537563999839, 59.872137762000094 ], [ -141.454009568999936, 59.882066148000106 ], [ -141.468169725999871, 59.903062242000047 ], [ -141.457630988999938, 59.91673411699999 ], [ -141.434925910999965, 59.925116278000061 ], [ -141.412424282999893, 59.929877020000148 ], [ -141.434559699999852, 59.919663804000109 ], [ -141.445139126999891, 59.912339585 ], [ -141.454009568999936, 59.902533270000063 ], [ -141.438099738999938, 59.896185614000146 ], [ -141.413197394999884, 59.899969794000143 ], [ -141.353179490999878, 59.920152085 ], [ -141.346791144999969, 59.924872137000094 ], [ -141.338734503999945, 59.928412177000084 ], [ -141.314320441999882, 59.931463934000178 ], [ -141.284087693999879, 59.939764716000141 ], [ -141.275257941999939, 59.943548895000092 ], [ -141.267323370999861, 59.955552476000022 ], [ -141.262115037999962, 59.973944403000061 ], [ -141.260121222999942, 59.994208075000145 ], [ -141.261586066999882, 60.011786200000088 ], [ -141.267893032999922, 60.029038804 ], [ -141.278065558999884, 60.044094143 ], [ -141.292225714999915, 60.056586005000113 ], [ -141.310047980999883, 60.066473700000031 ], [ -141.303130662999962, 60.065863348000065 ], [ -141.282093878999945, 60.066473700000031 ], [ -141.305043097999942, 60.086330471000124 ], [ -141.346424933999856, 60.098781643000152 ], [ -141.379546678999873, 60.113918361000131 ], [ -141.377674933999913, 60.142157294000114 ], [ -141.44351152299987, 60.135687567000033 ], [ -141.474720831999889, 60.126125393000123 ], [ -141.477609829999892, 60.111070054000109 ], [ -141.455067511999914, 60.078436591000141 ], [ -141.447173631999931, 60.073919989 ], [ -141.431711391999897, 60.072211005 ], [ -141.419748501999891, 60.067572333000086 ], [ -141.399403449999909, 60.052801825000088 ], [ -141.385894334999932, 60.034816799000154 ], [ -141.392933722999885, 60.022040106000119 ], [ -141.414214647999955, 60.014349677 ], [ -141.472523566999968, 60.009019273000135 ], [ -141.613880988999938, 59.96906159100017 ], [ -141.673491990999963, 59.96112702 ], [ -141.732655402999882, 59.963120835000055 ], [ -141.893950975999928, 60.007554429000081 ], [ -141.969105597999942, 60.028143622000087 ], [ -142.104156053999901, 60.035305080000128 ], [ -142.197743292999917, 60.052801825000088 ], [ -142.351633266999926, 60.067694403000147 ], [ -142.487416144999884, 60.075913804000052 ], [ -142.63963782499988, 60.102443752000013 ], [ -142.798491990999906, 60.112372137000094 ], [ -142.982289191999968, 60.092474677000112 ], [ -143.19579016799986, 60.067694403000147 ], [ -143.463937954999892, 60.052801825000088 ], [ -143.60960852799991, 60.04946523600016 ], [ -143.74868730399993, 60.025458075000031 ], [ -143.863189256999931, 60.000392971000124 ], [ -143.918609178999873, 59.997015692 ], [ -144.042388475999928, 60.027980861000131 ], [ -144.10570227799991, 60.031683661000088 ], [ -144.249623175999886, 60.032294012000037 ], [ -144.133208787999934, 60.039740302000112 ], [ -144.031361456999889, 60.034084377000127 ], [ -144.002552863999881, 60.039740302000112 ], [ -144.020090298999889, 60.061428127000099 ], [ -144.050770636999914, 60.079657294000171 ], [ -144.205474412999905, 60.145168361000017 ], [ -144.219146287999934, 60.14862702000012 ], [ -144.239084438999924, 60.149603583 ], [ -144.25255286399991, 60.154608466000028 ], [ -144.24087480399993, 60.165513414000102 ], [ -144.205637173999889, 60.18305084800015 ], [ -144.197499152999939, 60.184149481000091 ], [ -144.190541144999884, 60.186590887000037 ], [ -144.187570766999954, 60.193670966000084 ], [ -144.190093553999958, 60.201646226000051 ], [ -144.196441209999875, 60.205633856000034 ], [ -144.204497850999928, 60.205308335 ], [ -144.212025519999884, 60.200506903000118 ], [ -144.246571417999888, 60.188910223 ], [ -144.347564256999931, 60.201117255000085 ], [ -144.386789516999954, 60.196763413999989 ], [ -144.373117641999897, 60.1837425800001 ], [ -144.448557094999956, 60.176336981000091 ], [ -144.463490363999881, 60.179348049000012 ], [ -144.47883053299995, 60.186712958 ], [ -144.485829230999911, 60.19594961100016 ], [ -144.475493943999908, 60.204250393000152 ], [ -144.490712042999888, 60.216253973000065 ], [ -144.517323370999918, 60.210028387000094 ], [ -144.546986456999889, 60.19745514500012 ], [ -144.571115688999896, 60.190619208 ], [ -144.601470506999959, 60.196437893000152 ], [ -144.658111131999931, 60.215399481000148 ], [ -144.688384568999936, 60.224676825000117 ], [ -144.674224412999934, 60.22654857 ], [ -144.66185462099989, 60.224066473000065 ], [ -144.653146938999896, 60.220363674000012 ], [ -144.640004035999937, 60.217230536000145 ], [ -144.642160610999952, 60.222479559000035 ], [ -144.660511847999885, 60.24518463700015 ], [ -144.694650844999899, 60.272528387000037 ], [ -144.736317511999943, 60.284409898 ], [ -144.746449347999913, 60.289536851000108 ], [ -144.755930141999897, 60.296210028000147 ], [ -144.769886847999885, 60.302679755000057 ], [ -144.784047003999888, 60.30597565300009 ], [ -144.794260219999956, 60.303208726000051 ], [ -144.80890865799995, 60.294419663999989 ], [ -144.819650844999956, 60.297267971000039 ], [ -144.828765428999958, 60.303127346000068 ], [ -144.838693813999953, 60.303208726000051 ], [ -144.848947719999899, 60.300726630000113 ], [ -144.865101691999939, 60.304388739000061 ], [ -144.872792120999861, 60.303208726000051 ], [ -144.890126105999855, 60.292954820000105 ], [ -144.905262824999852, 60.293198960000055 ], [ -144.916574673999946, 60.294745184000092 ], [ -144.927479620999918, 60.298773505000085 ], [ -144.941639777999939, 60.306626695000048 ], [ -144.934478318999879, 60.31639232 ], [ -144.916371222999885, 60.326157945000134 ], [ -144.88963782499988, 60.35024648600016 ], [ -144.887033657999893, 60.355047919000143 ], [ -144.889963344999899, 60.363267320000048 ], [ -144.896392381999902, 60.365790106000148 ], [ -144.903065558999856, 60.366197007000082 ], [ -144.906890428999873, 60.368109442000119 ], [ -144.914540167999917, 60.381170966000113 ], [ -144.912464972999885, 60.387030341000141 ], [ -144.900705532999893, 60.395982163999989 ], [ -144.886545376999891, 60.401556708000086 ], [ -144.870716925999943, 60.403225002000099 ], [ -144.838002081999917, 60.402167059000035 ], [ -144.838002081999917, 60.409654039000102 ], [ -144.86070716099988, 60.418524481000148 ], [ -144.84203040299991, 60.436183986000074 ], [ -144.790842251999948, 60.464911200000031 ], [ -144.794260219999956, 60.475978908000158 ], [ -144.794097459999875, 60.491156317000147 ], [ -144.798410610999895, 60.499212958000086 ], [ -144.832142706999889, 60.477118231000091 ], [ -144.853179490999906, 60.469875393000066 ], [ -144.873117641999897, 60.471177476000079 ], [ -144.887033657999893, 60.485419012000179 ], [ -144.879058397999927, 60.495917059000064 ], [ -144.870187954999892, 60.501857815000065 ], [ -144.860951300999915, 60.506293036000145 ], [ -144.846180792999917, 60.516791083000115 ], [ -144.836048956999889, 60.522406317000119 ], [ -144.831776495999861, 60.525783596000124 ], [ -144.83067786399991, 60.530991929000137 ], [ -144.832020636999914, 60.538031317 ], [ -144.832346157999922, 60.544175523 ], [ -144.828358527999853, 60.546820380000057 ], [ -144.817534959999875, 60.551825262000094 ], [ -144.815256313999896, 60.563137111000103 ], [ -144.818755662999877, 60.584133205000128 ], [ -144.816070115999878, 60.595038153000118 ], [ -144.809234178999873, 60.603338934000178 ], [ -144.790842251999948, 60.61513906500015 ], [ -144.768462693999908, 60.625148830000128 ], [ -144.762806769999941, 60.630194403000175 ], [ -144.756092902999882, 60.643052476 ], [ -144.757069464999944, 60.65253327 ], [ -144.761341925999886, 60.663560289000046 ], [ -144.760609503999945, 60.672756252000042 ], [ -144.746449347999913, 60.67658112200003 ], [ -144.716542120999918, 60.671861070000134 ], [ -144.688547329999892, 60.663641669000029 ], [ -144.661203579999949, 60.660101630000057 ], [ -144.633168097999942, 60.669745184000121 ], [ -144.617909308999856, 60.680365302000055 ], [ -144.613677537999934, 60.687323309000149 ], [ -144.61266028599988, 60.697699286000145 ], [ -144.616037563999896, 60.713934637000094 ], [ -144.622792120999918, 60.717027085000083 ], [ -144.633859829999864, 60.71385325700011 ], [ -144.705393032999893, 60.703802802000141 ], [ -144.733143683999884, 60.695217190000122 ], [ -144.756092902999882, 60.684027411000116 ], [ -144.77179928299995, 60.66893138200011 ], [ -144.786000128999945, 60.650702216000028 ], [ -144.803293423999946, 60.635321356000176 ], [ -144.855865037999877, 60.622056382000054 ], [ -144.869781053999958, 60.60569896000014 ], [ -144.87913977799991, 60.585516669000114 ], [ -144.89321855399993, 60.567328192000119 ], [ -144.912098761999857, 60.557359117000132 ], [ -144.974273240999878, 60.537014065000122 ], [ -144.999663865999906, 60.533189195000105 ], [ -145.019520636999914, 60.526434637000179 ], [ -145.040435350999871, 60.510565497000144 ], [ -145.072010870999861, 60.477972723 ], [ -145.096994594999899, 60.444281317 ], [ -145.114003058999941, 60.429429429000137 ], [ -145.1634822259999, 60.417141018000066 ], [ -145.235910610999952, 60.368109442000119 ], [ -145.269520636999857, 60.357082424000069 ], [ -145.305246548999889, 60.35578034100017 ], [ -145.38914954299986, 60.362534898000106 ], [ -145.40265865799995, 60.366278387000065 ], [ -145.415191209999847, 60.371893622000144 ], [ -145.436838344999927, 60.386419989000089 ], [ -145.468495245999918, 60.391750393000152 ], [ -145.482289191999911, 60.395982163999989 ], [ -145.489369269999884, 60.40326569200009 ], [ -145.498890753999888, 60.423529364 ], [ -145.504017706999889, 60.430812893 ], [ -145.51695716099988, 60.436021226000108 ], [ -145.550038214999915, 60.441351630000085 ], [ -145.572580532999922, 60.451117255000113 ], [ -145.672838770999931, 60.458159912 ], [ -145.731615806999912, 60.465277009000104 ], [ -145.804504175999909, 60.454449026000091 ], [ -145.866063674999936, 60.44766242600015 ], [ -145.938753640999948, 60.456066151000059 ], [ -145.941558397999927, 60.471136786000088 ], [ -145.922678188999896, 60.479966539000046 ], [ -145.880034959999875, 60.48769765800013 ], [ -145.863392706999917, 60.495306708 ], [ -145.846831834999875, 60.50722890800013 ], [ -145.771799282999922, 60.542425848000093 ], [ -145.681304490999878, 60.608099677 ], [ -145.674672003999888, 60.618231512000037 ], [ -145.666371222999913, 60.635321356000176 ], [ -145.647816535999908, 60.645209052 ], [ -145.62913977799991, 60.652736721000153 ], [ -145.620025193999936, 60.662909247000087 ], [ -145.629017706999861, 60.67914459800015 ], [ -145.652088995999918, 60.675116278000175 ], [ -145.691761847999942, 60.656683661000145 ], [ -145.844593878999888, 60.62103913 ], [ -145.880197719999927, 60.628729559000121 ], [ -145.838002081999889, 60.639837958000143 ], [ -145.81773841099988, 60.649603583000086 ], [ -145.805043097999942, 60.662909247000087 ], [ -145.824208136999886, 60.664862372000144 ], [ -145.861398891999897, 60.65648021 ], [ -145.880197719999927, 60.662909247000087 ], [ -145.855539516999954, 60.67658112200003 ], [ -145.845285610999895, 60.685532945000077 ], [ -145.839182094999927, 60.697699286000145 ], [ -145.857167120999861, 60.695054429000052 ], [ -145.882232225999957, 60.686224677000027 ], [ -145.904652472999885, 60.673570054000137 ], [ -145.925770636999886, 60.645209052 ], [ -145.952381964999915, 60.638128973000121 ], [ -146.003651495999861, 60.635646877000013 ], [ -145.994130011999857, 60.64915599199999 ], [ -145.982777472999885, 60.65721263200011 ], [ -145.955230272999955, 60.669745184000121 ], [ -145.943430141999897, 60.678290106000034 ], [ -145.924672003999945, 60.696844794000143 ], [ -145.914296027999939, 60.703924872000115 ], [ -145.93879146999987, 60.708197333000115 ], [ -145.965484178999901, 60.697821356000119 ], [ -145.99233964799987, 60.683742580000072 ], [ -146.017323370999918, 60.67658112200003 ], [ -146.04430091099988, 60.67308177300005 ], [ -146.197743292999945, 60.636542059000092 ], [ -146.238758917999945, 60.634711005000113 ], [ -146.256906704999949, 60.646185614000061 ], [ -146.25804602799991, 60.648830471000153 ], [ -146.260609503999888, 60.650702216000028 ], [ -146.263172980999911, 60.65371328300013 ], [ -146.26431230399993, 60.659816799000012 ], [ -146.261301235999952, 60.662583726000079 ], [ -146.246001756999874, 60.663804429 ], [ -146.239857550999886, 60.666327216000113 ], [ -146.23070227799991, 60.673163153000033 ], [ -146.117298956999861, 60.721380927000084 ], [ -146.081288214999915, 60.726385809000121 ], [ -146.070301886999914, 60.73065827000012 ], [ -146.062123175999943, 60.738023179000109 ], [ -146.058908657999893, 60.748602606000148 ], [ -146.053089972999913, 60.752630927000141 ], [ -146.026112433999856, 60.744818427000141 ], [ -146.017933722999857, 60.752346096000011 ], [ -146.020375128999888, 60.757961330000015 ], [ -146.037749803999958, 60.779608466000084 ], [ -146.032215949999852, 60.788397528000147 ], [ -146.031117316999911, 60.794745184000092 ], [ -146.037749803999958, 60.800116278000147 ], [ -146.043446417999945, 60.80101146000014 ], [ -146.050404425999943, 60.800848700000174 ], [ -146.056385870999947, 60.799302476000136 ], [ -146.058908657999893, 60.796332098000121 ], [ -146.069325324999852, 60.778387762000179 ], [ -146.093495245999861, 60.762884833000058 ], [ -146.14085852799991, 60.744818427000141 ], [ -146.166981574999852, 60.740708726 ], [ -146.182199673999946, 60.744045315000122 ], [ -146.18187415299991, 60.753119208000115 ], [ -146.161284959999875, 60.766546942000119 ], [ -146.208566860999952, 60.760728257000054 ], [ -146.222482876999919, 60.755764065 ], [ -146.232289191999939, 60.74746328300013 ], [ -146.240305141999897, 60.737250067 ], [ -146.249826626999891, 60.728664455000072 ], [ -146.264027472999885, 60.725002346000124 ], [ -146.295562303999901, 60.726304429000137 ], [ -146.306792772999927, 60.732082424000097 ], [ -146.312123175999886, 60.744818427000141 ], [ -146.309966600999871, 60.758246161000145 ], [ -146.302357550999943, 60.765326239 ], [ -146.292591925999886, 60.770900783000016 ], [ -146.284250454999921, 60.779608466000084 ], [ -146.313099738999938, 60.77167389500012 ], [ -146.352528449999909, 60.733710028000118 ], [ -146.389149542999945, 60.721991278000033 ], [ -146.417225714999944, 60.706773179000052 ], [ -146.425689256999874, 60.700832424000126 ], [ -146.438384568999879, 60.695990302000141 ], [ -146.482289191999882, 60.686957098000121 ], [ -146.493723110999952, 60.687160549000097 ], [ -146.517567511999914, 60.698065497000144 ], [ -146.549916144999941, 60.701402085 ], [ -146.644195115999935, 60.697699286000145 ], [ -146.652088995999918, 60.700018622000115 ], [ -146.653635219999956, 60.705755927 ], [ -146.652984178999873, 60.712469794000029 ], [ -146.65477454299986, 60.718166408000016 ], [ -146.662912563999896, 60.725002346000124 ], [ -146.695708787999905, 60.744818427000141 ], [ -146.678578253999888, 60.752752997000115 ], [ -146.660511847999942, 60.749986070000048 ], [ -146.642974412999905, 60.741197007 ], [ -146.627430792999917, 60.731146552000112 ], [ -146.620838995999918, 60.752427476 ], [ -146.615793423999889, 60.761175848000065 ], [ -146.607004360999923, 60.766546942000119 ], [ -146.591135219999899, 60.765204169000029 ], [ -146.562611456999889, 60.75096263200011 ], [ -146.534535285999908, 60.759222723 ], [ -146.506703253999945, 60.744370835000055 ], [ -146.493723110999952, 60.748602606000148 ], [ -146.491525844999956, 60.760891018000123 ], [ -146.505116339999915, 60.768622137000037 ], [ -146.524159308999913, 60.772406317000062 ], [ -146.53807532499988, 60.772772528000175 ], [ -146.515695766999954, 60.780096747000172 ], [ -146.491607225999928, 60.779282945000077 ], [ -146.445627407999893, 60.772772528000175 ], [ -146.426625128999888, 60.774888413999989 ], [ -146.38609778599988, 60.784328518 ], [ -146.343332485999952, 60.788885809000064 ], [ -146.262847459999875, 60.810858466000141 ], [ -146.19546464799987, 60.820542710000112 ], [ -146.19546464799987, 60.827378648000135 ], [ -146.22789466099988, 60.831691799000126 ], [ -146.237538214999915, 60.841009833000086 ], [ -146.226144985999895, 60.850409247000115 ], [ -146.19546464799987, 60.854681708000115 ], [ -146.093088344999956, 60.841009833000086 ], [ -146.223459438999896, 60.892645575000031 ], [ -146.253773566999882, 60.885728257000139 ], [ -146.281361456999889, 60.859320380000142 ], [ -146.317250128999888, 60.836737372000172 ], [ -146.358306443999879, 60.822333075000117 ], [ -146.401519334999875, 60.820542710000112 ], [ -146.401519334999875, 60.827378648000135 ], [ -146.396107550999943, 60.831244208000143 ], [ -146.393137173999918, 60.835435288999989 ], [ -146.387277798999889, 60.84788646 ], [ -146.511463995999918, 60.818589585000083 ], [ -146.558583136999914, 60.827378648000135 ], [ -146.554595506999874, 60.845445054000052 ], [ -146.566802537999934, 60.853664455000157 ], [ -146.586048956999889, 60.852972723000036 ], [ -146.603260870999918, 60.844427802 ], [ -146.619130011999914, 60.831040757 ], [ -146.628285285999908, 60.827297268000152 ], [ -146.630970831999889, 60.83478424700003 ], [ -146.627430792999917, 60.854681708000115 ], [ -146.609974738999938, 60.864203192000119 ], [ -146.607004360999923, 60.868353583000058 ], [ -146.611398891999897, 60.87714264500012 ], [ -146.620838995999918, 60.883775132 ], [ -146.631947394999884, 60.888006903000118 ], [ -146.641102667999917, 60.889471747000172 ], [ -146.655262824999852, 60.886297919000114 ], [ -146.668446417999917, 60.880926825000145 ], [ -146.683501756999931, 60.879828192 ], [ -146.703195766999869, 60.889471747000172 ], [ -146.704660610999923, 60.892279364000117 ], [ -146.716867641999897, 60.909979559000121 ], [ -146.723866339999887, 60.916083075000117 ], [ -146.730458136999857, 60.919338283000158 ], [ -146.735422329999892, 60.923895575000088 ], [ -146.73729407499988, 60.933823960000026 ], [ -146.75328528599988, 60.955023505 ], [ -146.753163214999915, 60.96430084800015 ], [ -146.729847785999908, 60.964544989 ], [ -146.714711066999911, 60.959784247000087 ], [ -146.691273566999939, 60.94725169500002 ], [ -146.604969855999911, 60.937160549000126 ], [ -146.585845506999931, 60.944728908000073 ], [ -146.618804490999906, 60.955023505 ], [ -146.666086391999954, 60.963446356000148 ], [ -146.699818488999853, 60.976874091000141 ], [ -146.692290818999879, 61.002427476000136 ], [ -146.685292120999918, 61.01166413 ], [ -146.672759568999908, 61.032700914000131 ], [ -146.662220831999946, 61.040269273000078 ], [ -146.64354407499988, 61.04205963700015 ], [ -146.590931769999941, 61.032904364000089 ], [ -146.572824673999946, 61.026597398000135 ], [ -146.57046464799987, 61.030707098000093 ], [ -146.566477016999897, 61.041571356000148 ], [ -146.565419074999852, 61.046535549000041 ], [ -146.611236131999874, 61.053452867000104 ], [ -146.632923956999946, 61.05955638200011 ], [ -146.647938605999855, 61.073797919000114 ], [ -146.55687415299991, 61.085923570000105 ], [ -146.283762173999946, 61.08144765800013 ], [ -146.236439581999889, 61.094305731000148 ], [ -146.277984178999873, 61.122748114000089 ], [ -146.300119594999956, 61.132513739000117 ], [ -146.325795050999915, 61.136460679000109 ], [ -146.381459113999938, 61.134588934000035 ], [ -146.43195553299995, 61.139471747000115 ], [ -146.493804490999935, 61.13418203300013 ], [ -146.585845506999931, 61.136460679000109 ], [ -146.609445766999954, 61.130764065000122 ], [ -146.631662563999924, 61.119086005000113 ], [ -146.675282355999911, 61.088080145 ], [ -146.720570441999939, 61.064886786000088 ], [ -146.815541144999884, 61.031805731000034 ], [ -146.85399329299986, 61.005560614 ], [ -146.871327277999853, 60.98517487200003 ], [ -146.890939907999922, 60.972072658000158 ], [ -146.911366339999915, 60.962103583000058 ], [ -146.94871985599994, 60.949652411000145 ], [ -146.97671464799987, 60.945786851000136 ], [ -147.004872199999852, 60.947943427000141 ], [ -147.031564907999893, 60.957709052000084 ], [ -146.993967251999891, 60.983384507000139 ], [ -146.978830532999893, 60.998724677 ], [ -146.983754035999937, 61.005560614 ], [ -147.004790818999879, 61.006659247000144 ], [ -147.011057094999927, 61.005560614 ], [ -147.015695766999954, 61.002183335 ], [ -147.016753709999904, 60.998114325000031 ], [ -147.016916469999956, 60.994330145 ], [ -147.018462693999908, 60.991888739000061 ], [ -147.03416907499988, 60.981634833000143 ], [ -147.044300910999937, 60.977932033000101 ], [ -147.058827277999853, 60.978216864000117 ], [ -147.048573370999918, 60.992173570000105 ], [ -147.042591925999943, 61.00291575700011 ], [ -147.047230597999942, 61.009833075000117 ], [ -147.090199347999913, 61.015773830000128 ], [ -147.100656704999892, 61.015285549000154 ], [ -147.11945553299995, 61.002875067000119 ], [ -147.148264126999891, 60.991888739000061 ], [ -147.150542772999927, 60.976385809000149 ], [ -147.145375128999945, 60.963324286000088 ], [ -147.145863410999937, 60.954291083000058 ], [ -147.165272589999915, 60.950873114000061 ], [ -147.185292120999918, 60.953680731000119 ], [ -147.199126756999902, 60.961981512000179 ], [ -147.207102016999954, 60.97597890800013 ], [ -147.209624803999958, 60.995591539000102 ], [ -147.20726477799991, 61.00869375200007 ], [ -147.205148891999897, 61.014593817000033 ], [ -147.210519985999952, 61.013413804 ], [ -147.254383917999917, 60.993963934000178 ], [ -147.264271613999938, 60.991888739000061 ], [ -147.278431769999941, 61.004380601000079 ], [ -147.287912563999953, 61.007025458000058 ], [ -147.292225714999944, 60.995591539000102 ], [ -147.287505662999848, 60.984930731000176 ], [ -147.265288865999878, 60.967922268 ], [ -147.25812740799995, 60.957709052000084 ], [ -147.257313605999911, 60.937892971000068 ], [ -147.268910285999851, 60.930243231000034 ], [ -147.31273352799991, 60.930405992000019 ], [ -147.305816209999904, 60.923000393 ], [ -147.343088344999899, 60.89948151200015 ], [ -147.364613410999908, 60.89126211100016 ], [ -147.374134894999884, 60.899074611000131 ], [ -147.382964647999955, 60.91396719 ], [ -147.403960740999878, 60.912787177000084 ], [ -147.429025844999899, 60.905585028000033 ], [ -147.449859178999873, 60.902533270000148 ], [ -147.437896287999934, 60.926906643 ], [ -147.380970831999917, 60.985663153000118 ], [ -147.400257941999854, 60.99095286699999 ], [ -147.416818813999924, 60.980292059000149 ], [ -147.432606574999852, 60.965318101000108 ], [ -147.449574347999942, 60.957709052000084 ], [ -147.460031704999921, 60.965765692000033 ], [ -147.451730923999946, 60.983710028000147 ], [ -147.435536261999886, 61.002386786000145 ], [ -147.422596808999884, 61.012355861000131 ], [ -147.451730923999946, 61.010931708000058 ], [ -147.468861456999889, 61.000474351 ], [ -147.494252081999889, 60.967962958 ], [ -147.509755011999914, 60.925726630000085 ], [ -147.522694464999915, 60.90753815300009 ], [ -147.542062954999949, 60.91331614800005 ], [ -147.545480923999946, 60.985663153000118 ], [ -147.53856360599994, 61.004217841000113 ], [ -147.529693162999905, 61.016669012000037 ], [ -147.525502081999889, 61.030585028000118 ], [ -147.532460089999859, 61.053941148000106 ], [ -147.521717902999939, 61.059759833000058 ], [ -147.490874803999873, 61.069403387000037 ], [ -147.483998175999886, 61.073797919000114 ], [ -147.485910610999923, 61.083726304000109 ], [ -147.49388587099989, 61.088080145 ], [ -147.503732876999891, 61.090399481000148 ], [ -147.511341925999943, 61.094305731000148 ], [ -147.521351691999939, 61.108587958000058 ], [ -147.527251756999874, 61.124741929000109 ], [ -147.525257941999939, 61.139390367000132 ], [ -147.511341925999943, 61.149562893000066 ], [ -147.524891730999911, 61.154445705000128 ], [ -147.54328365799995, 61.157049872000144 ], [ -147.561146613999938, 61.155910549000012 ], [ -147.573394334999875, 61.149562893000066 ], [ -147.578846808999913, 61.136297919000143 ], [ -147.573231574999909, 61.12759023600016 ], [ -147.564361131999874, 61.120347398000135 ], [ -147.559722459999875, 61.111639716000141 ], [ -147.566151495999861, 61.08722565300009 ], [ -147.581857876999919, 61.059230861000074 ], [ -147.60179602799991, 61.036200262000122 ], [ -147.620920376999891, 61.026597398000135 ], [ -147.64000403599988, 61.024359442000147 ], [ -147.658599412999877, 61.019476630000085 ], [ -147.665272589999915, 61.014593817000033 ], [ -147.648508266999897, 61.012355861000131 ], [ -147.620757615999935, 61.013983466000141 ], [ -147.614369269999884, 61.012355861000131 ], [ -147.607411261999914, 61.003363348 ], [ -147.610178188999896, 60.998846747000144 ], [ -147.61656653599988, 60.995998440000037 ], [ -147.620594855999855, 60.991888739000061 ], [ -147.623158331999889, 60.986558335 ], [ -147.632232225999957, 60.977972723000093 ], [ -147.634185350999928, 60.97479889500012 ], [ -147.630482550999886, 60.966701565 ], [ -147.62169348899991, 60.964585679 ], [ -147.61164303299995, 60.96430084800015 ], [ -147.60383053299995, 60.961167710000083 ], [ -147.600087042999917, 60.949855861000103 ], [ -147.605620897999927, 60.923651434000149 ], [ -147.600697394999884, 60.909979559000121 ], [ -147.596791144999884, 60.885687567000147 ], [ -147.599029100999928, 60.869086005 ], [ -147.610666469999956, 60.861558335000112 ], [ -147.664662238999881, 60.85830312700007 ], [ -147.68195553299995, 60.864691473 ], [ -147.666086391999926, 60.900458075000031 ], [ -147.68504798099994, 60.898586330000157 ], [ -147.712147589999859, 60.891180731000176 ], [ -147.730458136999914, 60.889471747000172 ], [ -147.732777472999885, 60.900091864000032 ], [ -147.727202928999873, 60.91815827000012 ], [ -147.716460740999878, 60.935695705000072 ], [ -147.703114386999857, 60.944728908000073 ], [ -147.703114386999857, 60.950873114000061 ], [ -147.727650519999884, 60.947577216000028 ], [ -147.769439256999931, 60.929144598000093 ], [ -147.785715298999946, 60.930405992000019 ], [ -147.788644985999895, 60.926703192000147 ], [ -147.790191209999932, 60.923773505000113 ], [ -147.792469855999883, 60.916815497000059 ], [ -147.770130988999881, 60.911444403000175 ], [ -147.777740037999877, 60.898871161 ], [ -147.812977667999917, 60.87579987200003 ], [ -147.777088995999947, 60.867010809000149 ], [ -147.771392381999874, 60.864935614000146 ], [ -147.766835089999915, 60.861883856000148 ], [ -147.757801886999914, 60.853664455000157 ], [ -147.7513728509999, 60.845038153000147 ], [ -147.754628058999941, 60.841009833000086 ], [ -147.763824022999927, 60.83893463700015 ], [ -147.783314581999889, 60.829535223000121 ], [ -147.795562303999958, 60.827378648000135 ], [ -147.870187954999892, 60.837713934000064 ], [ -147.886097785999937, 60.845200914000102 ], [ -147.898793097999885, 60.855943101000136 ], [ -147.908558722999913, 60.868353583000058 ], [ -147.91698157499988, 60.888169664000074 ], [ -147.922230597999857, 60.895697333000115 ], [ -147.930816209999875, 60.904201565000065 ], [ -147.938099738999881, 60.908758856000091 ], [ -148.019846157999865, 60.94163646 ], [ -148.038929816999939, 60.944728908000073 ], [ -148.050404425999886, 60.950140692000119 ], [ -148.034291144999941, 60.962347723 ], [ -147.997914191999939, 60.981919663999989 ], [ -147.999501105999883, 60.987616278000147 ], [ -148.002145962999862, 60.990139065000065 ], [ -148.00263424399995, 60.992865302000141 ], [ -147.997914191999939, 60.999335028000061 ], [ -147.988840298999946, 61.004868882000054 ], [ -147.966420050999943, 61.007961330000128 ], [ -147.956939256999931, 61.012355861000131 ], [ -147.94469153599988, 61.026597398000135 ], [ -147.92906653599988, 61.053778387000037 ], [ -147.915394660999937, 61.067572333000058 ], [ -147.929839647999898, 61.072739976000051 ], [ -147.935902472999885, 61.073797919000114 ], [ -147.918080206999917, 61.094305731000148 ], [ -147.883941209999932, 61.119370835000055 ], [ -147.84593665299991, 61.140570380000057 ], [ -147.816395636999943, 61.149562893000066 ], [ -147.804758266999954, 61.155218817000062 ], [ -147.772857225999928, 61.182033596000068 ], [ -147.757720506999931, 61.191107489000061 ], [ -147.716175910999937, 61.201849677000084 ], [ -147.702137824999909, 61.213202216000141 ], [ -147.710560675999943, 61.232082424000069 ], [ -147.73696855399993, 61.215562242000104 ], [ -147.751047329999892, 61.212591864 ], [ -147.765207485999895, 61.218451239000117 ], [ -147.723215298999918, 61.255926825000145 ], [ -147.713368292999888, 61.273098049000097 ], [ -147.730458136999914, 61.279852606000034 ], [ -147.748036261999857, 61.276068427 ], [ -147.762196417999888, 61.264960028000175 ], [ -147.785715298999946, 61.238959052 ], [ -147.833485480999911, 61.19757721600017 ], [ -147.843739386999914, 61.191107489000061 ], [ -147.873280402999882, 61.181870835 ], [ -147.908680792999888, 61.160142320000134 ], [ -147.963775193999936, 61.114732164000046 ], [ -147.998524542999917, 61.062689520000092 ], [ -148.020985480999911, 61.037420966000028 ], [ -148.049427863999938, 61.026597398000135 ], [ -148.07201087099989, 61.024400132000139 ], [ -148.079904751999891, 61.026597398000135 ], [ -148.086252407999893, 61.031398830000043 ], [ -148.093820766999954, 61.044175523000078 ], [ -148.113352016999926, 61.061835028000175 ], [ -148.121896938999953, 61.075995184000092 ], [ -148.131906704999949, 61.088324286000145 ], [ -148.14875240799995, 61.094305731000148 ], [ -148.139963344999956, 61.112860419000171 ], [ -148.145944790999891, 61.117905992000104 ], [ -148.160145636999914, 61.11469147300015 ], [ -148.196115688999896, 61.102362372000087 ], [ -148.258615688999896, 61.094305731000148 ], [ -148.278391079999949, 61.088934637000094 ], [ -148.305165167999917, 61.077093817000147 ], [ -148.390573696999866, 61.067287502000013 ], [ -148.409494594999899, 61.060126044000171 ], [ -148.397165493999921, 61.055365302000084 ], [ -148.372629360999923, 61.052232164000102 ], [ -148.361073370999918, 61.046535549000041 ], [ -148.371286587999919, 61.040594794000086 ], [ -148.391428188999896, 61.024115302000112 ], [ -148.398915167999917, 61.016058661000088 ], [ -148.407907680999955, 61.010931708000058 ], [ -148.449818488999881, 60.999335028000061 ], [ -148.449818488999881, 60.991888739000061 ], [ -148.41034908799989, 60.986395575000031 ], [ -148.375599738999938, 60.999212958000086 ], [ -148.313832160999937, 61.040269273000078 ], [ -148.279489712999862, 61.054999091000141 ], [ -148.227650519999884, 61.070990302000055 ], [ -148.177723761999914, 61.076605536000059 ], [ -148.14875240799995, 61.060126044000171 ], [ -148.163807745999947, 61.055812893000066 ], [ -148.166940883999928, 61.046454169000057 ], [ -148.166818813999953, 61.034613348000093 ], [ -148.17235266799986, 61.023260809000092 ], [ -148.207142706999917, 60.981919663999989 ], [ -148.218373175999915, 60.972479559000149 ], [ -148.251942511999943, 60.954738674000069 ], [ -148.264841274999867, 60.950873114000061 ], [ -148.28172766799986, 60.953680731000119 ], [ -148.313588019999884, 60.969794012000179 ], [ -148.333119269999884, 60.971380927000112 ], [ -148.325876430999926, 60.961127020000092 ], [ -148.289051886999857, 60.933823960000026 ], [ -148.281198696999866, 60.920599677000055 ], [ -148.286000128999888, 60.913397528000033 ], [ -148.296701626999891, 60.906927802000112 ], [ -148.306467251999948, 60.895697333000115 ], [ -148.308176235999952, 60.880194403000118 ], [ -148.305775519999884, 60.864691473 ], [ -148.307199673999889, 60.852728583000086 ], [ -148.320423956999889, 60.84788646 ], [ -148.338734503999888, 60.850043036 ], [ -148.375111456999946, 60.859361070000134 ], [ -148.395822719999956, 60.861558335000112 ], [ -148.348215298999889, 60.833929755000113 ], [ -148.332875128999916, 60.819403387000179 ], [ -148.354237433999884, 60.813137111000131 ], [ -148.383371548999946, 60.817043361000131 ], [ -148.428334113999938, 60.835272528000118 ], [ -148.457264777999939, 60.841009833000086 ], [ -148.523426886999914, 60.840399481000034 ], [ -148.586374477999954, 60.830471096000124 ], [ -148.703684048999889, 60.792669989000061 ], [ -148.670114712999862, 60.785467841000056 ], [ -148.635080532999893, 60.79360586100016 ], [ -148.600046352999897, 60.806341864 ], [ -148.566477016999954, 60.813137111000131 ], [ -148.55992591099988, 60.811102606000091 ], [ -148.551462368999921, 60.80206940300009 ], [ -148.54633541599992, 60.800116278000147 ], [ -148.537953253999888, 60.800930080000157 ], [ -148.476307745999918, 60.814276434000149 ], [ -148.460153774999867, 60.81240469 ], [ -148.449818488999881, 60.800116278000147 ], [ -148.488026495999918, 60.790513414000074 ], [ -148.57835852799991, 60.781724351000108 ], [ -148.611195441999911, 60.762884833000058 ], [ -148.623605923999946, 60.752386786 ], [ -148.650868292999917, 60.73737213700015 ], [ -148.662709113999881, 60.725002346000124 ], [ -148.677723761999914, 60.700344143000123 ], [ -148.688710089999859, 60.689398505000085 ], [ -148.703684048999889, 60.684027411000116 ], [ -148.703684048999889, 60.67658112200003 ], [ -148.667469855999911, 60.674505927000112 ], [ -148.655873175999886, 60.67658112200003 ], [ -148.643666144999884, 60.682033596000068 ], [ -148.621327277999853, 60.695135809000035 ], [ -148.59825598899991, 60.699611721000011 ], [ -148.589588995999918, 60.704738674000041 ], [ -148.583200649999895, 60.712347723000065 ], [ -148.580799933999941, 60.721584377000042 ], [ -148.578928188999896, 60.735785223000121 ], [ -148.573597785999908, 60.739935614000089 ], [ -148.564890102999925, 60.740790106000176 ], [ -148.552845831999917, 60.744818427000141 ], [ -148.52953040299991, 60.757025458000115 ], [ -148.510202602999868, 60.763495184000121 ], [ -148.489979620999861, 60.766099351000108 ], [ -148.464100714999944, 60.766546942000119 ], [ -148.453073696999923, 60.768622137000037 ], [ -148.440012173999946, 60.777573960000055 ], [ -148.43305416599992, 60.779608466000084 ], [ -148.374704555999926, 60.779608466000084 ], [ -148.374704555999926, 60.772772528000175 ], [ -148.38837643099987, 60.772772528000175 ], [ -148.38837643099987, 60.766546942000119 ], [ -148.378854946999866, 60.764227606000148 ], [ -148.370961066999911, 60.759751695 ], [ -148.364938930999898, 60.75324127800009 ], [ -148.361073370999918, 60.744818427000141 ], [ -148.385487433999941, 60.739691473000121 ], [ -148.395090298999918, 60.734686591000084 ], [ -148.401966925999943, 60.725002346000124 ], [ -148.401112433999913, 60.715806382000054 ], [ -148.395090298999918, 60.68952057500006 ], [ -148.398915167999917, 60.684027411000116 ], [ -148.426340298999889, 60.679510809000149 ], [ -148.434519008999899, 60.66742584800015 ], [ -148.429921027999853, 60.628729559000121 ], [ -148.420114712999919, 60.634955145000063 ], [ -148.395822719999956, 60.656683661000145 ], [ -148.382679816999882, 60.661688544000086 ], [ -148.370432094999927, 60.663804429 ], [ -148.358754035999937, 60.66742584800015 ], [ -148.347401495999861, 60.67658112200003 ], [ -148.342518683999913, 60.703314520000148 ], [ -148.308420376999891, 60.73456452000012 ], [ -148.264637824999909, 60.760809637000037 ], [ -148.230702277999853, 60.772772528000175 ], [ -148.230702277999853, 60.766546942000119 ], [ -148.24828040299991, 60.754380601000136 ], [ -148.256214972999885, 60.737982489000117 ], [ -148.254953579999949, 60.718573309000121 ], [ -148.244984503999888, 60.697699286000145 ], [ -148.237131313999896, 60.68854401200015 ], [ -148.218983527999882, 60.673285223 ], [ -148.210194464999915, 60.662909247000087 ], [ -148.20641028599988, 60.653509833000086 ], [ -148.205922003999888, 60.645453192000147 ], [ -148.204172329999892, 60.637518622000172 ], [ -148.196603969999956, 60.628729559000121 ], [ -148.206288214999915, 60.620550848 ], [ -148.219186977999925, 60.614081122000087 ], [ -148.23371334499987, 60.609808661 ], [ -148.248117641999954, 60.608303127000127 ], [ -148.315256313999896, 60.549709377000099 ], [ -148.336984829999892, 60.540594794000114 ], [ -148.361073370999918, 60.546820380000057 ], [ -148.361073370999918, 60.553045966000028 ], [ -148.36351477799991, 60.562323309000178 ], [ -148.416452602999868, 60.559230861000103 ], [ -148.429921027999853, 60.570746161000116 ], [ -148.43968665299991, 60.587062893000152 ], [ -148.462473110999923, 60.589300848000121 ], [ -148.488474087999919, 60.582220770000063 ], [ -148.524484829999892, 60.560003973000036 ], [ -148.599476691999939, 60.529689846000124 ], [ -148.655873175999886, 60.498439846000068 ], [ -148.66942298099994, 60.488226630000113 ], [ -148.684763149999895, 60.47211334800015 ], [ -148.689890102999897, 60.45722077 ], [ -148.672596808999913, 60.450628973000121 ], [ -148.651478644999884, 60.457180080000015 ], [ -148.615305141999954, 60.485744533000101 ], [ -148.557932094999956, 60.504339911 ], [ -148.51414954299986, 60.528469143 ], [ -148.47020423099994, 60.546210028000118 ], [ -148.429921027999853, 60.539374091000084 ], [ -148.427072719999927, 60.528876044000029 ], [ -148.409047003999888, 60.524562893000038 ], [ -148.385935024999924, 60.522528387000179 ], [ -148.367868618999921, 60.518947658000016 ], [ -148.38154049399995, 60.505845445000048 ], [ -148.348500128999888, 60.509466864000032 ], [ -148.341542120999918, 60.506659247000144 ], [ -148.351144985999895, 60.495306708 ], [ -148.35883541599992, 60.483791408000158 ], [ -148.348378058999913, 60.480658270000092 ], [ -148.329904751999891, 60.483221747000087 ], [ -148.313221808999856, 60.488836981000176 ], [ -148.276600714999944, 60.494940497000172 ], [ -148.268503383999928, 60.472886460000083 ], [ -148.263783331999917, 60.451076565000122 ], [ -148.237538214999887, 60.457464911000145 ], [ -148.224720831999946, 60.469142971000124 ], [ -148.223622199999909, 60.478338934000121 ], [ -148.227853969999927, 60.488348700000088 ], [ -148.230702277999853, 60.502142645 ], [ -148.232858852999868, 60.505804755000057 ], [ -148.236643032999893, 60.509914455000015 ], [ -148.238352016999897, 60.515204169000086 ], [ -148.234120245999861, 60.522365627000127 ], [ -148.228464321999894, 60.525620835000083 ], [ -148.213246222999913, 60.532416083 ], [ -148.210194464999915, 60.536322333 ], [ -148.205922003999888, 60.546332098000093 ], [ -148.195912238999938, 60.554510809000178 ], [ -148.184559699999937, 60.557806708000115 ], [ -148.176096157999893, 60.553045966000028 ], [ -148.173654751999891, 60.539984442000147 ], [ -148.17711341099988, 60.525336005000142 ], [ -148.183461066999882, 60.512762762000065 ], [ -148.18976803299995, 60.505845445000048 ], [ -148.166371222999857, 60.501613674000126 ], [ -148.154611782999893, 60.525132554 ], [ -148.148304816999939, 60.557766018000123 ], [ -148.14130611899995, 60.580389716000084 ], [ -148.130848761999886, 60.587225653000118 ], [ -148.093820766999954, 60.603583075000031 ], [ -148.083607550999915, 60.60488515800013 ], [ -148.069162563999953, 60.585923570000105 ], [ -148.060007290999863, 60.57802969000015 ], [ -148.045765753999888, 60.574164130000142 ], [ -148.066843227999897, 60.539374091000084 ], [ -148.055165167999888, 60.541245835000055 ], [ -148.033395962999919, 60.551459052 ], [ -148.025257941999911, 60.553045966000028 ], [ -148.011789516999926, 60.547796942000147 ], [ -148.00682532499988, 60.540676174000097 ], [ -148.004261847999885, 60.532782294000114 ], [ -147.997914191999939, 60.525783596000124 ], [ -147.984974738999938, 60.521551825000117 ], [ -147.970773891999926, 60.518947658000016 ], [ -147.959828253999945, 60.512762762000065 ], [ -147.956939256999931, 60.498439846000068 ], [ -147.96226966099988, 60.491888739000089 ], [ -147.973703579999949, 60.485296942 ], [ -147.986968553999873, 60.480169989 ], [ -147.997914191999939, 60.477972723 ], [ -147.984730597999885, 60.462225653000061 ], [ -147.963734503999945, 60.46417877800009 ], [ -147.944406704999921, 60.4688988300001 ], [ -147.935902472999885, 60.46116771 ], [ -147.941883917999917, 60.443060614000089 ], [ -147.957020636999914, 60.436102606000091 ], [ -147.997914191999939, 60.436957098000093 ], [ -147.995350714999915, 60.421535549000154 ], [ -148.012399868999893, 60.410711981000148 ], [ -148.036854620999918, 60.404282945000048 ], [ -148.056263800999943, 60.402167059000035 ], [ -148.085560675999858, 60.419094143000123 ], [ -148.097035285999908, 60.419378973000065 ], [ -148.08735104099992, 60.395982163999989 ], [ -148.110910610999895, 60.39948151200015 ], [ -148.156442837999947, 60.414943752000099 ], [ -148.182321743999864, 60.416489976000136 ], [ -148.170847133999928, 60.409613348000121 ], [ -148.135080532999893, 60.379339911000116 ], [ -148.12828528599988, 60.368109442000119 ], [ -148.142445441999882, 60.355210679000109 ], [ -148.169789191999882, 60.352850653000147 ], [ -148.198557094999899, 60.356390692000119 ], [ -148.21703040299991, 60.361273505000028 ], [ -148.216175910999937, 60.379706122000059 ], [ -148.233509894999912, 60.384751695000077 ], [ -148.254587368999921, 60.378973700000117 ], [ -148.264841274999867, 60.364691473000036 ], [ -148.259755011999943, 60.348537502000156 ], [ -148.247303839999915, 60.34902578300013 ], [ -148.231678839999944, 60.353094794000086 ], [ -148.21703040299991, 60.347601630000085 ], [ -148.215158657999865, 60.321926174000012 ], [ -148.240915493999921, 60.29767487200003 ], [ -148.276234503999945, 60.279608466000113 ], [ -148.310373501999948, 60.270412502000127 ], [ -148.32005774599989, 60.260972398000106 ], [ -148.330026821999866, 60.258856512000094 ], [ -148.338734503999888, 60.26243724199999 ], [ -148.353586391999926, 60.279974677000112 ], [ -148.361073370999918, 60.286200262000179 ], [ -148.379709438999896, 60.287420966000084 ], [ -148.39085852799991, 60.277411200000117 ], [ -148.393055792999917, 60.26496002800009 ], [ -148.384958462999862, 60.258856512000094 ], [ -148.367543097999885, 60.253892320000048 ], [ -148.364450649999924, 60.242254950000145 ], [ -148.370798305999926, 60.228461005000142 ], [ -148.38154049399995, 60.217230536000145 ], [ -148.398142055999926, 60.209173895 ], [ -148.415231899999952, 60.204413153000118 ], [ -148.430897589999915, 60.197658596000068 ], [ -148.442982550999943, 60.1837425800001 ], [ -148.408680792999888, 60.186102606000063 ], [ -148.37523352799991, 60.192775783000101 ], [ -148.343373175999886, 60.203314520000063 ], [ -148.313832160999937, 60.217230536000145 ], [ -148.258127407999922, 60.251776434000064 ], [ -148.225819464999915, 60.260402736000131 ], [ -148.18976803299995, 60.251410223000121 ], [ -148.18976803299995, 60.24518463700015 ], [ -148.229074673999946, 60.242254950000145 ], [ -148.264841274999867, 60.232163804 ], [ -148.247181769999855, 60.226385809000121 ], [ -148.204090949999909, 60.220160223000065 ], [ -148.18976803299995, 60.211086330000157 ], [ -148.185617641999897, 60.196519273000135 ], [ -148.191354946999866, 60.183417059000149 ], [ -148.210194464999915, 60.155829169000143 ], [ -148.187611456999946, 60.165513414000102 ], [ -148.160145636999914, 60.213080145 ], [ -148.14130611899995, 60.232163804 ], [ -148.132679816999854, 60.234198309000121 ], [ -148.118845180999955, 60.234523830000128 ], [ -148.105946417999917, 60.230861721000096 ], [ -148.100331183999941, 60.220933335 ], [ -148.102528449999909, 60.209133205000015 ], [ -148.108347133999871, 60.201117255000085 ], [ -148.164906378999888, 60.149074611000017 ], [ -148.18883216099988, 60.134751695000134 ], [ -148.216745571999894, 60.12909577000012 ], [ -148.278635219999899, 60.127264716000141 ], [ -148.298573370999861, 60.136460679000137 ], [ -148.285959438999896, 60.162665106000148 ], [ -148.303049282999922, 60.164007880000057 ], [ -148.322987433999913, 60.172593492000075 ], [ -148.333119269999884, 60.170111395000148 ], [ -148.367868618999921, 60.11823151200015 ], [ -148.373036261999914, 60.086737372000059 ], [ -148.387928839999887, 60.058498440000065 ], [ -148.411610480999911, 60.038560288999989 ], [ -148.442982550999943, 60.032294012000037 ], [ -148.442982550999943, 60.025458075000031 ], [ -148.407460089999859, 60.018052476000136 ], [ -148.401966925999943, 60.015529690000122 ], [ -148.403879360999895, 60.007066148 ], [ -148.406931118999893, 60.003241278000147 ], [ -148.407582160999937, 59.999579169000114 ], [ -148.401966925999943, 59.991359768 ], [ -148.435373501999891, 59.959295966000028 ], [ -148.451364712999919, 59.955023505000113 ], [ -148.470936652999882, 59.970892645000148 ], [ -148.49901282499988, 60.013251044000143 ], [ -148.51805579299986, 60.028509833000115 ], [ -148.546009894999884, 60.032294012000037 ], [ -148.534413214999887, 60.013128973000065 ], [ -148.535511847999942, 59.997015692 ], [ -148.546986456999889, 59.984849351000108 ], [ -148.566477016999954, 59.977687893000066 ], [ -148.54784094999988, 59.969631252000127 ], [ -148.561756964999944, 59.95709870000006 ], [ -148.645578579999949, 59.92316315300009 ], [ -148.655873175999886, 59.923041083000115 ], [ -148.66576087099989, 59.931138414000046 ], [ -148.66454016799986, 59.939764716000141 ], [ -148.657460089999915, 59.946966864000089 ], [ -148.649647589999915, 59.950995184000149 ], [ -148.665231899999924, 59.955796617000047 ], [ -148.680287238999938, 59.954738674000097 ], [ -148.695261196999951, 59.951727606000176 ], [ -148.710519985999923, 59.950995184000149 ], [ -148.723011847999942, 59.953843492000019 ], [ -148.745106574999909, 59.962144273000078 ], [ -148.758900519999941, 59.964056708000115 ], [ -148.787831183999913, 59.958563544000114 ], [ -148.844186977999897, 59.937201239000146 ], [ -148.874989386999857, 59.937323309000121 ], [ -148.892323370999947, 59.945990302000112 ], [ -148.926014777999853, 59.971502997000115 ], [ -148.95067298099994, 59.977687893000066 ], [ -149.002023891999954, 59.967271226 ], [ -149.023182745999861, 59.967678127000099 ], [ -149.01899166599992, 59.9845238300001 ], [ -149.074777798999946, 59.96946849199999 ], [ -149.10688229099992, 59.96898021 ], [ -149.12140865799995, 59.991359768 ], [ -149.109486456999889, 60.002752997000172 ], [ -149.054392055999926, 60.037746486000074 ], [ -149.038807745999947, 60.052801825000088 ], [ -149.070139126999891, 60.060939846000011 ], [ -149.103098110999895, 60.058091539000074 ], [ -149.134755011999943, 60.047512111000017 ], [ -149.192738410999937, 60.014105536000145 ], [ -149.200184699999909, 60.008368231000176 ], [ -149.205189581999946, 59.99823639500012 ], [ -149.20641028599988, 59.987616278000175 ], [ -149.208851691999882, 59.977972723 ], [ -149.217600063999896, 59.970892645000148 ], [ -149.218617316999939, 59.955308335000055 ], [ -149.233957485999895, 59.939886786000116 ], [ -149.244496222999942, 59.926092841000028 ], [ -149.231271938999896, 59.915594794000143 ], [ -149.240834113999881, 59.902736721000124 ], [ -149.257883266999954, 59.888251044000171 ], [ -149.275257941999939, 59.877264716000028 ], [ -149.285878058999884, 59.874660549000041 ], [ -149.293080206999889, 59.887640692000119 ], [ -149.290598110999895, 59.924994208000086 ], [ -149.299672003999888, 59.947170315000122 ], [ -149.300404425999915, 59.956366278000118 ], [ -149.299509243999921, 59.974269924000069 ], [ -149.304880337999862, 59.977850653000033 ], [ -149.31611080599987, 59.979437567000062 ], [ -149.326039191999882, 59.984320380000142 ], [ -149.327463344999956, 59.997503973000093 ], [ -149.321400519999855, 60.00104401200015 ], [ -149.298329230999911, 60.006537177 ], [ -149.293324347999942, 60.011786200000088 ], [ -149.30016028599988, 60.023138739000061 ], [ -149.315174933999913, 60.025051174000012 ], [ -149.341135219999899, 60.022406317000119 ], [ -149.354115363999881, 60.090969143000066 ], [ -149.362863735999952, 60.111273505000057 ], [ -149.383656378999945, 60.12238190300009 ], [ -149.408680792999945, 60.123724677000084 ], [ -149.429880337999947, 60.114813544000143 ], [ -149.436227993999864, 60.103216864000117 ], [ -149.442005988999938, 60.083400783000016 ], [ -149.444406704999892, 60.062892971000153 ], [ -149.440744594999927, 60.049709377000013 ], [ -149.423044399999924, 60.022406317000119 ], [ -149.418527798999889, 60.018052476000136 ], [ -149.38890540299991, 59.997503973000093 ], [ -149.41828365799995, 59.991278387000037 ], [ -149.432484503999945, 59.986151434000121 ], [ -149.444162563999953, 59.977687893000066 ], [ -149.448801235999895, 59.96808502800009 ], [ -149.452626105999883, 59.945054429000137 ], [ -149.457834438999896, 59.937323309000121 ], [ -149.472157355999855, 59.931586005000142 ], [ -149.484079555999926, 59.932928778000033 ], [ -149.496449347999942, 59.936468817000119 ], [ -149.512440558999941, 59.937323309000121 ], [ -149.526966925999886, 59.932114976000108 ], [ -149.554636196999866, 59.91347890800013 ], [ -149.563669399999895, 59.909409898 ], [ -149.576852993999921, 59.897609768 ], [ -149.60614986899995, 59.845526434000149 ], [ -149.625070766999897, 59.833685614 ], [ -149.627878383999928, 59.828314520000148 ], [ -149.620350714999859, 59.816595770000063 ], [ -149.608469204999921, 59.804877020000063 ], [ -149.598093227999925, 59.799546617000104 ], [ -149.586171027999882, 59.789374091000141 ], [ -149.580677863999853, 59.786525783000016 ], [ -149.571237758999928, 59.785101630000142 ], [ -149.539743618999921, 59.786525783000016 ], [ -149.546498175999886, 59.774725653000147 ], [ -149.548898891999897, 59.766099351000051 ], [ -149.54832923099994, 59.758978583 ], [ -149.546579555999926, 59.751776434000149 ], [ -149.530100063999953, 59.73826732 ], [ -149.522653774999867, 59.727972723000065 ], [ -149.526722785999937, 59.717596747000172 ], [ -149.537546352999925, 59.716498114000117 ], [ -149.550974087999919, 59.723211981000148 ], [ -149.57323157499988, 59.738104559000121 ], [ -149.588083462999919, 59.742254950000145 ], [ -149.635935024999952, 59.744940497000059 ], [ -149.600534633999956, 59.766302802 ], [ -149.594960089999944, 59.772202867000132 ], [ -149.60187740799995, 59.782700914000102 ], [ -149.618275519999941, 59.784572658000073 ], [ -149.636789516999954, 59.783880927000112 ], [ -149.649606899999895, 59.786525783000016 ], [ -149.644968227999868, 59.801947333000143 ], [ -149.671986456999917, 59.817084052000141 ], [ -149.666696743999921, 59.830552476000136 ], [ -149.660023566999882, 59.840399481000148 ], [ -149.645090298999946, 59.873928127000099 ], [ -149.642160610999923, 59.885484117000104 ], [ -149.65009518099987, 59.912258205000015 ], [ -149.670277472999913, 59.939846096000124 ], [ -149.696970180999926, 59.95978424700003 ], [ -149.724720831999917, 59.964056708000115 ], [ -149.740834113999881, 59.948472398000135 ], [ -149.738596157999893, 59.890855210000083 ], [ -149.748890753999916, 59.864691473000121 ], [ -149.765939907999893, 59.839667059000121 ], [ -149.776966925999943, 59.835353908000016 ], [ -149.799794074999937, 59.841131903000175 ], [ -149.829945441999882, 59.856675523 ], [ -149.846994594999899, 59.858343817 ], [ -149.868112758999928, 59.847967841000084 ], [ -149.855091925999943, 59.843166408000016 ], [ -149.841135219999899, 59.83519114800005 ], [ -149.792551235999923, 59.799750067000062 ], [ -149.769113735999952, 59.786525783000016 ], [ -149.750355597999885, 59.704657294000143 ], [ -149.75263424399995, 59.682847398000106 ], [ -149.746083136999857, 59.667181708000143 ], [ -149.75654049399995, 59.662054755000113 ], [ -149.774362758999928, 59.664862372000172 ], [ -149.789865688999953, 59.67324453300013 ], [ -149.808542446999923, 59.687445380000142 ], [ -149.813954230999855, 59.693019924000154 ], [ -149.806223110999952, 59.710109768 ], [ -149.807240363999938, 59.717596747000172 ], [ -149.821481899999924, 59.725490627000127 ], [ -149.857045050999886, 59.733587958000058 ], [ -149.871815558999884, 59.741522528000033 ], [ -149.911569790999863, 59.773993231000119 ], [ -149.919911261999943, 59.779038804000052 ], [ -149.963002081999889, 59.783351955000157 ], [ -150.018666144999884, 59.798529364000146 ], [ -150.031686977999868, 59.799261786000059 ], [ -150.038563605999883, 59.792547919000029 ], [ -150.040638800999886, 59.77562083500014 ], [ -149.97797604099992, 59.751776434000149 ], [ -149.972727016999926, 59.746405341000113 ], [ -149.960886196999951, 59.72748444200009 ], [ -149.951975063999924, 59.723089911 ], [ -149.927357550999915, 59.721136786000145 ], [ -149.916493292999917, 59.717596747000172 ], [ -149.957468227999954, 59.669826565000122 ], [ -150.002674933999913, 59.64203522300015 ], [ -150.01268469999988, 59.628241278000147 ], [ -150.031198696999894, 59.637111721000096 ], [ -150.042347785999908, 59.649481512000037 ], [ -150.060495571999923, 59.676662502000127 ], [ -150.074655727999925, 59.685532945 ], [ -150.097727016999897, 59.695542710000083 ], [ -150.119252081999917, 59.700344143000066 ], [ -150.128773566999911, 59.693426825000145 ], [ -150.120676235999895, 59.680975653000061 ], [ -150.104685024999867, 59.67210521 ], [ -150.09312903599988, 59.662054755000113 ], [ -150.098378058999941, 59.645575262000037 ], [ -150.106922980999855, 59.62982819200009 ], [ -150.107126430999926, 59.614935614000117 ], [ -150.100209113999938, 59.602728583000058 ], [ -150.087839321999866, 59.594671942000119 ], [ -150.110300258999871, 59.580023505000028 ], [ -150.122670050999915, 59.575018622000144 ], [ -150.135609503999945, 59.572984117000132 ], [ -150.150217251999948, 59.576320705000157 ], [ -150.167469855999855, 59.591376044000171 ], [ -150.17719479099992, 59.594671942000119 ], [ -150.198353644999912, 59.586981512000094 ], [ -150.199452277999853, 59.568833726 ], [ -150.189401821999866, 59.548081773000021 ], [ -150.17719479099992, 59.532049872000115 ], [ -150.236887173999889, 59.533840236000103 ], [ -150.256784633999871, 59.52610911699999 ], [ -150.245472785999908, 59.497870184000121 ], [ -150.279733852999868, 59.496405341000141 ], [ -150.29124915299991, 59.492865302000084 ], [ -150.326242641999897, 59.475978908000073 ], [ -150.347971157999893, 59.469956773 ], [ -150.369862433999913, 59.46946849199999 ], [ -150.389475063999896, 59.477443752000127 ], [ -150.38227291599992, 59.479234117000132 ], [ -150.369862433999913, 59.483872789000074 ], [ -150.361520962999947, 59.484808661000145 ], [ -150.375843878999945, 59.495184637000037 ], [ -150.383249477999925, 59.497870184000121 ], [ -150.369821743999921, 59.502020575000145 ], [ -150.35570227799991, 59.504461981000091 ], [ -150.343332485999952, 59.508856512000179 ], [ -150.334828253999916, 59.518377997000172 ], [ -150.349924282999922, 59.518744208 ], [ -150.357492641999897, 59.52570221600017 ], [ -150.358876105999855, 59.535874742000132 ], [ -150.355336066999882, 59.546291408000016 ], [ -150.344797329999921, 59.55556875200007 ], [ -150.315297003999945, 59.563910223000121 ], [ -150.303456183999884, 59.569891669000143 ], [ -150.294667120999918, 59.58234284100017 ], [ -150.294667120999918, 59.592108466000113 ], [ -150.295847133999928, 59.601060289000046 ], [ -150.290476040999891, 59.611151434000092 ], [ -150.270090298999889, 59.626898505000057 ], [ -150.266346808999856, 59.635931708000058 ], [ -150.273386196999923, 59.649359442000062 ], [ -150.250721808999884, 59.667710679000109 ], [ -150.229074673999889, 59.695502020000092 ], [ -150.22435462099989, 59.715399481000176 ], [ -150.252268032999922, 59.710150458 ], [ -150.278797980999911, 59.692084052000084 ], [ -150.354359503999888, 59.602280992000047 ], [ -150.379587368999864, 59.587551174000069 ], [ -150.393177863999938, 59.576727606000148 ], [ -150.424265102999925, 59.532049872000115 ], [ -150.465199347999942, 59.494452216000113 ], [ -150.469309048999889, 59.478176174000069 ], [ -150.479481574999937, 59.467352606000176 ], [ -150.492746548999889, 59.465765692000147 ], [ -150.506174282999893, 59.477443752000127 ], [ -150.501576300999943, 59.494289455000128 ], [ -150.541940883999899, 59.515285549000097 ], [ -150.553334113999881, 59.535711981000148 ], [ -150.545114712999947, 59.550441799000154 ], [ -150.505848761999943, 59.581854559000178 ], [ -150.49250240799995, 59.600897528000175 ], [ -150.530100063999924, 59.601874091000141 ], [ -150.616688605999911, 59.564398505000113 ], [ -150.656971808999856, 59.552476304 ], [ -150.656971808999856, 59.546291408000016 ], [ -150.637440558999913, 59.541205145000092 ], [ -150.614328579999949, 59.528753973000065 ], [ -150.593576626999948, 59.513006903000118 ], [ -150.581247524999895, 59.497870184000121 ], [ -150.580515102999954, 59.481919664000102 ], [ -150.593576626999948, 59.474107164000102 ], [ -150.636463995999918, 59.463120835000055 ], [ -150.636463995999918, 59.456976630000085 ], [ -150.614369269999941, 59.450425523000021 ], [ -150.604725714999859, 59.445013739000146 ], [ -150.609323696999894, 59.438666083000115 ], [ -150.629709438999896, 59.429632880000113 ], [ -150.653065558999884, 59.423895575000031 ], [ -150.728627081999889, 59.422186591000028 ], [ -150.733957485999952, 59.414780992000047 ], [ -150.742624477999925, 59.3985863300001 ], [ -150.754628058999856, 59.382391669000143 ], [ -150.769968227999925, 59.374945380000057 ], [ -150.788278774999867, 59.371486721000068 ], [ -150.84906979099992, 59.34369538 ], [ -150.856271938999953, 59.339260158000044 ], [ -150.863880988999881, 59.335516669000086 ], [ -150.917673305999926, 59.326564846000068 ], [ -150.917307094999927, 59.317084052000055 ], [ -150.908762173999889, 59.302639065 ], [ -150.886341925999886, 59.275051174000097 ], [ -150.89195716099988, 59.257513739000146 ], [ -150.93110104099992, 59.248236395000092 ], [ -150.965891079999892, 59.234442450000174 ], [ -150.958607550999886, 59.203680731000091 ], [ -150.996571417999888, 59.226548570000105 ], [ -151.011545376999919, 59.241644598000036 ], [ -151.00951087099989, 59.255194403000175 ], [ -150.996408657999922, 59.268133856000176 ], [ -150.998036261999943, 59.272650458000143 ], [ -151.008168097999885, 59.274400132000139 ], [ -151.020090298999946, 59.278753973000121 ], [ -151.034982876999891, 59.292466539000046 ], [ -151.042551235999952, 59.297186591000141 ], [ -151.05418860599994, 59.299261786000088 ], [ -151.065988735999895, 59.295884507000054 ], [ -151.078358527999853, 59.28925202 ], [ -151.092477993999893, 59.285101630000057 ], [ -151.121693488999938, 59.29393138200011 ], [ -151.176625128999916, 59.301011460000083 ], [ -151.228708462999947, 59.316351630000113 ], [ -151.243478969999956, 59.318426825000145 ], [ -151.258046027999853, 59.317694403000118 ], [ -151.273304816999939, 59.312933661000116 ], [ -151.257639126999862, 59.298407294000171 ], [ -151.235910610999895, 59.296535549000012 ], [ -151.213124152999853, 59.296942450000117 ], [ -151.194528774999867, 59.28937409100017 ], [ -151.180978969999899, 59.279364325000088 ], [ -151.129953579999892, 59.258286851000079 ], [ -151.109201626999919, 59.253363348 ], [ -151.09935462099989, 59.248968817000119 ], [ -151.095163540999863, 59.241278387000094 ], [ -151.097238735999895, 59.232611395 ], [ -151.102731899999924, 59.22467682500006 ], [ -151.110340949999852, 59.218939520000063 ], [ -151.146311001999919, 59.209540106000063 ], [ -151.161610480999883, 59.207709052000084 ], [ -151.182606574999909, 59.217433986000017 ], [ -151.211862758999956, 59.22329336100016 ], [ -151.222116665999891, 59.224188544000143 ], [ -151.274606899999924, 59.221625067000147 ], [ -151.29442298099994, 59.224188544000143 ], [ -151.349191860999895, 59.24209219 ], [ -151.372914191999882, 59.246527411000088 ], [ -151.389108852999925, 59.25531647300015 ], [ -151.396839972999942, 59.258286851000079 ], [ -151.409616665999891, 59.260077216000141 ], [ -151.417836066999882, 59.259100653000175 ], [ -151.501291469999899, 59.234686591000028 ], [ -151.51976477799991, 59.224188544000143 ], [ -151.50804602799991, 59.221177476000051 ], [ -151.48570716099988, 59.21954987200003 ], [ -151.472604946999923, 59.216701565000093 ], [ -151.489084438999896, 59.199652411000116 ], [ -151.516713019999912, 59.196763414000102 ], [ -151.575306769999941, 59.203680731000091 ], [ -151.601267055999926, 59.201727606000148 ], [ -151.613962368999921, 59.19749583500014 ], [ -151.615956183999941, 59.189398505000028 ], [ -151.60383053299995, 59.182033596000011 ], [ -151.576283331999917, 59.18821849199999 ], [ -151.568104620999918, 59.175767320000077 ], [ -151.682810024999867, 59.163031317 ], [ -151.741525844999899, 59.167141018000152 ], [ -151.766794399999924, 59.193101304000052 ], [ -151.760365363999938, 59.209702867000104 ], [ -151.758615688999924, 59.219712632 ], [ -151.763376430999926, 59.224188544000143 ], [ -151.840280727999925, 59.213446356000034 ], [ -151.867909308999913, 59.213690497000087 ], [ -151.893137173999889, 59.220648505000085 ], [ -151.91075598899991, 59.237860419000086 ], [ -151.894846157999893, 59.238104559000035 ], [ -151.886667446999894, 59.241603908000044 ], [ -151.887155727999868, 59.248358466000141 ], [ -151.897084113999881, 59.258286851000079 ], [ -151.90648352799991, 59.261460679000137 ], [ -151.944935675999886, 59.265082098000093 ], [ -151.961781378999888, 59.270656643 ], [ -151.977162238999938, 59.279364325000088 ], [ -151.986683722999942, 59.292792059000178 ], [ -151.98582923099994, 59.312933661000116 ], [ -151.976429816999911, 59.325425523000135 ], [ -151.959462042999945, 59.337347723000065 ], [ -151.925038214999915, 59.353908596000124 ], [ -151.896595831999889, 59.35956452000012 ], [ -151.815174933999913, 59.353908596000124 ], [ -151.835397915999948, 59.367580471000068 ], [ -151.881296352999925, 59.385321356000148 ], [ -151.900217251999948, 59.398871161000116 ], [ -151.894032355999883, 59.412827867000104 ], [ -151.864206508999871, 59.426906643000123 ], [ -151.807728644999884, 59.443833726000108 ], [ -151.74828040299991, 59.445624091000113 ], [ -151.718251105999855, 59.450873114 ], [ -151.705311652999853, 59.466864325000088 ], [ -151.689076300999915, 59.480292059000178 ], [ -151.651844855999911, 59.485907294000086 ], [ -151.46821041599992, 59.478094794000086 ], [ -151.441517706999889, 59.466864325000088 ], [ -151.423166469999956, 59.453924872000087 ], [ -151.400624152999882, 59.445135809000121 ], [ -151.382191535999937, 59.444769598 ], [ -151.37633216099988, 59.456976630000085 ], [ -151.390004035999937, 59.473781643000095 ], [ -151.440419074999852, 59.493638414000102 ], [ -151.451486782999893, 59.508124091000141 ], [ -151.441477016999897, 59.532212632000082 ], [ -151.417469855999883, 59.546291408000016 ], [ -151.36274166599992, 59.55996328300013 ], [ -151.34125729099992, 59.56118398600016 ], [ -151.291696743999864, 59.55609772300015 ], [ -151.273304816999939, 59.55996328300013 ], [ -151.26630611899995, 59.571193752000156 ], [ -151.265207485999895, 59.584662177000141 ], [ -151.258859829999892, 59.596136786000088 ], [ -151.236073370999947, 59.600897528000175 ], [ -151.19477291599992, 59.597601630000142 ], [ -151.174143032999893, 59.600083726000079 ], [ -151.174020962999919, 59.611151434000092 ], [ -151.200266079999949, 59.631781317000119 ], [ -151.20136471299989, 59.641180731000148 ], [ -151.18455969999988, 59.655503648000135 ], [ -151.170969204999921, 59.661810614000089 ], [ -151.141794399999867, 59.670355536 ], [ -151.129953579999892, 59.676662502000127 ], [ -151.120432094999899, 59.687160549000012 ], [ -151.107411261999914, 59.710679429000081 ], [ -151.098947719999899, 59.720689195000048 ], [ -151.075144008999899, 59.737697658000016 ], [ -150.992787238999881, 59.779038804000052 ], [ -151.023508266999954, 59.795558986000046 ], [ -151.066273566999939, 59.79677969000015 ], [ -151.109120245999918, 59.786525783000016 ], [ -151.154489712999919, 59.759955145000063 ], [ -151.212513800999886, 59.744940497000059 ], [ -151.381337042999917, 59.674953518000123 ], [ -151.417307094999899, 59.669826565000122 ], [ -151.430978969999956, 59.666205145000063 ], [ -151.44953365799995, 59.657416083 ], [ -151.465769008999899, 59.646307684000149 ], [ -151.472604946999923, 59.635687567000119 ], [ -151.464670376999948, 59.62592194200009 ], [ -151.446359829999892, 59.618150132 ], [ -151.430368618999893, 59.612494208 ], [ -151.425729946999951, 59.61151764500012 ], [ -151.410511847999885, 59.607733466000084 ], [ -151.430653449999909, 59.611802476000051 ], [ -151.746937628999945, 59.682847398000106 ], [ -151.780832485999895, 59.692206122000144 ], [ -151.831369594999899, 59.716213283000101 ], [ -151.871774868999921, 59.749457098 ], [ -151.882883266999954, 59.786525783000016 ], [ -151.877064581999917, 59.79677969000015 ], [ -151.848703579999892, 59.820013739000061 ], [ -151.841867641999954, 59.83128489800005 ], [ -151.83141028599988, 59.855454820000077 ], [ -151.739125128999945, 59.988226630000142 ], [ -151.733265753999888, 60.008368231000176 ], [ -151.724964972999913, 60.024888414000046 ], [ -151.706044074999909, 60.041693427000055 ], [ -151.465443488999881, 60.187689520000092 ], [ -151.429636196999951, 60.216376044000057 ], [ -151.403269008999956, 60.252427476 ], [ -151.390614386999886, 60.299790757000139 ], [ -151.393177863999881, 60.344427802000027 ], [ -151.390248175999886, 60.359442450000031 ], [ -151.376047329999949, 60.371812242000075 ], [ -151.362009243999921, 60.377752997000087 ], [ -151.348500128999945, 60.380926825000145 ], [ -151.317982550999886, 60.382391669000029 ], [ -151.305978969999899, 60.386948960000055 ], [ -151.301869269999941, 60.398016669000114 ], [ -151.300648566999911, 60.423325914000046 ], [ -151.282948370999918, 60.487860419000114 ], [ -151.280751105999911, 60.508978583000115 ], [ -151.282785610999952, 60.537054755000113 ], [ -151.289499477999897, 60.550767320000048 ], [ -151.321766730999911, 60.574164130000142 ], [ -151.333851691999939, 60.592189846000068 ], [ -151.35496985599994, 60.639634507 ], [ -151.377797003999945, 60.658270575000174 ], [ -151.39586341099988, 60.678941148 ], [ -151.411732550999886, 60.702093817000119 ], [ -151.417307094999899, 60.718166408000016 ], [ -151.396921352999925, 60.738023179000109 ], [ -151.323801235999952, 60.739081122000172 ], [ -151.297556118999921, 60.748602606000148 ], [ -151.276071743999893, 60.767279364000146 ], [ -151.253000454999949, 60.775336005000085 ], [ -151.071481899999924, 60.785345770000063 ], [ -151.043690558999884, 60.796332098000121 ], [ -151.02607174399995, 60.810044664000046 ], [ -150.763254360999895, 60.926703192000147 ], [ -150.603260870999918, 60.978501695000077 ], [ -150.45250403599988, 61.03424713700015 ], [ -150.38703365799995, 61.047267971000153 ], [ -150.334828253999916, 61.032863674000097 ], [ -150.322214321999923, 61.014593817000033 ], [ -150.310007290999863, 60.989447333000115 ], [ -150.293894008999899, 60.967271226000079 ], [ -150.258493618999893, 60.954575914000102 ], [ -150.236520962999862, 60.940415757000082 ], [ -150.225290493999864, 60.937241929000109 ], [ -150.043771938999896, 60.916815497000059 ], [ -149.977853969999927, 60.938788153000147 ], [ -149.930775519999941, 60.944728908000073 ], [ -149.850168423999889, 60.973863023000135 ], [ -149.824045376999948, 60.978216864000117 ], [ -149.752919074999909, 60.973822333000143 ], [ -149.71703040299991, 60.967515367000104 ], [ -149.68309485599994, 60.957709052000084 ], [ -149.638661261999914, 60.939642645000063 ], [ -149.621693488999881, 60.937241929000109 ], [ -149.526112433999884, 60.937241929000109 ], [ -149.507069464999887, 60.934027411000059 ], [ -149.467274542999917, 60.919907945000134 ], [ -149.126088019999855, 60.88361237200003 ], [ -149.103586391999954, 60.878078518 ], [ -149.090687628999945, 60.872056382 ], [ -149.078114386999857, 60.863755601000108 ], [ -149.059030727999868, 60.856350002000127 ], [ -149.039621548999889, 60.852443752000127 ], [ -149.025827602999954, 60.854681708000115 ], [ -149.06086178299995, 60.897284247000144 ], [ -149.111643032999893, 60.928615627000013 ], [ -149.16930091099988, 60.946966864000061 ], [ -149.225046352999954, 60.950873114000061 ], [ -149.334055141999926, 60.930324611000017 ], [ -149.357899542999917, 60.933823960000026 ], [ -149.378041144999941, 60.946966864000061 ], [ -149.483713344999899, 60.982407945000077 ], [ -149.516346808999941, 60.988592841000028 ], [ -149.617990688999896, 60.994614976000136 ], [ -149.783151821999894, 61.045355536 ], [ -149.829172329999949, 61.073431708 ], [ -149.909047003999859, 61.094305731000148 ], [ -150.067331508999928, 61.155747789000046 ], [ -150.057362433999913, 61.172308661000116 ], [ -150.038197394999884, 61.193060614000032 ], [ -150.015614386999914, 61.206366278000033 ], [ -149.995310024999895, 61.200751044000029 ], [ -149.97594153599988, 61.19847239800005 ], [ -149.944813605999883, 61.207709052000112 ], [ -149.914133266999897, 61.22134023600016 ], [ -149.895985480999883, 61.232082424000069 ], [ -149.889963344999899, 61.240423895000148 ], [ -149.875559048999889, 61.273098049000097 ], [ -149.868885870999947, 61.28253815300009 ], [ -149.810658331999946, 61.33136627800009 ], [ -149.796742316999939, 61.339016018000123 ], [ -149.781686977999925, 61.340725002000127 ], [ -149.766590949999909, 61.340236721000153 ], [ -149.75263424399995, 61.341294664000102 ], [ -149.730580206999861, 61.351874091000141 ], [ -149.704213019999884, 61.384222723000065 ], [ -149.683420376999891, 61.399359442000062 ], [ -149.655710415999891, 61.40900299700003 ], [ -149.32001705599987, 61.479152736000103 ], [ -149.279530402999939, 61.481634833000115 ], [ -149.261057094999899, 61.48663971600017 ], [ -149.24555416599992, 61.498968817000119 ], [ -149.278553839999859, 61.506537177000055 ], [ -149.416859503999888, 61.498968817000119 ], [ -149.403187628999945, 61.505804755000142 ], [ -149.428171352999925, 61.513169664000131 ], [ -149.64867102799991, 61.48818594 ], [ -149.757394985999952, 61.453355210000083 ], [ -149.795602993999921, 61.424505927000055 ], [ -149.814645962999919, 61.414211330000128 ], [ -149.861887173999889, 61.395941473000065 ], [ -149.879709438999953, 61.38613515800013 ], [ -149.897409633999928, 61.371283270000063 ], [ -149.911000128999888, 61.352687893000066 ], [ -149.919748501999891, 61.310370184000149 ], [ -149.927845831999889, 61.28929271000014 ], [ -149.938913540999948, 61.271226304000109 ], [ -149.95063229099992, 61.259426174000154 ], [ -149.98375403599988, 61.24632396 ], [ -150.280506964999915, 61.25995514500012 ], [ -150.293894008999899, 61.265611070000105 ], [ -150.30565344999988, 61.275213934000092 ], [ -150.309763149999924, 61.281439520000063 ], [ -150.314401821999951, 61.281642971000011 ], [ -150.327992316999911, 61.273098049000097 ], [ -150.32469641799986, 61.272162177000027 ], [ -150.323190883999928, 61.266262111000074 ], [ -150.324086066999911, 61.258693752000042 ], [ -150.327992316999911, 61.252590236000131 ], [ -150.334584113999881, 61.250921942000119 ], [ -150.450550910999937, 61.252590236000131 ], [ -150.499623175999886, 61.261664130000142 ], [ -150.541737433999941, 61.286566473000065 ], [ -150.560658331999861, 61.323675848000093 ], [ -150.540272589999887, 61.369289455000128 ], [ -150.563099738999881, 61.36542389500012 ], [ -150.587106899999924, 61.351996161000116 ], [ -150.600534633999928, 61.332424221000153 ], [ -150.584950324999937, 61.294623114 ], [ -150.604237433999884, 61.29132721600017 ], [ -150.633615688999896, 61.298651434000178 ], [ -150.656971808999856, 61.314032294000114 ], [ -150.691273566999939, 61.277533270000063 ], [ -150.730905727999954, 61.253973700000117 ], [ -150.891550258999871, 61.214300848 ], [ -150.947743292999888, 61.211004950000145 ], [ -150.957590298999889, 61.20791250200007 ], [ -150.975290493999921, 61.194240627000127 ], [ -150.989084438999896, 61.191107489000061 ], [ -151.001535610999923, 61.190008856000119 ], [ -151.028553839999887, 61.182562567000147 ], [ -151.039906378999945, 61.177435614000117 ], [ -151.060902472999885, 61.163275458 ], [ -151.128163214999915, 61.094183661 ], [ -151.140370245999918, 61.078192450000088 ], [ -151.15477454299986, 61.064439195 ], [ -151.17711341099988, 61.053941148000106 ], [ -151.243641730999911, 61.03925202 ], [ -151.31086178299995, 61.032863674000097 ], [ -151.32359778599988, 61.029689846000039 ], [ -151.349558071999894, 61.01557038 ], [ -151.362375454999921, 61.012355861000131 ], [ -151.437814907999865, 61.019842841000084 ], [ -151.476144985999895, 61.01703522300015 ], [ -151.52245032499988, 61.008612372000087 ], [ -151.566761847999942, 60.994533596000153 ], [ -151.612782355999883, 60.965277411000116 ], [ -151.646229620999918, 60.950995184000035 ], [ -151.681223110999952, 60.928656317 ], [ -151.725046352999897, 60.924465236000074 ], [ -151.746937628999945, 60.916815497000059 ], [ -151.752145962999919, 60.898138739000061 ], [ -151.795277472999942, 60.868963934000121 ], [ -151.807728644999884, 60.84788646 ], [ -151.806263800999886, 60.837469794000114 ], [ -151.80101477799991, 60.82831452000012 ], [ -151.71776282499988, 60.743068752000156 ], [ -151.711374477999954, 60.725734768000066 ], [ -151.746286587999862, 60.718166408000016 ], [ -151.779733852999925, 60.72406647300015 ], [ -151.840687628999945, 60.751125393000095 ], [ -151.869821743999893, 60.759100653000033 ], [ -151.867746548999889, 60.75462474199999 ], [ -151.864369269999941, 60.743312893000095 ], [ -151.862375454999892, 60.738674221000068 ], [ -151.910104946999866, 60.731105861000017 ], [ -151.931507941999911, 60.725287177000055 ], [ -151.96430416599992, 60.703436591000028 ], [ -152.013050910999937, 60.680731512000179 ], [ -152.031198696999923, 60.67658112200003 ], [ -152.044545050999943, 60.675726630000142 ], [ -152.051380988999881, 60.673163153000033 ], [ -152.061594204999892, 60.662909247000087 ], [ -152.062733527999939, 60.66046784100017 ], [ -152.101307745999918, 60.613836981000148 ], [ -152.109364386999943, 60.608303127000127 ], [ -152.120961066999882, 60.603583075000031 ], [ -152.143137173999946, 60.597560940000122 ], [ -152.171254035999937, 60.580877997000087 ], [ -152.23289954299986, 60.559881903000061 ], [ -152.23290106700415, 60.559880906006711 ], [ -152.315500454999949, 60.505845445000048 ], [ -152.329579230999911, 60.492499091000056 ], [ -152.340077277999853, 60.476141669000029 ], [ -152.343373175999886, 60.457424221000153 ], [ -152.335926886999914, 60.436957098000093 ], [ -152.317575649999867, 60.420558986000074 ], [ -152.294504360999895, 60.412787177 ], [ -152.245920376999948, 60.402167059000035 ], [ -152.245920376999948, 60.395982163999989 ], [ -152.368112758999871, 60.357855536 ], [ -152.397409633999899, 60.333929755000142 ], [ -152.400380011999914, 60.326808986000074 ], [ -152.403920050999886, 60.309800523000106 ], [ -152.40766354099992, 60.303208726000051 ], [ -152.415964321999894, 60.297756252000013 ], [ -152.467762824999909, 60.282294012000179 ], [ -152.512644008999928, 60.274603583000058 ], [ -152.53453528599988, 60.265692450000031 ], [ -152.596302863999881, 60.228461005000142 ], [ -152.616159633999956, 60.224269924000012 ], [ -152.633981899999924, 60.229885158000016 ], [ -152.651844855999911, 60.238959052000112 ], [ -152.671742316999911, 60.24518463700015 ], [ -152.805531378999945, 60.235093492000104 ], [ -152.84984290299991, 60.24518463700015 ], [ -152.840891079999949, 60.256048895000063 ], [ -152.824940558999941, 60.256577867000132 ], [ -152.806019660999937, 60.25299713700015 ], [ -152.787831183999941, 60.251410223000121 ], [ -152.787831183999941, 60.258856512000094 ], [ -152.83954830599987, 60.268377997000115 ], [ -152.863596157999893, 60.26581452 ], [ -152.890817837999919, 60.251410223000121 ], [ -152.898548956999917, 60.275376695 ], [ -152.89781653599988, 60.295152085000112 ], [ -152.905588344999899, 60.308539130000113 ], [ -152.938588019999941, 60.313462632000082 ], [ -153.012196417999917, 60.313462632000082 ], [ -153.048451300999943, 60.30963776200015 ], [ -153.08263098899991, 60.299790757000139 ], [ -153.105458136999914, 60.285589911000116 ], [ -153.103627081999946, 60.277085679 ], [ -153.086984829999892, 60.277329820000134 ], [ -153.065256313999953, 60.289536851000108 ], [ -153.037953253999945, 60.299383856000034 ], [ -152.996896938999953, 60.300848700000088 ], [ -152.956613735999895, 60.293890692 ], [ -152.931833462999919, 60.278713283000016 ], [ -152.929758266999897, 60.270249742000075 ], [ -152.933461066999939, 60.253119208000143 ], [ -152.931833462999919, 60.24518463700015 ], [ -152.922718878999916, 60.237209377000013 ], [ -152.897409633999871, 60.227362372000087 ], [ -152.862660285999937, 60.207709052000141 ], [ -152.76732337099989, 60.190619208 ], [ -152.742868618999921, 60.17470937700007 ], [ -152.732533331999946, 60.170111395000148 ], [ -152.724313930999926, 60.169338283000044 ], [ -152.706532355999855, 60.17121002800009 ], [ -152.698435024999924, 60.170111395000148 ], [ -152.683054165999891, 60.162827867000132 ], [ -152.676625128999888, 60.157945054000052 ], [ -152.681630011999914, 60.155829169000143 ], [ -152.686268683999941, 60.151597398000135 ], [ -152.684437628999888, 60.142482815000122 ], [ -152.677805141999897, 60.133368231000148 ], [ -152.667958136999886, 60.12909577000012 ], [ -152.657907680999926, 60.126369533000073 ], [ -152.590280727999954, 60.092230536000059 ], [ -152.578561977999868, 60.081203518000123 ], [ -152.57860266799986, 60.070135809000178 ], [ -152.597971157999893, 60.042669989000146 ], [ -152.610951300999886, 60.0333519550001 ], [ -152.630116339999915, 60.032294012000037 ], [ -152.630116339999915, 60.025458075000031 ], [ -152.626332160999908, 60.024155992000132 ], [ -152.617136196999923, 60.019273179000052 ], [ -152.664784308999913, 59.994696356000034 ], [ -152.677927212999862, 59.9845238300001 ], [ -152.69013424399995, 59.966986395000148 ], [ -152.704579230999911, 59.930650132000054 ], [ -152.718861456999889, 59.915594794000143 ], [ -152.737904425999886, 59.908392645000035 ], [ -152.808298305999898, 59.896307684000121 ], [ -152.831166144999912, 59.887396552000084 ], [ -152.842884894999884, 59.884222723 ], [ -152.856678839999915, 59.882066148000106 ], [ -152.905466274999924, 59.886216539000046 ], [ -152.914418097999942, 59.885484117000104 ], [ -152.934803839999915, 59.879624742000075 ], [ -153.021188930999926, 59.888902085000112 ], [ -153.046009894999884, 59.886664130000142 ], [ -153.091908331999889, 59.876898505 ], [ -153.229725714999859, 59.868475653000147 ], [ -153.243356899999924, 59.862453518000152 ], [ -153.262033657999893, 59.848456122000087 ], [ -153.279164191999939, 59.832342841000113 ], [ -153.28807532499988, 59.820013739000061 ], [ -153.256540493999864, 59.82123444200009 ], [ -153.226429816999939, 59.828680731000148 ], [ -153.196400519999884, 59.832709052000112 ], [ -153.150827602999925, 59.819647528000147 ], [ -153.13768469999988, 59.821478583000115 ], [ -153.125233527999853, 59.82526276200015 ], [ -153.059274868999921, 59.833644924000012 ], [ -153.013864712999919, 59.832342841000113 ], [ -153.005686001999919, 59.827053127000127 ], [ -153.000070766999926, 59.813177802000055 ], [ -153.000070766999926, 59.800360419000114 ], [ -153.005238410999937, 59.792710679 ], [ -153.011341925999915, 59.785956122000144 ], [ -153.01923580599987, 59.762844143 ], [ -153.044422980999855, 59.722357489000061 ], [ -153.055287238999938, 59.710150458 ], [ -153.079294399999895, 59.70136139500012 ], [ -153.139475063999953, 59.686916408000073 ], [ -153.151560024999952, 59.67324453300013 ], [ -153.166249152999853, 59.664007880000085 ], [ -153.199818488999881, 59.654201565000122 ], [ -153.236643032999893, 59.647894598 ], [ -153.260812954999892, 59.649359442000062 ], [ -153.267689581999889, 59.656683661000059 ], [ -153.278309699999909, 59.676906643000095 ], [ -153.28807532499988, 59.682847398000106 ], [ -153.307443813999896, 59.681830145000148 ], [ -153.315988735999895, 59.67206452 ], [ -153.314808722999885, 59.660874742000019 ], [ -153.305124477999925, 59.655503648000135 ], [ -153.301014777999882, 59.652411200000145 ], [ -153.306467251999919, 59.645575262000037 ], [ -153.317209438999924, 59.6388207050001 ], [ -153.329050258999871, 59.635687567000119 ], [ -153.34601803299995, 59.636908270000148 ], [ -153.391102667999917, 59.649359442000062 ], [ -153.399118618999864, 59.650458075000117 ], [ -153.42524166599992, 59.649359442000062 ], [ -153.42524166599992, 59.655503648000135 ], [ -153.409128383999956, 59.663560288999989 ], [ -153.399037238999881, 59.67210521 ], [ -153.358957485999866, 59.720770575000031 ], [ -153.345407680999898, 59.725531317000119 ], [ -153.322214321999866, 59.717596747000172 ], [ -153.336374477999897, 59.730536200000174 ], [ -153.381459113999881, 59.741400458000058 ], [ -153.45258541599992, 59.792669989 ], [ -153.451527472999942, 59.775458075000174 ], [ -153.45445716099988, 59.761542059000092 ], [ -153.453928188999896, 59.746893622000087 ], [ -153.442616339999915, 59.72748444200009 ], [ -153.445423956999946, 59.716782945000048 ], [ -153.465443488999938, 59.674627997000115 ], [ -153.473011847999885, 59.662339585000055 ], [ -153.49071204299986, 59.650091864 ], [ -153.513172980999883, 59.641791083000115 ], [ -153.537098761999943, 59.637152411000088 ], [ -153.559030727999954, 59.635687567000119 ], [ -153.57323157499988, 59.642157294000029 ], [ -153.598622199999909, 59.672756252000127 ], [ -153.610829230999883, 59.682847398000106 ], [ -153.604115363999938, 59.68740469000015 ], [ -153.601185675999915, 59.688788153000033 ], [ -153.596547003999888, 59.689683335000112 ], [ -153.596547003999888, 59.697170315 ], [ -153.622670050999943, 59.69521719000015 ], [ -153.62596594999988, 59.684759833000058 ], [ -153.621449347999913, 59.670111395000063 ], [ -153.623890753999945, 59.655503648000135 ], [ -153.642933722999942, 59.64834219 ], [ -153.69562740799995, 59.644680080000128 ], [ -153.70641028599988, 59.631984768000095 ], [ -153.620432094999956, 59.628241278000147 ], [ -153.612172003999888, 59.626695054000109 ], [ -153.570383266999954, 59.609116929000081 ], [ -153.566029425999943, 59.609279690000122 ], [ -153.569284633999899, 59.594671942000119 ], [ -153.586415167999917, 59.567450262000122 ], [ -153.621937628999888, 59.555243231000034 ], [ -153.791818813999896, 59.54291413 ], [ -153.811879035999851, 59.556138414000131 ], [ -153.833607550999915, 59.559637762000122 ], [ -153.855783657999893, 59.555609442000062 ], [ -153.877145962999947, 59.546291408000016 ], [ -153.839914516999954, 59.54437897300015 ], [ -153.811512824999937, 59.538275458000058 ], [ -153.786936001999919, 59.527533270000148 ], [ -153.741078253999945, 59.497748114000146 ], [ -153.725778774999867, 59.482245184000035 ], [ -153.724720831999917, 59.466050523 ], [ -153.747385219999899, 59.45010000200007 ], [ -153.751454230999911, 59.440252997000144 ], [ -153.780222133999871, 59.433986721000011 ], [ -153.843576626999919, 59.429632880000113 ], [ -153.896595831999946, 59.432196356000119 ], [ -153.912464972999885, 59.429632880000113 ], [ -153.921498175999886, 59.424261786000059 ], [ -153.93573971299989, 59.40839264500012 ], [ -153.945993618999921, 59.402289130000142 ], [ -154.027943488999938, 59.388617255 ], [ -154.035104946999894, 59.389349677000141 ], [ -154.047556118999921, 59.3946800800001 ], [ -154.055856899999895, 59.395453192000119 ], [ -154.060780402999939, 59.393255927000112 ], [ -154.071522589999859, 59.383937893000095 ], [ -154.076364712999919, 59.381170966000028 ], [ -154.094715949999909, 59.378851630000057 ], [ -154.145253058999913, 59.381170966000028 ], [ -154.111643032999893, 59.360052802000112 ], [ -154.066232876999891, 59.348334052000112 ], [ -154.022653774999867, 59.35146719 ], [ -153.994455532999893, 59.374945380000057 ], [ -153.984852667999917, 59.370550848000093 ], [ -153.974680141999897, 59.368109442000147 ], [ -153.964182094999899, 59.367254950000145 ], [ -153.953439907999893, 59.368150132000139 ], [ -153.953439907999893, 59.361314195000105 ], [ -154.027211066999911, 59.341701565000065 ], [ -154.11192786399991, 59.304877020000092 ], [ -154.127756313999953, 59.29417552300005 ], [ -154.140207485999866, 59.281683661000145 ], [ -154.145253058999913, 59.26821523600016 ], [ -154.149891730999911, 59.235337632000082 ], [ -154.144357876999891, 59.224066473000093 ], [ -154.123524542999917, 59.224188544000143 ], [ -154.130848761999914, 59.208156643000066 ], [ -154.146311001999948, 59.202541408000158 ], [ -154.186227993999921, 59.203680731000091 ], [ -154.17943274599989, 59.183539130000057 ], [ -154.19749915299991, 59.173163153000147 ], [ -154.225290493999864, 59.169378973000121 ], [ -154.247670050999886, 59.168890692000147 ], [ -154.228464321999923, 59.162665106000091 ], [ -154.220326300999943, 59.161444403000175 ], [ -154.229481574999909, 59.155707098 ], [ -154.239491339999887, 59.15159739800005 ], [ -154.250111456999946, 59.149237372000087 ], [ -154.261301235999952, 59.14842357 ], [ -154.252878383999899, 59.130519924000126 ], [ -154.235056118999921, 59.127590236000017 ], [ -154.193063930999926, 59.134751695000048 ], [ -154.177316860999895, 59.129787502000013 ], [ -154.171945766999926, 59.118597723000093 ], [ -154.176991339999944, 59.107123114000146 ], [ -154.192453579999892, 59.101263739 ], [ -154.182932094999899, 59.095526434000035 ], [ -154.178781704999949, 59.093817450000031 ], [ -154.178781704999949, 59.086981512000094 ], [ -154.198353644999912, 59.07697174700003 ], [ -154.199818488999881, 59.055853583000115 ], [ -154.187326626999862, 59.034979559000035 ], [ -154.165109829999892, 59.02558014500012 ], [ -154.140370245999918, 59.031154690000122 ], [ -154.121083136999914, 59.044378973000065 ], [ -154.103220180999926, 59.060248114 ], [ -154.082590298999889, 59.07330963700015 ], [ -154.021962042999917, 59.083929755000113 ], [ -153.894764777999853, 59.065619208000058 ], [ -153.836130337999919, 59.066555080000128 ], [ -153.81586666599992, 59.072455145000063 ], [ -153.808094855999911, 59.073797919000143 ], [ -153.711537238999881, 59.070746161000059 ], [ -153.688791469999927, 59.063666083 ], [ -153.668690558999884, 59.052679755000142 ], [ -153.651804165999891, 59.038560289000102 ], [ -153.632883266999897, 59.017320054000137 ], [ -153.623890753999945, 59.011297919000029 ], [ -153.583078579999892, 59.000555731000119 ], [ -153.572702602999897, 58.994818427000141 ], [ -153.560902472999942, 58.990708726 ], [ -153.541574673999889, 58.989406643000095 ], [ -153.522328253999859, 58.990708726 ], [ -153.510609503999888, 58.994818427000141 ], [ -153.497425910999937, 59.003485419000029 ], [ -153.487172003999888, 59.002508856000148 ], [ -153.466867641999897, 58.991400458000115 ], [ -153.427235480999855, 58.98118724199999 ], [ -153.415028449999909, 58.97402578300013 ], [ -153.380686001999948, 58.940659898000078 ], [ -153.369984503999916, 58.936183986000017 ], [ -153.33930416599992, 58.936183986000017 ], [ -153.331613735999895, 58.933783270000063 ], [ -153.332264777999939, 58.928208726000051 ], [ -153.335642055999955, 58.921454169000114 ], [ -153.335886196999923, 58.915716864000146 ], [ -153.322621222999885, 58.894476630000057 ], [ -153.312855597999942, 58.889064846000011 ], [ -153.294911261999886, 58.888373114000061 ], [ -153.294911261999886, 58.881537177000055 ], [ -153.309071417999917, 58.877346096000124 ], [ -153.363148566999882, 58.874090887000179 ], [ -153.349964972999942, 58.868353583 ], [ -153.334299282999893, 58.866115627000042 ], [ -153.270822719999956, 58.871405341000084 ], [ -153.259470180999898, 58.868882554 ], [ -153.264149542999917, 58.857367255000142 ], [ -153.289133266999926, 58.844142971000011 ], [ -153.338368292999917, 58.855047919000086 ], [ -153.363148566999882, 58.847398179000052 ], [ -153.377552863999881, 58.829046942 ], [ -153.395212368999864, 58.782171942000147 ], [ -153.408192511999857, 58.761135158000016 ], [ -153.424672003999859, 58.744370835 ], [ -153.43883216099988, 58.733587958 ], [ -153.527658657999922, 58.696600653000147 ], [ -153.56025143099987, 58.694769598000065 ], [ -153.576120571999923, 58.690863348000093 ], [ -153.582875128999945, 58.679185288999989 ], [ -153.590280727999925, 58.658596096000153 ], [ -153.60875403599988, 58.644435940000122 ], [ -153.633127407999922, 58.63495514500012 ], [ -153.690663214999915, 58.621568101000108 ], [ -153.795521613999938, 58.613999742000075 ], [ -153.863758917999945, 58.619818427000112 ], [ -153.899403449999909, 58.616685289000046 ], [ -153.912464972999885, 58.600327867000132 ], [ -153.910227016999897, 58.592718817 ], [ -153.906076626999948, 58.588120835000055 ], [ -153.899769660999908, 58.586249091000084 ], [ -153.904286261999857, 58.579901434000149 ], [ -153.91270911399991, 58.5685082050001 ], [ -153.918894008999871, 58.556097723000065 ], [ -153.929636196999894, 58.540838934000092 ], [ -153.929514126999919, 58.537909247000172 ], [ -153.930856899999924, 58.535630601000108 ], [ -153.93919837099989, 58.53204987200003 ], [ -153.946278449999937, 58.532660223000093 ], [ -153.954335089999887, 58.535874742000047 ], [ -153.963327602999897, 58.53729889500012 ], [ -153.973337368999893, 58.53204987200003 ], [ -153.961252407999893, 58.528509833000058 ], [ -153.932362433999856, 58.523993231000091 ], [ -153.925526495999947, 58.51845937700007 ], [ -153.930124477999868, 58.511542059000178 ], [ -153.942372199999852, 58.502915757000082 ], [ -153.956654425999943, 58.495266018000152 ], [ -153.967111782999922, 58.491115627000013 ], [ -154.001332160999908, 58.491115627000013 ], [ -154.042347785999908, 58.496079820000048 ], [ -154.081654425999915, 58.49518463700015 ], [ -154.110463019999941, 58.477484442000062 ], [ -154.096424933999913, 58.467718817000119 ], [ -154.080067511999886, 58.436712958 ], [ -154.068918423999889, 58.422186591000141 ], [ -154.067087368999893, 58.417425848000065 ], [ -154.068959113999881, 58.41303131700009 ], [ -154.069203253999888, 58.409857489000032 ], [ -154.062367316999882, 58.408596096000011 ], [ -154.031686977999868, 58.408596096000011 ], [ -154.020741339999915, 58.404282945000105 ], [ -154.008046027999853, 58.394964911000059 ], [ -154.000233527999853, 58.38556549700003 ], [ -154.004343227999925, 58.381293036000116 ], [ -154.015248175999886, 58.379543361000046 ], [ -154.06187903599988, 58.36456940300009 ], [ -154.088571743999921, 58.360744533000073 ], [ -154.190052863999938, 58.360744533000073 ], [ -154.196848110999952, 58.354966539000102 ], [ -154.191029425999886, 58.352118231000176 ], [ -154.194813605999911, 58.346584377000156 ], [ -154.206654425999886, 58.339667059000149 ], [ -154.217600063999953, 58.336615302000055 ], [ -154.243397589999887, 58.334621486000017 ], [ -154.300119594999956, 58.320379950000117 ], [ -154.318714972999857, 58.310736395000148 ], [ -154.322743292999917, 58.298732815000122 ], [ -154.364369269999884, 58.285101630000085 ], [ -154.355783657999893, 58.2794457050001 ], [ -154.351389126999891, 58.27138906500015 ], [ -154.353505011999914, 58.263332424000041 ], [ -154.364369269999884, 58.257757880000113 ], [ -154.353098110999895, 58.255438544000143 ], [ -154.343820766999954, 58.259466864000117 ], [ -154.334421352999925, 58.266017971000011 ], [ -154.322743292999917, 58.27138906500015 ], [ -154.308338995999947, 58.27342357 ], [ -154.281361456999889, 58.274155992000104 ], [ -154.268137173999861, 58.278265692000062 ], [ -154.27196204299986, 58.295640367000047 ], [ -154.253529425999943, 58.29987213700015 ], [ -154.206654425999886, 58.298732815000122 ], [ -154.202992316999939, 58.302069403000147 ], [ -154.199208136999914, 58.308294989000117 ], [ -154.194040493999921, 58.314846096000011 ], [ -154.186227993999921, 58.319159247000087 ], [ -154.171376105999855, 58.321763414000102 ], [ -154.165394660999937, 58.319159247000087 ], [ -154.161122199999909, 58.313137111000103 ], [ -154.121327277999939, 58.279730536000116 ], [ -154.151722785999908, 58.270982164000046 ], [ -154.206044074999909, 58.267564195000048 ], [ -154.247670050999886, 58.257757880000113 ], [ -154.187611456999889, 58.250677802000055 ], [ -154.165394660999937, 58.239406643000152 ], [ -154.165720180999955, 58.216782945 ], [ -154.188059048999889, 58.198187567 ], [ -154.221180792999917, 58.191392320000077 ], [ -154.255604620999861, 58.19399648600016 ], [ -154.281809048999889, 58.203111070000048 ], [ -154.289255337999862, 58.200018622000172 ], [ -154.302316860999952, 58.196275132000139 ], [ -154.287546352999868, 58.181586005000142 ], [ -154.235788540999948, 58.155340887000122 ], [ -154.227162238999938, 58.141058661000116 ], [ -154.246774868999921, 58.126410223 ], [ -154.280344204999949, 58.133042710000083 ], [ -154.337025519999912, 58.162095445000048 ], [ -154.349110480999911, 58.145086981000176 ], [ -154.345448370999861, 58.133368231000091 ], [ -154.335764126999891, 58.122219143000066 ], [ -154.32957923099994, 58.106878973000121 ], [ -154.336008266999954, 58.085394598 ], [ -154.352772589999859, 58.08222077000012 ], [ -154.370065883999871, 58.090643622000087 ], [ -154.386463995999861, 58.117621161000145 ], [ -154.405995245999947, 58.127997137000037 ], [ -154.427805141999897, 58.136419989 ], [ -154.443186001999948, 58.144476630000113 ], [ -154.44823157499988, 58.151434637000122 ], [ -154.451283331999889, 58.160142320000105 ], [ -154.452748175999943, 58.169623114 ], [ -154.453114386999943, 58.178900458000058 ], [ -154.458363410999937, 58.187730210000112 ], [ -154.470529751999919, 58.194240627000013 ], [ -154.494089321999866, 58.203111070000048 ], [ -154.467722133999871, 58.147040106000034 ], [ -154.460397915999863, 58.115057684000035 ], [ -154.469838019999884, 58.089829820000077 ], [ -154.499134894999884, 58.08779531500015 ], [ -154.577015753999888, 58.125718492000075 ], [ -154.610788540999863, 58.120550848000065 ], [ -154.605905727999897, 58.113755601000136 ], [ -154.553415493999921, 58.083075262000037 ], [ -154.553049282999922, 58.079575914000046 ], [ -154.545643683999941, 58.071112372000115 ], [ -154.551950649999867, 58.052313544000143 ], [ -154.566273566999882, 58.033514716000113 ], [ -154.583119269999884, 58.024969794000086 ], [ -154.631214972999942, 58.031195380000142 ], [ -154.64476477799991, 58.035467841000141 ], [ -154.648304816999882, 58.045477606000034 ], [ -154.648386196999951, 58.057033596000068 ], [ -154.65172278599988, 58.065985419000086 ], [ -154.669911261999886, 58.072333075000031 ], [ -154.69273841099988, 58.068915106000119 ], [ -154.715687628999888, 58.058905341000028 ], [ -154.734242316999882, 58.045477606000034 ], [ -154.737904425999943, 58.039455471000124 ], [ -154.741403774999924, 58.025091864000061 ], [ -154.747303839999859, 58.017523505000028 ], [ -154.755563930999955, 58.012600002000127 ], [ -154.766916469999927, 58.008246161000059 ], [ -154.778879360999952, 58.005072333 ], [ -154.788889126999948, 58.003892320000077 ], [ -154.810414191999882, 58.008124091000084 ], [ -154.856271938999953, 58.026922919000029 ], [ -154.881052212999919, 58.031195380000142 ], [ -154.973866339999915, 58.031195380000142 ], [ -155.023142055999926, 58.025580145000148 ], [ -155.040150519999884, 58.017238674000069 ], [ -155.028513149999895, 58.003892320000077 ], [ -155.044992641999897, 57.976385809000035 ], [ -155.063465949999909, 57.962388414000074 ], [ -155.088612433999884, 57.957424221000011 ], [ -155.125314907999893, 57.956732489000089 ], [ -155.076730923999946, 57.916164455000157 ], [ -155.068674282999893, 57.897365627000013 ], [ -155.097401495999947, 57.880316473000065 ], [ -155.137928839999859, 57.873114325000031 ], [ -155.255075649999952, 57.880316473000065 ], [ -155.224436001999948, 57.85814036699999 ], [ -155.220285610999895, 57.850287177000112 ], [ -155.227243618999921, 57.842108466000113 ], [ -155.243397589999859, 57.836859442000119 ], [ -155.275217251999891, 57.833197333000058 ], [ -155.308216925999886, 57.838812567000062 ], [ -155.325510219999956, 57.839544989 ], [ -155.336984829999892, 57.833197333000058 ], [ -155.334665493999921, 57.826483466000028 ], [ -155.309681769999941, 57.798407294000114 ], [ -155.345651821999894, 57.805324611000017 ], [ -155.358102993999921, 57.805243231000034 ], [ -155.358102993999921, 57.798407294000114 ], [ -155.33617102799991, 57.790716864 ], [ -155.312082485999866, 57.775213934000178 ], [ -155.29914303299995, 57.756822007000139 ], [ -155.31029212099989, 57.74042389500012 ], [ -155.321278449999937, 57.736558335000112 ], [ -155.351185675999915, 57.730536200000031 ], [ -155.375436977999925, 57.728338934000035 ], [ -155.38536536399991, 57.726141669000057 ], [ -155.394398566999911, 57.725734768000123 ], [ -155.405873175999886, 57.729559637000065 ], [ -155.433420376999891, 57.745794989 ], [ -155.490101691999882, 57.762884833000143 ], [ -155.504872199999852, 57.764308986000017 ], [ -155.529367641999897, 57.772365627000127 ], [ -155.55109615799995, 57.788031317000119 ], [ -155.574777798999889, 57.798814195000105 ], [ -155.605091925999858, 57.79222239800005 ], [ -155.61742102799991, 57.780666408000016 ], [ -155.628163214999915, 57.762884833000143 ], [ -155.635731574999852, 57.743353583000058 ], [ -155.638620571999894, 57.726467190000065 ], [ -155.62791907499988, 57.708156643 ], [ -155.588612433999856, 57.689642645000092 ], [ -155.590809699999852, 57.675523179000052 ], [ -155.611805792999917, 57.665838934000092 ], [ -155.703195766999954, 57.648260809000149 ], [ -155.761830206999889, 57.648260809000149 ], [ -155.771433071999866, 57.644720770000092 ], [ -155.760080532999893, 57.637152411000116 ], [ -155.734201626999891, 57.627142645000148 ], [ -155.732614712999947, 57.621649481000119 ], [ -155.734486456999917, 57.615952867000047 ], [ -155.738107876999891, 57.611029364000089 ], [ -155.741647915999948, 57.607326565000122 ], [ -155.735544399999867, 57.594671942000062 ], [ -155.738392706999889, 57.572007554000109 ], [ -155.734201626999891, 57.558823960000055 ], [ -155.741647915999948, 57.552069403000033 ], [ -155.79320227799991, 57.544582424000154 ], [ -155.805734829999921, 57.547919012000179 ], [ -155.810129360999895, 57.555731512000179 ], [ -155.811838344999899, 57.564927476000051 ], [ -155.816151495999918, 57.572495835 ], [ -155.825876430999955, 57.579250393000123 ], [ -155.831532355999855, 57.579575914000074 ], [ -155.847767706999889, 57.562567450000088 ], [ -155.861805792999945, 57.558905341000141 ], [ -155.904042120999861, 57.556545315000093 ], [ -155.912953253999916, 57.548285223 ], [ -155.924183722999913, 57.531398830000015 ], [ -155.950062628999916, 57.534369208000115 ], [ -155.97870846299989, 57.547919012000179 ], [ -156.020456508999928, 57.576808986000103 ], [ -156.034047003999888, 57.571437893000123 ], [ -156.034006313999896, 57.555609442 ], [ -156.015370245999918, 57.53839752800009 ], [ -156.015370245999918, 57.53156159100017 ], [ -156.082142706999861, 57.537176825000174 ], [ -156.104725714999915, 57.53156159100017 ], [ -156.091257290999948, 57.519435940000065 ], [ -156.051136847999942, 57.517889716000028 ], [ -156.04271399599989, 57.507310288999989 ], [ -156.042917446999923, 57.489691473000065 ], [ -156.04149329299986, 57.474839585 ], [ -156.035511847999942, 57.463568427000027 ], [ -156.022206183999913, 57.456447658000158 ], [ -156.060658331999946, 57.430243231000119 ], [ -156.112741665999863, 57.447170315 ], [ -156.167591925999886, 57.473618882000082 ], [ -156.214588995999918, 57.476263739000061 ], [ -156.221872524999924, 57.468329169000114 ], [ -156.226063605999855, 57.456854559000149 ], [ -156.228260870999918, 57.442206122000144 ], [ -156.238758917999917, 57.436957098000065 ], [ -156.268259243999893, 57.429632880000057 ], [ -156.30882727799991, 57.42487213700015 ], [ -156.338856574999852, 57.41543203300013 ], [ -156.471628383999928, 57.339789130000057 ], [ -156.493723110999895, 57.338324286 ], [ -156.520741339999859, 57.333075262000094 ], [ -156.544626430999926, 57.322699286 ], [ -156.55724036399991, 57.305609442000062 ], [ -156.554636196999923, 57.281683661 ], [ -156.536488410999908, 57.279120184000092 ], [ -156.39195716099988, 57.314846096000124 ], [ -156.354847785999851, 57.31134674700003 ], [ -156.344349738999881, 57.311835028000118 ], [ -156.34833736899995, 57.300482489000146 ], [ -156.339955206999889, 57.285305080000157 ], [ -156.344349738999881, 57.270900783000101 ], [ -156.349191860999952, 57.270412502000013 ], [ -156.350290493999921, 57.272162177 ], [ -156.350046352999954, 57.274969794000143 ], [ -156.351185675999886, 57.277655341000028 ], [ -156.357370571999866, 57.25214264500012 ], [ -156.384022589999915, 57.240545966000028 ], [ -156.447377081999946, 57.229925848000065 ], [ -156.447377081999946, 57.223089911000059 ], [ -156.430897589999944, 57.22272370000006 ], [ -156.410593227999925, 57.218654690000093 ], [ -156.39325924399995, 57.210638739000146 ], [ -156.385935024999952, 57.198879299000154 ], [ -156.380970831999889, 57.19367096600017 ], [ -156.358102993999893, 57.190497137000094 ], [ -156.351185675999886, 57.188299872000115 ], [ -156.346018032999893, 57.177801825000031 ], [ -156.349069790999891, 57.173325913999989 ], [ -156.354847785999851, 57.170355536000059 ], [ -156.35802161399991, 57.164740302000055 ], [ -156.375925258999871, 57.143255927000141 ], [ -156.460642055999955, 57.125637111000017 ], [ -156.488352016999954, 57.113836981000034 ], [ -156.470570441999882, 57.10150788 ], [ -156.453602667999888, 57.086493231000148 ], [ -156.470814581999889, 57.07916901200015 ], [ -156.48180091099988, 57.086004950000174 ], [ -156.489003058999913, 57.096421617000075 ], [ -156.495187954999892, 57.099554755000142 ], [ -156.502064581999889, 57.089585679000052 ], [ -156.50328528599988, 57.063218492000047 ], [ -156.508859829999892, 57.05174388200011 ], [ -156.523060675999915, 57.04584381700009 ], [ -156.542795376999948, 57.045396226 ], [ -156.562611456999889, 57.048163153000033 ], [ -156.577097133999928, 57.05174388200011 ], [ -156.589955206999946, 57.057074286000088 ], [ -156.625477667999917, 57.079046942 ], [ -156.631703253999888, 57.072821356000034 ], [ -156.625477667999917, 57.058579820000134 ], [ -156.645375128999916, 57.058579820000134 ], [ -156.565378383999928, 57.004543361000131 ], [ -156.549794074999909, 56.982855536000059 ], [ -156.574208136999886, 56.983221747000172 ], [ -156.657053188999896, 56.997951565000065 ], [ -156.668283657999893, 56.998521226000136 ], [ -156.678334113999881, 57.000189520000148 ], [ -156.686960415999891, 57.003973700000145 ], [ -156.691151495999918, 57.009182033000158 ], [ -156.704335089999859, 57.031236070000048 ], [ -156.708729620999947, 57.033392645000063 ], [ -156.715565558999856, 57.038072007000082 ], [ -156.724436001999919, 57.042792059000178 ], [ -156.776356574999909, 57.05174388200011 ], [ -156.784779425999943, 57.049139716000113 ], [ -156.791493292999917, 57.042669989000032 ], [ -156.794911261999914, 57.034654039000074 ], [ -156.793080206999946, 57.027533270000035 ], [ -156.78648841099988, 57.023016669000143 ], [ -156.776682094999927, 57.017889716000141 ], [ -156.767526821999923, 57.011786200000145 ], [ -156.762684699999852, 57.003973700000145 ], [ -156.76341712099989, 56.992010809000035 ], [ -156.769154425999886, 56.986883856000119 ], [ -156.776722785999908, 56.983465887000122 ], [ -156.783192511999914, 56.976629950000088 ], [ -156.786203579999921, 56.967759507000054 ], [ -156.787953253999916, 56.951076565 ], [ -156.789987758999928, 56.941880601000136 ], [ -156.797556118999893, 56.924261786000116 ], [ -156.809437628999945, 56.906683661000088 ], [ -156.824452277999853, 56.897284247000144 ], [ -156.841501430999926, 56.903998114 ], [ -156.88935299399995, 56.952093817000062 ], [ -156.904530402999939, 56.961818752000042 ], [ -156.927438930999926, 56.970526434000092 ], [ -156.949289516999897, 56.976223049000097 ], [ -156.961293097999885, 56.976629950000088 ], [ -156.951527472999885, 56.966498114000146 ], [ -156.946726040999863, 56.954575914000102 ], [ -156.94749915299991, 56.943304755000028 ], [ -156.95445716099988, 56.935044664000102 ], [ -156.950021938999896, 56.930080471000068 ], [ -156.944691535999937, 56.919989325000088 ], [ -156.94086666599992, 56.914536851000079 ], [ -156.953317837999947, 56.911078192000062 ], [ -156.996083136999943, 56.907700914000046 ], [ -157.030466274999895, 56.890082098000121 ], [ -157.040150519999855, 56.887274481000176 ], [ -157.050363735999895, 56.878159898 ], [ -157.078439907999893, 56.837103583000086 ], [ -157.091664191999939, 56.825832424000097 ], [ -157.112741665999948, 56.830511786000031 ], [ -157.169789191999854, 56.854641018000123 ], [ -157.190988735999952, 56.849676825000174 ], [ -157.183583136999857, 56.84202708500014 ], [ -157.162464972999942, 56.831284898000135 ], [ -157.147816535999937, 56.815130927000084 ], [ -157.159982876999919, 56.791083075000031 ], [ -157.189401821999923, 56.776271877000156 ], [ -157.215199347999942, 56.780340887000122 ], [ -157.23924719999988, 56.791489976000136 ], [ -157.286854620999861, 56.80170319200009 ], [ -157.305897589999944, 56.811590887000179 ], [ -157.365427212999862, 56.851467190000065 ], [ -157.391957160999937, 56.863226630000142 ], [ -157.419667120999918, 56.867377020000092 ], [ -157.443918423999918, 56.856512762000094 ], [ -157.459665493999864, 56.846421617000132 ], [ -157.465891079999921, 56.84003327 ], [ -157.468454555999926, 56.828924872000172 ], [ -157.463815883999928, 56.815822658000016 ], [ -157.452707485999895, 56.810939846000124 ], [ -157.439198370999918, 56.809149481000148 ], [ -157.427438930999926, 56.805365302000112 ], [ -157.417551235999895, 56.796779690000037 ], [ -157.408802863999938, 56.785467841000028 ], [ -157.404245571999894, 56.773749091000141 ], [ -157.406320766999897, 56.763739325000145 ], [ -157.412220831999946, 56.768947658000158 ], [ -157.419504360999952, 56.773138739000089 ], [ -157.427113410999908, 56.775295315000093 ], [ -157.433949347999913, 56.774318752000013 ], [ -157.438343878999888, 56.77073802300005 ], [ -157.444284633999928, 56.764634507000054 ], [ -157.448435024999867, 56.758937893000066 ], [ -157.447336391999926, 56.756903387000037 ], [ -157.462473110999923, 56.756577867000104 ], [ -157.509103969999927, 56.763739325000145 ], [ -157.531931118999921, 56.752264716000028 ], [ -157.55223548099994, 56.730414130000085 ], [ -157.573435024999924, 56.716620184000149 ], [ -157.598744269999884, 56.729641018000152 ], [ -157.605580206999889, 56.722154038999989 ], [ -157.59516354099992, 56.717596747000059 ], [ -157.58653723899991, 56.71234772300015 ], [ -157.580637173999889, 56.70538971600017 ], [ -157.578236456999946, 56.695461330000157 ], [ -157.570790167999945, 56.702337958000086 ], [ -157.557850714999944, 56.685532945000077 ], [ -157.535389777999939, 56.677557684000092 ], [ -157.48578854099992, 56.674994208 ], [ -157.480580206999946, 56.670640367000104 ], [ -157.463124152999853, 56.65143463700015 ], [ -157.457875128999888, 56.647040106000148 ], [ -157.455189581999889, 56.64321523600016 ], [ -157.462595180999898, 56.634507554000081 ], [ -157.473825649999895, 56.625433661000059 ], [ -157.482655402999939, 56.62034739800005 ], [ -157.512440558999856, 56.620103257000025 ], [ -157.583811001999948, 56.631293036000116 ], [ -157.608713344999899, 56.623480536000116 ], [ -157.63377844999988, 56.611151434000178 ], [ -157.664662238999938, 56.611395575000117 ], [ -157.694162563999896, 56.620306708000058 ], [ -157.715443488999881, 56.633978583 ], [ -157.750803188999896, 56.674261786000059 ], [ -157.772897915999863, 56.68439362200003 ], [ -157.80418860599994, 56.678127346000068 ], [ -157.837717251999891, 56.665920315 ], [ -157.848255988999938, 56.657660223 ], [ -157.861561652999853, 56.652289130000057 ], [ -157.897897915999948, 56.654852606000148 ], [ -157.91344153599988, 56.653876044000086 ], [ -157.932687954999892, 56.642808335000055 ], [ -157.965524868999921, 56.612372137000094 ], [ -157.982370571999923, 56.606105861000131 ], [ -158.033273891999926, 56.59870026200015 ], [ -158.038807745999918, 56.596991278000147 ], [ -158.044504360999923, 56.592962958000086 ], [ -158.048898891999897, 56.587632554000109 ], [ -158.050607876999891, 56.582220770000063 ], [ -158.055124477999954, 56.578558661000116 ], [ -158.085397915999948, 56.578802802000055 ], [ -158.105213995999861, 56.572211005 ], [ -158.118763800999943, 56.562892971000124 ], [ -158.127634243999893, 56.549505927000141 ], [ -158.133168097999885, 56.530340887000179 ], [ -158.075021938999953, 56.538316148000135 ], [ -157.963612433999941, 56.569973049000012 ], [ -157.881947394999941, 56.570624091000141 ], [ -157.868967251999948, 56.569037177000112 ], [ -157.858835415999891, 56.565130927000112 ], [ -157.84992428299995, 56.555568752000127 ], [ -157.848093227999868, 56.546372789000074 ], [ -157.847279425999886, 56.537176825000088 ], [ -157.841420050999915, 56.527289130000085 ], [ -157.836903449999852, 56.51650625200007 ], [ -157.842966274999952, 56.507310289000102 ], [ -157.862538214999915, 56.493475653000118 ], [ -157.877145962999947, 56.478216864000146 ], [ -157.884144660999937, 56.476141669000029 ], [ -157.899769660999937, 56.475734768 ], [ -157.956532355999883, 56.48261139500012 ], [ -158.067982550999886, 56.511908270000148 ], [ -158.12633216099988, 56.516669012000037 ], [ -158.152902798999946, 56.513251044000029 ], [ -158.165028449999909, 56.507391669000086 ], [ -158.167917446999951, 56.496893622000115 ], [ -158.158680792999917, 56.489203192 ], [ -158.131906704999892, 56.496161200000088 ], [ -158.12633216099988, 56.486639716000084 ], [ -158.138295050999915, 56.465521552000084 ], [ -158.166330532999922, 56.458929755 ], [ -158.221913214999859, 56.462103583000058 ], [ -158.248972133999899, 56.457505601000136 ], [ -158.261586066999882, 56.45799388200011 ], [ -158.273752407999893, 56.46580638200011 ], [ -158.282053188999953, 56.46995677300005 ], [ -158.318104620999918, 56.475734768 ], [ -158.338693813999953, 56.475409247000087 ], [ -158.355051235999952, 56.471136786000088 ], [ -158.415720180999926, 56.446478583000086 ], [ -158.43101966099988, 56.438055731000034 ], [ -158.442982550999886, 56.428045966000141 ], [ -158.455311652999853, 56.41429271000014 ], [ -158.471424933999913, 56.400295315000065 ], [ -158.508493618999921, 56.37836334800015 ], [ -158.523548956999861, 56.365912177000112 ], [ -158.518259243999893, 56.360744533000044 ], [ -158.509958462999919, 56.345404364000089 ], [ -158.541086391999897, 56.342474677000055 ], [ -158.576771613999938, 56.330267645000092 ], [ -158.609811977999897, 56.313910223000065 ], [ -158.632801886999886, 56.298244533000101 ], [ -158.646433071999923, 56.270656643000066 ], [ -158.620106574999909, 56.256170966000028 ], [ -158.537220831999889, 56.249823309000092 ], [ -158.544422980999911, 56.25975169500002 ], [ -158.553537563999924, 56.267279364000061 ], [ -158.561268683999913, 56.275458075000145 ], [ -158.564564581999889, 56.287339585000112 ], [ -158.560495571999923, 56.299302476000051 ], [ -158.550852016999954, 56.308172919000086 ], [ -158.472971157999865, 56.342759507 ], [ -158.448190883999899, 56.340521552000027 ], [ -158.44163977799991, 56.311916408000044 ], [ -158.432687954999892, 56.317531643000123 ], [ -158.423695441999882, 56.320624091000113 ], [ -158.414987758999871, 56.321030992000104 ], [ -158.40693111899995, 56.318752346000124 ], [ -158.410227016999897, 56.312974351 ], [ -158.414377407999922, 56.298244533000101 ], [ -158.372751430999955, 56.318752346000124 ], [ -158.345448370999861, 56.325588283000158 ], [ -158.335926886999886, 56.323431708000058 ], [ -158.322214321999951, 56.314113674000012 ], [ -158.314768032999893, 56.311916408000044 ], [ -158.258737758999928, 56.305080471000011 ], [ -158.227284308999913, 56.296332098000121 ], [ -158.208241339999915, 56.283921617000104 ], [ -158.225900844999956, 56.268784898000106 ], [ -158.24775143099987, 56.255682684000035 ], [ -158.272287563999896, 56.246527411000059 ], [ -158.309803839999915, 56.24087148600016 ], [ -158.335316535999937, 56.231512762000037 ], [ -158.348866339999887, 56.229315497000059 ], [ -158.362131313999896, 56.23065827000012 ], [ -158.386586066999882, 56.235988674000097 ], [ -158.400705532999893, 56.236151434000149 ], [ -158.394764777999853, 56.228176174000012 ], [ -158.398304816999939, 56.220770575000117 ], [ -158.406442837999862, 56.212591864000032 ], [ -158.414377407999922, 56.202053127000156 ], [ -158.399891730999883, 56.205715236000103 ], [ -158.384388800999886, 56.213080145 ], [ -158.369211391999897, 56.217474677000084 ], [ -158.326405402999882, 56.200384833000143 ], [ -158.323109503999945, 56.19354889500012 ], [ -158.345448370999861, 56.181545315 ], [ -158.318308071999951, 56.17470937700007 ], [ -158.288156704999949, 56.185370184000121 ], [ -158.258290167999945, 56.200873114000117 ], [ -158.206044074999937, 56.21775950700011 ], [ -158.176950649999867, 56.234849351000051 ], [ -158.147328253999945, 56.245794989000117 ], [ -158.119496222999885, 56.236151434000149 ], [ -158.150624152999853, 56.229559637000179 ], [ -158.160755988999938, 56.225897528000033 ], [ -158.167836066999882, 56.22003815300009 ], [ -158.174020962999947, 56.212062893000123 ], [ -158.181223110999895, 56.205023505000057 ], [ -158.198312954999921, 56.199204820000105 ], [ -158.214344855999911, 56.185980536000059 ], [ -158.221913214999859, 56.181545315 ], [ -158.234323696999894, 56.180568752000042 ], [ -158.245594855999883, 56.182440497000087 ], [ -158.257191535999908, 56.182277736000046 ], [ -158.270334438999953, 56.17470937700007 ], [ -158.262888149999867, 56.167914130000057 ], [ -158.289662238999881, 56.161607164000102 ], [ -158.324045376999948, 56.15912506700009 ], [ -158.352040167999945, 56.150702216000028 ], [ -158.359730597999885, 56.126898505000142 ], [ -158.382394985999923, 56.135931708000058 ], [ -158.387766079999892, 56.152411200000031 ], [ -158.387521938999953, 56.169867255 ], [ -158.393259243999921, 56.181545315 ], [ -158.409657355999911, 56.180812893000066 ], [ -158.420765753999945, 56.16624583500014 ], [ -158.423288540999863, 56.147202867000047 ], [ -158.414377407999922, 56.133124091000113 ], [ -158.433461066999911, 56.132310288999989 ], [ -158.44163977799991, 56.133124091000113 ], [ -158.428171352999925, 56.113348700000174 ], [ -158.412302212999919, 56.094875393000152 ], [ -158.40758216099988, 56.078436591000141 ], [ -158.427967902999882, 56.064846096000011 ], [ -158.442087368999921, 56.085028387000037 ], [ -158.445749477999954, 56.094956773000135 ], [ -158.44163977799991, 56.106431382000082 ], [ -158.454294399999895, 56.109361070000105 ], [ -158.49970455599987, 56.106431382000082 ], [ -158.503244594999956, 56.101629950000088 ], [ -158.492990688999924, 56.090725002000013 ], [ -158.469593878999945, 56.071682033000016 ], [ -158.487009243999921, 56.059637762000094 ], [ -158.484608527999882, 56.042914130000085 ], [ -158.469309048999918, 56.032049872000087 ], [ -158.454172329999921, 56.040676174000097 ], [ -158.456898566999882, 56.043524481000034 ], [ -158.458729620999861, 56.046861070000077 ], [ -158.462147589999859, 56.051214911000059 ], [ -158.43407141799986, 56.042914130000085 ], [ -158.422800258999871, 56.023993231000148 ], [ -158.427561001999891, 56.006537177 ], [ -158.447865363999881, 56.002752997000172 ], [ -158.460194464999915, 56.009995835 ], [ -158.483631964999915, 56.032375393000038 ], [ -158.496286587999862, 56.037543036000116 ], [ -158.511057094999956, 56.033840236000074 ], [ -158.512074347999913, 56.022935289000102 ], [ -158.505197719999899, 56.009222723000065 ], [ -158.496286587999862, 55.996568101000108 ], [ -158.512562628999888, 55.995998440000122 ], [ -158.533640102999925, 56.004461981000176 ], [ -158.554758266999954, 56.017645575000031 ], [ -158.571400519999884, 56.030707098 ], [ -158.509958462999919, 56.051214911000059 ], [ -158.509958462999919, 56.058050848000065 ], [ -158.567453579999892, 56.047105210000112 ], [ -158.585642055999898, 56.040676174000097 ], [ -158.600941535999851, 56.040432033000158 ], [ -158.604685024999867, 56.052313544000114 ], [ -158.597238735999895, 56.066107489000032 ], [ -158.578846808999856, 56.071682033000016 ], [ -158.578846808999856, 56.078517971000124 ], [ -158.601918097999942, 56.08673737200003 ], [ -158.601551886999914, 56.100572007000139 ], [ -158.585519985999923, 56.113674221000011 ], [ -158.561146613999881, 56.11945221600017 ], [ -158.559885219999956, 56.124090887000094 ], [ -158.549305792999917, 56.146185614000089 ], [ -158.544056769999912, 56.153631903000147 ], [ -158.539865688999896, 56.154689846000011 ], [ -158.528065558999913, 56.152818101000051 ], [ -158.519154425999886, 56.154364325000088 ], [ -158.514759894999884, 56.153265692000147 ], [ -158.511301235999895, 56.153225002000156 ], [ -158.509958462999919, 56.157375393000095 ], [ -158.510202602999925, 56.16624583500014 ], [ -158.509958462999919, 56.167914130000057 ], [ -158.489003058999856, 56.176703192000119 ], [ -158.478871222999885, 56.183823960000083 ], [ -158.479237433999913, 56.191473700000088 ], [ -158.490589972999885, 56.195868231000176 ], [ -158.565907355999855, 56.195013739000089 ], [ -158.639637824999909, 56.202053127000156 ], [ -158.627674933999856, 56.185858466000084 ], [ -158.607777472999885, 56.178208726000079 ], [ -158.564564581999889, 56.167914130000057 ], [ -158.591175910999908, 56.152777411000059 ], [ -158.611887173999918, 56.135158596000124 ], [ -158.634592251999862, 56.120062567000119 ], [ -158.667591925999943, 56.112616278000147 ], [ -158.661447719999956, 56.131089585000083 ], [ -158.668202277999882, 56.145941473000121 ], [ -158.68333899599989, 56.152777411000059 ], [ -158.702341274999867, 56.147406317 ], [ -158.691883917999917, 56.136460679000137 ], [ -158.688832160999908, 56.125637111000131 ], [ -158.692616339999915, 56.115423895 ], [ -158.702341274999867, 56.106431382000082 ], [ -158.670114712999919, 56.098781643000152 ], [ -158.660633917999917, 56.092352606000034 ], [ -158.667591925999943, 56.078517971000124 ], [ -158.666330532999922, 56.061712958000115 ], [ -158.732248501999862, 56.045396226000108 ], [ -158.715402798999861, 56.030707098 ], [ -158.696522589999915, 56.028713283000158 ], [ -158.676014777999882, 56.030462958000058 ], [ -158.658070441999939, 56.028957424000012 ], [ -158.647084113999881, 56.017035223000065 ], [ -158.647084113999881, 55.999945380000113 ], [ -158.657541469999956, 55.990790106000034 ], [ -158.688059048999889, 55.982326565 ], [ -158.688059048999889, 55.976141669000029 ], [ -158.682565883999956, 55.974798895000148 ], [ -158.673044399999952, 55.970851955000157 ], [ -158.667591925999943, 55.969305731000119 ], [ -158.682932094999899, 55.95840078300013 ], [ -158.712025519999941, 55.954046942000147 ], [ -158.742909308999913, 55.955389716000028 ], [ -158.763783331999889, 55.961859442000119 ], [ -158.756418423999889, 55.967474677000141 ], [ -158.747914191999939, 55.971747137000065 ], [ -158.738718227999954, 55.974676825000174 ], [ -158.728993292999917, 55.976141669000029 ], [ -158.728993292999917, 55.982326565 ], [ -158.739125128999888, 55.992580471000124 ], [ -158.745554165999891, 56.001450913999989 ], [ -158.756540493999921, 56.007879950000088 ], [ -158.780506964999915, 56.010199286000145 ], [ -158.785104946999923, 56.007066148000078 ], [ -158.793690558999941, 55.992905992000047 ], [ -158.801014777999939, 55.989732163999989 ], [ -158.815378383999928, 55.991522528000175 ], [ -158.823109503999945, 55.996405341000141 ], [ -158.835804816999882, 56.013617255000057 ], [ -158.859445766999926, 56.012925523000106 ], [ -158.888254360999952, 55.98383209800015 ], [ -158.928293423999889, 55.920843817000119 ], [ -158.934519008999928, 55.920843817000119 ], [ -158.942331508999928, 55.931626695000134 ], [ -158.956776495999918, 55.936224677000084 ], [ -158.973866339999944, 55.936509507000025 ], [ -159.006296352999925, 55.9317894550001 ], [ -159.014108852999925, 55.929144598 ], [ -159.020741339999915, 55.924627997000144 ], [ -159.023752407999893, 55.916937567000119 ], [ -159.020130988999938, 55.910589911 ], [ -159.014271613999881, 55.906805731000176 ], [ -159.010202602999925, 55.907171942 ], [ -159.010935024999867, 55.901678778000147 ], [ -159.010243292999917, 55.897202867000104 ], [ -159.013905402999882, 55.894110419000114 ], [ -159.02757727799991, 55.892889716000084 ], [ -159.035471157999893, 55.894273179000081 ], [ -159.040394660999851, 55.897691148 ], [ -159.044789191999939, 55.902329820000105 ], [ -159.071481899999952, 55.920599677 ], [ -159.083811001999891, 55.92601146000014 ], [ -159.099313930999926, 55.928290106000091 ], [ -159.113636847999885, 55.926174221000096 ], [ -159.145008917999917, 55.916815497000144 ], [ -159.160715298999889, 55.914618231000148 ], [ -159.172434048999889, 55.911281643000123 ], [ -159.187001105999911, 55.896307684000092 ], [ -159.201649542999917, 55.892889716000084 ], [ -159.266713019999884, 55.889227606000063 ], [ -159.294260219999899, 55.879339911000116 ], [ -159.31867428299995, 55.859442450000031 ], [ -159.332834438999896, 55.877386786000088 ], [ -159.355905727999925, 55.879461981000091 ], [ -159.380848761999857, 55.87140534100017 ], [ -159.400624152999882, 55.859442450000031 ], [ -159.411081508999956, 55.842515367000047 ], [ -159.41633053299995, 55.802150783000101 ], [ -159.421701626999891, 55.790472723 ], [ -159.439076300999886, 55.7892113300001 ], [ -159.45555579299986, 55.801336981000176 ], [ -159.468698696999923, 55.818345445000048 ], [ -159.475697394999912, 55.831488348 ], [ -159.478830532999893, 55.846014716000141 ], [ -159.478830532999893, 55.86359284100017 ], [ -159.475697394999912, 55.882310289000046 ], [ -159.469553188999924, 55.900336005000085 ], [ -159.489450649999924, 55.900132554000109 ], [ -159.518177863999881, 55.896470445000077 ], [ -159.544992641999897, 55.889634507000054 ], [ -159.55890865799995, 55.87986888200011 ], [ -159.555287238999881, 55.865668036 ], [ -159.525257941999939, 55.836574611000131 ], [ -159.517933722999942, 55.821844794000057 ], [ -159.516794399999895, 55.811224677 ], [ -159.511708136999886, 55.793443101000108 ], [ -159.510487433999856, 55.783026434000121 ], [ -159.509348110999923, 55.778265692000119 ], [ -159.504709438999896, 55.771185614000061 ], [ -159.503651495999918, 55.766913153000147 ], [ -159.505848761999914, 55.760891018000152 ], [ -159.510812954999892, 55.758002020000035 ], [ -159.515736456999946, 55.756048895000063 ], [ -159.517933722999942, 55.75299713700015 ], [ -159.530100063999924, 55.739813544000029 ], [ -159.552601691999911, 55.721380927 ], [ -159.564442511999857, 55.704291083000143 ], [ -159.544626430999955, 55.694891669000029 ], [ -159.547474738999881, 55.683823960000083 ], [ -159.547963019999884, 55.673895575000174 ], [ -159.549427863999938, 55.664984442000147 ], [ -159.555165167999917, 55.657049872000172 ], [ -159.558583136999914, 55.653794664000131 ], [ -159.562123175999915, 55.649115302000112 ], [ -159.565134243999921, 55.646551825000117 ], [ -159.569162563999896, 55.64472077000012 ], [ -159.580189581999946, 55.642157294000029 ], [ -159.585560675999886, 55.639715887000179 ], [ -159.602162238999938, 55.627630927 ], [ -159.619862433999941, 55.611151434000092 ], [ -159.630686001999948, 55.593573309000149 ], [ -159.626535610999895, 55.578273830000015 ], [ -159.721058722999942, 55.567084052 ], [ -159.743234829999892, 55.572007554000052 ], [ -159.730213995999918, 55.579982815 ], [ -159.708973761999914, 55.597723700000117 ], [ -159.695423956999861, 55.605536200000088 ], [ -159.727121548999918, 55.603989976000051 ], [ -159.756906704999949, 55.598700262000179 ], [ -159.741688605999855, 55.613267320000105 ], [ -159.711293097999885, 55.619330145 ], [ -159.679798956999889, 55.616685289000102 ], [ -159.661325649999952, 55.605536200000088 ], [ -159.640817837999919, 55.612982489000089 ], [ -159.642282680999955, 55.620306708000086 ], [ -159.639393683999913, 55.626654364000032 ], [ -159.632923956999917, 55.63117096600017 ], [ -159.623402472999942, 55.632879950000174 ], [ -159.617014126999891, 55.635199286000116 ], [ -159.624745245999918, 55.640285549000154 ], [ -159.657541469999927, 55.652289130000085 ], [ -159.693308071999951, 55.660345770000035 ], [ -159.709706183999856, 55.667629299000126 ], [ -159.691273566999939, 55.67902252800009 ], [ -159.633371548999918, 55.701117255000085 ], [ -159.650095180999926, 55.711127020000063 ], [ -159.658029751999919, 55.718329169000086 ], [ -159.664540167999917, 55.735052802000112 ], [ -159.671498175999886, 55.736273505000142 ], [ -159.678578253999859, 55.736517645000092 ], [ -159.681752081999917, 55.742743231000063 ], [ -159.67796790299991, 55.752020575000088 ], [ -159.650746222999885, 55.786810614000146 ], [ -159.626210089999887, 55.804510809000149 ], [ -159.62523352799991, 55.812689520000063 ], [ -159.640817837999919, 55.825262762000065 ], [ -159.657053188999953, 55.832342841000113 ], [ -159.701852993999864, 55.843817450000145 ], [ -159.830393032999922, 55.852728583 ], [ -159.845773891999954, 55.851223049000126 ], [ -159.854685024999924, 55.841620184000149 ], [ -159.860544399999924, 55.818426825000031 ], [ -159.853382941999911, 55.803900458 ], [ -159.851389126999891, 55.794745184000121 ], [ -159.856800910999908, 55.790472723 ], [ -159.90461178299995, 55.783026434000121 ], [ -159.923085089999859, 55.789496161000116 ], [ -159.955270962999919, 55.815659898000078 ], [ -159.976633266999897, 55.818426825000031 ], [ -159.976633266999897, 55.810980536000059 ], [ -159.968942837999862, 55.806789455000043 ], [ -159.967111782999893, 55.801703192 ], [ -159.969186977999925, 55.786810614000146 ], [ -159.973133917999888, 55.777492580000015 ], [ -159.982492641999926, 55.777167059000178 ], [ -160.009592251999948, 55.785874742000075 ], [ -160.017770962999862, 55.791815497000087 ], [ -160.02672278599988, 55.796942450000088 ], [ -160.038075324999852, 55.797349351000108 ], [ -160.043649868999864, 55.792792059000149 ], [ -160.052113410999908, 55.776271877000099 ], [ -160.058542446999923, 55.770005601000136 ], [ -160.030873175999943, 55.735541083000115 ], [ -160.033558722999913, 55.726223049000069 ], [ -160.065378383999928, 55.722845770000148 ], [ -160.088002081999889, 55.728420315000065 ], [ -160.096669074999909, 55.728013414000046 ], [ -160.100168423999889, 55.719142971000011 ], [ -160.095651821999923, 55.714178778000147 ], [ -160.065378383999928, 55.701117255000085 ], [ -160.096913214999944, 55.700751044000143 ], [ -160.11078854099992, 55.703802802000055 ], [ -160.123727993999921, 55.71198151200015 ], [ -160.130482550999886, 55.720404364000117 ], [ -160.13524329299986, 55.728013414000046 ], [ -160.142160610999895, 55.733791408000016 ], [ -160.155384894999912, 55.736517645000092 ], [ -160.149891730999883, 55.72101471600017 ], [ -160.143137173999946, 55.688788153000033 ], [ -160.133656378999945, 55.674465236000131 ], [ -160.164051886999914, 55.657131252000156 ], [ -160.238718227999925, 55.664740302 ], [ -160.25719153599988, 55.653998114000089 ], [ -160.25719153599988, 55.646551825000117 ], [ -160.349964972999885, 55.646551825000117 ], [ -160.396229620999861, 55.653021552000112 ], [ -160.419422980999911, 55.653876044000114 ], [ -160.442128058999856, 55.646551825000117 ], [ -160.425485805999926, 55.634711005000142 ], [ -160.366403774999867, 55.612982489000089 ], [ -160.366403774999867, 55.605536200000088 ], [ -160.39085852799991, 55.599432684000121 ], [ -160.435170050999886, 55.576849677000141 ], [ -160.456410285999851, 55.578273830000015 ], [ -160.455433722999885, 55.563299872000172 ], [ -160.45380611899995, 55.557359117000047 ], [ -160.448963995999861, 55.550279038999989 ], [ -160.457508917999917, 55.54295482 ], [ -160.464222785999937, 55.529282945000048 ], [ -160.468576626999948, 55.515082098000121 ], [ -160.470041469999899, 55.506252346000068 ], [ -160.477528449999852, 55.494614976000079 ], [ -160.495187954999892, 55.486151434000035 ], [ -160.531483527999882, 55.475816148000106 ], [ -160.548532680999926, 55.489081122000144 ], [ -160.582997199999852, 55.540716864 ], [ -160.593332485999952, 55.564113674000097 ], [ -160.59540768099987, 55.589097398000106 ], [ -160.598947719999956, 55.60610586100016 ], [ -160.613474087999919, 55.605536200000088 ], [ -160.627919074999852, 55.59080638200011 ], [ -160.64093990799995, 55.570257880000057 ], [ -160.657419399999924, 55.551988023 ], [ -160.682687954999892, 55.54413483300003 ], [ -160.741769985999895, 55.548651434000149 ], [ -160.768137173999889, 55.545396226000108 ], [ -160.76427161399991, 55.530462958000086 ], [ -160.740956183999913, 55.524888414000074 ], [ -160.706613735999952, 55.525132554000109 ], [ -160.675404425999886, 55.521918036000145 ], [ -160.661854620999918, 55.506252346000068 ], [ -160.667591925999886, 55.477850653000147 ], [ -160.683420376999919, 55.464667059000092 ], [ -160.78258216099988, 55.447088934000149 ], [ -160.799020962999862, 55.447902736000074 ], [ -160.809396938999953, 55.451849677000055 ], [ -160.832020636999914, 55.465399481000034 ], [ -160.843088344999956, 55.468410549000126 ], [ -160.848581508999899, 55.473049221000153 ], [ -160.84593665299991, 55.483465887000065 ], [ -160.83661861899995, 55.499416408000158 ], [ -160.83177649599989, 55.511623440000122 ], [ -160.84052486899995, 55.518540757000139 ], [ -160.867298956999861, 55.523627020000148 ], [ -160.924549933999913, 55.519110419000086 ], [ -160.959421352999925, 55.49315013200011 ], [ -160.987619594999899, 55.458319403000147 ], [ -161.024973110999895, 55.427435614000117 ], [ -161.072092251999891, 55.408351955000128 ], [ -161.279164191999939, 55.354885158000016 ], [ -161.31200110599994, 55.353583075000117 ], [ -161.326608852999954, 55.362250067 ], [ -161.339466925999886, 55.383246161000145 ], [ -161.368723110999923, 55.385443427000141 ], [ -161.479115363999881, 55.361029364000089 ], [ -161.506662563999896, 55.363836981000034 ], [ -161.518422003999888, 55.383368231000119 ], [ -161.515573696999923, 55.388983466000113 ], [ -161.487985805999926, 55.427801825000031 ], [ -161.485585089999859, 55.438421942000062 ], [ -161.481922980999911, 55.480373440000065 ], [ -161.479237433999941, 55.484930731000119 ], [ -161.454335089999915, 55.514797268 ], [ -161.442982550999943, 55.525620835 ], [ -161.418894008999928, 55.538397528000033 ], [ -161.388742641999897, 55.572170315000122 ], [ -161.367543097999885, 55.578273830000015 ], [ -161.349110480999855, 55.57062409100017 ], [ -161.316639777999882, 55.543198960000112 ], [ -161.292185024999924, 55.537298895000092 ], [ -161.182606574999909, 55.523627020000148 ], [ -161.151844855999911, 55.525620835 ], [ -161.144886847999913, 55.534979559000035 ], [ -161.159250454999892, 55.545396226000108 ], [ -161.247792120999918, 55.557766018000152 ], [ -161.261219855999911, 55.561712958000143 ], [ -161.271433071999923, 55.571234442000119 ], [ -161.280751105999883, 55.582586981000119 ], [ -161.291859503999888, 55.591945705000128 ], [ -161.31615149599989, 55.600409247000087 ], [ -161.364938930999898, 55.61001211100016 ], [ -161.408192511999886, 55.635931708000058 ], [ -161.438791469999899, 55.638739325000117 ], [ -161.62079830599987, 55.612982489000089 ], [ -161.613352016999897, 55.59979889500012 ], [ -161.617258266999897, 55.593736070000134 ], [ -161.626291469999899, 55.590318101000108 ], [ -161.634470180999926, 55.585109768000123 ], [ -161.652170376999919, 55.56118398600016 ], [ -161.708363410999937, 55.527085679000052 ], [ -161.716420050999943, 55.513088283000101 ], [ -161.713327602999868, 55.502020575000145 ], [ -161.706491665999948, 55.497259833000058 ], [ -161.699655727999925, 55.49530670800003 ], [ -161.696522589999859, 55.492580471000124 ], [ -161.697214321999894, 55.482611395000148 ], [ -161.709421352999868, 55.434393622000115 ], [ -161.710194464999915, 55.424302476000136 ], [ -161.709421352999868, 55.407131252000013 ], [ -161.711008266999897, 55.401760158000158 ], [ -161.716420050999943, 55.393255927000112 ], [ -161.81708736899995, 55.316839911000031 ], [ -161.833119269999941, 55.293646552000084 ], [ -161.841908331999917, 55.289618231000119 ], [ -161.894520636999914, 55.24241771000014 ], [ -161.89781653599988, 55.233465887000094 ], [ -161.899118618999864, 55.224554755000057 ], [ -161.902414516999897, 55.217840887000122 ], [ -161.911936001999891, 55.215155341000141 ], [ -161.934803839999915, 55.213812567000147 ], [ -161.944813605999911, 55.215562242000047 ], [ -161.956613735999866, 55.221909898 ], [ -161.948312954999892, 55.221136786000059 ], [ -161.922474738999881, 55.221909898 ], [ -161.922474738999881, 55.229396877000127 ], [ -161.951161261999914, 55.237209377000127 ], [ -161.984689907999893, 55.240423895 ], [ -162.018015102999954, 55.239813544000029 ], [ -162.046009894999884, 55.235581773000106 ], [ -162.046009894999884, 55.229396877000127 ], [ -162.02049719999988, 55.200751044000171 ], [ -162.015695766999897, 55.184515692000119 ], [ -162.032338019999941, 55.174139716000028 ], [ -161.984567837999919, 55.15713125200007 ], [ -161.981556769999884, 55.147406317000119 ], [ -161.97431393099987, 55.138251044000057 ], [ -161.96507727799991, 55.130601304000109 ], [ -161.956613735999866, 55.125718492000047 ], [ -161.972767706999946, 55.107407945 ], [ -162.001291469999927, 55.093207098000065 ], [ -162.032948370999918, 55.083319403000147 ], [ -162.059030727999954, 55.078599351000051 ], [ -162.080881313999896, 55.080633856000176 ], [ -162.10578365799995, 55.089422919000057 ], [ -162.128000454999892, 55.102972723 ], [ -162.141590949999852, 55.119533596000068 ], [ -162.122141079999949, 55.124986070000105 ], [ -162.114247199999909, 55.125718492000047 ], [ -162.121693488999881, 55.133205471000011 ], [ -162.112782355999911, 55.141424872000115 ], [ -162.106394008999899, 55.149115302000112 ], [ -162.102487758999928, 55.157619533000158 ], [ -162.101267055999898, 55.167914130000085 ], [ -162.192738410999937, 55.142564195000048 ], [ -162.230946417999888, 55.11273834800015 ], [ -162.210682745999861, 55.090236721000153 ], [ -162.198190883999956, 55.062892971000068 ], [ -162.202097133999956, 55.039862372000115 ], [ -162.230946417999888, 55.030218817000147 ], [ -162.246083136999886, 55.027044989000089 ], [ -162.260568813999924, 55.02167389500012 ], [ -162.274769660999937, 55.019598700000088 ], [ -162.289296027999882, 55.026800848000121 ], [ -162.298085089999944, 55.035874742000132 ], [ -162.313221808999941, 55.058172919000171 ], [ -162.319691535999937, 55.071112372000172 ], [ -162.329294399999924, 55.066066799000126 ], [ -162.337473110999923, 55.057684637000179 ], [ -162.351063605999883, 55.04010651200015 ], [ -162.362538214999915, 55.036566473000065 ], [ -162.422718878999888, 55.036363023000106 ], [ -162.449330206999946, 55.040269273000106 ], [ -162.472238735999952, 55.0489769550001 ], [ -162.492624477999925, 55.061835028000033 ], [ -162.511545376999948, 55.078599351000051 ], [ -162.526478644999884, 55.102240302000084 ], [ -162.517404751999891, 55.114691473000093 ], [ -162.493601040999891, 55.117499091000141 ], [ -162.464344855999855, 55.11273834800015 ], [ -162.416493292999917, 55.097886460000083 ], [ -162.390614386999914, 55.09658437700007 ], [ -162.360707160999851, 55.105292059000149 ], [ -162.417347785999937, 55.129055080000072 ], [ -162.436390753999945, 55.140082098000036 ], [ -162.47996985599994, 55.175523179000109 ], [ -162.491037563999896, 55.188421942000119 ], [ -162.530954555999926, 55.248765367000075 ], [ -162.557362433999941, 55.267035223000121 ], [ -162.600900844999956, 55.270412502000156 ], [ -162.571644660999937, 55.280829169000143 ], [ -162.567453579999892, 55.292222398000106 ], [ -162.583322719999927, 55.301092841000141 ], [ -162.614572719999899, 55.303900458 ], [ -162.645334438999896, 55.300034898000021 ], [ -162.668283657999893, 55.291408596000096 ], [ -162.687367316999854, 55.277899481000119 ], [ -162.70673580599987, 55.259507554000081 ], [ -162.718739386999914, 55.239081122000115 ], [ -162.718332485999895, 55.217922268 ], [ -162.70531165299991, 55.20136139500012 ], [ -162.658762173999889, 55.190334377000099 ], [ -162.632883266999954, 55.179673570000048 ], [ -162.614125128999888, 55.166327216000141 ], [ -162.614572719999899, 55.153713283000158 ], [ -162.603260870999918, 55.14354075700011 ], [ -162.599964972999885, 55.137111721000011 ], [ -162.603952602999954, 55.131903387000094 ], [ -162.614572719999899, 55.125718492000047 ], [ -162.614816860999952, 55.129136460000055 ], [ -162.619699673999918, 55.134182033000073 ], [ -162.626535610999923, 55.13764069200009 ], [ -162.632191535999937, 55.136664130000028 ], [ -162.635324673999889, 55.131048895 ], [ -162.635446743999864, 55.125148830000072 ], [ -162.634755011999914, 55.119045315000093 ], [ -162.635690883999928, 55.11273834800015 ], [ -162.641713019999912, 55.090969143000095 ], [ -162.642770962999862, 55.071112372000172 ], [ -162.634999152999882, 55.063625393 ], [ -162.614572719999899, 55.078599351000051 ], [ -162.612131313999953, 55.062201239000146 ], [ -162.559925910999937, 54.961249091000113 ], [ -162.584828253999888, 54.965806382000054 ], [ -162.616444464999859, 54.979885158000101 ], [ -162.645497199999937, 54.998439846000096 ], [ -162.662953253999888, 55.016546942 ], [ -162.627797003999945, 55.012274481000091 ], [ -162.618967251999891, 55.015692450000088 ], [ -162.621408657999922, 55.030218817000147 ], [ -162.63304602799991, 55.045558986000103 ], [ -162.649484829999921, 55.052964585000083 ], [ -162.667185024999924, 55.050604559000121 ], [ -162.676625128999945, 55.036363023000106 ], [ -162.685495571999894, 55.017238674000126 ], [ -162.696522589999915, 55.003241278000175 ], [ -162.723825649999924, 54.975531317 ], [ -162.718373175999886, 54.968085028000118 ], [ -162.716623501999891, 54.963364976000108 ], [ -162.720692511999943, 54.961249091000113 ], [ -162.725046352999925, 54.960109768000066 ], [ -162.752756313999924, 54.944891669000086 ], [ -162.767445441999939, 54.939601955000015 ], [ -162.782948370999918, 54.935939846000153 ], [ -162.850412563999924, 54.935044664000074 ], [ -162.877634243999921, 54.938950914000074 ], [ -162.920847133999928, 54.957424221000096 ], [ -162.927357550999915, 54.963283596000124 ], [ -162.929880337999919, 54.971869208000143 ], [ -162.93504798099994, 54.976996161000059 ], [ -162.967396613999938, 54.992336330000015 ], [ -162.974354620999918, 55.009507554000137 ], [ -162.952748175999943, 55.014064846000068 ], [ -162.926462368999921, 55.01455312700007 ], [ -162.919626430999898, 55.019924221000124 ], [ -162.936960415999891, 55.029282945000048 ], [ -162.97996985599994, 55.038641669000086 ], [ -162.998158331999917, 55.05068594 ], [ -163.024118618999921, 55.08502838700015 ], [ -163.041127081999889, 55.099351304000137 ], [ -163.063303188999953, 55.105292059000149 ], [ -163.075021938999953, 55.106634833000058 ], [ -163.096547003999859, 55.11220937700007 ], [ -163.107980923999918, 55.11273834800015 ], [ -163.122059699999852, 55.109849351000108 ], [ -163.148304816999882, 55.10101959800015 ], [ -163.163197394999941, 55.099066473 ], [ -163.149769660999937, 55.106431382000025 ], [ -163.12132727799991, 55.117905992000047 ], [ -163.107980923999918, 55.125718492000047 ], [ -163.129099087999919, 55.133449611000131 ], [ -163.157093878999945, 55.138617255000057 ], [ -163.18305416599992, 55.139146226000136 ], [ -163.197987433999884, 55.133205471000011 ], [ -163.20018469999988, 55.121405341000056 ], [ -163.196766730999855, 55.108465887000037 ], [ -163.192128058999941, 55.097601630000142 ], [ -163.190541144999912, 55.092230536 ], [ -163.202748175999886, 55.08616771 ], [ -163.215036587999919, 55.089667059000178 ], [ -163.238352016999954, 55.105292059000149 ], [ -163.238229946999866, 55.090318101000136 ], [ -163.231312628999888, 55.08100006700009 ], [ -163.219349738999938, 55.077134507 ], [ -163.204213019999941, 55.078599351000051 ], [ -163.217640753999945, 55.045355536000145 ], [ -163.205515102999925, 55.018988348000121 ], [ -163.174753383999956, 55.001695054000137 ], [ -163.114003058999913, 54.992336330000015 ], [ -163.089955206999889, 54.984279690000065 ], [ -163.067250128999945, 54.973293361000017 ], [ -163.053334113999881, 54.961249091000113 ], [ -163.049875454999949, 54.941839911 ], [ -163.062570766999926, 54.928778387000122 ], [ -163.135202602999925, 54.903713283000016 ], [ -163.171213344999899, 54.88190338700015 ], [ -163.200388149999924, 54.872951565000122 ], [ -163.231434699999937, 54.84479401200015 ], [ -163.25141354099992, 54.838324286000145 ], [ -163.277455206999889, 54.833685614000117 ], [ -163.32079016799986, 54.813869533000016 ], [ -163.341379360999895, 54.811102606000148 ], [ -163.357411261999886, 54.81761302300005 ], [ -163.367543097999942, 54.83014557500006 ], [ -163.376657680999926, 54.844956773000106 ], [ -163.389759894999912, 54.858872789000017 ], [ -163.341867641999897, 54.876776434000149 ], [ -163.327097133999899, 54.886175848000065 ], [ -163.324574347999885, 54.891058661000145 ], [ -163.324818488999938, 54.902329820000134 ], [ -163.320871548999946, 54.907294012000179 ], [ -163.311512824999909, 54.911566473 ], [ -163.301462368999921, 54.913723049000012 ], [ -163.290882941999882, 54.914129950000117 ], [ -163.279896613999938, 54.91351959800015 ], [ -163.296823696999923, 54.927639065000093 ], [ -163.345285610999895, 54.919419663999989 ], [ -163.347604946999951, 54.94082265800013 ], [ -163.329172329999921, 54.966864325000088 ], [ -163.306589321999951, 54.959051825000117 ], [ -163.281361456999889, 54.944647528000061 ], [ -163.255116339999859, 54.9513207050001 ], [ -163.245961066999882, 54.969956773 ], [ -163.282053188999924, 54.990139065000037 ], [ -163.292958136999914, 55.013128973 ], [ -163.299143032999893, 55.061224677000055 ], [ -163.30601966099988, 55.073960679000109 ], [ -163.31867428299995, 55.085394598000065 ], [ -163.325144008999956, 55.095648505 ], [ -163.313465949999852, 55.105292059000149 ], [ -163.313465949999852, 55.11273834800015 ], [ -163.320505337999919, 55.11220937700007 ], [ -163.325184699999937, 55.11408112200003 ], [ -163.329294399999895, 55.116888739000089 ], [ -163.334543423999889, 55.119533596000068 ], [ -163.148996548999918, 55.180975653000147 ], [ -163.024728969999899, 55.245591539000102 ], [ -162.991281704999921, 55.24241771000014 ], [ -163.009022589999915, 55.237372137000094 ], [ -163.030873175999858, 55.22719961100016 ], [ -163.051706508999928, 55.214341539000131 ], [ -163.066395636999943, 55.201483466000113 ], [ -163.076527472999885, 55.18065013200011 ], [ -163.062936977999925, 55.175767320000048 ], [ -162.992624477999925, 55.181830145000148 ], [ -162.984486456999889, 55.180975653000147 ], [ -162.98375403599988, 55.179185289000074 ], [ -162.98078365799995, 55.174994208000143 ], [ -162.976185675999915, 55.17055898600016 ], [ -162.970814581999946, 55.167914130000085 ], [ -162.962025519999884, 55.169012762000122 ], [ -162.895822719999899, 55.189642645000148 ], [ -162.874948696999923, 55.200384833000058 ], [ -162.833688930999898, 55.229396877000127 ], [ -162.849924282999922, 55.245428778000033 ], [ -162.888661261999857, 55.246771552000112 ], [ -162.896351691999882, 55.266669012000122 ], [ -162.800119594999956, 55.29026927300005 ], [ -162.794748501999891, 55.299465236000131 ], [ -162.737009243999864, 55.310939846000068 ], [ -162.713856574999909, 55.321275132 ], [ -162.653309699999937, 55.361517645000063 ], [ -162.641835089999887, 55.38027578300013 ], [ -162.634999152999882, 55.362616278000118 ], [ -162.614206508999871, 55.35150788 ], [ -162.588449673999946, 55.346096096000124 ], [ -162.566761847999885, 55.345445054 ], [ -162.550974087999919, 55.34853750200007 ], [ -162.54051673099994, 55.353949286000116 ], [ -162.518910285999937, 55.372788804000052 ], [ -162.511830206999889, 55.374904690000065 ], [ -162.504343227999925, 55.37368398600016 ], [ -162.497141079999892, 55.37396881700009 ], [ -162.491037563999896, 55.38027578300013 ], [ -162.489979620999918, 55.385321356000148 ], [ -162.490223761999886, 55.391994533000016 ], [ -162.491769985999923, 55.397691148000021 ], [ -162.494455532999893, 55.400091864000146 ], [ -162.507557745999861, 55.407538153000118 ], [ -162.504017706999889, 55.424017645 ], [ -162.504261847999942, 55.44041575700011 ], [ -162.528879360999923, 55.447902736000074 ], [ -162.556996222999942, 55.446926174000012 ], [ -162.582386847999942, 55.437323309000035 ], [ -162.60102291599992, 55.423732815000065 ], [ -162.621408657999922, 55.406927802000055 ], [ -162.604725714999887, 55.429877020000148 ], [ -162.591053839999944, 55.437323309000035 ], [ -162.576161261999886, 55.445990302000112 ], [ -162.549997524999924, 55.458726304000081 ], [ -162.226999477999897, 55.697902736000017 ], [ -162.149037238999938, 55.722845770000148 ], [ -162.130116339999915, 55.73432038 ], [ -162.092600063999896, 55.764064846000011 ], [ -162.077015753999888, 55.770005601000136 ], [ -162.050526495999918, 55.77374909100017 ], [ -161.912953253999888, 55.830877997000144 ], [ -161.898264126999891, 55.841986395000092 ], [ -161.826283331999946, 55.87986888200011 ], [ -161.799997524999924, 55.889715887000037 ], [ -161.773915167999945, 55.895982163999989 ], [ -161.689035610999895, 55.903550523000135 ], [ -161.640858527999939, 55.917669989000061 ], [ -161.525502081999946, 55.934881903000175 ], [ -161.457712368999921, 55.953924872000172 ], [ -161.388905402999939, 55.961737372000144 ], [ -161.377512173999889, 55.965521552 ], [ -161.356638149999924, 55.976263739 ], [ -161.155344204999892, 56.017035223000065 ], [ -161.225575324999937, 55.995998440000122 ], [ -161.257761196999894, 55.986029364000146 ], [ -161.273264126999891, 55.978461005 ], [ -161.367543097999885, 55.955633856000176 ], [ -161.206857876999891, 55.955633856000176 ], [ -161.170847133999928, 55.949855861000017 ], [ -161.154774542999917, 55.949896552000027 ], [ -161.137928839999915, 55.958685614000061 ], [ -161.124216274999924, 55.96124909100017 ], [ -161.072743292999917, 55.941351630000085 ], [ -161.053293423999918, 55.941107489000146 ], [ -161.039418097999942, 55.945949611000017 ], [ -161.011301235999952, 55.961859442000119 ], [ -160.959950324999909, 55.976263739 ], [ -160.946400519999855, 55.986029364000146 ], [ -160.932362433999913, 55.990301825000145 ], [ -160.874134894999884, 55.993150132 ], [ -160.871408657999893, 55.961737372000144 ], [ -160.867258266999869, 55.945868231000034 ], [ -160.860463019999941, 55.934515692000062 ], [ -160.900013800999886, 55.934556382000054 ], [ -160.940378383999928, 55.93935781500015 ], [ -160.979318813999953, 55.93744538 ], [ -161.014393683999913, 55.917710679000052 ], [ -161.024159308999856, 55.902899481000176 ], [ -161.023386196999923, 55.8907738300001 ], [ -161.015573696999923, 55.881170966000113 ], [ -161.004465298999918, 55.873724677000141 ], [ -160.983631964999915, 55.867010809000178 ], [ -160.965891079999949, 55.86937083500014 ], [ -160.948475714999859, 55.875433661000145 ], [ -160.928781704999949, 55.87986888200011 ], [ -160.943796352999954, 55.850490627000013 ], [ -160.950062628999888, 55.832993882000054 ], [ -160.946400519999855, 55.825262762000065 ], [ -160.930612758999928, 55.821844794000057 ], [ -160.915150519999884, 55.813666083000115 ], [ -160.820383266999897, 55.73916250200007 ], [ -160.799020962999862, 55.715399481000176 ], [ -160.781809048999946, 55.751044012000122 ], [ -160.768137173999889, 55.75853099199999 ], [ -160.747181769999884, 55.746161200000145 ], [ -160.717111782999922, 55.722845770000148 ], [ -160.699208136999857, 55.703192450000088 ], [ -160.689564581999889, 55.697902736000017 ], [ -160.675526495999918, 55.701117255000085 ], [ -160.675729946999894, 55.705633856000034 ], [ -160.664784308999913, 55.729803778000033 ], [ -160.661854620999918, 55.732814846000124 ], [ -160.666086391999926, 55.74404531500015 ], [ -160.67625891799986, 55.747137762000037 ], [ -160.688588019999912, 55.748114325000088 ], [ -160.699411587999919, 55.75299713700015 ], [ -160.707102016999926, 55.759833075000088 ], [ -160.725331183999913, 55.771389065000037 ], [ -160.756703253999945, 55.78611888200011 ], [ -160.76427161399991, 55.804754950000088 ], [ -160.775217251999891, 55.84650299700003 ], [ -160.782460089999915, 55.865668036 ], [ -160.795277472999942, 55.873724677000141 ], [ -160.799265102999925, 55.875433661000145 ], [ -160.798654751999948, 55.879461981000091 ], [ -160.795399542999917, 55.88377513200011 ], [ -160.791574673999889, 55.886704820000134 ], [ -160.784535285999908, 55.887681382000025 ], [ -160.777536587999919, 55.885565497000087 ], [ -160.76427161399991, 55.87986888200011 ], [ -160.717111782999922, 55.86627838700015 ], [ -160.688710089999887, 55.862290757000082 ], [ -160.512196417999917, 55.869940497000115 ], [ -160.503610805999926, 55.859442450000031 ], [ -160.479603644999884, 55.850287177000055 ], [ -160.477731899999924, 55.838446356000091 ], [ -160.481882290999948, 55.823472398000078 ], [ -160.476267055999955, 55.804754950000088 ], [ -160.460194464999859, 55.795640367000104 ], [ -160.442250128999945, 55.800523179000081 ], [ -160.422556118999893, 55.809149481000176 ], [ -160.401193813999924, 55.810980536000059 ], [ -160.394846157999893, 55.807318427 ], [ -160.386708136999886, 55.795233466000084 ], [ -160.380686001999891, 55.790472723 ], [ -160.369130011999943, 55.786769924000154 ], [ -160.309763149999895, 55.779364325000174 ], [ -160.288889126999919, 55.774481512000094 ], [ -160.267689581999917, 55.772284247000115 ], [ -160.243519660999937, 55.776841539000046 ], [ -160.278879360999952, 55.788316148000021 ], [ -160.287912563999953, 55.793931382 ], [ -160.309071417999945, 55.819281317000119 ], [ -160.319203253999888, 55.825262762000065 ], [ -160.237294074999852, 55.838324286000116 ], [ -160.250965949999909, 55.852484442000147 ], [ -160.272653774999867, 55.859116929000109 ], [ -160.319203253999888, 55.86627838700015 ], [ -160.520741339999859, 55.935207424000012 ], [ -160.540760870999918, 55.935370184000149 ], [ -160.566273566999939, 55.928290106000091 ], [ -160.57245846299989, 55.934515692000062 ], [ -160.552683071999866, 55.949123440000093 ], [ -160.543527798999889, 55.958482164000102 ], [ -160.538319464999915, 55.969305731000119 ], [ -160.539133266999897, 55.984564520000092 ], [ -160.547596808999941, 55.993394273000135 ], [ -160.561838344999956, 55.995306708 ], [ -160.579904751999891, 55.989732163999989 ], [ -160.568104620999918, 56.007554429000052 ], [ -160.532215949999909, 56.040228583 ], [ -160.516346808999884, 56.068793036 ], [ -160.476389126999919, 56.096665757000139 ], [ -160.462595180999926, 56.112616278000147 ], [ -160.461171027999939, 56.151312567 ], [ -160.455555792999945, 56.172349351000108 ], [ -160.438710089999944, 56.181545315 ], [ -160.428944464999915, 56.193264065000093 ], [ -160.403797980999911, 56.239691473000121 ], [ -160.394357876999891, 56.242987372000172 ], [ -160.368723110999952, 56.276841539000046 ], [ -160.237294074999852, 56.339178778000118 ], [ -160.188710089999915, 56.386908270000063 ], [ -160.01703854099992, 56.445379950000031 ], [ -159.928049282999922, 56.488959052000055 ], [ -159.847727016999897, 56.540513414000131 ], [ -159.745716925999915, 56.579331773000135 ], [ -159.483143683999884, 56.647040106000148 ], [ -159.55890865799995, 56.62034739800005 ], [ -159.547596808999856, 56.61318594 ], [ -159.526926235999952, 56.616156317000119 ], [ -159.502430792999917, 56.622870184000149 ], [ -159.456369594999899, 56.629339911000059 ], [ -159.324574347999885, 56.67401764500012 ], [ -159.308094855999911, 56.684881903000118 ], [ -159.28876705599987, 56.692084052000141 ], [ -159.231068488999938, 56.691961981000176 ], [ -159.208851691999882, 56.695461330000157 ], [ -159.221262173999889, 56.700873114000032 ], [ -159.234730597999885, 56.702826239000061 ], [ -159.263417120999918, 56.702337958000086 ], [ -159.263417120999918, 56.708563544000029 ], [ -159.199655727999897, 56.751695054000052 ], [ -159.175282355999911, 56.763739325000145 ], [ -159.086374477999925, 56.78579336100016 ], [ -159.040964321999923, 56.815130927000084 ], [ -158.991078253999888, 56.842596747000115 ], [ -158.943918423999889, 56.869859117000104 ], [ -158.889230923999946, 56.889593817000119 ], [ -158.866200324999852, 56.894110419000086 ], [ -158.893788214999887, 56.874457098000121 ], [ -158.959421352999897, 56.853461005 ], [ -158.99742591099988, 56.828802802000027 ], [ -159.02513587099989, 56.816717841000113 ], [ -159.030710415999891, 56.80878327000012 ], [ -159.02489173099994, 56.796576239000061 ], [ -159.010690883999928, 56.788804429000052 ], [ -158.99286861899995, 56.785142320000105 ], [ -158.97606360599994, 56.784857489000089 ], [ -158.979196743999921, 56.805731512000037 ], [ -158.971058722999885, 56.827541408000101 ], [ -158.957712368999893, 56.842474677000141 ], [ -158.945017055999926, 56.842922268000123 ], [ -158.911000128999888, 56.817694403000175 ], [ -158.873646613999938, 56.797837632000082 ], [ -158.848947719999956, 56.789374091000028 ], [ -158.814686652999882, 56.781439520000063 ], [ -158.78075110599994, 56.777533270000063 ], [ -158.756947394999941, 56.781154690000122 ], [ -158.743723110999895, 56.786322333000143 ], [ -158.72870846299989, 56.789374091000028 ], [ -158.698597785999851, 56.791083075000031 ], [ -158.681467251999919, 56.786607164000074 ], [ -158.655751105999855, 56.767645575000145 ], [ -158.639637824999909, 56.763739325000145 ], [ -158.653920050999886, 56.805365302000112 ], [ -158.653797980999911, 56.817206122000087 ], [ -158.651437954999864, 56.826483466000141 ], [ -158.652821417999945, 56.836249091000084 ], [ -158.682443813999896, 56.86933014500012 ], [ -158.689076300999943, 56.884507554000109 ], [ -158.688954230999883, 56.939601955000157 ], [ -158.694894985999895, 56.969183661000116 ], [ -158.694406704999921, 56.979803778000147 ], [ -158.688059048999889, 57.007025458000058 ], [ -158.68211829299986, 57.022040106000176 ], [ -158.652088995999918, 57.059759833000058 ], [ -158.607899542999917, 57.100978908000016 ], [ -158.312448696999923, 57.314886786000116 ], [ -158.300770636999914, 57.319281317 ], [ -158.284372524999924, 57.322943427000055 ], [ -158.182687954999949, 57.362005927000112 ], [ -158.058094855999883, 57.367092190000122 ], [ -158.063669399999895, 57.377183335 ], [ -158.073475714999915, 57.381537177 ], [ -158.085886196999923, 57.382066148000078 ], [ -158.099069790999891, 57.380764065000065 ], [ -158.079660610999895, 57.3966332050001 ], [ -158.017079230999855, 57.428534247000115 ], [ -157.996327277999882, 57.446234442000119 ], [ -157.961293097999885, 57.484198309000035 ], [ -157.940744594999927, 57.497463283000158 ], [ -157.872792120999861, 57.513617255000113 ], [ -157.786610480999911, 57.556097723000093 ], [ -157.757761196999866, 57.564276434000092 ], [ -157.735951300999943, 57.558823960000055 ], [ -157.72297115799995, 57.564764716000084 ], [ -157.709665493999921, 57.568670966000084 ], [ -157.680653449999909, 57.572495835 ], [ -157.691639777999882, 57.557928778000147 ], [ -157.683216925999943, 57.540106512000094 ], [ -157.652780727999868, 57.503607489000146 ], [ -157.666615363999881, 57.489203192000062 ], [ -157.65672766799986, 57.483587958000086 ], [ -157.509388800999886, 57.476263739000061 ], [ -157.513661261999857, 57.466498114000117 ], [ -157.516224738999881, 57.462632554000109 ], [ -157.478952602999925, 57.483099677 ], [ -157.445505337999947, 57.483303127000127 ], [ -157.428700324999937, 57.485256252000099 ], [ -157.41380774599989, 57.489935614 ], [ -157.395578579999892, 57.502427476000108 ], [ -157.39513098899991, 57.512762762000122 ], [ -157.407419399999952, 57.522040106000176 ], [ -157.427438930999926, 57.53156159100017 ], [ -157.418446417999917, 57.539455471000124 ], [ -157.407704230999911, 57.546047268000038 ], [ -157.398060675999943, 57.55414459800015 ], [ -157.392079230999911, 57.566310940000122 ], [ -157.407093878999945, 57.561265367000019 ], [ -157.439442511999943, 57.556586005000085 ], [ -157.454782680999898, 57.552069403000033 ], [ -157.443714972999885, 57.537298895000148 ], [ -157.419748501999891, 57.512640692000147 ], [ -157.41380774599989, 57.497463283000158 ], [ -157.51390540299991, 57.509751695000105 ], [ -157.533558722999885, 57.507310288999989 ], [ -157.543405727999897, 57.500311591000113 ], [ -157.556101040999948, 57.494818427000084 ], [ -157.569569464999915, 57.49119700700011 ], [ -157.581735805999926, 57.489935614 ], [ -157.595407680999955, 57.493231512000037 ], [ -157.597523566999882, 57.500962632000054 ], [ -157.591297980999911, 57.517889716000028 ], [ -157.587269660999937, 57.563177802000055 ], [ -157.590646938999953, 57.584214585 ], [ -157.602162238999881, 57.603501695000105 ], [ -157.603505011999886, 57.608547268000152 ], [ -157.600778774999924, 57.612982489000117 ], [ -157.598622199999909, 57.617824611000017 ], [ -157.602162238999881, 57.624009507000082 ], [ -157.607533331999946, 57.62799713700015 ], [ -157.618275519999884, 57.634100653000033 ], [ -157.622670050999943, 57.637640692000119 ], [ -157.630075649999924, 57.641058661000116 ], [ -157.638986782999893, 57.640448309000149 ], [ -157.64476477799991, 57.636664130000142 ], [ -157.643137173999889, 57.630560614000061 ], [ -157.626088019999855, 57.613470770000035 ], [ -157.65013587099989, 57.613674221000068 ], [ -157.671945766999954, 57.618109442000147 ], [ -157.690419074999852, 57.626288153000147 ], [ -157.704579230999911, 57.637640692000119 ], [ -157.709909633999956, 57.652533270000063 ], [ -157.710031704999921, 57.674017645 ], [ -157.70653235599994, 57.695379950000145 ], [ -157.701161261999886, 57.709662177000055 ], [ -157.708811001999891, 57.729925848000065 ], [ -157.698353644999941, 57.759466864000117 ], [ -157.667062954999892, 57.818915106000148 ], [ -157.644602016999869, 57.878241278000033 ], [ -157.636667446999923, 57.909369208000143 ], [ -157.630116339999915, 57.978461005000142 ], [ -157.615183071999866, 58.041164455000128 ], [ -157.610096808999856, 58.092352606000091 ], [ -157.605539516999897, 58.105210679000109 ], [ -157.591297980999911, 58.127386786000088 ], [ -157.579457160999937, 58.140366929000081 ], [ -157.553293423999889, 58.162054755000057 ], [ -157.543527798999861, 58.175848700000145 ], [ -157.519764777999853, 58.167385158000044 ], [ -157.48578854099992, 58.165472723000065 ], [ -157.451649542999917, 58.168768622000115 ], [ -157.427438930999926, 58.175848700000145 ], [ -157.40965735599994, 58.188625393 ], [ -157.398752407999865, 58.199530341000084 ], [ -157.38422604099992, 58.207098700000031 ], [ -157.355458136999886, 58.209947007000082 ], [ -157.19432532499988, 58.193915106000176 ], [ -157.180409308999913, 58.189439195000105 ], [ -157.170643683999856, 58.182684637000179 ], [ -157.164051886999886, 58.175116278000033 ], [ -157.155384894999884, 58.169501044000029 ], [ -157.139475063999868, 58.168402411 ], [ -157.163319464999944, 58.191555080000128 ], [ -157.187082485999952, 58.204901434000035 ], [ -157.347523566999939, 58.239203192 ], [ -157.379628058999913, 58.237250067000062 ], [ -157.433542446999923, 58.221909898000106 ], [ -157.457468227999868, 58.220892645000148 ], [ -157.482655402999939, 58.230414130000142 ], [ -157.529042120999918, 58.256008205000015 ], [ -157.545399542999917, 58.273586330000128 ], [ -157.537302212999919, 58.291896877000013 ], [ -157.568470831999889, 58.320746161000116 ], [ -157.562082485999866, 58.363674221000011 ], [ -157.502674933999913, 58.463690497000144 ], [ -157.457875128999888, 58.507879950000031 ], [ -157.43614661399991, 58.521633205000128 ], [ -157.382517055999926, 58.536363023000135 ], [ -157.358591274999952, 58.546372789000102 ], [ -157.267282680999898, 58.620266018000038 ], [ -157.134348110999952, 58.686835028000118 ], [ -157.115223761999886, 58.699652411000145 ], [ -157.091786261999914, 58.709784247000087 ], [ -156.996083136999943, 58.723822333000058 ], [ -156.969186977999868, 58.732245184000092 ], [ -156.94086666599992, 58.737534898 ], [ -156.94086666599992, 58.744370835 ], [ -156.978342251999948, 58.738999742000047 ], [ -157.023671027999853, 58.726507880000113 ], [ -157.061879035999937, 58.726223049000097 ], [ -157.077992316999882, 58.757391669000086 ], [ -157.068796352999925, 58.778469143 ], [ -157.002268032999922, 58.839992580000072 ], [ -157.025502081999946, 58.86347077000012 ], [ -157.022694464999915, 58.869696356000091 ], [ -157.009714321999894, 58.881537177000055 ], [ -156.988596157999893, 58.895209052 ], [ -156.985340949999937, 58.903265692000119 ], [ -156.985585089999887, 58.910142320000134 ], [ -156.987375454999892, 58.914699611000074 ], [ -156.988596157999893, 58.915716864000146 ], [ -156.982411261999914, 58.943345445000048 ], [ -156.976307745999918, 58.953517971000096 ], [ -156.961293097999885, 58.963446356000091 ], [ -156.922108527999853, 58.976223049000126 ], [ -156.882517055999926, 58.983954169000143 ], [ -156.860340949999852, 58.993882554000052 ], [ -156.851633266999897, 59.018215236000017 ], [ -156.851429816999939, 59.077093817 ], [ -156.842884894999884, 59.103216864000146 ], [ -156.822865363999938, 59.122626044000143 ], [ -156.800038214999915, 59.138739325000031 ], [ -156.783192511999914, 59.155218817000119 ], [ -156.853627081999917, 59.119940497000172 ], [ -156.865101691999882, 59.111232815 ], [ -156.867258266999954, 59.102728583000058 ], [ -156.878041144999884, 59.078355210000026 ], [ -156.886830206999946, 59.067938544000114 ], [ -156.884632941999939, 59.055405992000104 ], [ -156.880441860999895, 59.041652736000103 ], [ -156.878773566999882, 59.032375393000152 ], [ -156.889719204999864, 59.012518622000059 ], [ -156.910104946999923, 58.997259833000086 ], [ -156.935414191999882, 58.987494208000115 ], [ -156.991810675999943, 58.981756903000147 ], [ -157.01581783799989, 58.974066473000121 ], [ -157.034901495999861, 58.959418036000116 ], [ -157.050729946999923, 58.936183986000017 ], [ -157.069569464999944, 58.899725653000061 ], [ -157.084462042999917, 58.886664130000057 ], [ -157.135568813999896, 58.877346096000124 ], [ -157.254465298999946, 58.84048086100016 ], [ -157.373117641999897, 58.824774481000091 ], [ -157.386830206999917, 58.820868231000091 ], [ -157.400217251999919, 58.815497137000037 ], [ -157.410023566999882, 58.809515692000119 ], [ -157.424020962999919, 58.803045966000028 ], [ -157.475209113999881, 58.799627997000115 ], [ -157.56817851299985, 58.747893215000133 ], [ -157.657459716999881, 58.736186718000098 ], [ -157.814181904999884, 58.687708844000113 ], [ -157.978098110999895, 58.647528387000094 ], [ -158.15367591099988, 58.613999742000075 ], [ -158.203358527999853, 58.612982489 ], [ -158.263010219999956, 58.623521226000079 ], [ -158.31586666599992, 58.646551825000031 ], [ -158.345448370999861, 58.682928778000118 ], [ -158.335804816999911, 58.701483466000028 ], [ -158.345285610999895, 58.724066473 ], [ -158.363596157999893, 58.744614976000136 ], [ -158.380197719999927, 58.757391669000086 ], [ -158.408314581999946, 58.770086981000063 ], [ -158.546131964999915, 58.799261786 ], [ -158.557728644999941, 58.806463934000035 ], [ -158.566151495999918, 58.819484768 ], [ -158.565663214999915, 58.830633856000034 ], [ -158.559641079999892, 58.839992580000072 ], [ -158.551503058999913, 58.847398179000052 ], [ -158.538034633999928, 58.856268622000087 ], [ -158.528431769999941, 58.860907294000029 ], [ -158.519968227999897, 58.867336330000128 ], [ -158.509958462999919, 58.881537177000055 ], [ -158.49547278599988, 58.911688544000171 ], [ -158.488840298999889, 58.922512111000074 ], [ -158.499256964999887, 58.948797919000086 ], [ -158.477487758999928, 58.963202216000141 ], [ -158.421131964999859, 58.977118231000034 ], [ -158.431507941999882, 58.979437567 ], [ -158.439401821999923, 58.983547268000152 ], [ -158.443226691999939, 58.989691473000121 ], [ -158.44163977799991, 58.998236395000148 ], [ -158.451527472999942, 58.997463283000044 ], [ -158.460519985999952, 58.994777736000131 ], [ -158.468617316999882, 58.990220445000105 ], [ -158.475778774999924, 58.983954169000143 ], [ -158.497507290999891, 58.993963934000035 ], [ -158.491322394999912, 59.001532294000086 ], [ -158.458729620999861, 59.014715887000037 ], [ -158.443552212999862, 59.025336005000085 ], [ -158.424305792999917, 59.032782294000143 ], [ -158.403431769999884, 59.037176825000031 ], [ -158.383290167999917, 59.038560289000102 ], [ -158.172800258999928, 59.013006903000033 ], [ -158.137155727999868, 58.999457098000065 ], [ -158.104603644999912, 58.979885158000101 ], [ -158.078561977999925, 58.956691799000154 ], [ -158.069528774999924, 58.943304755000057 ], [ -158.070627407999893, 58.925848700000088 ], [ -158.064279751999948, 58.908270575000145 ], [ -158.056833462999862, 58.899115302 ], [ -158.044504360999923, 58.888373114000061 ], [ -158.030140753999945, 58.879055080000128 ], [ -158.017079230999855, 58.874090887000179 ], [ -158.017323370999918, 58.886664130000057 ], [ -158.013864712999919, 58.895697333000086 ], [ -158.006662563999896, 58.900824286 ], [ -157.995350714999915, 58.902044989 ], [ -157.995350714999915, 58.908270575000145 ], [ -158.028065558999913, 58.907538153000033 ], [ -158.04133053299995, 58.911444403000033 ], [ -158.050607876999891, 58.922512111000074 ], [ -158.034169074999909, 58.942816473000065 ], [ -158.052316860999895, 58.971340236000074 ], [ -158.102121548999889, 59.014715887000037 ], [ -158.140248175999886, 59.03620026200015 ], [ -158.23383541599992, 59.039211330000157 ], [ -158.316639777999939, 59.06244538 ], [ -158.402699347999942, 59.073675848000093 ], [ -158.44163977799991, 59.086981512000094 ], [ -158.473215298999889, 59.104803778000175 ], [ -158.489328579999892, 59.117824611000074 ], [ -158.496286587999862, 59.131415106000034 ], [ -158.498890753999888, 59.143866278000061 ], [ -158.505563930999926, 59.145982164000046 ], [ -158.514393683999884, 59.145005601 ], [ -158.523548956999861, 59.14842357 ], [ -158.52867591099988, 59.15615469 ], [ -158.530832485999895, 59.163804429000137 ], [ -158.534494594999927, 59.170599677000055 ], [ -158.544056769999912, 59.175767320000077 ], [ -158.549061652999853, 59.15766022300015 ], [ -158.547474738999938, 59.144842841000028 ], [ -158.537220831999889, 59.137193101 ], [ -158.516102667999888, 59.134751695000048 ], [ -158.516713019999941, 59.11151764500012 ], [ -158.45726477799991, 59.075873114000089 ], [ -158.462147589999859, 59.052801825000117 ], [ -158.48078365799995, 59.044094143000123 ], [ -158.521188930999926, 59.037339585 ], [ -158.537220831999889, 59.02558014500012 ], [ -158.540516730999911, 59.020575262000179 ], [ -158.542591925999943, 59.015611070000134 ], [ -158.543690558999913, 59.009711005 ], [ -158.544056769999912, 59.001654364000061 ], [ -158.547311977999954, 58.993475653000147 ], [ -158.554310675999943, 58.988918361000103 ], [ -158.561350063999896, 58.985500393000095 ], [ -158.57787024599989, 58.959173895000092 ], [ -158.608998175999886, 58.933172919000114 ], [ -158.644398566999882, 58.911281643000066 ], [ -158.688465949999909, 58.895575262000094 ], [ -158.709095831999917, 58.88287995000006 ], [ -158.729481574999909, 58.873602606000091 ], [ -158.746408657999893, 58.877834377000013 ], [ -158.753366665999863, 58.890448309000092 ], [ -158.748036261999914, 58.900213934000035 ], [ -158.737497524999924, 58.911444403000033 ], [ -158.728993292999917, 58.928697007000139 ], [ -158.762644008999928, 58.94367096600017 ], [ -158.777821417999917, 58.952622789000102 ], [ -158.790476040999891, 58.963446356000091 ], [ -158.75413977799991, 58.972154038999989 ], [ -158.739735480999911, 58.979885158000101 ], [ -158.746408657999893, 58.994818427000141 ], [ -158.825266079999949, 58.977118231000034 ], [ -158.810495571999951, 58.965969143 ], [ -158.772043423999946, 58.920477606000034 ], [ -158.769968227999925, 58.911078192000119 ], [ -158.793894008999899, 58.816351630000142 ], [ -158.783558722999885, 58.799505927000141 ], [ -158.782460089999944, 58.783880927000055 ], [ -158.787953253999888, 58.769761460000112 ], [ -158.797311977999925, 58.757391669000086 ], [ -158.811879035999937, 58.74445221600017 ], [ -158.827951626999919, 58.736273505000085 ], [ -158.846913214999915, 58.732001044000143 ], [ -158.869943813999896, 58.730698960000055 ], [ -158.877919074999852, 58.732367255000085 ], [ -158.885609503999888, 58.736802476000051 ], [ -158.89130611899995, 58.743353583000115 ], [ -158.893503383999928, 58.751166083000115 ], [ -158.89008541599992, 58.763617255000142 ], [ -158.881540493999921, 58.768459377000042 ], [ -158.859364386999943, 58.771673895000092 ], [ -158.81977291599992, 58.783921617000047 ], [ -158.804310675999886, 58.794663804000052 ], [ -158.807850714999859, 58.809515692000119 ], [ -158.827137824999909, 58.819403387000037 ], [ -158.851022915999863, 58.82021719000015 ], [ -158.873239712999919, 58.813177802000084 ], [ -158.887318488999881, 58.799627997000115 ], [ -158.861439581999889, 58.799465236000131 ], [ -158.874134894999941, 58.789740302 ], [ -158.900339321999951, 58.778957424000097 ], [ -158.914621548999946, 58.775376695000105 ], [ -158.912953253999945, 58.757635809000035 ], [ -158.90843665299991, 58.741197007000139 ], [ -158.889395851999893, 58.706292953000158 ], [ -158.851595096999887, 58.677090568000139 ], [ -158.820151044999932, 58.614033749000143 ], [ -158.793894008999899, 58.56932200700011 ], [ -158.792087045999864, 58.570416545000072 ], [ -158.779042120999918, 58.562892971000096 ], [ -158.772653774999924, 58.558783270000148 ], [ -158.770008917999917, 58.54913971600017 ], [ -158.771433071999894, 58.52464427300005 ], [ -158.770008917999917, 58.51845937700007 ], [ -158.758493618999893, 58.507269598000065 ], [ -158.745920376999891, 58.505113023000078 ], [ -158.733631964999944, 58.506252346000011 ], [ -158.722849087999919, 58.504828192000119 ], [ -158.708688930999926, 58.49225495000006 ], [ -158.72008216099988, 58.483587958000143 ], [ -158.73969479099992, 58.474188544000029 ], [ -158.759755011999914, 58.447088934000092 ], [ -158.782053188999953, 58.437160549000097 ], [ -158.807118292999917, 58.430731512000179 ], [ -158.825266079999949, 58.429022528000175 ], [ -158.825266079999949, 58.422186591000141 ], [ -158.797311977999925, 58.422186591000141 ], [ -158.829660610999923, 58.404771226 ], [ -158.881733978999932, 58.399620140000124 ], [ -158.939761181999899, 58.398070541000081 ], [ -159.014855729999908, 58.414548234000094 ], [ -159.051258917999917, 58.42470937700007 ], [ -159.071644660999937, 58.442694403000118 ], [ -159.058420376999891, 58.438381252000013 ], [ -159.046335415999863, 58.43829987200003 ], [ -159.036610480999911, 58.443793036000059 ], [ -159.030710415999891, 58.456366278000147 ], [ -159.055734829999892, 58.455877997000144 ], [ -159.074696417999917, 58.458726304000024 ], [ -159.083688930999926, 58.469061591000113 ], [ -159.078480597999942, 58.491115627000013 ], [ -159.11461341099988, 58.490057684000149 ], [ -159.150990363999881, 58.518784898000106 ], [ -159.208851691999882, 58.586737372000172 ], [ -159.298939581999917, 58.672349351000079 ], [ -159.384954426999911, 58.755823955000139 ], [ -159.482736782999893, 58.816066799000012 ], [ -159.506906704999892, 58.822170315000093 ], [ -159.517933722999942, 58.826320705000128 ], [ -159.545033331999889, 58.844305731000148 ], [ -159.551462368999864, 58.847398179000052 ], [ -159.579294399999924, 58.846177476000136 ], [ -159.594064556999882, 58.831711013000174 ], [ -159.633778449999909, 58.83470286699999 ], [ -159.6609183059999, 58.839442828000145 ], [ -159.63024296099988, 58.852715096000068 ], [ -159.600968233999907, 58.885454495 ], [ -159.58694062899994, 58.90746285400003 ], [ -159.617486564999922, 58.931323761000144 ], [ -159.63814764199995, 58.935097728000116 ], [ -159.651335474999883, 58.935554168000053 ], [ -159.680182550999916, 58.93175312800004 ], [ -159.709648881999897, 58.928656857000092 ], [ -159.738127269999893, 58.928247205000119 ], [ -159.728762406999891, 58.918736967000186 ], [ -159.725177230999918, 58.910438944000148 ], [ -159.734624587999889, 58.892691828000082 ], [ -159.755731608999952, 58.881467982000018 ], [ -159.768229370999904, 58.865531335000085 ], [ -159.743328949999864, 58.854477447000036 ], [ -159.752923502999863, 58.840825769000091 ], [ -159.765972843999918, 58.831369322000128 ], [ -159.776926526999944, 58.848779473000135 ], [ -159.798500224999884, 58.849832911000149 ], [ -159.807039767999896, 58.844662271000075 ], [ -159.805977692999875, 58.837465301000051 ], [ -159.7994846389999, 58.831460848000077 ], [ -159.795920053999907, 58.823162764000145 ], [ -159.786180632999901, 58.817039471000115 ], [ -159.794851364999857, 58.800276818000057 ], [ -159.816697940999916, 58.793831596000032 ], [ -159.839955206999917, 58.792669989000117 ], [ -159.866359868999893, 58.779123037000105 ], [ -159.906129611999944, 58.765405788000137 ], [ -159.9114801099999, 58.775800839000127 ], [ -159.929539336999937, 58.790007464 ], [ -159.962961391999954, 58.820054429 ], [ -159.985218878999888, 58.835150458 ], [ -159.990223761999914, 58.839992580000072 ], [ -159.983347727999899, 58.849227542000065 ], [ -159.983302680999884, 58.860806849000156 ], [ -159.98924518799987, 58.866109872 ], [ -159.997141079999949, 58.874090887000179 ], [ -160.018379545999949, 58.880378119000071 ], [ -160.045815100999903, 58.882590479000086 ], [ -160.070564778999881, 58.879597322000123 ], [ -160.084872863999919, 58.875601642000035 ], [ -160.088935699999865, 58.868909665 ], [ -160.09222354699989, 58.863216499000046 ], [ -160.096862564999924, 58.857223613000073 ], [ -160.112912047999856, 58.861107008000133 ], [ -160.132313605999855, 58.866400458000058 ], [ -160.153095172999912, 58.861284684000097 ], [ -160.165253477999954, 58.864381932000114 ], [ -160.150248658999942, 58.880938240000049 ], [ -160.158070441999882, 58.899318752000127 ], [ -160.152201675999891, 58.916104053000097 ], [ -160.2018564789999, 58.90841655800007 ], [ -160.222335342999941, 58.902204480000151 ], [ -160.228869440999944, 58.890810878000153 ], [ -160.24644173, 58.886895905000145 ], [ -160.253062719999917, 58.898674049000178 ], [ -160.25719153599988, 58.911932684000121 ], [ -160.254099087999862, 58.935980536000059 ], [ -160.256662563999896, 58.94623444200009 ], [ -160.267689581999917, 58.950384833000115 ], [ -160.287650626999948, 58.93239836100004 ], [ -160.301462911999948, 58.945070658000148 ], [ -160.328930845999906, 58.941428804000012 ], [ -160.331128669999941, 58.951719836000095 ], [ -160.319203253999888, 58.956691799000154 ], [ -160.317331508999928, 58.965155341000113 ], [ -160.301225850999884, 58.971664112000141 ], [ -160.296022363999924, 58.976973024000117 ], [ -160.267538946999878, 58.977495470000079 ], [ -160.25719153599988, 58.983954169000143 ], [ -160.255116339999915, 58.990301825000174 ], [ -160.258046027999853, 58.99542877800009 ], [ -160.264597133999928, 59.001654364000061 ], [ -160.269398566999939, 59.011704820000134 ], [ -160.280384894999884, 59.018500067000062 ], [ -160.292917446999894, 59.023667710000055 ], [ -160.30219479099992, 59.028957424000126 ], [ -160.306874152999853, 59.032416083000143 ], [ -160.317250128999945, 59.037746486000103 ], [ -160.322336391999897, 59.042303778000147 ], [ -160.334723123999879, 59.053837343000097 ], [ -160.320871548999918, 59.061346747000059 ], [ -160.325428839999859, 59.066555080000128 ], [ -160.352169130999926, 59.070659380000095 ], [ -160.401535572999876, 59.048843531000088 ], [ -160.529519638999943, 59.001903958000113 ], [ -160.667155750999939, 58.94764329000013 ], [ -160.694150671999921, 58.92824736600015 ], [ -160.768495646999895, 58.896425942000135 ], [ -160.833719662999897, 58.812546350000147 ], [ -160.82748648799992, 58.83726516500009 ], [ -160.829368048999925, 58.852646541000169 ], [ -160.842441908999945, 58.867961745000102 ], [ -160.867869269999886, 58.878817388000087 ], [ -160.888551184999955, 58.884101928000078 ], [ -160.907750356999912, 58.876391108000163 ], [ -160.961413968999864, 58.873247005000067 ], [ -160.979394981999917, 58.864130509000105 ], [ -160.99333381699995, 58.846687664000157 ], [ -161.033227387999915, 58.84247571600018 ], [ -161.076177251999923, 58.817573406000136 ], [ -161.109585955999876, 58.811507963000011 ], [ -161.137587309999901, 58.799172793000096 ], [ -161.173218142999872, 58.79756598500002 ], [ -161.179700670999893, 58.782725861000145 ], [ -161.244074198999954, 58.782748149000113 ], [ -161.271973322999884, 58.787092971000092 ], [ -161.291244389999918, 58.792609707000011 ], [ -161.278635219999956, 58.810248114000146 ], [ -161.271351691999854, 58.8126488300001 ], [ -161.271351691999854, 58.820054429 ], [ -161.300404425999943, 58.81464264500012 ], [ -161.306141730999911, 58.8126488300001 ], [ -161.310292120999918, 58.805487372000144 ], [ -161.312570766999897, 58.796454169000143 ], [ -161.310658331999946, 58.788641669000143 ], [ -161.302438930999955, 58.785345770000035 ], [ -161.289781637999937, 58.777946364000016 ], [ -161.262952707999943, 58.776689813000147 ], [ -161.290109829999892, 58.770453192000062 ], [ -161.310513272999941, 58.748074371000101 ], [ -161.357469443999946, 58.726245282000079 ], [ -161.367131858999869, 58.71146943300009 ], [ -161.374582237999931, 58.699709848000097 ], [ -161.376221999999899, 58.686801874000125 ], [ -161.374501105999883, 58.672349351000079 ], [ -161.361904657999929, 58.668457760000038 ], [ -161.327100737999899, 58.67828065800002 ], [ -161.301284957999883, 58.681817701000014 ], [ -161.363887635999845, 58.659647369000183 ], [ -161.488325137999936, 58.640392314000124 ], [ -161.535995509999879, 58.623292881000097 ], [ -161.550282624999909, 58.606555617000183 ], [ -161.5623725989999, 58.602024664000012 ], [ -161.585031704999949, 58.607611395000148 ], [ -161.596913214999915, 58.607163804000052 ], [ -161.61266028599988, 58.604925848000065 ], [ -161.639759894999884, 58.595160223000121 ], [ -161.665638800999886, 58.590806382000139 ], [ -161.676340298999946, 58.585394598000093 ], [ -161.685251430999955, 58.577826239000146 ], [ -161.693104620999947, 58.56932200700011 ], [ -161.707508917999917, 58.561183986000103 ], [ -161.726673956999889, 58.55849844 ], [ -161.764841274999924, 58.559393622000115 ], [ -161.752186652999882, 58.577093817 ], [ -161.720529751999891, 58.599269924000069 ], [ -161.710194464999915, 58.613999742000075 ], [ -161.723500128999916, 58.625555731000091 ], [ -161.738148566999939, 58.634507554000109 ], [ -161.756418423999889, 58.643133856000034 ], [ -161.765085415999891, 58.645086981000176 ], [ -161.761708136999857, 58.637884833000143 ], [ -161.761341925999858, 58.629095770000063 ], [ -161.767079230999911, 58.617743231000091 ], [ -161.762885027999914, 58.590986179000183 ], [ -161.779530402999939, 58.61261627800009 ], [ -161.797678188999953, 58.62323639500012 ], [ -161.83430122999988, 58.626482401000104 ], [ -161.912845309999909, 58.631862979000161 ], [ -161.936516006999909, 58.6296918500001 ], [ -161.959685143999877, 58.623281576000139 ], [ -161.980139831999907, 58.628373997000139 ], [ -162.012099270999954, 58.620714223000064 ], [ -162.03582065299986, 58.625851170000104 ], [ -162.077171377999889, 58.620893308000134 ], [ -162.137766079999949, 58.63385651200015 ], [ -162.176053606999915, 58.644923451000139 ], [ -162.121775083999864, 58.663856137000053 ], [ -162.067087368999921, 58.666652736000074 ], [ -162.046009894999884, 58.682928778000118 ], [ -162.030100063999953, 58.675930080000128 ], [ -161.990305141999869, 58.679103908000101 ], [ -161.965931769999912, 58.674750067 ], [ -161.95445716099988, 58.676459052000112 ], [ -161.949777798999946, 58.675482489000146 ], [ -161.949208136999886, 58.673041083 ], [ -161.950388149999924, 58.66425202000012 ], [ -161.949777798999946, 58.661810614 ], [ -161.94355221299989, 58.656887111000131 ], [ -161.939930792999917, 58.652736721000011 ], [ -161.934437628999888, 58.649644273000106 ], [ -161.922474738999881, 58.648138739000061 ], [ -161.891102667999917, 58.653713283000073 ], [ -161.858713344999927, 58.669419664000046 ], [ -161.842844204999892, 58.69163646 ], [ -161.867488510999891, 58.704048422000156 ], [ -161.865418462999855, 58.716263234000067 ], [ -161.821888800999943, 58.733547268 ], [ -161.809803839999944, 58.74095286699999 ], [ -161.795847133999871, 58.75389232 ], [ -161.786244269999884, 58.758734442000062 ], [ -161.758615688999896, 58.757391669000086 ], [ -161.717375500999879, 58.754842889000045 ], [ -161.677397905999953, 58.773526668000088 ], [ -161.655588344999927, 58.806463934000035 ], [ -161.684840212999859, 58.818585860999988 ], [ -161.712163293999907, 58.812970081000017 ], [ -161.733530550999916, 58.807902914000081 ], [ -161.753117224999954, 58.789869757000147 ], [ -161.762125892999904, 58.772668403000026 ], [ -161.774736872999881, 58.770506674000146 ], [ -161.762644008999956, 58.80499909100017 ], [ -161.75926673099994, 58.815497137000037 ], [ -161.758615688999896, 58.826320705000128 ], [ -161.762806769999912, 58.835638739000089 ], [ -161.769631311999888, 58.848728061000045 ], [ -161.777595875999936, 58.857714463 ], [ -161.785521100999915, 58.877619205000158 ], [ -161.790668535999941, 58.899866805 ], [ -161.792795376999891, 58.96478913 ], [ -161.794911261999886, 58.974514065000122 ], [ -161.799549933999913, 58.983954169000143 ], [ -161.807728644999941, 58.989569403000147 ], [ -161.834706183999884, 59.002875067000062 ], [ -161.840524868999921, 59.008205471000124 ], [ -161.851633266999954, 59.023179429000081 ], [ -161.855824347999885, 59.033758856000034 ], [ -161.850453253999945, 59.038560289000102 ], [ -161.845570441999882, 59.039740302000141 ], [ -161.835926886999914, 59.044867255000057 ], [ -161.829701300999943, 59.046047268000095 ], [ -161.822092251999891, 59.044378973000065 ], [ -161.821237758999899, 59.040432033000073 ], [ -161.822255011999857, 59.035874742000132 ], [ -161.820057745999861, 59.032375393000152 ], [ -161.817941860999952, 59.030096747000172 ], [ -161.815907355999911, 59.026353257000139 ], [ -161.812611456999889, 59.022040106000034 ], [ -161.806385870999918, 59.018133856000034 ], [ -161.798573370999918, 59.017482815000093 ], [ -161.771677212999862, 59.02558014500012 ], [ -161.742421027999939, 59.030218817000147 ], [ -161.725168423999946, 59.035101630000113 ], [ -161.694040493999921, 59.054917710000112 ], [ -161.614003058999856, 59.080755927000055 ], [ -161.608998175999915, 59.085516669000143 ], [ -161.60484778599988, 59.096380927000141 ], [ -161.600331183999913, 59.101263739 ], [ -161.594471808999884, 59.101996161000116 ], [ -161.577748175999943, 59.099920966000113 ], [ -161.573068813999924, 59.101263739 ], [ -161.569162563999924, 59.115057684000121 ], [ -161.577870245999918, 59.12051015800013 ], [ -161.610300258999928, 59.120550848000121 ], [ -161.613270636999914, 59.123968817000147 ], [ -161.616403774999895, 59.131415106000034 ], [ -161.62328040299991, 59.138820705000015 ], [ -161.637888149999924, 59.142238674000041 ], [ -161.646717902999882, 59.139349677 ], [ -161.671009894999884, 59.125311591000056 ], [ -161.682932094999899, 59.120550848000121 ], [ -161.723133917999917, 59.115790106000034 ], [ -161.840524868999921, 59.120550848000121 ], [ -161.873483852999925, 59.111029364000146 ], [ -161.888376430999955, 59.094387111000103 ], [ -161.880970831999889, 59.078924872000172 ], [ -161.847401495999918, 59.07330963700015 ], [ -161.847401495999918, 59.066555080000128 ], [ -161.896473761999886, 59.075384833 ], [ -161.939442511999943, 59.098578192000119 ], [ -161.974110480999911, 59.131415106000034 ], [ -162.02953040299991, 59.230129299000069 ], [ -162.042917446999894, 59.248358466000141 ], [ -162.051503058999913, 59.270168361000017 ], [ -162.038685675999886, 59.28937409100017 ], [ -162.020008917999917, 59.30174388200011 ], [ -161.998239712999919, 59.312933661000116 ], [ -162.036203579999949, 59.281887111000103 ], [ -162.043649868999921, 59.265773830000128 ], [ -162.034982876999948, 59.25088125200007 ], [ -162.009022589999915, 59.237534898000078 ], [ -161.983102993999921, 59.253729559000121 ], [ -161.968251105999883, 59.280829169000143 ], [ -161.970895962999862, 59.306708075000145 ], [ -161.964344855999883, 59.315334377000156 ], [ -161.962473110999895, 59.328070380000113 ], [ -161.964711066999882, 59.341945705000015 ], [ -161.970895962999862, 59.353908596000124 ], [ -161.959462042999917, 59.375067450000031 ], [ -161.946603969999899, 59.387762762000094 ], [ -161.929432745999947, 59.39386627800009 ], [ -161.905100063999896, 59.395453192000119 ], [ -161.883168097999885, 59.422267971000011 ], [ -161.867543097999885, 59.433091539000102 ], [ -161.853586391999897, 59.422186591000028 ], [ -161.847401495999918, 59.422186591000028 ], [ -161.837595180999926, 59.439927476000136 ], [ -161.821237758999899, 59.463364976000108 ], [ -161.801625128999945, 59.479193427000141 ], [ -161.770985480999911, 59.469956773 ], [ -161.755726691999882, 59.472642320000048 ], [ -161.740793423999918, 59.478705145000148 ], [ -161.730661587999947, 59.484808661000145 ], [ -161.717233852999954, 59.495835679 ], [ -161.713937954999921, 59.501369533000016 ], [ -161.859242316999882, 59.628119208000086 ], [ -161.867258266999954, 59.655503648000135 ], [ -161.876210089999859, 59.667710679000109 ], [ -161.879221157999893, 59.679592190000065 ], [ -161.879831508999928, 59.689846096000096 ], [ -161.881540493999921, 59.697170315 ], [ -161.889637824999852, 59.706244208 ], [ -161.909006313999896, 59.718817450000088 ], [ -161.994130011999886, 59.811102606000034 ], [ -162.081776495999918, 59.87787506700009 ], [ -162.094553188999953, 59.894029039000046 ], [ -162.101267055999898, 59.915594794000143 ], [ -162.10008704299986, 59.951117255000113 ], [ -162.10875403599988, 59.96515534100017 ], [ -162.158070441999939, 59.976507880000057 ], [ -162.178781704999949, 59.99042389500012 ], [ -162.196237758999928, 60.008246161 ], [ -162.209828253999888, 60.025458075000031 ], [ -162.231068488999853, 60.064398505000113 ], [ -162.240061001999891, 60.089789130000142 ], [ -162.234364386999886, 60.101223049000097 ], [ -162.224069790999863, 60.105454820000105 ], [ -162.214182094999956, 60.115627346000153 ], [ -162.206654425999886, 60.127997137000094 ], [ -162.203602667999917, 60.138739325000117 ], [ -162.203195766999897, 60.14752838700015 ], [ -162.203561977999925, 60.153306382000139 ], [ -162.207386847999942, 60.159613348000065 ], [ -162.24555416599992, 60.194769598000121 ], [ -162.251410015999909, 60.201419183 ], [ -162.221262173999918, 60.201849677 ], [ -162.186268683999913, 60.209865627000127 ], [ -162.16156260199989, 60.216366740000169 ], [ -162.161158684999918, 60.232477862000124 ], [ -162.156605597999885, 60.244370835000055 ], [ -162.149037238999938, 60.24518463700015 ], [ -162.161691860999895, 60.250677802 ], [ -162.175241665999863, 60.250637111000017 ], [ -162.203602667999917, 60.24518463700015 ], [ -162.200510219999927, 60.241522528000118 ], [ -162.198353644999941, 60.238267320000077 ], [ -162.181501141999888, 60.232506079000174 ], [ -162.181043975999899, 60.223118739000157 ], [ -162.210438605999911, 60.217962958000086 ], [ -162.248890753999945, 60.214748440000037 ], [ -162.278553839999859, 60.223456122000087 ], [ -162.272572394999941, 60.24518463700015 ], [ -162.290231899999952, 60.242499091000084 ], [ -162.298085089999944, 60.235907294000029 ], [ -162.30011959499987, 60.226996161000088 ], [ -162.299875454999921, 60.217230536000145 ], [ -162.297556118999864, 60.214178778000147 ], [ -162.292673305999898, 60.211900132000082 ], [ -162.287790493999921, 60.210760809000035 ], [ -162.285593227999925, 60.211086330000157 ], [ -162.28453528599988, 60.196966864000117 ], [ -162.285593227999925, 60.196763413999989 ], [ -162.291127081999946, 60.196600653000118 ], [ -162.298329230999883, 60.189195054000137 ], [ -162.30011959499987, 60.180487372000144 ], [ -162.289296027999882, 60.176336981000091 ], [ -162.257676738999919, 60.173847152000164 ], [ -162.236518682999872, 60.162752173000072 ], [ -162.228725608999895, 60.145585875 ], [ -162.238419964999878, 60.13561663500009 ], [ -162.263940250999894, 60.127293915000095 ], [ -162.288355105999926, 60.121593730000157 ], [ -162.297781979999911, 60.116424021000071 ], [ -162.317243017999942, 60.113060354000126 ], [ -162.337651090999913, 60.129653327000156 ], [ -162.343129035999937, 60.139390367000047 ], [ -162.366892055999926, 60.162543036 ], [ -162.372792120999947, 60.170355536 ], [ -162.374948696999951, 60.176336981000091 ], [ -162.3622006249999, 60.180907576 ], [ -162.353586391999897, 60.187567450000117 ], [ -162.347645636999857, 60.190619208 ], [ -162.340443488999938, 60.20766836100016 ], [ -162.341664191999882, 60.21898021000014 ], [ -162.350046352999925, 60.228949286000116 ], [ -162.364369269999884, 60.241766669000143 ], [ -162.412546352999954, 60.272528387000037 ], [ -162.43016516799986, 60.275213934000121 ], [ -162.44697018099987, 60.281968492000075 ], [ -162.458579606999876, 60.295085591000102 ], [ -162.442392438999946, 60.309588292000129 ], [ -162.390474988999927, 60.329466372000056 ], [ -162.333241339999915, 60.400213934000092 ], [ -162.319203253999945, 60.422593492000104 ], [ -162.313547329999864, 60.447211005000113 ], [ -162.303089972999885, 60.470851955000128 ], [ -162.278513149999867, 60.485663153000118 ], [ -162.249989386999857, 60.496649481000176 ], [ -162.22752844999988, 60.508978583000115 ], [ -162.224354620999918, 60.519354559000121 ], [ -162.227406378999888, 60.531927802000112 ], [ -162.22874915299991, 60.542425848000093 ], [ -162.220692511999943, 60.546820380000057 ], [ -162.219960089999915, 60.55215078300013 ], [ -162.222157355999911, 60.577948309000149 ], [ -162.224110480999855, 60.587836005000085 ], [ -162.20771236899995, 60.588934637000122 ], [ -162.191639777999882, 60.593898830000072 ], [ -162.109730597999942, 60.631415106000091 ], [ -162.09784908799989, 60.639349677000055 ], [ -162.061350063999924, 60.651027736000131 ], [ -161.96711178299995, 60.645656643000095 ], [ -161.942982550999915, 60.669745184000121 ], [ -161.957834438999896, 60.675279039000046 ], [ -161.963449673999889, 60.67658112200003 ], [ -161.944935675999886, 60.685003973000093 ], [ -161.881540493999921, 60.703924872000115 ], [ -161.910593227999925, 60.713690497000144 ], [ -161.938221808999913, 60.707668361000131 ], [ -161.965036587999919, 60.69635651200015 ], [ -162.072255011999914, 60.665228583000058 ], [ -162.094431118999864, 60.669745184000121 ], [ -162.088246222999885, 60.68691640800013 ], [ -162.115101691999882, 60.71279531500015 ], [ -162.15375729099992, 60.732489325000088 ], [ -162.183176235999952, 60.731146552000112 ], [ -162.129953579999949, 60.701402085 ], [ -162.121693488999881, 60.693996486000017 ], [ -162.121286587999947, 60.67523834800015 ], [ -162.123361782999893, 60.658921617000132 ], [ -162.133168097999913, 60.64740631700009 ], [ -162.18378658799989, 60.639634507 ], [ -162.237538214999944, 60.624741929000137 ], [ -162.261667446999866, 60.621323960000112 ], [ -162.276315883999871, 60.612941799000069 ], [ -162.284128383999871, 60.593654690000122 ], [ -162.28937740799995, 60.571926174000154 ], [ -162.296457485999923, 60.556463934000035 ], [ -162.299794074999937, 60.551174221000153 ], [ -162.306101040999891, 60.533189195000105 ], [ -162.365915493999921, 60.476629950000117 ], [ -162.374948696999951, 60.464911200000031 ], [ -162.377268032999922, 60.458197333000086 ], [ -162.379261847999857, 60.442531643 ], [ -162.382435675999915, 60.436957098000093 ], [ -162.394154425999915, 60.433091538999989 ], [ -162.428944464999859, 60.436957098000093 ], [ -162.441232876999919, 60.423407294000029 ], [ -162.436024542999917, 60.412543036000145 ], [ -162.424020962999919, 60.400213934000092 ], [ -162.415964321999951, 60.382391669000029 ], [ -162.452015753999916, 60.370754299000012 ], [ -162.464792446999951, 60.372381903000033 ], [ -162.456898566999882, 60.388576565000093 ], [ -162.464344855999855, 60.395982163999989 ], [ -162.49946041599992, 60.381984768 ], [ -162.509226040999863, 60.372870184000121 ], [ -162.497873501999891, 60.361273505000028 ], [ -162.512521938999896, 60.354925848000065 ], [ -162.537790493999864, 60.351019598000093 ], [ -162.549997524999924, 60.344468492000019 ], [ -162.559519008999928, 60.337469794000114 ], [ -162.56781979099992, 60.334173895000092 ], [ -162.574899868999864, 60.336900132000054 ], [ -162.580433722999885, 60.347601630000085 ], [ -162.58568274599989, 60.339422919000143 ], [ -162.590687628999945, 60.335353908000016 ], [ -162.597523566999939, 60.334051825000117 ], [ -162.608347133999928, 60.333929755000142 ], [ -162.608347133999928, 60.327093817000119 ], [ -162.576730923999946, 60.318304755000057 ], [ -162.566761847999885, 60.313462632000082 ], [ -162.591175910999908, 60.307033596000153 ], [ -162.600900844999956, 60.306626695000048 ], [ -162.562204555999926, 60.293850002000013 ], [ -162.553700324999909, 60.286200262000179 ], [ -162.550119594999899, 60.275864976000079 ], [ -162.55219479099992, 60.267157294000086 ], [ -162.56000729099992, 60.261135158000073 ], [ -162.573557094999899, 60.258856512000094 ], [ -162.703317837999862, 60.265692450000031 ], [ -162.657338019999884, 60.251695054000081 ], [ -162.558420376999891, 60.237494208000058 ], [ -162.469186977999925, 60.204901434000092 ], [ -162.450266079999921, 60.191066799000097 ], [ -162.453806118999921, 60.173163153000033 ], [ -162.481800910999937, 60.150580145000063 ], [ -162.493234829999892, 60.136786200000145 ], [ -162.497873501999891, 60.11823151200015 ], [ -162.492990688999953, 60.099188544000143 ], [ -162.483102993999921, 60.086615302000084 ], [ -162.475534633999871, 60.073431708000115 ], [ -162.477365688999953, 60.052801825000088 ], [ -162.485218878999945, 60.035386460000112 ], [ -162.496449347999942, 60.019720770000148 ], [ -162.510243292999945, 60.006740627000156 ], [ -162.525827602999925, 59.997503973000093 ], [ -162.578684048999889, 59.983872789000046 ], [ -162.639759894999884, 59.981390692000119 ], [ -162.700388149999924, 59.988836981000091 ], [ -162.751698370999861, 60.00495026200015 ], [ -162.752797003999916, 59.968247789000074 ], [ -162.807972785999937, 59.942572333 ], [ -163.087635870999918, 59.859116929000109 ], [ -163.316477016999954, 59.830267645 ], [ -163.614938930999898, 59.800848700000088 ], [ -163.877145962999919, 59.799546617000104 ], [ -164.098337368999921, 59.833685614 ], [ -164.128529425999943, 59.842678127000042 ], [ -164.15986080599987, 59.864569403000147 ], [ -164.187001105999911, 59.891506252000042 ], [ -164.204782680999898, 59.915594794000143 ], [ -164.212269660999851, 59.954982815000122 ], [ -164.183786587999947, 59.968654690000065 ], [ -164.094919399999924, 59.977687893000066 ], [ -164.094919399999924, 59.9845238300001 ], [ -164.106190558999913, 59.983791408000158 ], [ -164.116892055999926, 59.984442450000117 ], [ -164.126942511999914, 59.986802476000079 ], [ -164.13646399599989, 59.991359768 ], [ -164.130238410999937, 59.994086005000085 ], [ -164.114735480999911, 60.00495026200015 ], [ -164.14671790299991, 60.010443427 ], [ -164.20055091099988, 60.034328518000066 ], [ -164.348133917999917, 60.066473700000031 ], [ -164.385243292999917, 60.084906317000062 ], [ -164.399647589999887, 60.087551174000154 ], [ -164.412668423999889, 60.091782945000077 ], [ -164.434559699999909, 60.110581773000106 ], [ -164.441232876999862, 60.114813544000143 ], [ -164.444325324999852, 60.119086005000057 ], [ -164.479074673999918, 60.142157294000114 ], [ -164.488270636999886, 60.150580145000063 ], [ -164.495187954999892, 60.159857489000117 ], [ -164.495554165999891, 60.168850002000127 ], [ -164.485300258999956, 60.176336981000091 ], [ -164.485300258999956, 60.1837425800001 ], [ -164.512644008999928, 60.190619208 ], [ -164.564442511999943, 60.218491929000052 ], [ -164.61469479099992, 60.23187897300015 ], [ -164.643788214999887, 60.248277085000055 ], [ -164.66112219999988, 60.266424872000144 ], [ -164.649159308999941, 60.278713283000016 ], [ -164.656442837999862, 60.288072007000054 ], [ -164.673654751999891, 60.295152085000112 ], [ -164.677072719999899, 60.303208726000051 ], [ -164.673288540999863, 60.312201239000061 ], [ -164.649159308999941, 60.333929755000142 ], [ -164.714955206999917, 60.300604559000064 ], [ -164.753488735999895, 60.287095445000077 ], [ -164.783884243999864, 60.296372789000131 ], [ -164.80882727799991, 60.308091539000102 ], [ -164.988962368999921, 60.341376044000114 ], [ -165.005970831999889, 60.34674713700015 ], [ -165.03876705599987, 60.370184637000037 ], [ -165.071522589999915, 60.384833075000145 ], [ -165.101429816999882, 60.406683661 ], [ -165.129139777999882, 60.431708075000117 ], [ -165.143259243999893, 60.450628973000121 ], [ -165.121571417999917, 60.450506903000147 ], [ -165.053822394999884, 60.464911200000031 ], [ -165.033924933999913, 60.466620184000035 ], [ -165.023996548999889, 60.468980210000083 ], [ -165.01972408799989, 60.474554755 ], [ -165.018259243999921, 60.482367255000085 ], [ -165.014393683999913, 60.49282461100016 ], [ -165.008981899999867, 60.501939195000048 ], [ -165.00263424399995, 60.505845445000048 ], [ -164.983387824999909, 60.51007721600017 ], [ -164.973703579999949, 60.52041250200007 ], [ -164.974191860999923, 60.533636786000116 ], [ -164.985585089999887, 60.546820380000057 ], [ -165.010446743999921, 60.554510809000178 ], [ -165.160227016999869, 60.521958726000108 ], [ -165.174265102999925, 60.51552969 ], [ -165.195627407999893, 60.50226471600017 ], [ -165.221750454999949, 60.499009507000139 ], [ -165.369740363999881, 60.512111721000011 ], [ -165.384348110999895, 60.51691315300009 ], [ -165.431223110999952, 60.553045966000028 ], [ -165.411691860999895, 60.567531643000066 ], [ -165.383900519999912, 60.581040757000054 ], [ -165.35411536399991, 60.588446356000034 ], [ -165.314279751999919, 60.580877997000087 ], [ -165.297718878999945, 60.583075262000179 ], [ -165.281931118999921, 60.589097398 ], [ -165.270130988999938, 60.597723700000088 ], [ -165.258900519999941, 60.608710028000061 ], [ -165.248850063999953, 60.614650783000073 ], [ -165.203968878999945, 60.625392971000096 ], [ -165.171131964999944, 60.643052476 ], [ -165.118763800999886, 60.658636786 ], [ -165.080637173999889, 60.681708075000145 ], [ -165.023386196999923, 60.696682033000073 ], [ -164.999216274999924, 60.711371161000088 ], [ -164.989735480999911, 60.729681708000143 ], [ -164.996652798999918, 60.74518463700015 ], [ -165.030262824999852, 60.776190497000087 ], [ -165.031361456999889, 60.787014065000093 ], [ -165.01537024599989, 60.791449286000059 ], [ -164.994862433999941, 60.793198960000055 ], [ -164.98216712099989, 60.796332098000121 ], [ -164.971506313999953, 60.80304596600017 ], [ -164.924143032999893, 60.820542710000112 ], [ -164.874948696999894, 60.848781643000095 ], [ -164.897775844999899, 60.86933014500012 ], [ -164.942250128999916, 60.889634507000139 ], [ -164.958241339999915, 60.916815497000059 ], [ -164.937448696999923, 60.936468817 ], [ -164.915638800999886, 60.924465236000074 ], [ -164.895578579999921, 60.901678778000061 ], [ -164.879750128999888, 60.889471747000172 ], [ -164.871286587999947, 60.886175848000121 ], [ -164.848255988999881, 60.871649481000091 ], [ -164.834787563999896, 60.868353583000058 ], [ -164.81932532499988, 60.871405341000141 ], [ -164.780751105999911, 60.895697333000115 ], [ -164.753244594999956, 60.90619538 ], [ -164.711048956999917, 60.917181708000058 ], [ -164.668405727999897, 60.921779690000093 ], [ -164.639515753999888, 60.91331614800005 ], [ -164.642079230999883, 60.899888414000074 ], [ -164.685658331999889, 60.867621161000116 ], [ -164.69758053299995, 60.854681708000115 ], [ -164.669138149999924, 60.825751044000114 ], [ -164.59638424399995, 60.818915106000091 ], [ -164.464833136999914, 60.820542710000112 ], [ -164.429025844999899, 60.803900458000086 ], [ -164.416371222999913, 60.800116278000147 ], [ -164.375436977999897, 60.800116278000147 ], [ -164.357492641999954, 60.793687242000132 ], [ -164.351551886999914, 60.792669989000061 ], [ -164.283558722999857, 60.792669989000061 ], [ -164.270822719999899, 60.787909247000172 ], [ -164.267689581999917, 60.776760158000158 ], [ -164.26817786399991, 60.763373114000146 ], [ -164.266224738999881, 60.752346096000011 ], [ -164.259632941999882, 60.742132880000057 ], [ -164.25218665299991, 60.734930731000034 ], [ -164.241403774999924, 60.731146552000112 ], [ -164.224598761999914, 60.731146552000112 ], [ -164.235463019999884, 60.723211981000063 ], [ -164.235544399999867, 60.712632554 ], [ -164.228627081999889, 60.701117255000057 ], [ -164.218373175999943, 60.69017161699999 ], [ -164.320017055999926, 60.662298895000148 ], [ -164.328236456999917, 60.656683661000145 ], [ -164.33141028599988, 60.652411200000031 ], [ -164.337839321999894, 60.640285549000126 ], [ -164.341297980999911, 60.635646877000013 ], [ -164.341908331999946, 60.632757880000085 ], [ -164.340565558999856, 60.624090887000179 ], [ -164.341297980999911, 60.621323960000112 ], [ -164.345651821999894, 60.620266018000066 ], [ -164.357126430999926, 60.622015692000062 ], [ -164.361765102999954, 60.621323960000112 ], [ -164.370187954999892, 60.617865302000112 ], [ -164.386789516999954, 60.61351146000014 ], [ -164.395944790999948, 60.608303127000127 ], [ -164.399403449999937, 60.603216864000117 ], [ -164.406076626999891, 60.586859442 ], [ -164.410227016999954, 60.580389716000084 ], [ -164.416452602999897, 60.576727606000063 ], [ -164.444325324999852, 60.567328192000119 ], [ -164.420358852999897, 60.554266669000143 ], [ -164.397165493999864, 60.560370184000035 ], [ -164.354969855999911, 60.594061591000028 ], [ -164.299305792999917, 60.627020575000117 ], [ -164.283558722999857, 60.639349677000055 ], [ -164.259348110999952, 60.653265692000119 ], [ -164.228830532999922, 60.658026434000035 ], [ -164.163156704999921, 60.656683661000145 ], [ -164.135080532999922, 60.663723049000012 ], [ -164.119618292999888, 60.680568752000013 ], [ -164.101755337999919, 60.718166408000016 ], [ -164.084299282999865, 60.73456452000012 ], [ -164.062611456999889, 60.747951565000122 ], [ -164.01976477799991, 60.766546942000119 ], [ -163.986317511999943, 60.776312567000062 ], [ -163.955637173999946, 60.779852606000034 ], [ -163.888783331999917, 60.779608466000084 ], [ -163.865671352999954, 60.777044989000089 ], [ -163.838693813999896, 60.769029039000046 ], [ -163.816232876999891, 60.755113023000078 ], [ -163.806874152999882, 60.734930731000034 ], [ -163.815174933999941, 60.714667059000121 ], [ -163.829050258999928, 60.698187567000119 ], [ -163.831776495999918, 60.683783270000063 ], [ -163.806874152999882, 60.669745184000121 ], [ -163.817494269999912, 60.659613348000065 ], [ -163.828846808999884, 60.650946356000148 ], [ -163.83617102799991, 60.639553127000013 ], [ -163.834828253999888, 60.621323960000112 ], [ -163.826039191999939, 60.607163804000024 ], [ -163.811105923999889, 60.593939520000063 ], [ -163.794382290999863, 60.58417389500012 ], [ -163.77989661399991, 60.580389716000084 ], [ -163.731434699999937, 60.582709052000055 ], [ -163.686472133999928, 60.589748440000122 ], [ -163.64354407499988, 60.601548570000105 ], [ -163.464304165999948, 60.67658112200003 ], [ -163.435780402999853, 60.697455145 ], [ -163.429147915999891, 60.716986395000092 ], [ -163.441883917999945, 60.735296942000147 ], [ -163.471669074999937, 60.752346096000011 ], [ -163.459339972999885, 60.75409577 ], [ -163.409006313999953, 60.752346096000011 ], [ -163.424305792999917, 60.764715887000037 ], [ -163.543649868999893, 60.810003973000065 ], [ -163.861520962999919, 60.854681708000115 ], [ -163.912831183999941, 60.84959544500002 ], [ -163.930409308999884, 60.854681708000115 ], [ -163.852853969999927, 60.883246161000031 ], [ -163.808949347999885, 60.892523505000057 ], [ -163.76593990799995, 60.889471747000172 ], [ -163.718251105999883, 60.871323960000083 ], [ -163.697621222999857, 60.868353583000058 ], [ -163.57843990799995, 60.884100653000118 ], [ -163.562733527999882, 60.890122789000102 ], [ -163.556019660999937, 60.899969794000057 ], [ -163.563588019999884, 60.91331614800005 ], [ -163.579457160999908, 60.919867255000142 ], [ -163.725087042999917, 60.932359117000047 ], [ -163.756418423999946, 60.945257880000057 ], [ -163.745432094999899, 60.964544989 ], [ -163.723703579999921, 60.956610419000029 ], [ -163.701975063999953, 60.96430084800015 ], [ -163.68305416599992, 60.978949286000059 ], [ -163.669667120999918, 60.991888739000061 ], [ -163.704090949999852, 60.999660549000069 ], [ -163.768788214999887, 60.980454820000105 ], [ -163.800038214999944, 60.978216864000117 ], [ -163.795969204999892, 60.957709052000084 ], [ -163.812367316999911, 60.951971747000115 ], [ -163.837147589999859, 60.950018622000144 ], [ -163.858102993999921, 60.940985419000143 ], [ -163.867176886999914, 60.934149481000034 ], [ -163.886667446999923, 60.927964585000055 ], [ -163.895619269999941, 60.923000393 ], [ -163.902088995999918, 60.91522858300003 ], [ -163.90794837099989, 60.899847723000065 ], [ -163.913319464999944, 60.892564195000048 ], [ -163.957508917999917, 60.868150132000025 ], [ -164.007069464999944, 60.86220937700007 ], [ -164.135365363999853, 60.867132880000142 ], [ -164.363758917999888, 60.872056382 ], [ -164.564442511999943, 60.854681708000115 ], [ -164.573231574999909, 60.857611395000148 ], [ -164.593006964999944, 60.871486721000124 ], [ -164.602609829999921, 60.87579987200003 ], [ -164.584543423999889, 60.900091864000032 ], [ -164.585886196999894, 60.91006094 ], [ -164.602609829999921, 60.923000393 ], [ -164.628041144999941, 60.932318427000055 ], [ -164.714955206999917, 60.937241929000109 ], [ -164.72675533799989, 60.935003973000121 ], [ -164.744984503999888, 60.925238348000093 ], [ -164.767933722999857, 60.91982656500015 ], [ -164.788278774999952, 60.905707098 ], [ -164.797556118999921, 60.902533270000148 ], [ -164.814890102999897, 60.90810781500015 ], [ -164.838327602999868, 60.937445380000057 ], [ -164.855824347999913, 60.950873114000061 ], [ -164.879465298999946, 60.957424221000124 ], [ -164.907093878999945, 60.958726304000137 ], [ -164.934681769999884, 60.956122137000037 ], [ -164.958241339999915, 60.950873114000061 ], [ -165.015248175999915, 60.921047268000066 ], [ -165.036813930999926, 60.916815497000059 ], [ -165.081491665999891, 60.917385158000016 ], [ -165.128977016999897, 60.923488674000097 ], [ -165.170765753999945, 60.94159577 ], [ -165.198475714999915, 60.978216864000117 ], [ -165.118153449999909, 61.013251044000029 ], [ -165.088612433999941, 61.019842841000084 ], [ -164.974191860999923, 61.025336005000113 ], [ -164.950795050999943, 61.019842841000084 ], [ -164.95282955599987, 61.057033596000096 ], [ -164.950795050999943, 61.067572333000058 ], [ -164.940052863999938, 61.083807684000092 ], [ -164.92719479099992, 61.08698151200015 ], [ -164.864491339999915, 61.079779364000117 ], [ -164.857004360999952, 61.082342841000028 ], [ -164.845285610999952, 61.091213283000073 ], [ -164.82787024599989, 61.099554755000057 ], [ -164.785755988999938, 61.104315497000144 ], [ -164.766468878999888, 61.108587958000058 ], [ -164.78339596299989, 61.120021877000013 ], [ -164.814564581999889, 61.118719794000114 ], [ -164.87633216099988, 61.108587958000058 ], [ -164.930978969999927, 61.114732164000046 ], [ -164.999216274999924, 61.114732164000046 ], [ -165.012562628999945, 61.106268622000087 ], [ -165.005563930999955, 61.087469794000143 ], [ -165.004017706999917, 61.068670966000084 ], [ -165.03368079299986, 61.060126044000171 ], [ -165.058705206999889, 61.062892971000124 ], [ -165.084828253999916, 61.070257880000113 ], [ -165.109364386999943, 61.081000067000147 ], [ -165.129587368999864, 61.094305731000148 ], [ -165.129750128999916, 61.106634833000115 ], [ -165.175241665999891, 61.121771552000112 ], [ -165.191029425999943, 61.136460679000109 ], [ -165.168690558999913, 61.145697333000086 ], [ -165.146555141999926, 61.149725653000033 ], [ -165.129505988999881, 61.156642971000124 ], [ -165.115589972999913, 61.190578518000095 ], [ -165.098500128999859, 61.20307038 ], [ -165.060658331999917, 61.218451239000117 ], [ -165.143259243999893, 61.259426174000154 ], [ -165.131703253999888, 61.241848049000041 ], [ -165.119252081999946, 61.230373440000065 ], [ -165.103586391999897, 61.223130601000051 ], [ -165.082386847999885, 61.218451239000117 ], [ -165.102772589999859, 61.20844147300015 ], [ -165.12047278599988, 61.205959377000127 ], [ -165.13609778599988, 61.200995184000178 ], [ -165.150013800999943, 61.183661200000088 ], [ -165.148264126999948, 61.177150783000101 ], [ -165.14399166599992, 61.167710679000081 ], [ -165.144398566999939, 61.15936920800003 ], [ -165.156849738999853, 61.155747789000046 ], [ -165.211496548999918, 61.149562893000066 ], [ -165.346872524999867, 61.197088934000178 ], [ -165.369740363999881, 61.200751044000029 ], [ -165.36274166599992, 61.21279531500015 ], [ -165.326771613999938, 61.231634833000086 ], [ -165.293324347999885, 61.254828192000119 ], [ -165.271921352999925, 61.259588934000121 ], [ -165.225453253999888, 61.259426174000154 ], [ -165.212717251999919, 61.265204169000114 ], [ -165.206654425999943, 61.279242255000057 ], [ -165.204782680999955, 61.296087958000058 ], [ -165.204660610999895, 61.310614325000117 ], [ -165.208363410999937, 61.32680898600016 ], [ -165.219105597999942, 61.331691799000126 ], [ -165.259877081999917, 61.32831452 ], [ -165.259877081999917, 61.334458726 ], [ -165.225778774999895, 61.348130601000108 ], [ -165.182565883999899, 61.351955471000124 ], [ -165.171131964999944, 61.354966539000046 ], [ -165.157785610999952, 61.365790106000034 ], [ -165.16185462099989, 61.373683986000017 ], [ -165.17210852799991, 61.382473049000069 ], [ -165.177357550999915, 61.395941473000065 ], [ -165.158762173999918, 61.418646552000027 ], [ -165.076242641999897, 61.419378973000121 ], [ -165.047678188999924, 61.436957098000065 ], [ -165.061390753999945, 61.446966864000146 ], [ -165.057810024999867, 61.451727606000148 ], [ -165.006052212999947, 61.464829820000105 ], [ -165.005197719999956, 61.466864325000145 ], [ -165.004261847999885, 61.471136786000059 ], [ -165.002512173999889, 61.475775458000086 ], [ -164.999216274999924, 61.479152736000103 ], [ -164.967722133999928, 61.48956940300009 ], [ -164.86888587099989, 61.498968817000119 ], [ -164.847238735999895, 61.497626044000029 ], [ -164.841542120999918, 61.498968817000119 ], [ -164.840687628999916, 61.502752997000059 ], [ -164.842477993999921, 61.515692450000145 ], [ -164.841542120999918, 61.519476630000085 ], [ -164.829945441999911, 61.525336005000113 ], [ -164.818104620999947, 61.528631903000147 ], [ -164.786936001999862, 61.533758856000148 ], [ -164.763376430999926, 61.541693427000112 ], [ -164.747670050999943, 61.554673570000134 ], [ -164.743112758999899, 61.571030992000047 ], [ -164.752797003999859, 61.588934637000094 ], [ -164.690744594999927, 61.601385809000121 ], [ -164.708200649999895, 61.617417710000026 ], [ -164.72406979099992, 61.625555731000119 ], [ -164.742258266999897, 61.628363348000065 ], [ -164.766468878999888, 61.628729559000178 ], [ -164.760568813999953, 61.626166083000086 ], [ -164.752268032999893, 61.621242580000015 ], [ -164.745961066999939, 61.615057684000149 ], [ -164.745961066999939, 61.608832098000093 ], [ -164.755238410999908, 61.602362372000087 ], [ -164.765370245999947, 61.601955471000096 ], [ -164.775990363999881, 61.603094794000029 ], [ -164.786936001999862, 61.601385809000121 ], [ -164.80219479099992, 61.591620184000178 ], [ -164.821115688999953, 61.567857163999989 ], [ -164.877634243999864, 61.52602773600016 ], [ -164.89618893099987, 61.519476630000085 ], [ -164.966745571999951, 61.516587632000139 ], [ -164.99091549399995, 61.511379299000126 ], [ -165.008615688999953, 61.503485419000171 ], [ -165.01622473899991, 61.496527411000088 ], [ -165.021066860999895, 61.488023179000052 ], [ -165.030262824999852, 61.475734768000095 ], [ -165.039865688999924, 61.470892645000035 ], [ -165.050648566999939, 61.472642320000105 ], [ -165.061594204999892, 61.476792710000055 ], [ -165.071522589999915, 61.479152736000103 ], [ -165.085764126999891, 61.476263739000061 ], [ -165.086903449999937, 61.469183661000031 ], [ -165.083200649999895, 61.460150458 ], [ -165.082224087999919, 61.445013739 ], [ -165.079090949999852, 61.441066799000012 ], [ -165.079172329999921, 61.437079169000057 ], [ -165.088612433999941, 61.430731512000094 ], [ -165.099924282999922, 61.42865631700009 ], [ -165.111927863999853, 61.431097723000121 ], [ -165.123361782999893, 61.434881903000147 ], [ -165.133005337999862, 61.436957098000065 ], [ -165.154733852999925, 61.433417059000178 ], [ -165.186105923999889, 61.416245835000055 ], [ -165.204660610999895, 61.410223700000145 ], [ -165.195383266999926, 61.38963450700011 ], [ -165.191029425999943, 61.382961330000157 ], [ -165.205677863999853, 61.376369533000101 ], [ -165.238229946999923, 61.367743231000176 ], [ -165.253122524999867, 61.361802476000051 ], [ -165.263132290999948, 61.354193427000112 ], [ -165.271595831999889, 61.345648505 ], [ -165.281076626999891, 61.338364976 ], [ -165.294056769999912, 61.334458726 ], [ -165.280466274999952, 61.318670966000141 ], [ -165.261423305999955, 61.317450262000122 ], [ -165.242380337999862, 61.320624091000084 ], [ -165.228871222999885, 61.317450262000122 ], [ -165.227121548999889, 61.308905341000113 ], [ -165.231516079999892, 61.299383856000091 ], [ -165.23375403599988, 61.287746486000103 ], [ -165.225778774999895, 61.273098049000097 ], [ -165.267933722999942, 61.270005601000108 ], [ -165.312936977999925, 61.260891018 ], [ -165.355458136999886, 61.245754299000012 ], [ -165.390248175999943, 61.224595445000105 ], [ -165.399606899999867, 61.195624091000028 ], [ -165.369496222999942, 61.175970770000063 ], [ -165.346384243999893, 61.156724351000108 ], [ -165.376576300999915, 61.129095770000035 ], [ -165.368234829999949, 61.121242580000128 ], [ -165.364206508999956, 61.108099677000084 ], [ -165.362985805999955, 61.07754140800013 ], [ -165.373727993999864, 61.071600653000118 ], [ -165.39781653599988, 61.073472398 ], [ -165.437448696999923, 61.081244208 ], [ -165.512806769999884, 61.08698151200015 ], [ -165.547189907999922, 61.093898830000157 ], [ -165.582102016999954, 61.108587958000058 ], [ -165.605091925999915, 61.124497788999989 ], [ -165.621693488999881, 61.14350006700009 ], [ -165.632191535999851, 61.165676174000154 ], [ -165.636708136999914, 61.191107489000061 ], [ -165.634510870999918, 61.190252997000144 ], [ -165.629831508999899, 61.191310940000037 ], [ -165.625192837999862, 61.194647528000061 ], [ -165.623036261999857, 61.200751044000029 ], [ -165.626291469999899, 61.204657294000029 ], [ -165.633249477999897, 61.20888906500015 ], [ -165.640248175999886, 61.214178778000033 ], [ -165.643503383999928, 61.22150299700003 ], [ -165.64399166599992, 61.23851146 ], [ -165.642160610999952, 61.24892812700007 ], [ -165.63251705599987, 61.253404039000046 ], [ -165.609974738999881, 61.252590236000131 ], [ -165.62328040299991, 61.262152411000116 ], [ -165.628000454999921, 61.271795966000084 ], [ -165.623727993999921, 61.280462958000086 ], [ -165.609974738999881, 61.287298895 ], [ -165.640939907999922, 61.288397528000147 ], [ -165.699452277999882, 61.303412177000084 ], [ -165.828724738999881, 61.312974351000051 ], [ -165.855783657999893, 61.320868231000034 ], [ -165.876779751999948, 61.336574611000103 ], [ -165.921254035999851, 61.399359442000062 ], [ -165.918324347999942, 61.414740302000112 ], [ -165.891102667999917, 61.42877838700015 ], [ -165.835316535999937, 61.444322007000054 ], [ -165.803171352999868, 61.449286200000117 ], [ -165.790272589999859, 61.452866929 ], [ -165.780100063999924, 61.457993882 ], [ -165.771229620999861, 61.466538804000109 ], [ -165.767282680999898, 61.475531317000147 ], [ -165.766306118999921, 61.485052802000141 ], [ -165.766428188999896, 61.495266018000066 ], [ -165.776966925999943, 61.51581452000012 ], [ -165.802072719999927, 61.528143622000144 ], [ -165.855783657999893, 61.539984442000119 ], [ -165.868153449999937, 61.544663804000137 ], [ -165.89081783799989, 61.556789455000128 ], [ -165.904164191999911, 61.561021226000051 ], [ -165.923898891999954, 61.562160549000097 ], [ -166.050404425999886, 61.543402411000116 ], [ -166.085682745999918, 61.53221263200011 ], [ -166.096018032999893, 61.519476630000085 ], [ -166.088612433999913, 61.51447174700003 ], [ -166.065622524999924, 61.510443427000055 ], [ -166.054392055999926, 61.505804755000142 ], [ -166.106190558999856, 61.498521226000108 ], [ -166.138254360999923, 61.516099351000051 ], [ -166.195301886999914, 61.585598049000069 ], [ -166.199940558999856, 61.594549872000087 ], [ -166.196156378999945, 61.602362372000087 ], [ -166.189442511999886, 61.609320380000085 ], [ -166.185373501999919, 61.615668036000031 ], [ -166.185373501999919, 61.656683661000116 ], [ -166.180856899999867, 61.673529364000117 ], [ -166.172678188999868, 61.694647528000033 ], [ -166.160511847999885, 61.71393463700015 ], [ -166.144398566999911, 61.72553131700009 ], [ -166.155873175999858, 61.665838934000092 ], [ -166.15404212099989, 61.656683661000116 ], [ -166.147328253999945, 61.653753973 ], [ -166.128244594999956, 61.640448309000178 ], [ -166.116444464999887, 61.636135158000073 ], [ -166.056223110999923, 61.642401434000121 ], [ -166.044178839999915, 61.646144924000154 ], [ -166.019602016999897, 61.657131252000013 ], [ -165.782419399999895, 61.684068101 ], [ -165.766428188999896, 61.690822658000016 ], [ -165.779530402999853, 61.696356512000037 ], [ -165.828480597999913, 61.690822658000016 ], [ -165.841542120999918, 61.693060614 ], [ -165.860218878999888, 61.701849677000055 ], [ -165.870065883999899, 61.705064195000105 ], [ -165.883534308999884, 61.706000067 ], [ -165.911203579999892, 61.704169012000037 ], [ -165.924672003999859, 61.705064195000105 ], [ -165.936594204999892, 61.709458726000108 ], [ -165.957956508999956, 61.722723700000031 ], [ -165.965646938999896, 61.72553131700009 ], [ -166.003366665999948, 61.734930731000119 ], [ -166.04430091099988, 61.758490302000055 ], [ -166.080148891999897, 61.789496161000088 ], [ -166.102772589999944, 61.821112372000144 ], [ -165.975900844999899, 61.835394598000065 ], [ -165.911000128999916, 61.827948309000178 ], [ -165.849313930999898, 61.8360863300001 ], [ -165.828480597999913, 61.835394598000065 ], [ -165.793080206999917, 61.826849677000141 ], [ -165.780100063999924, 61.827948309000178 ], [ -165.743031378999888, 61.845607815 ], [ -165.726063605999911, 61.84845612200003 ], [ -165.609079555999898, 61.851304429000081 ], [ -165.588246222999913, 61.862127997000172 ], [ -165.610178188999953, 61.864447333000143 ], [ -165.644113735999895, 61.895249742000104 ], [ -165.689320441999939, 61.910305080000043 ], [ -165.709787563999896, 61.927435614000061 ], [ -165.739084438999896, 61.965073960000055 ], [ -165.750355597999913, 61.984442450000145 ], [ -165.758493618999921, 62.00527578300013 ], [ -165.75951087099989, 62.02562083500014 ], [ -165.730946417999888, 62.07648346600017 ], [ -165.713734503999888, 62.085272528000033 ], [ -165.71031653599988, 62.095038153000175 ], [ -165.708811001999919, 62.106634833 ], [ -165.70555579299986, 62.116603908000073 ], [ -165.691965298999918, 62.130072333000058 ], [ -165.668405727999868, 62.148098049000097 ], [ -165.641916469999899, 62.163804429000052 ], [ -165.594593878999945, 62.178290106000091 ], [ -165.447702602999925, 62.302883205000072 ], [ -165.344593878999916, 62.366034247000144 ], [ -165.334828253999888, 62.375718492000104 ], [ -165.314523891999954, 62.403957424000069 ], [ -165.296742316999882, 62.421332098000065 ], [ -165.273548956999946, 62.437445380000113 ], [ -165.184641079999921, 62.47744375200007 ], [ -165.133046027999853, 62.515692450000031 ], [ -165.095692511999914, 62.529771226000079 ], [ -165.055734829999949, 62.538275458 ], [ -165.020334438999953, 62.541083075000145 ], [ -164.930978969999927, 62.533677476000051 ], [ -164.887399868999921, 62.539129950000088 ], [ -164.867868618999921, 62.538031317000147 ], [ -164.848988410999908, 62.5274925800001 ], [ -164.860300258999871, 62.520005601000108 ], [ -164.867421027999939, 62.51068756700009 ], [ -164.867054816999911, 62.500962632000139 ], [ -164.855824347999913, 62.492743231000034 ], [ -164.848133917999917, 62.477932033000158 ], [ -164.810902472999913, 62.469427802000112 ], [ -164.735707160999908, 62.46478913 ], [ -164.723337368999893, 62.46116771000014 ], [ -164.701771613999881, 62.443752346000068 ], [ -164.690744594999927, 62.437445380000113 ], [ -164.671823696999894, 62.434556382 ], [ -164.608835415999891, 62.437445380000113 ], [ -164.650461391999954, 62.425360419000029 ], [ -164.665598110999952, 62.418768622000144 ], [ -164.695057745999918, 62.396470445000105 ], [ -164.713490363999881, 62.386175848 ], [ -164.733631964999915, 62.378729559000121 ], [ -164.706003383999899, 62.379584052000112 ], [ -164.685658331999889, 62.386542059000121 ], [ -164.650135870999918, 62.414984442000119 ], [ -164.640980597999942, 62.419989325000174 ], [ -164.629953579999892, 62.423814195 ], [ -164.597604946999866, 62.423407294000171 ], [ -164.581898566999911, 62.426174221000124 ], [ -164.574696417999888, 62.437445380000113 ], [ -164.586537238999938, 62.454820054000109 ], [ -164.615712042999888, 62.460150458000086 ], [ -164.670277472999857, 62.46198151200015 ], [ -164.67711341099988, 62.474351304 ], [ -164.662302212999919, 62.489935614000089 ], [ -164.629953579999892, 62.513169664000102 ], [ -164.647206183999913, 62.512518622000144 ], [ -164.657907680999926, 62.510239976 ], [ -164.677072719999899, 62.499579169000143 ], [ -164.693592902999853, 62.485052802000112 ], [ -164.705067511999914, 62.479071356000091 ], [ -164.714955206999917, 62.482123114 ], [ -164.74286861899995, 62.496405341000084 ], [ -164.810739712999947, 62.486273505000113 ], [ -164.841542120999918, 62.492743231000034 ], [ -164.800363735999952, 62.5235863300001 ], [ -164.794422980999911, 62.533677476000051 ], [ -164.800607876999891, 62.547186591000028 ], [ -164.816232876999891, 62.555568752000099 ], [ -164.835397915999948, 62.559800523000106 ], [ -164.852487758999899, 62.560980536000145 ], [ -164.857980923999918, 62.563625393000123 ], [ -164.854969855999911, 62.569403387000094 ], [ -164.845285610999952, 62.57831452000012 ], [ -164.834706183999913, 62.584377346000124 ], [ -164.821481899999867, 62.586615302000112 ], [ -164.794422980999911, 62.588324286000116 ], [ -164.704701300999886, 62.612494208000115 ], [ -164.479074673999918, 62.745917059000035 ], [ -164.504261847999885, 62.750311591000028 ], [ -164.539784308999856, 62.738836981000176 ], [ -164.574940558999913, 62.719916083000058 ], [ -164.612619594999899, 62.693019924000097 ], [ -164.663441535999937, 62.678290106000091 ], [ -164.740345831999946, 62.634466864000117 ], [ -164.779123501999891, 62.618963934000121 ], [ -164.813221808999884, 62.620184637000037 ], [ -164.827951626999891, 62.654120184000178 ], [ -164.831979946999923, 62.682196356000091 ], [ -164.843251105999911, 62.705145575000174 ], [ -164.86070716099988, 62.723822333000058 ], [ -164.883168097999885, 62.73908112200003 ], [ -164.873036261999943, 62.743882554000109 ], [ -164.866688605999911, 62.749253648000078 ], [ -164.866892055999955, 62.754706122000115 ], [ -164.87633216099988, 62.759588934000178 ], [ -164.87323971299989, 62.764064846000124 ], [ -164.871571417999888, 62.767645575000117 ], [ -164.868845180999898, 62.77094147300015 ], [ -164.862660285999937, 62.773871161000088 ], [ -164.870228644999884, 62.776678778000033 ], [ -164.890004035999908, 62.786932684000149 ], [ -164.873158331999917, 62.792181708000143 ], [ -164.859079555999955, 62.794867255000113 ], [ -164.844919399999924, 62.795477606000176 ], [ -164.827951626999891, 62.794378973000121 ], [ -164.792103644999884, 62.786932684000149 ], [ -164.776112433999856, 62.788519598000093 ], [ -164.766468878999888, 62.801214911000145 ], [ -164.832590298999889, 62.80890534100017 ], [ -164.861765102999925, 62.81952545800003 ], [ -164.883168097999885, 62.841538804000109 ], [ -164.859323696999923, 62.854071356000119 ], [ -164.852487758999899, 62.855780341000028 ], [ -164.849232550999943, 62.859930731000148 ], [ -164.848133917999917, 62.879706122000172 ], [ -164.845285610999952, 62.886867580000043 ], [ -164.833851691999911, 62.89915599199999 ], [ -164.816110805999926, 62.927191473000093 ], [ -164.753407355999911, 62.990952867000132 ], [ -164.723500128999945, 63.01292552300005 ], [ -164.690744594999927, 63.027085679000081 ], [ -164.662587042999945, 63.03204987200003 ], [ -164.528187628999945, 63.034735419000114 ], [ -164.516672329999892, 63.030218817000147 ], [ -164.50922604099992, 63.025213934000092 ], [ -164.487375454999892, 63.015814520000092 ], [ -164.478464321999951, 63.014105536000088 ], [ -164.472645636999914, 63.016913153000033 ], [ -164.468739386999914, 63.023260809000149 ], [ -164.462880011999857, 63.029852606000034 ], [ -164.451161261999857, 63.033351955000043 ], [ -164.44159908799989, 63.03188711100016 ], [ -164.410227016999954, 63.020249742000047 ], [ -164.40070553299995, 63.020575262000179 ], [ -164.384348110999923, 63.025213934000092 ], [ -164.376088019999941, 63.023667710000055 ], [ -164.354969855999911, 63.014105536000088 ], [ -164.333688930999955, 63.00901927300005 ], [ -164.324330206999917, 63.009100653000033 ], [ -164.313954230999911, 63.014105536000088 ], [ -164.330799933999913, 63.041408596000153 ], [ -164.35090084499987, 63.059637762000037 ], [ -164.376657680999926, 63.07050202000012 ], [ -164.52281653599988, 63.088324286 ], [ -164.539906378999945, 63.102240302000084 ], [ -164.549143032999893, 63.116197007000054 ], [ -164.562448696999923, 63.122544663999989 ], [ -164.595163540999948, 63.130113023000135 ], [ -164.579090949999852, 63.140570380000113 ], [ -164.521799282999922, 63.161118882000054 ], [ -164.502390102999925, 63.16494375200007 ], [ -164.487782355999911, 63.17072174700003 ], [ -164.423532680999955, 63.208970445 ], [ -164.36583411399991, 63.229193427 ], [ -164.145375128999945, 63.262152411000088 ], [ -163.994577602999925, 63.256252346000124 ], [ -163.827381964999915, 63.21954987200003 ], [ -163.767323370999918, 63.224758205000128 ], [ -163.752268032999893, 63.222642320000105 ], [ -163.729237433999941, 63.216782945000077 ], [ -163.724558071999923, 63.213120835000112 ], [ -163.732411261999914, 63.205877997000087 ], [ -163.723093227999954, 63.199937242000075 ], [ -163.702463344999927, 63.193304755000028 ], [ -163.694203253999945, 63.188177802 ], [ -163.683461066999939, 63.173488674000097 ], [ -163.67674719999988, 63.167425848 ], [ -163.646555141999869, 63.158921617000075 ], [ -163.638295050999886, 63.14545319200009 ], [ -163.643381313999896, 63.131293036000059 ], [ -163.663522915999948, 63.123358466000084 ], [ -163.663522915999948, 63.116522528000175 ], [ -163.634632941999939, 63.120184637000037 ], [ -163.58849036399991, 63.135077216000084 ], [ -163.567331508999899, 63.136948960000055 ], [ -163.541818813999896, 63.128810940000122 ], [ -163.564523891999954, 63.118068752000013 ], [ -163.602528449999852, 63.1056175800001 ], [ -163.622547980999911, 63.092271226 ], [ -163.655954555999898, 63.060370184000149 ], [ -163.791940883999928, 63.021918036000059 ], [ -163.806874152999882, 62.986151434000064 ], [ -163.762440558999856, 63.015204169000029 ], [ -163.652902798999889, 63.045070705000015 ], [ -163.600819464999859, 63.068060614 ], [ -163.556955532999893, 63.104722398000106 ], [ -163.528553839999887, 63.116685289000046 ], [ -163.491322394999884, 63.10179271 ], [ -163.440663214999915, 63.096014716000028 ], [ -163.395985480999855, 63.068060614 ], [ -163.366159633999956, 63.038275458000086 ], [ -163.350534633999871, 63.030829169000114 ], [ -163.290150519999855, 63.048814195000048 ], [ -163.093983527999853, 63.057359117000075 ], [ -163.073841925999915, 63.061265367000075 ], [ -163.034006313999924, 63.079087632000139 ], [ -163.01305091099988, 63.084662177000055 ], [ -162.988718227999925, 63.099554755 ], [ -162.981394008999899, 63.105943101000108 ], [ -162.969227667999917, 63.114406643000066 ], [ -162.923044399999924, 63.123358466000084 ], [ -162.880808071999894, 63.140936591000028 ], [ -162.861317511999914, 63.15228913 ], [ -162.84788977799991, 63.16494375200007 ], [ -162.844064907999893, 63.17462799700003 ], [ -162.845895962999862, 63.188950914000102 ], [ -162.841135219999956, 63.198431708000115 ], [ -162.833851691999854, 63.204901434000121 ], [ -162.806345180999926, 63.21954987200003 ], [ -162.696644660999908, 63.229193427 ], [ -162.596506313999896, 63.276678778000118 ], [ -162.428944464999859, 63.403876044000171 ], [ -162.408802863999938, 63.425726630000113 ], [ -162.401600714999887, 63.431219794000143 ], [ -162.361887173999889, 63.447821356000091 ], [ -162.351063605999883, 63.455715236000074 ], [ -162.330637173999889, 63.466864325000088 ], [ -162.303171352999954, 63.47675202 ], [ -162.280018683999913, 63.489081122000144 ], [ -162.272572394999941, 63.507513739 ], [ -162.313547329999864, 63.534247137000094 ], [ -162.309437628999916, 63.546576239000146 ], [ -162.293202277999882, 63.550360419000171 ], [ -162.251454230999911, 63.548529364 ], [ -162.237253383999928, 63.546291408000016 ], [ -162.207020636999914, 63.536525783000073 ], [ -162.176218227999925, 63.53253815300009 ], [ -162.134755011999943, 63.521185614000117 ], [ -162.099558071999894, 63.518988348000121 ], [ -162.084217902999939, 63.514715887000122 ], [ -162.059641079999921, 63.496039130000142 ], [ -162.046091274999952, 63.490220445 ], [ -162.031442837999947, 63.486639716000028 ], [ -162.018055792999945, 63.485825914000102 ], [ -162.037587042999917, 63.484279690000065 ], [ -162.054676886999857, 63.474310614000089 ], [ -162.070668097999885, 63.461737372000087 ], [ -162.086984829999892, 63.452337958000058 ], [ -162.106922980999883, 63.447821356000091 ], [ -162.148996548999946, 63.444077867000075 ], [ -162.168894008999928, 63.438666083000115 ], [ -162.168894008999928, 63.431219794000143 ], [ -161.914621548499952, 63.450425523000106 ], [ -161.660349087999919, 63.469631252000156 ], [ -161.62079830599987, 63.466538804000081 ], [ -161.589588995999918, 63.458075262000037 ], [ -161.573435024999924, 63.455389716000141 ], [ -161.557443813999953, 63.457342841000113 ], [ -161.511586066999882, 63.472805080000043 ], [ -161.496408657999893, 63.474269924000097 ], [ -161.483469204999864, 63.473456122000172 ], [ -161.470895962999862, 63.469875393 ], [ -161.456654425999886, 63.462836005000113 ], [ -161.440541144999884, 63.46019114800005 ], [ -161.422840949999909, 63.465725002000156 ], [ -161.404855923999946, 63.473944403000147 ], [ -161.388050910999937, 63.47955963700015 ], [ -161.186268683999941, 63.505560614000146 ], [ -161.056507941999882, 63.57440827 ], [ -161.045480923999918, 63.585760809000178 ], [ -161.033884243999921, 63.610052802000055 ], [ -161.006540493999921, 63.621771552000055 ], [ -160.97480221299989, 63.628241278000147 ], [ -160.949899868999921, 63.63666413 ], [ -160.892526821999923, 63.684881903000061 ], [ -160.849924282999893, 63.698309637000037 ], [ -160.827097133999956, 63.713527736000017 ], [ -160.791574673999889, 63.746527411000088 ], [ -160.76695716099988, 63.824123440000122 ], [ -160.805043097999885, 63.90448639500012 ], [ -160.928781704999949, 64.048163153000175 ], [ -160.945261196999923, 64.096014716000084 ], [ -160.951649542999917, 64.206284898 ], [ -160.973459438999896, 64.250474351000051 ], [ -160.995350714999915, 64.265692450000031 ], [ -161.063425258999871, 64.295843817000147 ], [ -161.089833136999857, 64.30141836100016 ], [ -161.115915493999921, 64.310003973000065 ], [ -161.175526495999918, 64.350897528000118 ], [ -161.203114386999943, 64.364081122000144 ], [ -161.203114386999943, 64.370306708000115 ], [ -161.193959113999881, 64.371161200000031 ], [ -161.188099738999938, 64.373765367000104 ], [ -161.175770636999857, 64.383978583000058 ], [ -161.19469153599988, 64.392075913999989 ], [ -161.238026495999861, 64.398098049000097 ], [ -161.257761196999894, 64.405096747000172 ], [ -161.244252081999917, 64.410101630000113 ], [ -161.226755337999862, 64.411810614000117 ], [ -161.188832160999851, 64.411281643000123 ], [ -161.188832160999851, 64.418117580000157 ], [ -161.331776495999861, 64.417547919000086 ], [ -161.429432745999861, 64.433294989000146 ], [ -161.457997199999852, 64.431708075000117 ], [ -161.483631964999915, 64.424872137000094 ], [ -161.498402472999913, 64.414536851 ], [ -161.508981899999952, 64.402167059000064 ], [ -161.520700649999924, 64.392523505000085 ], [ -161.538889126999948, 64.390773830000072 ], [ -161.538889126999948, 64.397650458 ], [ -161.525990363999938, 64.429103908000016 ], [ -161.518422003999888, 64.438544012000037 ], [ -161.503854946999923, 64.448431708000143 ], [ -161.493723110999895, 64.451849677000055 ], [ -161.485707160999937, 64.457098700000031 ], [ -161.477406378999888, 64.472723700000117 ], [ -161.473378058999913, 64.488185940000122 ], [ -161.471913214999915, 64.499741929000081 ], [ -161.468088344999927, 64.509955145 ], [ -161.456979946999894, 64.521144924000012 ], [ -161.440419074999909, 64.529120184000149 ], [ -161.413929816999882, 64.537543036000116 ], [ -161.387521938999868, 64.54205963700015 ], [ -161.370716925999858, 64.538153387000179 ], [ -161.340402798999889, 64.523993231000148 ], [ -161.093332485999952, 64.502590236000017 ], [ -161.035023566999939, 64.507757880000113 ], [ -161.004465298999918, 64.527980861000131 ], [ -161.068592902999882, 64.544623114000089 ], [ -161.085926886999857, 64.552557684000035 ], [ -160.973459438999896, 64.555853583000086 ], [ -160.95799719999988, 64.55882396 ], [ -160.947336391999954, 64.566066799000012 ], [ -160.938465949999909, 64.574855861000074 ], [ -160.928781704999949, 64.582586981000091 ], [ -160.833973761999857, 64.617336330000157 ], [ -160.803171352999897, 64.64337799700003 ], [ -160.790272589999887, 64.707709052000141 ], [ -160.788156704999892, 64.712713934000178 ], [ -160.787709113999881, 64.717840887000094 ], [ -160.791574673999889, 64.725897528000033 ], [ -160.801503058999884, 64.736395575000088 ], [ -160.825428839999944, 64.748928127000099 ], [ -160.83661861899995, 64.757635809000178 ], [ -160.884714321999923, 64.810126044000029 ], [ -160.901437954999949, 64.822739976000108 ], [ -160.916005011999886, 64.828680731000034 ], [ -160.963490363999881, 64.835842190000093 ], [ -161.003366665999863, 64.854885158000073 ], [ -161.044382290999863, 64.862534898000106 ], [ -161.146473761999943, 64.918198960000112 ], [ -161.155344204999892, 64.925197658000016 ], [ -161.133290167999917, 64.924017645000092 ], [ -161.085764126999891, 64.912990627000127 ], [ -161.066232876999919, 64.915228583000115 ], [ -161.029611782999893, 64.931463934000149 ], [ -161.010080532999922, 64.937241929000109 ], [ -160.990834113999881, 64.939439195000105 ], [ -161.003854946999951, 64.944566148000106 ], [ -161.020130988999881, 64.947211005000113 ], [ -161.037098761999857, 64.947577216000028 ], [ -161.052235480999855, 64.945624091000084 ], [ -161.056752081999917, 64.942816473000121 ], [ -161.060047980999855, 64.934475002000156 ], [ -161.062855597999885, 64.932603257 ], [ -161.182565883999899, 64.939520575000088 ], [ -161.210560675999915, 64.932603257 ], [ -161.207102016999926, 64.909735419000086 ], [ -161.229440883999928, 64.895982164000074 ], [ -161.307606574999852, 64.872015692000033 ], [ -161.31590735599994, 64.86542389500012 ], [ -161.322255011999857, 64.845526434000035 ], [ -161.330067511999857, 64.837713934000149 ], [ -161.340199347999913, 64.831935940000093 ], [ -161.361805792999917, 64.826361395000092 ], [ -161.366932745999918, 64.818752346000124 ], [ -161.369699673999889, 64.809719143000123 ], [ -161.373768683999941, 64.802313544000143 ], [ -161.395253058999884, 64.786769924000126 ], [ -161.408802863999938, 64.77948639500012 ], [ -161.42218990799995, 64.774359442000033 ], [ -161.444081183999884, 64.77073802300005 ], [ -161.489450649999867, 64.770249742000075 ], [ -161.511586066999882, 64.767523505 ], [ -161.523996548999889, 64.762111721000153 ], [ -161.534657355999911, 64.755072333000086 ], [ -161.545765753999945, 64.750881252000127 ], [ -161.559396938999896, 64.753851630000057 ], [ -161.564401821999923, 64.770412502000127 ], [ -161.644846157999922, 64.783758856000034 ], [ -161.672352667999945, 64.79173411699999 ], [ -161.701242641999954, 64.81175364800005 ], [ -161.733591274999867, 64.820746161000088 ], [ -161.806385870999918, 64.822739976000108 ], [ -161.782907680999955, 64.816839911000088 ], [ -161.740915493999893, 64.798000393000123 ], [ -161.716420050999943, 64.794867255000057 ], [ -161.896311001999919, 64.753973700000031 ], [ -161.949777798999946, 64.725897528000033 ], [ -161.931752081999917, 64.71865469 ], [ -161.914133266999897, 64.722113348 ], [ -161.881540493999921, 64.740220445000105 ], [ -161.861398891999897, 64.747951565000122 ], [ -161.799549933999913, 64.761297919000029 ], [ -161.812082485999895, 64.75299713700015 ], [ -161.84980221299989, 64.736395575000088 ], [ -161.864125128999888, 64.733384507 ], [ -161.865793423999889, 64.730943101000051 ], [ -161.884958462999947, 64.716294664000046 ], [ -161.895456508999928, 64.711737372000115 ], [ -161.923939581999946, 64.712103583000115 ], [ -161.982533331999889, 64.703070380000113 ], [ -162.080881313999896, 64.721096096000124 ], [ -162.121693488999881, 64.712876695000048 ], [ -162.107777472999885, 64.709418036000145 ], [ -162.079090949999909, 64.705471096000153 ], [ -162.066477016999954, 64.699286200000088 ], [ -162.142811652999882, 64.696234442 ], [ -162.177357550999886, 64.688177802000055 ], [ -162.209828253999888, 64.671942450000117 ], [ -162.219431118999921, 64.664699611000103 ], [ -162.247181769999941, 64.634588934000149 ], [ -162.257639126999891, 64.625718492000104 ], [ -162.270212368999893, 64.6192894550001 ], [ -162.318063930999926, 64.612982489000061 ], [ -162.511219855999911, 64.558661200000031 ], [ -162.556833462999862, 64.532212632000054 ], [ -162.583119269999884, 64.520697333000115 ], [ -162.607167120999918, 64.506781317000119 ], [ -162.621408657999922, 64.487005927000112 ], [ -162.621571417999888, 64.475572007000054 ], [ -162.614206508999871, 64.456203518000123 ], [ -162.614572719999899, 64.445990302000027 ], [ -162.622792120999918, 64.437323309000121 ], [ -162.635324673999889, 64.429266669000171 ], [ -162.643422003999916, 64.420152085 ], [ -162.638742641999897, 64.408148505000057 ], [ -162.642648891999897, 64.394435940000122 ], [ -162.73460852799991, 64.367173570000048 ], [ -162.756296352999897, 64.352118231000034 ], [ -162.781320766999897, 64.343695380000085 ], [ -162.80439205599987, 64.347805080000128 ], [ -162.820017055999955, 64.370306708000115 ], [ -162.820749477999897, 64.385931708 ], [ -162.816843227999897, 64.397935289000131 ], [ -162.815500454999892, 64.40892161699999 ], [ -162.823719855999911, 64.421535549000069 ], [ -162.844431118999921, 64.444077867000047 ], [ -162.855417446999951, 64.45221588700015 ], [ -162.874623175999915, 64.459662177000141 ], [ -162.861317511999914, 64.48651764500012 ], [ -162.85029049399995, 64.493394273000135 ], [ -162.827463344999927, 64.493150132 ], [ -162.827463344999927, 64.50063711100016 ], [ -162.869496222999913, 64.513332424000041 ], [ -162.896188930999926, 64.518011786000145 ], [ -162.921742316999911, 64.531683661000088 ], [ -162.933583136999886, 64.534735419000171 ], [ -162.940541144999884, 64.537665106000091 ], [ -162.960560675999943, 64.551255601000051 ], [ -162.970814581999946, 64.555853583000086 ], [ -162.99046790299991, 64.558335679000109 ], [ -163.053334113999881, 64.555853583000086 ], [ -163.053334113999881, 64.562079169000057 ], [ -163.045155402999853, 64.56281159100017 ], [ -163.025461391999897, 64.569525458000115 ], [ -163.056589321999923, 64.592108466000084 ], [ -163.107126430999926, 64.608221747000144 ], [ -163.147653774999924, 64.627142645000092 ], [ -163.148996548999918, 64.658270575000174 ], [ -163.214792446999894, 64.65452708500014 ], [ -163.242502407999893, 64.648382880000057 ], [ -163.358591274999924, 64.603745835 ], [ -163.389759894999912, 64.596869208 ], [ -163.389759894999912, 64.590033270000063 ], [ -163.368153449999909, 64.587795315000093 ], [ -163.313465949999852, 64.562079169000057 ], [ -163.291371222999885, 64.557521877000099 ], [ -163.211008266999869, 64.555853583000086 ], [ -163.194081183999884, 64.547430731000034 ], [ -163.162302212999947, 64.522040106000091 ], [ -163.142770962999862, 64.514960028000061 ], [ -163.118153449999852, 64.514227606000119 ], [ -163.039743618999921, 64.521144924000012 ], [ -163.048695441999939, 64.516180731000148 ], [ -163.052967902999939, 64.509955145 ], [ -163.052357550999886, 64.502264716000084 ], [ -163.046498175999943, 64.493150132 ], [ -163.096750454999921, 64.475816148000106 ], [ -163.11461341099988, 64.461004950000031 ], [ -163.121652798999946, 64.435126044000029 ], [ -163.134999152999853, 64.412543036000145 ], [ -163.165882941999911, 64.410589911 ], [ -163.200428839999915, 64.419989325000031 ], [ -163.224680141999897, 64.431708075000117 ], [ -163.279286261999857, 64.485744533000016 ], [ -163.299794074999909, 64.493150132 ], [ -163.330637173999889, 64.496568101000022 ], [ -163.357411261999886, 64.50519440300009 ], [ -163.409006313999953, 64.527980861000131 ], [ -163.53656979099992, 64.564520575000174 ], [ -163.678537563999868, 64.586330471000124 ], [ -163.817128058999913, 64.590033270000063 ], [ -163.971384243999893, 64.569525458000115 ], [ -164.389108852999925, 64.569525458000115 ], [ -164.266224738999881, 64.575751044000171 ], [ -164.341867641999954, 64.590033270000063 ], [ -164.650380011999857, 64.502264716000084 ], [ -164.745961066999939, 64.493150132 ], [ -164.725453253999888, 64.502590236000017 ], [ -164.656605597999913, 64.521144924000012 ], [ -164.691721157999893, 64.531317450000145 ], [ -164.807443813999924, 64.521144924000012 ], [ -164.83625240799995, 64.514797268000095 ], [ -164.885690883999899, 64.491522528000147 ], [ -164.909860805999926, 64.493150132 ], [ -164.902658657999893, 64.510565497000144 ], [ -164.908151821999923, 64.523993231000148 ], [ -164.921457485999923, 64.532416083 ], [ -164.93781490799995, 64.534735419000171 ], [ -164.93781490799995, 64.527980861000131 ], [ -164.930856899999952, 64.525132554 ], [ -164.924143032999893, 64.521144924000012 ], [ -164.932362433999913, 64.51276276200015 ], [ -164.942005988999881, 64.507554429000052 ], [ -164.952951626999948, 64.505804755000057 ], [ -164.965077277999939, 64.507473049000069 ], [ -164.953968878999916, 64.494370835000112 ], [ -164.935170050999858, 64.486476955000128 ], [ -164.914051886999943, 64.48037344000015 ], [ -164.89618893099987, 64.472723700000117 ], [ -164.924143032999893, 64.459662177000141 ], [ -164.842518683999913, 64.461411851000136 ], [ -164.801096157999893, 64.467474677000141 ], [ -164.766468878999888, 64.480169989 ], [ -164.796457485999952, 64.463446356000148 ], [ -164.837106899999952, 64.455226955000072 ], [ -165.035511847999942, 64.44830963700015 ], [ -165.446237758999871, 64.511867580000157 ], [ -165.877512173999889, 64.54824453300013 ], [ -166.002390102999868, 64.571437893000066 ], [ -166.189686652999939, 64.585191148 ], [ -166.370350714999915, 64.637844143 ], [ -166.446034308999913, 64.691473700000088 ], [ -166.483469204999949, 64.729641018000066 ], [ -166.474623356999899, 64.748137624000051 ], [ -166.474737484999935, 64.770954982000077 ], [ -166.478016730999911, 64.789618231000176 ], [ -166.480376894999893, 64.802010139000075 ], [ -166.470066861999925, 64.807366877 ], [ -166.439207876999888, 64.810215714 ], [ -166.39391028599988, 64.822739976000108 ], [ -166.386057094999899, 64.827337958000058 ], [ -166.385568813999896, 64.836004950000145 ], [ -166.391713019999884, 64.841376044000114 ], [ -166.403879360999952, 64.835842190000093 ], [ -166.410157197999894, 64.854530315000105 ], [ -166.408834984999913, 64.869548642999987 ], [ -166.390207485999923, 64.898504950000088 ], [ -166.407948370999918, 64.904445705000015 ], [ -166.432932094999927, 64.921616929000137 ], [ -166.471018032999922, 64.930365302000112 ], [ -166.504831508999899, 64.951117255000028 ], [ -166.527333136999886, 64.953111070000048 ], [ -166.515248175999886, 64.937811591000084 ], [ -166.444813605999883, 64.898504950000088 ], [ -166.46747799399995, 64.907416083000115 ], [ -166.525705532999865, 64.936468817 ], [ -166.579721935999885, 64.952968616000177 ], [ -166.684529225999881, 64.982179906000042 ], [ -166.700066469999882, 64.994006359000039 ], [ -166.69535038099994, 65.007664844000132 ], [ -166.687375979999956, 65.022827007 ], [ -166.711388818999922, 65.043713442000026 ], [ -166.749510172999919, 65.062010457000113 ], [ -166.829050258999956, 65.08283112200003 ], [ -166.878610805999898, 65.102728583000115 ], [ -166.961530911999915, 65.154359258000014 ], [ -166.957386847999885, 65.178127346000068 ], [ -166.9395721059999, 65.220765124000096 ], [ -166.926973628999946, 65.242896969000057 ], [ -166.910186138999876, 65.264533382000039 ], [ -166.894316131999858, 65.276363518 ], [ -166.880238410999937, 65.28204987200003 ], [ -166.852772589999887, 65.277899481000176 ], [ -166.861765102999897, 65.267482815 ], [ -166.889356940999875, 65.238460395000132 ], [ -166.905900159999902, 65.220569307000133 ], [ -166.918247126999916, 65.202182262000164 ], [ -166.932077602999925, 65.168850002000013 ], [ -166.917658332999878, 65.15438559900015 ], [ -166.904223590999919, 65.150911264000101 ], [ -166.890451626999948, 65.151760158000073 ], [ -166.876169399999952, 65.149115302 ], [ -166.844227667999945, 65.136297919000143 ], [ -166.754261847999885, 65.115627346000124 ], [ -166.712635870999918, 65.112941799000154 ], [ -166.656727667999945, 65.125067450000145 ], [ -166.609974738999881, 65.122300523 ], [ -166.57953854099992, 65.129950262000122 ], [ -166.559315558999884, 65.130682684000149 ], [ -166.547189907999893, 65.13690827 ], [ -166.542917446999894, 65.136867580000015 ], [ -166.538644985999895, 65.136297919000143 ], [ -166.534169074999909, 65.13743724199999 ], [ -166.533640102999925, 65.140041408000073 ], [ -166.534779425999886, 65.14915599199999 ], [ -166.534169074999909, 65.151760158000073 ], [ -166.485829230999911, 65.173570054000109 ], [ -166.469227667999945, 65.189276434000092 ], [ -166.476429816999882, 65.210109768000066 ], [ -166.488718227999925, 65.234279690000065 ], [ -166.469227667999945, 65.244574286 ], [ -166.403879360999952, 65.25413646 ], [ -166.391794399999952, 65.260239976000079 ], [ -166.381947394999941, 65.266994533000016 ], [ -166.371286587999919, 65.272528387000037 ], [ -166.356678839999887, 65.275213934000092 ], [ -166.341796566999903, 65.266718645000097 ], [ -166.323579845999859, 65.255456966000011 ], [ -166.251599967999908, 65.258056836 ], [ -166.124573853999891, 65.234273622000032 ], [ -166.090634509999887, 65.231044072000046 ], [ -166.056451185999862, 65.232976328000163 ], [ -166.031187851999903, 65.24310361 ], [ -166.076649644999918, 65.263578687000106 ], [ -166.140409905999945, 65.285692726 ], [ -166.227894391999882, 65.301617637 ], [ -166.310130747999892, 65.312188333000122 ], [ -166.34846377, 65.309279207000046 ], [ -166.373768683999913, 65.305324611000131 ], [ -166.434055400999881, 65.318724034000084 ], [ -166.502797003999888, 65.336249091000084 ], [ -166.647049889999892, 65.351326450000144 ], [ -166.938303188999896, 65.385077216000084 ], [ -166.923044399999924, 65.37832265800013 ], [ -166.913011021999921, 65.37079122400003 ], [ -166.870098064999866, 65.360781050000114 ], [ -166.812409178999928, 65.35356719 ], [ -166.725879585999849, 65.342074735 ], [ -166.6499355979999, 65.326820378000107 ], [ -166.766921086999872, 65.335763305000043 ], [ -166.863587591999874, 65.351319648000114 ], [ -167.00044988499991, 65.378115755000167 ], [ -167.184295793999922, 65.393241341000035 ], [ -167.398554501999882, 65.401081548000022 ], [ -167.604327128999927, 65.453419410000052 ], [ -167.643122949999935, 65.475885788000156 ], [ -167.722117643999894, 65.504658347000046 ], [ -167.822957517999953, 65.523837836000055 ], [ -167.887016176999907, 65.547614050000092 ], [ -168.032175258999928, 65.573431708 ], [ -168.052438930999926, 65.580023505000057 ], [ -168.060373501999919, 65.584906317000119 ], [ -168.081003383999928, 65.591498114 ], [ -168.090280727999897, 65.596747137000094 ], [ -168.095570441999882, 65.603501695000134 ], [ -168.100941535999937, 65.618231512000122 ], [ -168.103871222999942, 65.62409088700015 ], [ -168.127797003999916, 65.642157294000086 ], [ -168.131214972999913, 65.648260809000149 ], [ -168.13219153599988, 65.652899481000091 ], [ -168.137440558999884, 65.665025132 ], [ -168.134877081999889, 65.669826565000093 ], [ -168.126291469999956, 65.672796942 ], [ -168.124379035999908, 65.675930080000072 ], [ -168.115427212999862, 65.685980536000145 ], [ -168.071603969999899, 65.707098700000145 ], [ -167.98114986899995, 65.733099677000141 ], [ -167.92401891699987, 65.748607860000121 ], [ -167.882079792999946, 65.755439833000182 ], [ -167.866810675999915, 65.749009507000054 ], [ -167.877878383999928, 65.73851146 ], [ -167.891346808999913, 65.733954169000057 ], [ -167.909413214999944, 65.73078034100017 ], [ -167.940866665999863, 65.716701565000122 ], [ -167.990956183999884, 65.709133205000072 ], [ -168.028024868999893, 65.696763414000046 ], [ -168.056711391999954, 65.677232164000074 ], [ -168.062936977999925, 65.651353257000054 ], [ -168.039865688999953, 65.635931708000115 ], [ -168.000436977999868, 65.642564195 ], [ -167.925485805999926, 65.665025132 ], [ -167.894886847999913, 65.670233466000084 ], [ -167.856068488999881, 65.683539130000028 ], [ -167.826242641999897, 65.701361395000092 ], [ -167.822743292999917, 65.720282294000114 ], [ -167.580922003999888, 65.720689195000105 ], [ -167.531239386999857, 65.726141669000143 ], [ -167.500599738999853, 65.740790106000148 ], [ -167.496571417999888, 65.765448309000149 ], [ -167.524403449999937, 65.773830471000011 ], [ -167.559193488999881, 65.778713283000073 ], [ -167.576364712999919, 65.792547919000086 ], [ -167.56102454299986, 65.808905341000084 ], [ -167.52513587099989, 65.813299872000172 ], [ -167.452829555999926, 65.809719143 ], [ -167.468332485999923, 65.816351630000085 ], [ -167.485218878999916, 65.82103099199999 ], [ -167.502919074999909, 65.82330963700015 ], [ -167.521107550999915, 65.822699286 ], [ -167.521107550999915, 65.830145575000174 ], [ -167.345936652999939, 65.898586330000128 ], [ -167.288319464999887, 65.905218817 ], [ -167.282419399999952, 65.894598700000145 ], [ -167.261219855999855, 65.882961330000157 ], [ -167.213246222999857, 65.86432526200015 ], [ -167.182850714999887, 65.858221747000087 ], [ -167.151112433999941, 65.859808661000116 ], [ -167.059885219999956, 65.877630927 ], [ -166.986398891999954, 65.908636786000116 ], [ -166.893422003999888, 65.929388739000032 ], [ -166.876820441999911, 65.946844794000171 ], [ -166.973011847999942, 65.974188544000143 ], [ -166.92804928299995, 65.991400458000058 ], [ -166.897328253999888, 65.99603913 ], [ -166.85216223899991, 66.008124091000084 ], [ -166.835804816999911, 66.015082098000093 ], [ -166.847645636999857, 66.00918203300013 ], [ -166.85960852799991, 66.004706122000087 ], [ -166.869943813999896, 65.998602606000091 ], [ -166.876820441999911, 65.987779039000102 ], [ -166.855458136999857, 65.987494208000058 ], [ -166.81586666599992, 65.981838283000073 ], [ -166.794870571999866, 65.987779039000102 ], [ -166.800363735999895, 65.992254950000145 ], [ -166.810007290999863, 66.003119208000058 ], [ -166.815378383999928, 66.007635809000092 ], [ -166.800648566999939, 66.012762762000122 ], [ -166.76073157499988, 66.04242584800015 ], [ -166.724964972999857, 66.061346747000172 ], [ -166.53563391799986, 66.119452216000028 ], [ -166.460804816999882, 66.128648179 ], [ -166.408151821999866, 66.147935289000046 ], [ -166.357492641999897, 66.156561591000056 ], [ -166.310902472999885, 66.175360419000086 ], [ -166.287464972999913, 66.17963288 ], [ -166.184925910999937, 66.174994208000086 ], [ -166.138498501999891, 66.16673411699999 ], [ -166.089182094999899, 66.152289130000113 ], [ -166.10871334499987, 66.152248440000122 ], [ -166.145130988999938, 66.156561591000056 ], [ -166.164255337999919, 66.152289130000113 ], [ -166.093698696999951, 66.12531159100017 ], [ -165.754994269999941, 66.105292059000092 ], [ -165.500111456999917, 66.152289130000113 ], [ -165.516224738999881, 66.164984442 ], [ -165.540638800999943, 66.173488674000041 ], [ -165.611765102999868, 66.182928778000033 ], [ -165.710886196999923, 66.212632554000052 ], [ -165.765980597999885, 66.220160223000121 ], [ -165.848947719999899, 66.22011953300013 ], [ -165.873972133999899, 66.225572007000082 ], [ -165.889963344999899, 66.241034247000087 ], [ -165.872873501999948, 66.263413804000109 ], [ -165.838693813999953, 66.28896719 ], [ -165.766428188999896, 66.323635158000073 ], [ -165.487660285999908, 66.402289130000085 ], [ -165.36351477799991, 66.41893138200011 ], [ -165.335316535999851, 66.429429429 ], [ -165.305734829999892, 66.43695709800015 ], [ -165.105213995999918, 66.445298570000105 ], [ -165.074940558999913, 66.440252997000087 ], [ -165.076608852999925, 66.436346747000087 ], [ -165.077585415999891, 66.433172919000029 ], [ -165.079050258999956, 66.429917710000083 ], [ -165.082386847999885, 66.42601146 ], [ -165.073719855999911, 66.41502513200011 ], [ -165.06196041599992, 66.407538153000147 ], [ -165.048166469999899, 66.402533270000035 ], [ -165.033395962999919, 66.399318752000156 ], [ -165.026560024999924, 66.422512111000103 ], [ -165.006337042999888, 66.430853583000058 ], [ -164.980905727999868, 66.433783270000092 ], [ -164.958241339999915, 66.440252997000087 ], [ -164.955759243999893, 66.444647528000147 ], [ -164.950550910999908, 66.460150458000086 ], [ -164.944650844999956, 66.466986395 ], [ -164.931141730999883, 66.472235419000086 ], [ -164.898752407999893, 66.478338934000149 ], [ -164.731312628999945, 66.532660223 ], [ -164.718088344999899, 66.556341864000117 ], [ -164.522653774999924, 66.582424221000096 ], [ -164.274362758999871, 66.60228099199999 ], [ -163.986398891999926, 66.61225006700009 ], [ -163.736317511999914, 66.603461005000113 ], [ -163.675729946999923, 66.592230536000116 ], [ -163.628732876999891, 66.570013739000061 ], [ -163.908151821999923, 66.5841332050001 ], [ -163.930124477999954, 66.585760809000121 ], [ -163.92088782499988, 66.573187567000119 ], [ -163.882883266999897, 66.569484768000066 ], [ -163.806874152999882, 66.570013739000061 ], [ -163.786813930999926, 66.560492255000057 ], [ -163.771799282999893, 66.545070705000128 ], [ -163.762399868999864, 66.525824286000088 ], [ -163.759103969999927, 66.504828192000147 ], [ -163.766468878999916, 66.485419012000037 ], [ -163.78461666599992, 66.470892645 ], [ -163.864247199999909, 66.436468817000062 ], [ -163.868967251999891, 66.429429429 ], [ -163.872141079999864, 66.420070705000157 ], [ -163.879628058999941, 66.41111888200011 ], [ -163.888498501999891, 66.403876044000114 ], [ -163.895619269999941, 66.399318752000156 ], [ -163.885202602999925, 66.379868882000054 ], [ -163.888172980999855, 66.366644598000121 ], [ -163.894846157999922, 66.35423411699999 ], [ -163.895619269999941, 66.337225653000033 ], [ -163.868967251999891, 66.30931224199999 ], [ -163.870432094999956, 66.308294989000117 ], [ -163.869699673999946, 66.302639065000122 ], [ -163.864979620999918, 66.295314846000124 ], [ -163.854685024999924, 66.289455471000096 ], [ -163.876576300999943, 66.265936591000028 ], [ -163.918771938999896, 66.246486721000124 ], [ -163.964955206999889, 66.232977606000148 ], [ -163.999256964999944, 66.227362372000144 ], [ -164.05406653599988, 66.226996161000145 ], [ -164.078236456999889, 66.222601630000057 ], [ -164.098337368999921, 66.210353908000101 ], [ -164.120310024999924, 66.204006252000156 ], [ -164.175729946999923, 66.208156643 ], [ -164.191110805999955, 66.193304755000142 ], [ -164.032093878999945, 66.192124742000104 ], [ -163.985666469999899, 66.206935940000093 ], [ -163.990549282999865, 66.189154364 ], [ -163.977487758999899, 66.18353913 ], [ -163.959787563999896, 66.186997789000017 ], [ -163.950876430999926, 66.196356512000037 ], [ -163.945749477999925, 66.208685614000089 ], [ -163.933176235999952, 66.212347723000121 ], [ -163.917469855999883, 66.210679429000109 ], [ -163.903065558999913, 66.206935940000093 ], [ -163.890492316999911, 66.167629299000069 ], [ -163.85496985599994, 66.133734442000119 ], [ -163.807484503999945, 66.107245184000149 ], [ -163.759103969999927, 66.090236721000096 ], [ -163.680490688999924, 66.078599351 ], [ -163.354359503999888, 66.09764232 ], [ -163.338734503999916, 66.093329169000171 ], [ -163.304310675999886, 66.07904694200009 ], [ -163.286447719999899, 66.075913804000024 ], [ -163.121652798999946, 66.070379950000088 ], [ -163.04047604099992, 66.079169012000065 ], [ -163.000843878999916, 66.087836005000142 ], [ -162.963693813999896, 66.100775458000058 ], [ -162.947702602999897, 66.103501695000105 ], [ -162.864491339999859, 66.098049221000068 ], [ -162.784169074999852, 66.105373440000093 ], [ -162.758534308999884, 66.111314195000105 ], [ -162.764759894999941, 66.103908596000124 ], [ -162.710764126999948, 66.085516669000086 ], [ -162.682850714999915, 66.069769598000121 ], [ -162.679676886999914, 66.052679755000085 ], [ -162.685251430999926, 66.046942450000117 ], [ -162.689808722999885, 66.040961005 ], [ -162.692005988999881, 66.033107815 ], [ -162.690297003999888, 66.021918036 ], [ -162.68378658799989, 66.008978583 ], [ -162.676869269999884, 66.006537177000055 ], [ -162.669789191999939, 66.010158596000039 ], [ -162.662953253999888, 66.015082098000093 ], [ -162.661447719999956, 66.020656643000095 ], [ -162.660511847999885, 66.029852606000148 ], [ -162.654733852999925, 66.038519598000065 ], [ -162.638742641999897, 66.04242584800015 ], [ -162.549265102999925, 66.051336981000091 ], [ -162.50812740799995, 66.060736395000035 ], [ -162.487904425999915, 66.062892971000011 ], [ -162.481068488999881, 66.065130927 ], [ -162.474964972999913, 66.069281317000119 ], [ -162.468495245999918, 66.071030992000132 ], [ -162.460642055999926, 66.066636460000055 ], [ -162.451161261999914, 66.055894273000135 ], [ -162.445668097999885, 66.051174221000124 ], [ -162.439808722999942, 66.049261786000059 ], [ -162.427683071999951, 66.047308661000116 ], [ -162.401071743999921, 66.038316148000106 ], [ -162.388010219999927, 66.035589911000116 ], [ -162.346628383999928, 66.036525783000016 ], [ -162.306101040999891, 66.04242584800015 ], [ -162.210072394999912, 66.071682033000073 ], [ -162.179432745999918, 66.075913804000024 ], [ -161.915638800999943, 66.04242584800015 ], [ -161.933338995999947, 66.040676174000154 ], [ -161.948923305999926, 66.034369208000115 ], [ -161.977121548999918, 66.015082098000093 ], [ -161.960153774999924, 66.013373114000089 ], [ -161.926014777999939, 66.025091864000061 ], [ -161.908192511999857, 66.021918036 ], [ -161.89793860599994, 66.012274481000034 ], [ -161.899240688999953, 66.003119208000058 ], [ -161.908558722999885, 65.994696356000091 ], [ -161.922474738999881, 65.987779039000102 ], [ -161.895375128999945, 65.97947825700011 ], [ -161.858225063999953, 65.977280992000132 ], [ -161.820668097999942, 65.980292059000035 ], [ -161.792795376999891, 65.987779039000102 ], [ -161.792795376999891, 65.99404531500015 ], [ -161.847401495999918, 66.007635809000092 ], [ -161.833688930999926, 66.024481512000094 ], [ -161.817331508999899, 66.039780992000075 ], [ -161.798898891999954, 66.052801825000145 ], [ -161.779123501999948, 66.062892971000011 ], [ -161.746205206999861, 66.071437893000123 ], [ -161.729440883999928, 66.078436591000028 ], [ -161.727284308999941, 66.08681875200007 ], [ -161.737660285999937, 66.088364976000108 ], [ -161.785267706999917, 66.075913804000024 ], [ -161.785267706999917, 66.083441473000065 ], [ -161.763295050999886, 66.091376044000029 ], [ -161.685292120999947, 66.138617255 ], [ -161.66633053299995, 66.154038804000109 ], [ -161.658680792999917, 66.162258205000015 ], [ -161.646921352999925, 66.184393622000087 ], [ -161.638132290999863, 66.195013739000146 ], [ -161.624582485999895, 66.199448960000112 ], [ -161.618153449999909, 66.203762111000017 ], [ -161.590687628999945, 66.238470770000092 ], [ -161.584909633999871, 66.249741929000081 ], [ -161.579823370999861, 66.25470612200003 ], [ -161.571237758999928, 66.258002020000063 ], [ -161.550729946999894, 66.261542059000035 ], [ -161.505930141999954, 66.278876044000029 ], [ -161.360096808999913, 66.275213934000178 ], [ -161.363840298999946, 66.272406317000119 ], [ -161.373768683999941, 66.262152411 ], [ -161.320668097999942, 66.232814846000096 ], [ -161.298695441999939, 66.227362372000144 ], [ -161.236927863999938, 66.223130601000136 ], [ -161.175770636999857, 66.227362372000144 ], [ -161.128651495999861, 66.245794989 ], [ -161.105661587999919, 66.250392971000124 ], [ -161.086415167999945, 66.241034247000087 ], [ -161.083811001999948, 66.230943101000108 ], [ -161.088083462999862, 66.218410549000126 ], [ -161.098459438999953, 66.208685614000089 ], [ -161.114328579999892, 66.206935940000093 ], [ -161.111439581999861, 66.197333075000088 ], [ -161.107004360999895, 66.188625393000038 ], [ -161.100900844999899, 66.18056875200007 ], [ -161.093251105999855, 66.172756252000099 ], [ -161.104359503999888, 66.165838934000092 ], [ -161.111683722999885, 66.157904364000117 ], [ -161.113148566999882, 66.148871161000116 ], [ -161.10688229099992, 66.138617255 ], [ -161.12328040299991, 66.13174062700007 ], [ -161.14281165299991, 66.129787502000127 ], [ -161.182606574999909, 66.131170966000028 ], [ -161.182606574999909, 66.12433502800009 ], [ -161.162546352999925, 66.118597723000121 ], [ -161.138986782999893, 66.11737702 ], [ -161.114938930999926, 66.119614976 ], [ -161.093251105999855, 66.12433502800009 ], [ -161.077341274999952, 66.130804755 ], [ -161.06773841099988, 66.138495184000121 ], [ -161.052235480999855, 66.158514716000084 ], [ -161.024037238999881, 66.184230861000131 ], [ -161.017526821999894, 66.193304755000142 ], [ -161.004709438999953, 66.232245184000035 ], [ -160.997019008999928, 66.241034247000087 ], [ -161.013783331999861, 66.261908270000063 ], [ -161.057443813999953, 66.28510163 ], [ -161.075876430999898, 66.299383856000091 ], [ -161.094309048999918, 66.318670966000028 ], [ -161.113758917999917, 66.332912502000127 ], [ -161.135731574999937, 66.343166408000158 ], [ -161.260324673999889, 66.369208075000031 ], [ -161.308827277999882, 66.373521226000136 ], [ -161.342966274999867, 66.382961330000128 ], [ -161.360788540999948, 66.385077216000141 ], [ -161.424875454999921, 66.383490302000112 ], [ -161.510690883999956, 66.407660223000121 ], [ -161.744618292999917, 66.405503648000135 ], [ -161.756947394999884, 66.402980861000017 ], [ -161.792795376999891, 66.385077216000141 ], [ -161.813059048999889, 66.380926825000117 ], [ -161.874704555999926, 66.377630927000084 ], [ -161.904367641999954, 66.365179755000057 ], [ -161.919056769999884, 66.344305731000091 ], [ -161.913278774999895, 66.326727606000148 ], [ -161.881540493999921, 66.323635158000073 ], [ -161.893299933999913, 66.316148179000109 ], [ -161.88731848899991, 66.309881903000147 ], [ -161.874948696999866, 66.303412177000055 ], [ -161.867258266999954, 66.295640367000047 ], [ -161.86982174399995, 66.281317450000145 ], [ -161.880930141999897, 66.272162177 ], [ -161.896311001999919, 66.27045319200009 ], [ -161.911936001999891, 66.278876044000029 ], [ -161.919016079999892, 66.287665106000091 ], [ -161.924672003999859, 66.29824453300013 ], [ -161.928537563999953, 66.309393622000172 ], [ -161.929921027999939, 66.320217190000065 ], [ -161.934641079999949, 66.327134507000054 ], [ -161.944650844999927, 66.330633856000148 ], [ -161.953968878999888, 66.336411851000108 ], [ -161.956613735999866, 66.350287177000027 ], [ -161.948312954999892, 66.366522528000147 ], [ -161.898264126999891, 66.408921617000047 ], [ -161.886545376999891, 66.422308661000145 ], [ -161.875965949999909, 66.440090236000017 ], [ -161.868763800999886, 66.46035390800013 ], [ -161.867258266999954, 66.481268622000087 ], [ -161.888376430999955, 66.52440013200011 ], [ -161.932484503999945, 66.556341864000117 ], [ -162.079457160999937, 66.623195705000128 ], [ -162.163197394999884, 66.682766018000066 ], [ -162.209828253999888, 66.70722077 ], [ -162.264515753999916, 66.722723700000117 ], [ -162.440541144999884, 66.730780341000141 ], [ -162.470895962999947, 66.738511460000055 ], [ -162.484608527999882, 66.744086005000085 ], [ -162.495106574999937, 66.746527411 ], [ -162.50458736899995, 66.749823309000035 ], [ -162.515248175999886, 66.758124091000028 ], [ -162.520578579999949, 66.766058661 ], [ -162.522328253999945, 66.780951239000146 ], [ -162.525827602999925, 66.789740302000027 ], [ -162.540028449999852, 66.804754950000031 ], [ -162.575795050999886, 66.830633856000034 ], [ -162.587228969999927, 66.844956773000135 ], [ -162.604562954999921, 66.841376044000143 ], [ -162.625314907999893, 66.861476955000015 ], [ -162.639841274999952, 66.887030341000084 ], [ -162.638742641999897, 66.899603583000086 ], [ -162.593820766999897, 66.916327216000113 ], [ -162.577015753999888, 66.919419664000017 ], [ -162.519968227999897, 66.920558986000131 ], [ -162.516224738999881, 66.923529364000146 ], [ -162.515451626999948, 66.927883205000128 ], [ -162.507435675999886, 66.939032294000143 ], [ -162.502390102999954, 66.94822825700011 ], [ -162.495228644999912, 66.956732489000061 ], [ -162.484811977999925, 66.960394598 ], [ -162.472849087999919, 66.957220770000148 ], [ -162.463815883999871, 66.949367580000072 ], [ -162.44697018099987, 66.929999091000141 ], [ -162.417103644999884, 66.922512111000074 ], [ -162.384103969999927, 66.934759833000143 ], [ -162.352609829999921, 66.952297268000095 ], [ -162.327137824999909, 66.960394598 ], [ -162.306630011999857, 66.952948309000035 ], [ -162.284860805999898, 66.937079169000114 ], [ -162.210438605999911, 66.869330145000092 ], [ -162.120920376999948, 66.806097723000121 ], [ -162.094309048999889, 66.794378973000121 ], [ -162.033029751999891, 66.786281643 ], [ -162.016835089999915, 66.780951239000146 ], [ -162.014963344999956, 66.772365627000127 ], [ -162.052845831999889, 66.735093492000047 ], [ -162.075754360999895, 66.706203518000123 ], [ -162.083241339999859, 66.68675364800005 ], [ -162.080759243999921, 66.666205145 ], [ -162.065988735999952, 66.653062242000047 ], [ -162.015207485999895, 66.634100653000033 ], [ -161.994821743999921, 66.621812242000075 ], [ -161.915231899999924, 66.557196356000034 ], [ -161.870838995999918, 66.532171942000033 ], [ -161.63377844999988, 66.457993882 ], [ -161.607167120999918, 66.45392487200003 ], [ -161.434030727999925, 66.468491929000052 ], [ -161.388050910999937, 66.481268622000087 ], [ -161.353627081999917, 66.485052802000112 ], [ -161.339182094999956, 66.488714911000059 ], [ -161.340280727999897, 66.49494049700003 ], [ -161.313059048999889, 66.500799872000172 ], [ -161.262888149999924, 66.529242255 ], [ -161.237538214999887, 66.535874742000047 ], [ -161.204213019999884, 66.538641669000029 ], [ -161.193430141999897, 66.536078192 ], [ -161.155262824999909, 66.503729559000092 ], [ -161.141916469999899, 66.498032945000105 ], [ -161.060983852999925, 66.486151434000149 ], [ -161.033680792999945, 66.475409247000144 ], [ -160.983631964999915, 66.440578518 ], [ -160.784779425999858, 66.374497789000102 ], [ -160.765370245999947, 66.370428778000061 ], [ -160.702829555999926, 66.377630927000084 ], [ -160.617176886999943, 66.371405341000028 ], [ -160.450917120999918, 66.393744208000058 ], [ -160.249094204999921, 66.402289130000085 ], [ -160.228505011999914, 66.412054755000113 ], [ -160.216175910999937, 66.43280670800003 ], [ -160.215646938999868, 66.45001862200003 ], [ -160.220448370999947, 66.493638414000131 ], [ -160.219186977999925, 66.532049872000059 ], [ -160.24946041599992, 66.561468817000119 ], [ -160.325428839999859, 66.60480377800009 ], [ -160.320871548999918, 66.60618724199999 ], [ -160.31187903599988, 66.610174872000144 ], [ -160.305612758999928, 66.610988674000069 ], [ -160.317575649999867, 66.634100653000033 ], [ -160.299631313999924, 66.639837958 ], [ -160.269113735999895, 66.639797268 ], [ -160.243519660999937, 66.645738023000135 ], [ -160.274973110999952, 66.654608466000084 ], [ -160.317941860999895, 66.655585028000147 ], [ -160.354440883999928, 66.644842841000056 ], [ -160.366403774999867, 66.61839427300005 ], [ -160.39716549399995, 66.629584052000084 ], [ -160.441273566999854, 66.635972398 ], [ -160.48485266799986, 66.634466864000146 ], [ -160.514149542999888, 66.621812242000075 ], [ -160.521717902999939, 66.609849351000136 ], [ -160.52586829299986, 66.600083726 ], [ -160.533558722999885, 66.593491929000109 ], [ -160.551706508999899, 66.591131903000147 ], [ -160.634510870999918, 66.597967841000084 ], [ -160.698312954999892, 66.612860419000057 ], [ -160.813547329999892, 66.662054755000057 ], [ -160.880970831999889, 66.672430731000148 ], [ -161.059071417999888, 66.651922919000086 ], [ -161.136057094999956, 66.651922919000086 ], [ -161.171579555999926, 66.644435940000122 ], [ -161.203114386999943, 66.625230210000083 ], [ -161.204050258999928, 66.621161200000031 ], [ -161.20213782499988, 66.608832098000065 ], [ -161.203114386999943, 66.60480377800009 ], [ -161.211171027999882, 66.601385809000092 ], [ -161.231760219999899, 66.599758205000072 ], [ -161.237253383999928, 66.597967841000084 ], [ -161.240183071999866, 66.587632554 ], [ -161.237049933999913, 66.57929108300003 ], [ -161.234934048999889, 66.570786851 ], [ -161.240956183999884, 66.560044664000074 ], [ -161.271962042999917, 66.542954820000105 ], [ -161.313710089999944, 66.5353050800001 ], [ -161.395497199999909, 66.535874742000047 ], [ -161.429432745999861, 66.542466539000131 ], [ -161.446726040999863, 66.54376862200003 ], [ -161.481556769999912, 66.533880927000112 ], [ -161.495432094999899, 66.536688544000171 ], [ -161.518422003999888, 66.550116278000147 ], [ -161.562611456999946, 66.56639232 ], [ -161.565622524999952, 66.577541408000016 ], [ -161.54633541599992, 66.597967841000084 ], [ -161.598011847999857, 66.601874091000084 ], [ -161.649728969999899, 66.612860419000057 ], [ -161.868275519999912, 66.706284898000106 ], [ -161.901966925999915, 66.735093492000047 ], [ -161.871774868999921, 66.754095770000063 ], [ -161.867258266999954, 66.758124091000028 ], [ -161.86945553299995, 66.768744208000058 ], [ -161.881540493999921, 66.789740302000027 ], [ -161.885324673999889, 66.808661200000031 ], [ -161.880563930999955, 66.814764716000028 ], [ -161.853342251999891, 66.819403387000037 ], [ -161.820057745999861, 66.837551174000126 ], [ -161.80016028599988, 66.853745835 ], [ -161.801136847999942, 66.865912177000084 ], [ -161.808216925999915, 66.879461981000034 ], [ -161.806385870999918, 66.899603583000086 ], [ -161.788685675999943, 66.91339752800009 ], [ -161.734079555999955, 66.92308177300005 ], [ -161.716420050999943, 66.939927476000051 ], [ -161.722727016999897, 66.943019924000126 ], [ -161.725534633999928, 66.946234442 ], [ -161.727365688999924, 66.949652411 ], [ -161.730661587999947, 66.953558661 ], [ -161.661732550999915, 66.963202216000141 ], [ -161.628854946999923, 66.964056708000058 ], [ -161.558338995999918, 66.957993882000082 ], [ -161.518299933999913, 66.960679429000052 ], [ -161.498850063999896, 66.971096096000124 ], [ -161.525217251999891, 66.991441148000135 ], [ -161.544422980999855, 66.994696356000176 ], [ -161.589548305999926, 66.993231512000122 ], [ -161.603464321999894, 66.997992255000113 ], [ -161.616078253999888, 67.007798570000048 ], [ -161.631337042999945, 67.014593817000062 ], [ -161.687570766999926, 67.029282945000077 ], [ -161.696522589999859, 67.029282945000077 ], [ -161.703724738999881, 67.026434637000037 ], [ -161.708241339999944, 67.021551825000145 ], [ -161.71031653599988, 67.016994533000016 ], [ -161.710194464999915, 67.015041408000073 ], [ -161.724558071999866, 67.014837958000115 ], [ -161.740223761999943, 67.017279364000146 ], [ -161.755441860999923, 67.023179429 ], [ -161.76825924399995, 67.033026434000092 ], [ -161.796213344999899, 67.048488674000126 ], [ -161.835153774999867, 67.054999091000028 ], [ -161.990223761999886, 67.049221096000153 ], [ -162.248036261999914, 67.015041408000073 ], [ -162.257761196999866, 67.020575262000179 ], [ -162.258290167999945, 67.032904364000117 ], [ -162.255482550999886, 67.045803127000127 ], [ -162.254872199999937, 67.052923895 ], [ -162.26500403599988, 67.061590887000094 ], [ -162.275257941999939, 67.06781647300015 ], [ -162.288278774999924, 67.070868231000063 ], [ -162.306101040999891, 67.07025788 ], [ -162.296986456999889, 67.05019765800013 ], [ -162.30687415299991, 67.039943752000013 ], [ -162.312977667999917, 67.029527085000112 ], [ -162.293039516999897, 67.008856512000094 ], [ -162.312936977999925, 67.003892320000048 ], [ -162.368112758999928, 67.008856512000094 ], [ -162.435495571999923, 66.99103424700003 ], [ -162.456898566999882, 66.994574286 ], [ -162.466867641999897, 67.00218333500014 ], [ -162.467600063999896, 67.009466864000061 ], [ -162.428822394999884, 67.057928778000033 ], [ -162.425852016999897, 67.063421942000062 ], [ -162.405588344999956, 67.071437893 ], [ -162.386423305999898, 67.090399481000034 ], [ -162.354481574999909, 67.132310289000131 ], [ -162.337839321999923, 67.145086981000148 ], [ -162.334909633999928, 67.150864976000136 ], [ -162.340809699999852, 67.159654039000102 ], [ -162.360096808999913, 67.167425848 ], [ -162.387928839999944, 67.168768622000087 ], [ -162.416127081999917, 67.165594794000029 ], [ -162.436390753999945, 67.159654039000102 ], [ -162.39911861899995, 67.159979559000035 ], [ -162.383493618999864, 67.154282945000048 ], [ -162.374948696999951, 67.139227606000034 ], [ -162.390451626999891, 67.13361237200003 ], [ -162.485910610999895, 67.061224677000084 ], [ -162.558786587999919, 67.019964911000116 ], [ -162.580433722999885, 67.015041408000073 ], [ -162.663767055999926, 67.016058661000116 ], [ -162.676991339999944, 67.018255927000112 ], [ -162.690297003999888, 67.022528387000037 ], [ -162.688547329999892, 67.026068427000112 ], [ -162.687489386999914, 67.029364325000145 ], [ -162.685983852999868, 67.032782294000143 ], [ -162.682810024999924, 67.036810614000117 ], [ -162.733347133999928, 67.048814195000048 ], [ -162.88890540299991, 67.042954820000105 ], [ -162.939564581999889, 67.04816315300009 ], [ -162.951893683999941, 67.044338283000073 ], [ -162.937326626999891, 67.029282945000077 ], [ -162.916737433999884, 67.020819403000033 ], [ -162.869496222999913, 67.014837958000115 ], [ -162.84788977799991, 67.008856512000094 ], [ -162.874134894999941, 67.005316473000036 ], [ -163.073923305999898, 67.035549221000039 ], [ -163.142323370999861, 67.057033596000153 ], [ -163.405629035999937, 67.075873114 ], [ -163.433094855999883, 67.08502838700015 ], [ -163.688303188999896, 67.103216864000061 ], [ -163.724964972999942, 67.111273505 ], [ -163.765614386999914, 67.139960028000147 ], [ -163.774159308999941, 67.180365302000027 ], [ -163.773426886999914, 67.225653387000037 ], [ -163.786447719999899, 67.26951732 ], [ -163.792469855999911, 67.289007880000057 ], [ -163.81004798099994, 67.335150458 ], [ -163.823963995999918, 67.354559637000094 ], [ -163.96161861899995, 67.498683986000131 ], [ -164.046457485999923, 67.563706773 ], [ -164.151478644999912, 67.619614976000051 ], [ -164.446034308999856, 67.709906317000062 ], [ -164.531605597999942, 67.750799872000087 ], [ -164.597767706999946, 67.77415599199999 ], [ -164.693552212999862, 67.824611721000011 ], [ -164.726511196999951, 67.834540106000119 ], [ -164.766468878999888, 67.838080145 ], [ -164.773304816999911, 67.838080145 ], [ -164.764393683999884, 67.823716539000102 ], [ -164.747751430999926, 67.817124742000047 ], [ -164.732858852999868, 67.812201239000089 ], [ -164.718088344999899, 67.803900458 ], [ -164.747873501999891, 67.809881903000033 ], [ -164.801503058999884, 67.838364976000136 ], [ -164.856027798999889, 67.849554755000142 ], [ -165.053944464999859, 67.933050848000036 ], [ -165.232736782999893, 67.997626044000171 ], [ -165.43720455599987, 68.060248114000089 ], [ -165.619984503999888, 68.091945705000128 ], [ -165.768991665999891, 68.106878973000093 ], [ -165.928089972999885, 68.136948960000112 ], [ -165.99360104099992, 68.16705963700015 ], [ -166.027088995999861, 68.194322007000054 ], [ -166.067860480999911, 68.216620184000092 ], [ -166.078602667999945, 68.225083726000136 ], [ -166.103464321999894, 68.239894924000012 ], [ -166.205881313999896, 68.262640692000147 ], [ -166.29662024599989, 68.299627997000087 ], [ -166.643747524999952, 68.344549872000087 ], [ -166.789865688999924, 68.339585679000137 ], [ -166.822824673999918, 68.351385809000092 ], [ -166.829050258999956, 68.351385809000092 ], [ -166.811838344999956, 68.35956452 ], [ -166.598215298999889, 68.408107815000065 ], [ -166.507191535999851, 68.422919012000065 ], [ -166.444813605999883, 68.42023346600017 ], [ -166.513783331999917, 68.414699611000131 ], [ -166.719064907999922, 68.37327708500014 ], [ -166.747181769999912, 68.363348700000031 ], [ -166.664540167999945, 68.351385809000092 ], [ -166.54816646999987, 68.358832098000093 ], [ -166.45478268099987, 68.398871161000116 ], [ -166.427683071999951, 68.397162177000112 ], [ -166.376535610999895, 68.385565497000087 ], [ -166.384836391999869, 68.397121486000017 ], [ -166.411447719999899, 68.403998114000117 ], [ -166.424997524999867, 68.41347890800013 ], [ -166.33820553299995, 68.399969794000143 ], [ -166.315134243999893, 68.405991929000081 ], [ -166.332875128999888, 68.41282786699999 ], [ -166.350900844999927, 68.436224677000084 ], [ -166.370350714999915, 68.440822658000016 ], [ -166.330189581999917, 68.467474677000141 ], [ -166.314645962999919, 68.481024481000091 ], [ -166.300770636999914, 68.502875067000147 ], [ -166.306263800999943, 68.522040106000119 ], [ -166.287180141999869, 68.537543036000116 ], [ -166.259632941999939, 68.551011460000026 ], [ -166.23997962099989, 68.564276434000035 ], [ -166.231027798999861, 68.579901434000121 ], [ -166.232533331999917, 68.587103583000058 ], [ -166.237904425999886, 68.59316640800013 ], [ -166.23997962099989, 68.605210679000052 ], [ -166.237131313999953, 68.616034247000144 ], [ -166.218861456999889, 68.646185614000089 ], [ -166.230661587999947, 68.654852606000176 ], [ -166.228708462999919, 68.661078192000119 ], [ -166.220285610999952, 68.666896877000099 ], [ -166.212635870999918, 68.674139716000113 ], [ -166.206979946999923, 68.686835028000175 ], [ -166.205067511999886, 68.696763413999989 ], [ -166.205881313999896, 68.718491929000052 ], [ -166.202707485999923, 68.740423895000063 ], [ -166.196848110999895, 68.759670315000037 ], [ -166.193796352999868, 68.779689846000096 ], [ -166.199045376999862, 68.803900458000086 ], [ -166.227976040999863, 68.849595445000105 ], [ -166.236765102999925, 68.874823309000149 ], [ -166.222604946999923, 68.885809637000037 ], [ -166.085642055999926, 68.89142487200003 ], [ -166.009103969999927, 68.872748114000146 ], [ -165.813588019999884, 68.879461981000091 ], [ -165.664743618999921, 68.86155833500014 ], [ -165.322092251999919, 68.876450913999989 ], [ -165.044056769999855, 68.881496486000017 ], [ -164.79076087099989, 68.914252020000148 ], [ -164.346424933999913, 68.929388739000146 ], [ -164.257028774999895, 68.94668203300013 ], [ -164.170358852999954, 68.953802802 ], [ -164.090036587999947, 68.978949286000059 ], [ -163.96454830599987, 69.003119208000086 ], [ -163.935170050999886, 69.012437242000104 ], [ -163.876698370999918, 69.038641669000143 ], [ -163.82172604099992, 69.04783763200011 ], [ -163.622547980999911, 69.119208075000117 ], [ -163.28612219999988, 69.310980536000116 ], [ -163.264759894999941, 69.326605536000116 ], [ -163.195301886999914, 69.415228583 ], [ -163.176991339999944, 69.426906643 ], [ -163.155751105999855, 69.420843817 ], [ -163.239979620999861, 69.32831452000012 ], [ -163.272450324999852, 69.304144598 ], [ -163.272450324999852, 69.29791901200015 ], [ -163.242543097999885, 69.30463288 ], [ -163.155751105999855, 69.359361070000134 ], [ -163.163197394999941, 69.366197007000054 ], [ -163.142648891999897, 69.375230210000055 ], [ -163.125803188999896, 69.389960028000147 ], [ -163.120676235999895, 69.40643952000012 ], [ -163.135324673999889, 69.420843817 ], [ -163.12242591099988, 69.430365302 ], [ -163.120187954999892, 69.438137111000017 ], [ -163.122141079999949, 69.44562409100017 ], [ -163.121652798999946, 69.45433177300005 ], [ -163.114125128999888, 69.466253973 ], [ -163.106678839999915, 69.474839585000112 ], [ -163.104969855999911, 69.483710028000147 ], [ -163.114816860999923, 69.495917059000035 ], [ -163.083200649999952, 69.501044012000037 ], [ -163.070790167999917, 69.52041250200007 ], [ -163.069284633999956, 69.541327216000028 ], [ -163.070139126999891, 69.551174221000124 ], [ -163.064768032999922, 69.555975653000033 ], [ -163.067860480999911, 69.566799221000124 ], [ -163.074777798999889, 69.578314520000063 ], [ -163.080677863999938, 69.58535390800013 ], [ -163.093820766999897, 69.590562242000132 ], [ -163.148996548999918, 69.599554755000057 ], [ -163.148996548999918, 69.605780341000113 ], [ -163.085438605999911, 69.60932038 ], [ -163.053578253999888, 69.615464585000055 ], [ -163.025461391999897, 69.626288153000147 ], [ -163.035145636999857, 69.632310289000074 ], [ -163.066395636999943, 69.64671458500014 ], [ -163.032907680999898, 69.661078192 ], [ -163.041615363999881, 69.663478908000158 ], [ -163.066395636999943, 69.674058335000026 ], [ -163.04853268099987, 69.687241929000052 ], [ -162.98412024599989, 69.681830145 ], [ -162.956532355999855, 69.68773021000014 ], [ -162.938425258999956, 69.711249091000084 ], [ -162.957590298999918, 69.72337474199999 ], [ -162.993478969999899, 69.727972723000121 ], [ -163.025461391999897, 69.728664455000072 ], [ -163.018747524999952, 69.745835679 ], [ -163.005360480999855, 69.75311920800003 ], [ -162.988352016999897, 69.756822007000054 ], [ -162.970814581999946, 69.763413804000109 ], [ -162.978260870999918, 69.770249742000047 ], [ -162.949777798999918, 69.790472723000065 ], [ -162.791371222999885, 69.853338934000121 ], [ -162.757272915999863, 69.87189362200003 ], [ -162.711618618999921, 69.880682684000092 ], [ -162.669992641999897, 69.906561591000084 ], [ -162.592762824999937, 69.941717841000141 ], [ -162.537790493999864, 69.956732489 ], [ -162.51142330599987, 69.976955471000011 ], [ -162.489491339999944, 70.001776434000149 ], [ -162.477365688999953, 70.024115302 ], [ -162.481922980999911, 70.030747789000074 ], [ -162.491037563999896, 70.051459052000055 ], [ -162.461496548999918, 70.05963776200015 ], [ -162.360707160999851, 70.057603257000054 ], [ -162.364206508999928, 70.063666083000143 ], [ -162.37132727799991, 70.079494533000073 ], [ -162.374948696999951, 70.085598049000069 ], [ -162.340809699999852, 70.092433986000074 ], [ -162.352040167999945, 70.108384507 ], [ -162.321481899999924, 70.127264716000028 ], [ -162.244618292999917, 70.153876044000143 ], [ -162.20673580599987, 70.161322333000143 ], [ -162.199411587999862, 70.164374091000028 ], [ -162.194284633999956, 70.171210028000147 ], [ -162.190419074999852, 70.17804596600017 ], [ -162.186594204999949, 70.181219794000029 ], [ -162.170969204999949, 70.184637762000037 ], [ -162.124867316999939, 70.203192450000145 ], [ -162.099436001999919, 70.220607815000122 ], [ -162.052845831999889, 70.243841864000146 ], [ -162.014963344999956, 70.27732982 ], [ -162.001657680999926, 70.280910549000069 ], [ -161.956613735999866, 70.304673570000077 ], [ -161.905710415999948, 70.32062409100017 ], [ -161.879831508999928, 70.322943427000141 ], [ -161.853586391999897, 70.318345445000105 ], [ -161.856149868999921, 70.314642645000063 ], [ -161.86103268099987, 70.304673570000077 ], [ -161.839955206999889, 70.304103908000101 ], [ -161.833119269999941, 70.304673570000077 ], [ -161.833119269999941, 70.297837632000054 ], [ -161.840443488999853, 70.296942450000145 ], [ -161.86103268099987, 70.290432033000158 ], [ -161.723703579999892, 70.274847723000065 ], [ -161.703358527999882, 70.263739325000031 ], [ -161.733469204999892, 70.250311591000141 ], [ -161.860056118999921, 70.258693752000013 ], [ -161.901966925999915, 70.256903387000122 ], [ -161.867909308999913, 70.242661851000108 ], [ -161.790842251999948, 70.240545966000113 ], [ -161.758615688999896, 70.229559637000065 ], [ -161.789173956999917, 70.229152736000131 ], [ -161.832590298999889, 70.223130601000136 ], [ -161.859486456999946, 70.211859442000147 ], [ -161.840524868999921, 70.195461330000128 ], [ -161.86554928299995, 70.179348049000069 ], [ -161.899525519999884, 70.178656317000119 ], [ -162.008737758999899, 70.196275132000054 ], [ -162.025502081999917, 70.195461330000128 ], [ -162.039784308999913, 70.191107489000146 ], [ -162.066151495999918, 70.179388739000061 ], [ -162.080759243999921, 70.174953518000095 ], [ -162.121693488999881, 70.161322333000143 ], [ -162.121693488999881, 70.153876044000143 ], [ -161.86461341099988, 70.169134833000115 ], [ -161.848093227999868, 70.173814195000048 ], [ -161.813221808999941, 70.192084052000112 ], [ -161.786732550999886, 70.199652411000059 ], [ -161.703358527999882, 70.195461330000128 ], [ -161.720163540999891, 70.201239325000088 ], [ -161.728260870999918, 70.202297268000066 ], [ -161.738148566999939, 70.202297268000066 ], [ -161.729318813999868, 70.215643622000172 ], [ -161.712595180999926, 70.224066473000121 ], [ -161.693186001999948, 70.228338934000035 ], [ -161.67601477799991, 70.229559637000065 ], [ -161.666737433999941, 70.232082424000069 ], [ -161.663522915999891, 70.237860419000029 ], [ -161.661447719999899, 70.244696356000063 ], [ -161.655588344999927, 70.250067450000088 ], [ -161.643422003999945, 70.254095770000063 ], [ -161.631947394999884, 70.256089585000112 ], [ -161.342152472999885, 70.258775132 ], [ -161.210642055999898, 70.276800848000036 ], [ -161.067005988999938, 70.314846096000011 ], [ -161.024973110999895, 70.318345445000105 ], [ -161.024973110999895, 70.312160549000126 ], [ -161.031809048999889, 70.312160549000126 ], [ -161.031809048999889, 70.304673570000077 ], [ -161.009877081999889, 70.304388739000117 ], [ -160.949899868999921, 70.290432033000158 ], [ -160.95649166599992, 70.301459052000112 ], [ -160.977406378999888, 70.313625393 ], [ -160.983998175999943, 70.325140692000119 ], [ -160.957875128999888, 70.332749742000075 ], [ -160.860666469999899, 70.347316799000012 ], [ -160.621530727999925, 70.429592190000065 ], [ -160.599802212999862, 70.441839911000116 ], [ -160.662790493999893, 70.434027411000116 ], [ -160.707468227999925, 70.419134833000086 ], [ -160.812692837999919, 70.387193101000079 ], [ -160.773060675999886, 70.405747788999989 ], [ -160.689279751999948, 70.434027411000116 ], [ -160.448963995999861, 70.489650783000158 ], [ -160.216175910999937, 70.579046942000062 ], [ -160.188303188999896, 70.597072658000101 ], [ -160.172230597999913, 70.604925848000093 ], [ -160.155384894999912, 70.606350002000156 ], [ -160.16742916599992, 70.596258856000091 ], [ -160.15961666599992, 70.587958075000117 ], [ -160.142689581999946, 70.58201732 ], [ -160.127430792999888, 70.579046942000062 ], [ -160.10297604099992, 70.578517971000096 ], [ -160.038075324999852, 70.592718817 ], [ -159.947092251999919, 70.597235419000143 ], [ -159.928212042999888, 70.592718817 ], [ -159.924387173999889, 70.581488348 ], [ -159.928903774999924, 70.568426825000031 ], [ -159.938181118999864, 70.557277736000017 ], [ -159.948679165999948, 70.551703192 ], [ -159.948679165999948, 70.544867255000085 ], [ -159.942209438999953, 70.545477606000034 ], [ -159.921986456999946, 70.544867255000085 ], [ -159.94383704299986, 70.521958726 ], [ -160.011057094999899, 70.520331122000144 ], [ -160.041818813999896, 70.507025458000143 ], [ -160.074086066999939, 70.48822663 ], [ -160.114816860999895, 70.480698960000112 ], [ -160.201893683999941, 70.476629950000174 ], [ -160.168771938999896, 70.465969143000123 ], [ -160.125721808999884, 70.466009833000115 ], [ -159.948475714999915, 70.494452216000141 ], [ -159.921986456999946, 70.489650783000158 ], [ -159.938343878999945, 70.476060289000102 ], [ -159.974232550999943, 70.456000067000147 ], [ -159.990223761999914, 70.441839911000116 ], [ -160.013905402999853, 70.410956122000172 ], [ -160.029652472999913, 70.398993231000034 ], [ -160.051747199999909, 70.394110419000171 ], [ -160.056345180999926, 70.37494538 ], [ -160.114206508999928, 70.344142971000124 ], [ -160.133656378999945, 70.325140692000119 ], [ -160.09601803299995, 70.321356512000094 ], [ -160.009022589999887, 70.361476955000015 ], [ -159.969186977999925, 70.372992255000057 ], [ -159.948475714999915, 70.370428778000147 ], [ -159.933176235999952, 70.362290757000139 ], [ -159.922230597999885, 70.349310614000117 ], [ -159.914540167999945, 70.331976630000057 ], [ -159.916818813999924, 70.330389716000028 ], [ -159.922311977999954, 70.328070380000057 ], [ -159.927316860999895, 70.324164130000057 ], [ -159.928212042999888, 70.318345445000105 ], [ -159.925485805999926, 70.315375067 ], [ -159.920765753999916, 70.313381252000156 ], [ -159.916452602999925, 70.312323309000092 ], [ -159.914540167999945, 70.312160549000126 ], [ -159.910633917999945, 70.304103908000101 ], [ -159.906198696999866, 70.299139716000141 ], [ -159.904286261999914, 70.293768622000087 ], [ -159.907704230999911, 70.284247137000094 ], [ -159.86656653599988, 70.277736721000011 ], [ -159.833241339999859, 70.252020575000145 ], [ -159.803089972999942, 70.220282294000086 ], [ -159.771188930999926, 70.195461330000128 ], [ -159.770578579999892, 70.225165106000148 ], [ -159.786732550999943, 70.238104559000149 ], [ -159.810536261999914, 70.24689362200003 ], [ -159.83263098899991, 70.263739325000031 ], [ -159.836903449999909, 70.273627020000148 ], [ -159.838693813999896, 70.285793361000131 ], [ -159.838815883999871, 70.308417059000092 ], [ -159.844960089999944, 70.313421942000147 ], [ -159.849720831999946, 70.318426825000088 ], [ -159.853098110999895, 70.325140692000119 ], [ -159.850534633999956, 70.330877997000087 ], [ -159.84349524599989, 70.335516669000029 ], [ -159.838693813999896, 70.341009833000058 ], [ -159.842518683999913, 70.349432684000092 ], [ -159.880319790999863, 70.375677802000141 ], [ -159.887277798999861, 70.387193101000079 ], [ -159.886789516999897, 70.398871161000059 ], [ -159.882150844999956, 70.40761953300013 ], [ -159.876779751999891, 70.415472723000121 ], [ -159.874216274999867, 70.424790757000082 ], [ -159.865061001999891, 70.444037177000112 ], [ -159.845814581999946, 70.456529039000131 ], [ -159.828602667999917, 70.471258856000119 ], [ -159.825795050999886, 70.497056382000054 ], [ -159.810292120999861, 70.500799872000172 ], [ -159.799305792999917, 70.499212958000143 ], [ -159.728098110999895, 70.47264232 ], [ -159.709706183999856, 70.46979401200015 ], [ -159.669626430999926, 70.473089911 ], [ -159.593373175999886, 70.492580471000068 ], [ -159.540842251999948, 70.499212958000143 ], [ -159.495310024999867, 70.51581452 ], [ -159.480580206999889, 70.515529690000065 ], [ -159.449289516999926, 70.500921942000147 ], [ -159.434763149999867, 70.497056382000054 ], [ -159.418527798999946, 70.499701239000117 ], [ -159.367136196999923, 70.517645575000174 ], [ -159.325672980999911, 70.521307684000035 ], [ -159.305775519999941, 70.526190497000087 ], [ -159.291371222999885, 70.538072007000054 ], [ -159.421091274999924, 70.523830471000153 ], [ -159.530832485999952, 70.532416083000058 ], [ -159.565134243999921, 70.531236070000134 ], [ -159.568430141999954, 70.528794664000102 ], [ -159.570871548999889, 70.524115302 ], [ -159.572336391999954, 70.519598700000031 ], [ -159.57249915299991, 70.517645575000174 ], [ -159.579945441999882, 70.516831773000078 ], [ -159.631174282999922, 70.517279364000061 ], [ -159.641184048999918, 70.514308986000131 ], [ -159.650746222999885, 70.507025458000143 ], [ -159.663807745999861, 70.500067450000145 ], [ -159.681752081999917, 70.496812242000104 ], [ -159.715931769999912, 70.497056382000054 ], [ -159.732289191999939, 70.499904690000093 ], [ -159.74238033799989, 70.504217841000084 ], [ -159.764352993999921, 70.517645575000174 ], [ -159.825306769999884, 70.54376862200003 ], [ -159.842518683999913, 70.555121161 ], [ -159.849436001999919, 70.562323309000035 ], [ -159.85521399599989, 70.570502020000148 ], [ -159.859120245999861, 70.57941315300009 ], [ -159.860544399999924, 70.589016018000066 ], [ -159.864613410999908, 70.599066473000121 ], [ -159.874582485999895, 70.602687893 ], [ -159.886789516999897, 70.60455963700015 ], [ -159.947865363999938, 70.636419989 ], [ -160.005726691999939, 70.64008209800015 ], [ -160.065174933999913, 70.627752997000087 ], [ -160.119984503999888, 70.606350002000156 ], [ -160.122303839999859, 70.610296942000119 ], [ -160.124582485999952, 70.615668036 ], [ -160.127430792999888, 70.62620677300005 ], [ -160.096262173999889, 70.643052476000051 ], [ -159.913034633999899, 70.700628973000121 ], [ -159.88805091099988, 70.705552476 ], [ -159.836252407999893, 70.708075262000094 ], [ -159.812123175999943, 70.71556224199999 ], [ -159.846262173999946, 70.71556224199999 ], [ -159.813099738999938, 70.727850653000033 ], [ -159.708973761999914, 70.779282945000134 ], [ -159.683216925999886, 70.79759349199999 ], [ -159.668161587999862, 70.804999091000084 ], [ -159.644846157999865, 70.810003973000121 ], [ -159.595407680999926, 70.813788153000061 ], [ -159.548776821999894, 70.830226955000128 ], [ -159.519642706999946, 70.835760809000149 ], [ -159.412058071999923, 70.842027085000112 ], [ -159.383290167999917, 70.846909898 ], [ -159.346302863999881, 70.863348700000174 ], [ -159.161000128999945, 70.88690827000012 ], [ -159.206247524999867, 70.866400458000058 ], [ -159.318796352999925, 70.861029364000032 ], [ -159.37328040299991, 70.845933335000026 ], [ -159.174265102999868, 70.853908596000068 ], [ -159.155140753999888, 70.846340236000017 ], [ -159.140573696999866, 70.82542552300005 ], [ -159.181345180999926, 70.81671784100017 ], [ -159.311838344999927, 70.812445380000057 ], [ -159.410878058999913, 70.787420966000141 ], [ -159.449045376999891, 70.784491278000033 ], [ -159.449045376999891, 70.777044989000146 ], [ -159.392079230999855, 70.767320054 ], [ -159.373605923999946, 70.760931708000086 ], [ -159.356800910999937, 70.760199286000145 ], [ -159.339060024999924, 70.76654694200009 ], [ -159.321278449999937, 70.769273179000052 ], [ -159.304432745999947, 70.757798570000105 ], [ -159.31004798099994, 70.753973700000088 ], [ -159.318714972999942, 70.746161200000088 ], [ -159.324899868999921, 70.743557033000101 ], [ -159.300974087999947, 70.727118231000091 ], [ -159.246449347999885, 70.706447658000073 ], [ -159.222482876999891, 70.68891022300015 ], [ -159.21629798099994, 70.695135809000092 ], [ -159.270497199999909, 70.744614976000051 ], [ -159.279042120999918, 70.764715887000094 ], [ -159.236154751999948, 70.77081940300009 ], [ -159.119740363999881, 70.76398346600017 ], [ -158.989735480999883, 70.777044989000146 ], [ -159.003488735999895, 70.797267971000068 ], [ -159.029164191999939, 70.805121161000059 ], [ -159.08531653599988, 70.804999091000084 ], [ -159.060414191999911, 70.816555080000015 ], [ -158.715402798999861, 70.791327216000141 ], [ -158.338002081999889, 70.818019924000069 ], [ -158.439279751999862, 70.822088934000035 ], [ -158.492990688999924, 70.832342841000141 ], [ -158.523548956999861, 70.852769273000106 ], [ -158.479929165999948, 70.853257554000109 ], [ -158.389393683999913, 70.83673737200003 ], [ -158.043039516999954, 70.836859442 ], [ -157.86493893099987, 70.86644114800005 ], [ -157.67353268099987, 70.922796942000119 ], [ -157.624379035999851, 70.931301174000154 ], [ -157.593251105999855, 70.946193752000013 ], [ -157.577951626999891, 70.949611721000011 ], [ -157.55907141799986, 70.951361395 ], [ -157.231190558999941, 71.071356512000037 ], [ -157.087839321999923, 71.15501536699999 ], [ -157.025502081999946, 71.203192450000031 ], [ -156.817209438999953, 71.306341864000061 ], [ -156.681833462999862, 71.352728583000115 ], [ -156.591908331999889, 71.364732164000046 ], [ -156.522409633999871, 71.38971588700015 ], [ -156.498605923999889, 71.40452708500014 ], [ -156.471506313999953, 71.412502346000096 ], [ -156.434803839999944, 71.40648021 ] ] ] ] } } +{ + "type": "Feature", + "properties": { + "scalerank": 0, + "featurecla": "Admin-0 country", + "LABELRANK": 2.0, + "SOVEREIGNT": "United States of America", + "SOV_A3": "US1", + "ADM0_DIF": 1.0, + "LEVEL": 2.0, + "TYPE": "Country", + "ADMIN": "United States of America", + "ADM0_A3": "USA", + "GEOU_DIF": 0.0, + "GEOUNIT": "United States of America", + "GU_A3": "USA", + "SU_DIF": 0.0, + "SUBUNIT": "United States of America", + "SU_A3": "USA", + "BRK_DIFF": 0.0, + "NAME": "United States", + "NAME_LONG": "United States", + "BRK_A3": "USA", + "BRK_NAME": "United States", + "BRK_GROUP": null, + "ABBREV": "U.S.A.", + "POSTAL": "US", + "FORMAL_EN": "United States of America", + "FORMAL_FR": null, + "NOTE_ADM0": null, + "NOTE_BRK": null, + "NAME_SORT": "United States of America", + "NAME_ALT": null, + "MAPCOLOR7": 4.0, + "MAPCOLOR8": 5.0, + "MAPCOLOR9": 1.0, + "MAPCOLOR13": 1.0, + "POP_EST": 313973000.0, + "GDP_MD_EST": 15094000.0, + "POP_YEAR": 0.0, + "LASTCENSUS": 2010.0, + "GDP_YEAR": 0.0, + "ECONOMY": "1. Developed region: G7", + "INCOME_GRP": "1. High income: OECD", + "WIKIPEDIA": 0.0, + "FIPS_10_": "US", + "ISO_A2": "US", + "ISO_A3": "USA", + "ISO_N3": "840", + "UN_A3": "840", + "WB_A2": "US", + "WB_A3": "USA", + "WOE_ID": 23424977.0, + "WOE_ID_EH": 23424977.0, + "WOE_NOTE": "Exact WOE match as country", + "ADM0_A3_IS": "USA", + "ADM0_A3_US": "USA", + "ADM0_A3_UN": -99.0, + "ADM0_A3_WB": -99.0, + "CONTINENT": "North America", + "REGION_UN": "Americas", + "SUBREGION": "Northern America", + "REGION_WB": "North America", + "NAME_LEN": 13.0, + "LONG_LEN": 13.0, + "ABBREV_LEN": 6.0, + "TINY": -99.0, + "HOMEPART": 1.0 + }, + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [-155.606518969999911, 20.137955566000144], + [-155.58636330899995, 20.122935923000156], + [-155.5630978639999, 20.128402875000134], + [-155.527193996999898, 20.126268986000142], + [-155.491078253999945, 20.113023179000109], + [-155.420714617999948, 20.09018548900012], + [-155.332312778999892, 20.046721443000123], + [-155.215105930999869, 19.975645397000065], + [-155.168042733999897, 19.946827215000113], + [-155.115853354999899, 19.896732304000025], + [-155.087141188999908, 19.860379834000028], + [-155.086399261999929, 19.821029192000125], + [-155.088061501999846, 19.768645245000144], + [-155.085370905999923, 19.727409311000045], + [-155.057492899999886, 19.72853043200017], + [-155.018544074999909, 19.745835679], + [-154.989923380999869, 19.726707451000053], + [-154.976671733999865, 19.705757273000089], + [-154.980043767999916, 19.662806468], + [-154.966970126999911, 19.636251923000046], + [-154.949905960999956, 19.611445574000143], + [-154.8996216029999, 19.567016293000123], + [-154.84662324899989, 19.544937986], + [-154.825310519999874, 19.527487875000176], + [-154.81406356599993, 19.506579211000158], + [-154.817209438999896, 19.479722398000078], + [-154.829904751999948, 19.464056708], + [-154.874736234999943, 19.4128841550001], + [-154.918932218999913, 19.397311606000088], + [-154.982300512999927, 19.339243956000146], + [-155.02509518099987, 19.327582098000093], + [-155.026663070999945, 19.316170953000054], + [-155.062612970999936, 19.307820063000108], + [-155.093031421999939, 19.286209597000109], + [-155.153041030999873, 19.26920424000015], + [-155.202957571999889, 19.255579602000026], + [-155.245059364999861, 19.265539102000119], + [-155.269281371999909, 19.26618159300007], + [-155.291127433999947, 19.259523502000107], + [-155.314444617999925, 19.245659319000154], + [-155.345686887999875, 19.224804655000113], + [-155.364136047999921, 19.203574675000155], + [-155.384658475999856, 19.200530529], + [-155.400149347999957, 19.19368608200007], + [-155.422596808999913, 19.180121161], + [-155.436838344999899, 19.169867255000085], + [-155.487782355999911, 19.142523505000028], + [-155.502797003999945, 19.13768138200011], + [-155.546131964999915, 19.098211981000148], + [-155.553737211999874, 19.081960805000151], + [-155.552259915999855, 19.045618945000129], + [-155.570637916999914, 19.02677103000012], + [-155.602060390999952, 18.997379625000079], + [-155.61852255699992, 18.955543680000162], + [-155.632968807999902, 18.940203114000084], + [-155.651241571999947, 18.926103771000115], + [-155.674755623999943, 18.906117143000117], + [-155.683543926999846, 18.911156771], + [-155.682932379999869, 18.932886390000149], + [-155.704166702999885, 18.949084649000056], + [-155.744414438999883, 18.969342794000127], + [-155.792170759999919, 18.996975708000051], + [-155.817253255999844, 19.013230752000041], + [-155.859133089999887, 19.023812411], + [-155.87812988099995, 19.029072187000068], + [-155.884047255999917, 19.047294619000027], + [-155.891048647999924, 19.06565446400019], + [-155.903906071999899, 19.069459068000029], + [-155.91213327199992, 19.096188743000184], + [-155.919930468999894, 19.138600656000065], + [-155.908385596999892, 19.188985774000017], + [-155.885530453999877, 19.334156958000065], + [-155.887373984999897, 19.359568177000128], + [-155.900889060999845, 19.382749774000061], + [-155.912958579999895, 19.414314596000153], + [-155.929490948999899, 19.461815958000059], + [-155.936577713999895, 19.481310354000087], + [-155.946447877999901, 19.493611062000113], + [-155.956388101999892, 19.51423606200008], + [-155.953968878999916, 19.536078192000119], + [-155.965635829999883, 19.556630668000039], + [-155.971365300999935, 19.57969801300014], + [-155.982197194999912, 19.607674731000159], + [-155.999524396999846, 19.632179407000152], + [-156.014784079999913, 19.643355435], + [-156.036255144999899, 19.667935486000104], + [-156.060163927999895, 19.731220553000085], + [-156.05016028599988, 19.759507554000109], + [-156.03880774599989, 19.783148505000057], + [-156.017445441999939, 19.801092841000084], + [-155.996774868999921, 19.814439195000105], + [-155.987497524999952, 19.824367580000015], + [-155.982045050999915, 19.843329169000029], + [-155.967966274999867, 19.854234117000104], + [-155.92601477799991, 19.868801174000126], + [-155.905832485999952, 19.902044989000117], + [-155.89586341099988, 19.913478908000101], + [-155.873401878999914, 19.951321249000088], + [-155.85090084499987, 19.975287177], + [-155.835457617999907, 19.975703442000068], + [-155.828320051999924, 20.006960726000031], + [-155.824083278999922, 20.020092445000117], + [-155.831068615999953, 20.039371950000046], + [-155.847709867999924, 20.054519035000013], + [-155.882555982999889, 20.104942986000182], + [-155.896980431999907, 20.148846149000079], + [-155.899362758999956, 20.184068101000079], + [-155.899270492999847, 20.216690077000138], + [-155.880482550999943, 20.25202057500006], + [-155.867242161999883, 20.263132036000158], + [-155.831129243999897, 20.263429107000135], + [-155.766061977999925, 20.249172268], + [-155.737985805999898, 20.243801174000126], + [-155.732614712999947, 20.238836981000091], + [-155.729196743999921, 20.231350002000127], + [-155.728016730999911, 20.22162506700009], + [-155.711669388999951, 20.196149105000089], + [-155.67334951599986, 20.18166990800016], + [-155.648130541999933, 20.168006393], + [-155.630653579999915, 20.14821166600008], + [-155.606518969999911, 20.137955566000144] + ] + ], + [ + [ + [-156.534128410999955, 20.53178747600019], + [-156.544555061999887, 20.513216689], + [-156.572918640999859, 20.512983613000173], + [-156.599510728999917, 20.517403037000079], + [-156.61886799899986, 20.51380849100012], + [-156.646498516999884, 20.508083848000027], + [-156.679261302999862, 20.504712932000089], + [-156.700561823999863, 20.525426565000132], + [-156.688457904999893, 20.54010440800009], + [-156.667159065999954, 20.557717171000135], + [-156.639149542999945, 20.575140692000062], + [-156.608814535999926, 20.591045980000061], + [-156.582621411999924, 20.599956701000067], + [-156.561774064999952, 20.598007555], + [-156.536569935999921, 20.570942072000136], + [-156.549767511999846, 20.541472931000058], + [-156.534128410999955, 20.53178747600019] + ] + ], + [ + [ + [-156.913737526999853, 20.734724091000047], + [-156.962280102999955, 20.732387730000184], + [-156.982386144999879, 20.759414015000075], + [-156.987078693999933, 20.782873410000022], + [-156.988352016999954, 20.801459052], + [-156.988596157999893, 20.824937242000047], + [-156.992136196999866, 20.846340236000017], + [-157.009224163999932, 20.855880059000114], + [-157.050809620999928, 20.871405682000116], + [-157.063136057999941, 20.890386641000148], + [-157.055213601999895, 20.911371030000012], + [-157.031550960999937, 20.922717910000145], + [-156.990414204999951, 20.92750878700015], + [-156.89271962499987, 20.914141356000172], + [-156.848378058999913, 20.876817124000141], + [-156.848337368999921, 20.876776434000149], + [-156.832672234999905, 20.860743402000153], + [-156.816338432999885, 20.841704170000028], + [-156.8057973089999, 20.825107881000136], + [-156.803539098999948, 20.812564416000143], + [-156.809731330999909, 20.795479580000162], + [-156.83125712899988, 20.76380716600012], + [-156.876774734999913, 20.744265284000065], + [-156.913737526999853, 20.734724091000047] + ] + ], + [ + [ + [-156.589599704999898, 21.027738813000113], + [-156.581385911999945, 21.018149872000137], + [-156.571413356999926, 21.016456133000148], + [-156.555665538999904, 21.008334336000146], + [-156.542367725999895, 21.003389588000019], + [-156.537524827999846, 20.990651662000076], + [-156.525888580999862, 20.987321553000143], + [-156.52287490899991, 20.974045307000083], + [-156.523047218999864, 20.962198095000119], + [-156.509140973999877, 20.950296330000086], + [-156.500189100999876, 20.937583783000107], + [-156.492992870999899, 20.921798275000171], + [-156.481671551999909, 20.904397075000034], + [-156.464070830999901, 20.905623498000082], + [-156.452921117999892, 20.917917610000146], + [-156.433705206999889, 20.917710679], + [-156.418812628999945, 20.92011139500012], + [-156.389637824999909, 20.921535549000012], + [-156.378488735999895, 20.923976955000128], + [-156.346424933999913, 20.945868231000148], + [-156.330677863999938, 20.951239325000031], + [-156.31541907499988, 20.952948309000035], + [-156.298329230999911, 20.952704169000086], + [-156.281931118999921, 20.95026276200015], + [-156.268625454999892, 20.945054429000052], + [-156.264393683999884, 20.944525458000086], + [-156.260975714999859, 20.943670966000084], + [-156.258127407999922, 20.941595770000063], + [-156.255563930999926, 20.937648830000072], + [-156.242909308999856, 20.941555080000072], + [-156.226877407999865, 20.931952216000084], + [-156.221844745999931, 20.920337186000054], + [-156.215281409999903, 20.914727596000191], + [-156.207224087999919, 20.906887111000103], + [-156.197255011999914, 20.895005601000051], + [-156.179191861999897, 20.883483182000035], + [-156.1660884019999, 20.871480968000142], + [-156.164760244999911, 20.862786357000076], + [-156.152989630999855, 20.861794009000121], + [-156.14793578899986, 20.861703227000177], + [-156.144423141999937, 20.867117877000098], + [-156.13126936199987, 20.857453126000152], + [-156.125729208999957, 20.84404131200013], + [-156.119281017999867, 20.83607094500006], + [-156.084989178999933, 20.831451060000163], + [-156.051008649999886, 20.815863260000143], + [-156.001698370999861, 20.800441799000126], + [-155.979552909999882, 20.75737428000015], + [-155.984695868999864, 20.717591061000164], + [-156.003133538999862, 20.685897726000107], + [-156.027740499999879, 20.679366243000132], + [-156.048422998999911, 20.650887888000071], + [-156.075403890999894, 20.650671537000122], + [-156.12950442099995, 20.624472917000119], + [-156.165437790999903, 20.625236032000103], + [-156.185422842999856, 20.627220377000171], + [-156.203829812999913, 20.626042974000185], + [-156.2536937, 20.604422509000088], + [-156.284892660999901, 20.588638968000126], + [-156.302593803999912, 20.581179336], + [-156.326714843999952, 20.58717147800003], + [-156.335889766999856, 20.588152080000086], + [-156.352513052999853, 20.592428506000047], + [-156.36546790299991, 20.588771877000013], + [-156.407653194999853, 20.587206654000013], + [-156.435488373999931, 20.611975966000145], + [-156.438582194999924, 20.622197897000191], + [-156.45166446099995, 20.63573788500004], + [-156.44314285199988, 20.642601544000129], + [-156.442749980999906, 20.660569389000088], + [-156.450481583999846, 20.726380496000061], + [-156.458440859999911, 20.744517032000104], + [-156.457991816999879, 20.764835405000113], + [-156.464319399999937, 20.781383147000085], + [-156.468426993999884, 20.784587664000085], + [-156.475331183999856, 20.790838934000064], + [-156.48572697499992, 20.796661417000152], + [-156.501631099999884, 20.796191426000078], + [-156.515880216999903, 20.790087373000134], + [-156.521301216999916, 20.776241299000063], + [-156.533898525999945, 20.77413896000003], + [-156.548633959999847, 20.782110580000122], + [-156.562725989999933, 20.791837343000154], + [-156.584482440999921, 20.795452386000036], + [-156.605975747999878, 20.808377251000152], + [-156.620234271999948, 20.807088095000083], + [-156.633256048999925, 20.823737830000127], + [-156.657052765999879, 20.847660821000133], + [-156.684906683999884, 20.88188777800012], + [-156.686133176999931, 20.903822015000159], + [-156.696009196999853, 20.915801977000072], + [-156.692260118999911, 20.936102735000034], + [-156.685879267999894, 20.964236004000057], + [-156.676838444999873, 20.987970972000042], + [-156.666469010999862, 21.003438187000043], + [-156.653849596999862, 21.004755317000118], + [-156.645375128999916, 21.013373114000146], + [-156.64484615799995, 21.021185614000146], + [-156.635790343999929, 21.027124270000073], + [-156.626581046999888, 21.026161960000124], + [-156.615679591999879, 21.025149976000066], + [-156.607255330999863, 21.02734320500015], + [-156.603819954999949, 21.031992488000085], + [-156.597929313999884, 21.032653273000122], + [-156.589599704999898, 21.027738813000113] + ] + ], + [ + [ + [-157.248843164999926, 21.221710607000105], + [-157.232926490999859, 21.219116956], + [-157.2094130669999, 21.22032303800016], + [-157.196897893999932, 21.217014816000173], + [-157.188684346999878, 21.20514185200004], + [-157.173573370999861, 21.205145575000145], + [-157.079084047999913, 21.191713201000042], + [-157.028079491999847, 21.184613902000095], + [-156.989735480999911, 21.182847398000135], + [-156.981808229999928, 21.194046789000041], + [-156.980788881999899, 21.203420475000158], + [-156.975614608999877, 21.21114839600007], + [-156.965769008999956, 21.213324286000088], + [-156.952410299999883, 21.196706858000042], + [-156.947757517999861, 21.17784986000008], + [-156.925233108999947, 21.171244980000083], + [-156.89704547199986, 21.165191023000105], + [-156.846679642999902, 21.166728943000081], + [-156.824658437999858, 21.169547648000062], + [-156.810635460999947, 21.173875442000124], + [-156.80031220099994, 21.177676245], + [-156.791791609999905, 21.176027903000048], + [-156.773519175999866, 21.177205020000102], + [-156.759496045999924, 21.173010679000143], + [-156.749012824999909, 21.170965887000179], + [-156.739006025999913, 21.172761014000017], + [-156.733208431999913, 21.16875073700011], + [-156.735920610999898, 21.164081597000134], + [-156.729149649999925, 21.16086442700005], + [-156.713176278999896, 21.161368156], + [-156.705724935999939, 21.156542963000064], + [-156.72484290299991, 21.123724677000112], + [-156.755604620999918, 21.095526434000035], + [-156.793405727999954, 21.075873114000089], + [-156.831003383999928, 21.061102606000091], + [-156.869577602999925, 21.053371486000103], + [-156.908558722999885, 21.057033596000124], + [-156.947405225999944, 21.064542367000129], + [-157.024916865999927, 21.083778732000056], + [-157.072373810999892, 21.099381265000048], + [-157.140320033999899, 21.094190171000051], + [-157.187270329999876, 21.091781320000152], + [-157.222571560999938, 21.086839234000152], + [-157.250965949999852, 21.088446356000176], + [-157.273060675999943, 21.087347723000121], + [-157.292591925999943, 21.09471263200011], + [-157.303944464999915, 21.109564520000092], + [-157.304269985999923, 21.128241278000147], + [-157.296457485999952, 21.14394765800013], + [-157.28538977799991, 21.156073309000035], + [-157.267391019999877, 21.162541775000093], + [-157.251163319999876, 21.180283960000125], + [-157.246633546999874, 21.199756865000083], + [-157.259036219999871, 21.214829310000155], + [-157.259759042999917, 21.221879885000092], + [-157.248843164999926, 21.221710607000105] + ] + ], + [ + [ + [-157.893763636999893, 21.598381702000111], + [-157.887502817999859, 21.580882287000023], + [-157.8767276989999, 21.575407705000103], + [-157.87392491499989, 21.569342261000159], + [-157.871180993999872, 21.557916087000038], + [-157.863579475999927, 21.559794776000061], + [-157.853500213999894, 21.556339744000084], + [-157.845936652999882, 21.548041083000115], + [-157.836448876999924, 21.53404933700007], + [-157.836312919999955, 21.518645190000157], + [-157.836392059999923, 21.511270328000037], + [-157.844373935999897, 21.51135989400008], + [-157.849524954999879, 21.505384343000017], + [-157.847560490999939, 21.488600903000034], + [-157.845518362999911, 21.477849332000133], + [-157.842127355999907, 21.461048946000133], + [-157.832765058999939, 21.458257287], + [-157.820518990999915, 21.453415894000088], + [-157.811268269999857, 21.441904753000031], + [-157.80351289399988, 21.429072422], + [-157.788365913999939, 21.424186643000056], + [-157.786323534999894, 21.416788890000092], + [-157.776227494999944, 21.413305523000091], + [-157.769619047999925, 21.420603638000088], + [-157.760049922999883, 21.433234324000026], + [-157.775117431999945, 21.442812471000096], + [-157.773524499999951, 21.454198992000116], + [-157.762618224999926, 21.458764241000111], + [-157.738055252999914, 21.45578118900012], + [-157.72570752699994, 21.458985098000184], + [-157.722920860999949, 21.451569411000079], + [-157.737619594999956, 21.437689520000148], + [-157.740549282999865, 21.419582424000126], + [-157.738704306999892, 21.40545104600001], + [-157.722177991999956, 21.395840616000115], + [-157.709304202999874, 21.383587533000068], + [-157.705799933999913, 21.374904690000093], + [-157.71030534399992, 21.363460849000106], + [-157.706824458999847, 21.351995194], + [-157.696146006999868, 21.336397484000045], + [-157.674483334999934, 21.322944104000058], + [-157.653598656999861, 21.312566109000088], + [-157.647167394999855, 21.306431478], + [-157.658884096999941, 21.293833358000185], + [-157.683706717999883, 21.272686860000036], + [-157.693211650999899, 21.262742044], + [-157.704076096999927, 21.259530437000123], + [-157.707598873999899, 21.265616065000032], + [-157.706762332999858, 21.27500557600014], + [-157.715345583999948, 21.281838803000099], + [-157.742101039999909, 21.275470596000062], + [-157.763814023999942, 21.273104395000033], + [-157.78188350399995, 21.264573042000066], + [-157.794965259999913, 21.254663326000113], + [-157.810817888999907, 21.254189924000016], + [-157.817979243999929, 21.257634826000029], + [-157.822921819999863, 21.266425639000047], + [-157.830713682999942, 21.27725756700012], + [-157.86367396299994, 21.290393167], + [-157.880136489999927, 21.297962188000113], + [-157.890759655999886, 21.31284138700012], + [-157.894967138999931, 21.322282812000154], + [-157.894876352999859, 21.331684863000035], + [-157.902086011999899, 21.328389783000162], + [-157.915179937999881, 21.316466487000028], + [-157.905238561999909, 21.305631189000124], + [-157.947003495999894, 21.30274280100015], + [-157.946228910999935, 21.307427894000014], + [-157.9404350289999, 21.310716966000129], + [-157.948274310999892, 21.316833192], + [-157.964106813999905, 21.316334539000039], + [-157.964709173999893, 21.326398306000058], + [-157.967492611999916, 21.334473519000127], + [-157.965258281999866, 21.341151686000146], + [-157.968061973999852, 21.347886951000177], + [-157.95720876099989, 21.352459097000022], + [-157.947086244999923, 21.357040236000088], + [-157.936216743999921, 21.362954478000049], + [-157.931845390999911, 21.371662369000134], + [-157.943951419999877, 21.38048656800008], + [-157.953961267999887, 21.384601207000074], + [-157.960926886999857, 21.388820705000157], + [-157.965475139999853, 21.384727590000139], + [-157.969209955999901, 21.372021640000114], + [-157.977792062999868, 21.376131111000049], + [-157.985625744999936, 21.384953133000167], + [-157.991332032999935, 21.39107259500004], + [-157.990729212999895, 21.37761230800011], + [-157.984431374999872, 21.362129081000049], + [-157.989506271999943, 21.358831482000042], + [-158.011612180999862, 21.376504880000041], + [-158.020173553999939, 21.383313164000086], + [-158.013149132999956, 21.367118178000013], + [-157.996796136999876, 21.350871245000079], + [-157.984677303999888, 21.341359223000083], + [-157.975413062999849, 21.333886618000136], + [-157.980626998999867, 21.318520933000016], + [-157.998691711999925, 21.311337541000128], + [-158.022468927999853, 21.307561571000079], + [-158.059234222999919, 21.299886721000107], + [-158.077952006999908, 21.298060788], + [-158.094309048999889, 21.293605861000103], + [-158.098866339999944, 21.295396226], + [-158.103382941999882, 21.299261786], + [-158.115267988999875, 21.305121421000152], + [-158.124236235999945, 21.338739434000118], + [-158.134718801999952, 21.36565543100015], + [-158.148232849999886, 21.381164271], + [-158.157435777999922, 21.394653557000041], + [-158.176052257999885, 21.403530111000137], + [-158.1808024689999, 21.430369488000125], + [-158.187120011999923, 21.444498301000138], + [-158.204953963999884, 21.458727823000018], + [-158.215677356999947, 21.465522252000156], + [-158.227600322999876, 21.483046969000114], + [-158.228121012999878, 21.50379942300016], + [-158.229322190999881, 21.53260499000011], + [-158.235951300999915, 21.541571356000119], + [-158.278933013999904, 21.575264710000098], + [-158.272419104999955, 21.57855903700009], + [-158.236338243999853, 21.584940710000083], + [-158.193816321999918, 21.587236919000091], + [-158.165737446999884, 21.585642587000066], + [-158.14916452499989, 21.586158946000168], + [-158.136586066999911, 21.589300848000065], + [-158.121072463999894, 21.585894982000084], + [-158.117624477999897, 21.598089911000116], + [-158.112946383999883, 21.603906081000147], + [-158.09481973799987, 21.613784087000155], + [-158.073783918999936, 21.62895772200001], + [-158.065785516999938, 21.635574412], + [-158.067209438999868, 21.641424872000087], + [-158.060047980999911, 21.652492580000128], + [-158.050607876999891, 21.671291408000101], + [-158.035349087999919, 21.683417059000178], + [-158.014445109999883, 21.70149857600002], + [-157.982645686999945, 21.709850429000042], + [-157.969655295999871, 21.709060736000183], + [-157.962432519999936, 21.705012456000148], + [-157.956732423999938, 21.698922024000083], + [-157.950184699999852, 21.690619208000115], + [-157.933912246999853, 21.677897515], + [-157.933326564999902, 21.667164656000139], + [-157.924685511999911, 21.663071172000016], + [-157.924091749999889, 21.654339816000018], + [-157.915533919999859, 21.645539785000139], + [-157.920181110999891, 21.627451070000134], + [-157.907325614999905, 21.61059113600011], + [-157.893763636999893, 21.598381702000111] + ] + ], + [ + [ + [-160.198240305999917, 21.783883779000107], + [-160.211284889999916, 21.78020946300002], + [-160.224359186999891, 21.789242828000127], + [-160.235466121999877, 21.792821383], + [-160.248036261999857, 21.828029690000037], + [-160.245462605999933, 21.850839125000093], + [-160.234423523999936, 21.874455639000033], + [-160.195382829999915, 21.912044980000147], + [-160.164025669999887, 21.934468024000026], + [-160.123619671999847, 21.956295877000159], + [-160.117264423999927, 21.969641516000095], + [-160.11273897399991, 21.981737514000045], + [-160.113758917999945, 22.000230210000055], + [-160.113758917999945, 22.00027090100015], + [-160.095862493999874, 22.007756812000125], + [-160.078892262999886, 22.007177039000013], + [-160.059963620999923, 22.000562970000161], + [-160.051436351999939, 21.983050251000023], + [-160.059878505999905, 21.97397199300012], + [-160.072230355999949, 21.959452650000131], + [-160.079538540999863, 21.937892971000096], + [-160.072214321999951, 21.910834052000055], + [-160.085246090999874, 21.893535615000175], + [-160.102534178999889, 21.886283768000013], + [-160.117486213999882, 21.87839775500008], + [-160.136340664999921, 21.872917581000152], + [-160.158662361999916, 21.859563610000052], + [-160.171677269999861, 21.848648381000103], + [-160.179460910999865, 21.833515584000068], + [-160.191029425999886, 21.804673570000105], + [-160.198240305999917, 21.783883779000107] + ] + ], + [ + [ + [-159.388184518999935, 22.2287890140001], + [-159.373755318999855, 22.222087383000101], + [-159.357865854999943, 22.222729077000068], + [-159.338734503999888, 22.213039455000015], + [-159.331224785999922, 22.197941195000013], + [-159.31867428299995, 22.185777085000112], + [-159.311811986999885, 22.184503118000137], + [-159.30757581499995, 22.17109365400016], + [-159.304657829999911, 22.161103188000155], + [-159.301340298999861, 22.151068427000055], + [-159.301258917999888, 22.151027736000074], + [-159.292795376999948, 22.146429755000113], + [-159.292591925999886, 22.135565497000144], + [-159.294704342999864, 22.107627229000101], + [-159.304141016999893, 22.095614122000157], + [-159.318694269999924, 22.057559847000149], + [-159.333175557999851, 22.049568974000053], + [-159.33466549399995, 22.021551825000031], + [-159.331654425999943, 22.004055080000072], + [-159.330637173999889, 21.984767971000124], + [-159.331735805999926, 21.966131903000147], + [-159.334127588999934, 21.958057444000147], + [-159.347893624999926, 21.95810694800015], + [-159.359122422999889, 21.952900339000124], + [-159.351615386999953, 21.945454166000061], + [-159.347862319999933, 21.936710490000124], + [-159.353642884999942, 21.930043921], + [-159.365409772999897, 21.930833024000108], + [-159.3824924729999, 21.917418699000066], + [-159.389718519999946, 21.905410184000075], + [-159.3983722239999, 21.898077845000117], + [-159.414961759999926, 21.888098166000034], + [-159.416411069999953, 21.880747968000108], + [-159.427226720999897, 21.879446927000018], + [-159.433716849999911, 21.87411696], + [-159.43731532299995, 21.868769246000014], + [-159.481922113999872, 21.883546646000028], + [-159.50926553599993, 21.886252262000156], + [-159.529617550999887, 21.885651034000162], + [-159.567554553999884, 21.893029933000079], + [-159.581948628999896, 21.894351836000013], + [-159.590574904999897, 21.901714646000116], + [-159.5948922769999, 21.900387702], + [-159.596341230999883, 21.893698927000102], + [-159.604978693999897, 21.891702540000111], + [-159.61000958199989, 21.899719360000134], + [-159.622967927999923, 21.905057252000105], + [-159.634482387999924, 21.913747819], + [-159.641664641999881, 21.923107138000162], + [-159.645972054999845, 21.931796147000128], + [-159.65029136499993, 21.939807816000084], + [-159.661816388999853, 21.942477516000068], + [-159.666124503999896, 21.950496926000042], + [-159.6762085579999, 21.955170900000056], + [-159.696115688999896, 21.958156643], + [-159.711511123999912, 21.96384981000007], + [-159.723757585999948, 21.969859699000111], + [-159.743212762999917, 21.97319534400016], + [-159.759793731999878, 21.978533373000133], + [-159.768449357999913, 21.995229786000138], + [-159.771332899999948, 22.0052480720001], + [-159.779989753999871, 22.009253388000147], + [-159.7872110859999, 22.019270121000162], + [-159.787219742999923, 22.033298974000061], + [-159.785784239999884, 22.044656149000062], + [-159.785066017999895, 22.057349453000043], + [-159.786515071999872, 22.066034131], + [-159.776560024999867, 22.069525458000115], + [-159.749748113999857, 22.098106817000186], + [-159.73568048599995, 22.115245853000104], + [-159.734323696999951, 22.12498607000019], + [-159.734201626999891, 22.133734442000062], + [-159.732614712999947, 22.140773830000128], + [-159.725900844999899, 22.143622137000179], + [-159.723459438999896, 22.146551825000088], + [-159.716533729999895, 22.157514047000021], + [-159.694177645999957, 22.16351792600004], + [-159.668188417999886, 22.169478142000159], + [-159.639374563999922, 22.185559234000138], + [-159.621348842999907, 22.200291386000131], + [-159.598234300999934, 22.210864550000011], + [-159.58958210399993, 22.2209538070001], + [-159.576593508999906, 22.225661440000138], + [-159.565767587999915, 22.225647018000089], + [-159.558543195999903, 22.232995262000045], + [-159.548441455999949, 22.230979673], + [-159.541232374999879, 22.224953730000109], + [-159.537633569999912, 22.218260623], + [-159.529696293999905, 22.217584970000146], + [-159.516712448999954, 22.213565231000089], + [-159.508063142999902, 22.208204068000057], + [-159.499407760999901, 22.208847302], + [-159.50227644499995, 22.216221266000119], + [-159.499376235999875, 22.223574334000105], + [-159.481321495999936, 22.230235325000038], + [-159.462577537999891, 22.227500218000145], + [-159.440178166999942, 22.227518404000037], + [-159.428653457999928, 22.22080093600006], + [-159.419259125999957, 22.22213539600007], + [-159.407682976999865, 22.228815741000105], + [-159.399719859999948, 22.235494671000183], + [-159.388184518999935, 22.2287890140001] + ] + ], + [ + [ + [-161.945179816999911, 23.039862372000172], + [-161.947865363999881, 23.038031317], + [-161.946359829999949, 23.041449286], + [-161.946034308999913, 23.044582424000069], + [-161.94477291599992, 23.04621002800009], + [-161.940419074999909, 23.045599677000141], + [-161.940907355999911, 23.041978257], + [-161.942697719999899, 23.040676174000069], + [-161.945179816999911, 23.039862372000172] + ] + ], + [ + [ + [-164.704335089999887, 23.579331773000106], + [-164.699086066999882, 23.570542710000055], + [-164.70726477799991, 23.572577216000084], + [-164.708485480999911, 23.574530341000028], + [-164.706369594999899, 23.576605536000059], + [-164.704335089999887, 23.579331773000106] + ] + ], + [ + [ + [-82.118804490999935, 24.553615627000156], + [-82.128773566999939, 24.550848700000088], + [-82.128285285999937, 24.553697007000139], + [-82.118397589999915, 24.556463934000092], + [-82.113758917999917, 24.557318427], + [-82.118804490999935, 24.553615627000156] + ] + ], + [ + [ + [-81.740874803999901, 24.573187567000119], + [-81.73668372299997, 24.569525458000058], + [-81.73371334499987, 24.564154364000032], + [-81.732004360999952, 24.556219794000143], + [-81.737660285999937, 24.557806708000086], + [-81.741322394999884, 24.560695705000015], + [-81.743804490999906, 24.564642645], + [-81.746245897999955, 24.569891669000086], + [-81.747222459999932, 24.567572333000115], + [-81.747303839999915, 24.564439195000048], + [-81.748402472999942, 24.564113674000041], + [-81.752512173999918, 24.569891669000086], + [-81.755726691999968, 24.562445380000028], + [-81.759917772999898, 24.556219794000143], + [-81.769398566999911, 24.55019765800013], + [-81.784413214999915, 24.546128648], + [-81.814564581999946, 24.542547919000114], + [-81.810292120999918, 24.558172919000086], + [-81.801869269999884, 24.560288804000109], + [-81.791249152999939, 24.557074286000059], + [-81.780384894999941, 24.556219794000143], + [-81.772938605999883, 24.559719143000123], + [-81.752512173999918, 24.576117255000142], + [-81.746245897999955, 24.576117255000142], + [-81.740874803999901, 24.573187567000119] + ] + ], + [ + [ + [-81.65461178299995, 24.593207098000093], + [-81.650054490999906, 24.576117255000142], + [-81.725738084999904, 24.556219794000143], + [-81.721587693999965, 24.55951569200009], + [-81.711496548999889, 24.569891669000086], + [-81.711496548999889, 24.576117255000142], + [-81.716949022999927, 24.581040757000025], + [-81.718332485999923, 24.586249091000084], + [-81.716297980999883, 24.591742255000113], + [-81.711496548999889, 24.597805080000043], + [-81.705311652999939, 24.597805080000043], + [-81.695790167999917, 24.590643622000087], + [-81.683908657999979, 24.591131903000147], + [-81.656849738999938, 24.597805080000043], + [-81.65461178299995, 24.593207098000093] + ] + ], + [ + [ + [-82.11937415299991, 24.594671942000147], + [-82.109608527999882, 24.58612702000012], + [-82.107736782999893, 24.575262762000037], + [-82.110463019999969, 24.565497137000094], + [-82.11156165299991, 24.570949611000131], + [-82.119618292999945, 24.585109768000066], + [-82.127919074999937, 24.589260158000016], + [-82.134755011999943, 24.592962958000143], + [-82.139963344999842, 24.593329169000143], + [-82.145741339999915, 24.592718817], + [-82.142933722999942, 24.595851955000072], + [-82.131743943999936, 24.598089911000059], + [-82.11937415299991, 24.594671942000147] + ] + ], + [ + [ + [-81.410633917999917, 24.655422268000095], + [-81.414784308999856, 24.647691148], + [-81.421742316999939, 24.65176015800013], + [-81.42446855399993, 24.654974677], + [-81.417591925999915, 24.659409898000078], + [-81.410633917999917, 24.655422268000095] + ] + ], + [ + [ + [-81.266346808999913, 24.66038646000014], + [-81.276031053999873, 24.655585028000147], + [-81.277495897999927, 24.657619533000073], + [-81.26520748599998, 24.671291408000016], + [-81.260243292999917, 24.671698309000035], + [-81.258371548999946, 24.667629299000069], + [-81.266346808999913, 24.66038646000014] + ] + ], + [ + [ + [-81.439320441999882, 24.66038646000014], + [-81.441395636999914, 24.650539455000015], + [-81.446848110999952, 24.650783596000068], + [-81.449086066999911, 24.655218817000119], + [-81.460682745999947, 24.664374091000028], + [-81.461984829999949, 24.670965887000094], + [-81.455433722999942, 24.676092841000113], + [-81.453846808999913, 24.677679755000142], + [-81.457386847999913, 24.677923895000092], + [-81.455433722999942, 24.681341864], + [-81.448068813999868, 24.68056875200007], + [-81.442209438999924, 24.671535549000069], + [-81.439320441999882, 24.66038646000014] + ] + ], + [ + [ + [-81.555002407999922, 24.688177802000112], + [-81.553212042999917, 24.686957098], + [-81.550200975999928, 24.687160549000126], + [-81.546986456999974, 24.685939846000124], + [-81.540109829999949, 24.675238348], + [-81.506011522999955, 24.638820705000128], + [-81.506011522999955, 24.631333726000079], + [-81.530832485999895, 24.61522044500019], + [-81.565052863999881, 24.602240302], + [-81.636463995999861, 24.583563544000029], + [-81.636463995999861, 24.590318101000051], + [-81.61693274599989, 24.605454820000048], + [-81.605539516999926, 24.60956452], + [-81.595448370999861, 24.603989976], + [-81.573597785999908, 24.613714911000145], + [-81.567494269999912, 24.617661851000136], + [-81.564930792999917, 24.621161200000031], + [-81.561675584999875, 24.622748114000061], + [-81.554514126999919, 24.631333726000079], + [-81.569243943999908, 24.64004140800013], + [-81.575347459999904, 24.644924221000039], + [-81.581166144999941, 24.651800848000121], + [-81.551665818999879, 24.644354559000149], + [-81.538685675999886, 24.636460679], + [-81.533355272999927, 24.624497789000046], + [-81.527170376999948, 24.624497789000046], + [-81.522450324999852, 24.63792552300005], + [-81.525705532999893, 24.647894598000121], + [-81.536488410999908, 24.653021552000055], + [-81.554514126999919, 24.651800848000121], + [-81.554514126999919, 24.659247137000094], + [-81.548980272999898, 24.664943752000099], + [-81.550526495999947, 24.668768622000087], + [-81.55724036399991, 24.67112864800005], + [-81.567494269999912, 24.672308661000088], + [-81.560658331999917, 24.693426825000088], + [-81.554514126999919, 24.693426825000088], + [-81.555002407999922, 24.688177802000112] + ] + ], + [ + [ + [-81.479725714999944, 24.672512111000131], + [-81.478423631999931, 24.654120184000092], + [-81.481312628999973, 24.649847723000093], + [-81.485422329999921, 24.656968492000132], + [-81.491118943999908, 24.662258205000015], + [-81.497385219999842, 24.66396719], + [-81.502430792999888, 24.662665106000119], + [-81.506459113999938, 24.660101630000028], + [-81.511138475999871, 24.661322333000115], + [-81.513742641999869, 24.663275458000086], + [-81.516102667999917, 24.665472723000065], + [-81.520171678999873, 24.674058335000083], + [-81.51903235599994, 24.687323309000092], + [-81.515004035999965, 24.697739976], + [-81.511626756999959, 24.698431708000143], + [-81.506988084999932, 24.695868231000034], + [-81.500884568999936, 24.695257880000085], + [-81.493153449999937, 24.692124742000189], + [-81.485747850999928, 24.686509507], + [-81.482411261999914, 24.683254299000154], + [-81.479725714999944, 24.672512111000131] + ] + ], + [ + [ + [-81.315541144999941, 24.67963288], + [-81.3177791009999, 24.674953518000066], + [-81.325510219999927, 24.684271552000112], + [-81.334706183999884, 24.689846096000124], + [-81.337880011999857, 24.693304755000113], + [-81.340891079999949, 24.700100002000156], + [-81.33690344999988, 24.703802802], + [-81.329457160999908, 24.70331452], + [-81.320668097999942, 24.694484768000152], + [-81.315541144999941, 24.67963288] + ] + ], + [ + [ + [-81.08250891799986, 24.69944896], + [-81.087717251999948, 24.685939846000124], + [-81.09276282499988, 24.700873114000061], + [-81.103911912999905, 24.706773179000109], + [-81.136097785999965, 24.707017320000048], + [-81.115589972999913, 24.715725002000127], + [-81.061431443999936, 24.731350002000013], + [-81.039906378999916, 24.734361070000105], + [-81.040638800999943, 24.727362372000059], + [-81.043690558999941, 24.724310614000146], + [-81.067128058999913, 24.715887762000094], + [-81.076161261999914, 24.709051825000174], + [-81.08250891799986, 24.69944896] + ] + ], + [ + [ + [-81.340565558999941, 24.646714585000026], + [-81.362660285999937, 24.631333726000079], + [-81.364247199999852, 24.66120026200015], + [-81.430287238999881, 24.75482819200009], + [-81.427479620999918, 24.751369533000073], + [-81.424631313999896, 24.749823309000035], + [-81.41730709499987, 24.748683986000017], + [-81.387684699999937, 24.727484442000033], + [-81.355458136999886, 24.686183986000074], + [-81.340565558999941, 24.646714585000026] + ] + ], + [ + [ + [-80.958892381999874, 24.749335028000147], + [-81.033070441999911, 24.720689195000162], + [-80.955555792999945, 24.768744208000058], + [-80.923817511999886, 24.775336005000142], + [-80.923817511999886, 24.769110419000086], + [-80.927886522999927, 24.765692450000174], + [-80.93211829299986, 24.763739325000031], + [-80.944325324999937, 24.76166413], + [-80.958892381999874, 24.749335028000147] + ] + ], + [ + [ + [-80.802316860999895, 24.826890367000104], + [-80.799712693999908, 24.825262762000179], + [-80.793527798999946, 24.830552476000051], + [-80.787342902999882, 24.830552476000051], + [-80.787098761999914, 24.825995184000121], + [-80.788441535999908, 24.822943427000112], + [-80.793527798999946, 24.816880601000108], + [-80.802154100999928, 24.809881903000061], + [-80.818470831999946, 24.805812893000095], + [-80.854969855999911, 24.803290106000148], + [-80.845041469999927, 24.814357815], + [-80.800363735999952, 24.843573309000064], + [-80.802154100999928, 24.833685614000117], + [-80.802316860999895, 24.826890367000104] + ] + ], + [ + [ + [-80.718251105999855, 24.859442450000174], + [-80.733550584999904, 24.850327867000161], + [-80.738352016999897, 24.850734768000095], + [-80.735991990999935, 24.857367255000057], + [-80.729725714999915, 24.862779039000102], + [-80.721058722999913, 24.866685289000102], + [-80.700835740999878, 24.881008205000072], + [-80.699330206999946, 24.876288153000175], + [-80.710845506999874, 24.864325262000037], + [-80.718251105999855, 24.859442450000174] + ] + ], + [ + [ + [-80.64696204299986, 24.904730536], + [-80.657134568999908, 24.901109117000132], + [-80.625477667999917, 24.936224677000027], + [-80.618519660999937, 24.941555080000072], + [-80.617502407999979, 24.93813711100016], + [-80.617746548999918, 24.936021226000051], + [-80.626210089999859, 24.924139716000113], + [-80.64696204299986, 24.904730536] + ] + ], + [ + [ + [-167.996164516999869, 25.004339911000145], + [-167.996774868999921, 25.001125393000095], + [-168.002797003999945, 25.014797268000123], + [-167.999867316999911, 25.016424872000144], + [-167.99555416599992, 25.011664130000057], + [-167.995065883999928, 25.007757880000057], + [-167.996164516999869, 25.004339911000145] + ] + ], + [ + [ + [-81.05174719999988, 25.278306382000139], + [-81.058745897999955, 25.273993231000034], + [-81.066883917999888, 25.276760158000101], + [-81.074615037999877, 25.288723049000126], + [-81.07835852799991, 25.301703192000119], + [-81.072865363999881, 25.310044664000188], + [-81.059803839999915, 25.31171295800003], + [-81.047474738999966, 25.309393622000144], + [-81.042795376999948, 25.307440497000087], + [-81.039784308999856, 25.296698309000178], + [-81.048491990999935, 25.284979559000092], + [-81.05174719999988, 25.278306382000139] + ] + ], + [ + [ + [-81.112700975999871, 25.338202216000084], + [-81.108713344999899, 25.337632554000109], + [-81.097279425999943, 25.340073960000055], + [-81.089019334999961, 25.33885325700011], + [-81.086293097999885, 25.331244208], + [-81.085682745999918, 25.326890367000189], + [-81.088124152999853, 25.322414455000128], + [-81.090728318999965, 25.312811591000141], + [-81.100331183999941, 25.318182684000121], + [-81.108631964999915, 25.323960679000081], + [-81.122222459999875, 25.33657461100016], + [-81.116525844999899, 25.341945705000015], + [-81.110422329999892, 25.340318101], + [-81.112700975999871, 25.338202216000084] + ] + ], + [ + [ + [-80.361480272999927, 25.159491278000033], + [-80.4427791009999, 25.086411851000051], + [-80.453602667999917, 25.081000067], + [-80.464507615999878, 25.083807684000149], + [-80.471262173999918, 25.072984117000047], + [-80.480336066999911, 25.04979075700011], + [-80.488148566999911, 25.039455471000011], + [-80.519154425999943, 25.014878648000106], + [-80.555978969999899, 24.970933335000083], + [-80.578602667999888, 24.95026276200015], + [-80.598011847999885, 24.950100002000099], + [-80.603505011999914, 24.961127020000148], + [-80.59398352799991, 24.966620184000149], + [-80.578846808999913, 24.969875393000038], + [-80.567616339999915, 24.973944403000175], + [-80.55565344999988, 25.00901927300005], + [-80.550160285999965, 25.014878648000106], + [-80.534087693999879, 25.01658763200011], + [-80.526478644999941, 25.02167389500012], + [-80.51231848899991, 25.042873440000122], + [-80.487619594999842, 25.06659577000012], + [-80.480865037999905, 25.078436591000084], + [-80.484445766999869, 25.091253973000121], + [-80.463042772999927, 25.09398021], + [-80.452381964999887, 25.099188544000086], + [-80.443430141999869, 25.111151434000035], + [-80.448231574999852, 25.118557033000016], + [-80.448597785999965, 25.122137762000179], + [-80.44481360599994, 25.122056382], + [-80.43724524599989, 25.118597723], + [-80.433461066999968, 25.130275783000101], + [-80.43903561099998, 25.139797268], + [-80.450428839999944, 25.14354075700011], + [-80.464507615999878, 25.138413804000109], + [-80.458566860999952, 25.15619538], + [-80.413400844999899, 25.147406317000119], + [-80.394276495999918, 25.190904039000159], + [-80.357329881999874, 25.22736237200003], + [-80.347808397999898, 25.248277085], + [-80.35024980399993, 25.262844143000038], + [-80.35765540299991, 25.269354559000121], + [-80.365345831999917, 25.27480703300013], + [-80.368967251999891, 25.286118882000139], + [-80.362660285999937, 25.292181708000115], + [-80.330637173999946, 25.299546617000132], + [-80.317453579999921, 25.306952216000113], + [-80.290598110999923, 25.34275950700011], + [-80.273426886999914, 25.352606512000037], + [-80.251616990999935, 25.344468492000132], + [-80.254872199999909, 25.339016018000095], + [-80.25812740799995, 25.335150458], + [-80.261708136999914, 25.332424221000011], + [-80.265939907999922, 25.330226955000043], + [-80.272694464999887, 25.323675848000121], + [-80.279367641999926, 25.312241929], + [-80.284413214999859, 25.300441799000012], + [-80.286447719999899, 25.292669989000117], + [-80.29133053299995, 25.28261953300013], + [-80.32054602799991, 25.248277085], + [-80.353342251999919, 25.205552476], + [-80.36583411399991, 25.181219794000114], + [-80.361480272999927, 25.165716864], + [-80.361480272999927, 25.159491278000033] + ] + ], + [ + [ + [-80.216908331999974, 25.415472723], + [-80.231190558999884, 25.403387762000094], + [-80.232533331999946, 25.404730536000088], + [-80.235096808999884, 25.404852606000148], + [-80.23802649599989, 25.405951239], + [-80.224354620999861, 25.416083075000145], + [-80.215728318999936, 25.432033596000068], + [-80.199940558999913, 25.489813544000086], + [-80.19701087099989, 25.494696356000148], + [-80.188221808999913, 25.498358466000028], + [-80.186594204999892, 25.493312893000095], + [-80.18846594999988, 25.485419012000094], + [-80.190174933999884, 25.481024481000034], + [-80.193918423999889, 25.459214585000083], + [-80.203480597999885, 25.436590887000094], + [-80.216908331999974, 25.415472723] + ] + ], + [ + [ + [-80.158314581999946, 25.679266669000143], + [-80.162912563999868, 25.672837632000139], + [-80.175607876999948, 25.673407294000114], + [-80.181792772999898, 25.681301174000069], + [-80.18032792899993, 25.691880601000136], + [-80.169748501999891, 25.700751044000171], + [-80.173573370999918, 25.702866929], + [-80.176136847999913, 25.704820054000137], + [-80.178863084999875, 25.70648834800015], + [-80.183338995999947, 25.707586981000091], + [-80.183338995999947, 25.713812567000062], + [-80.175689256999931, 25.718329169000114], + [-80.170074022999927, 25.722845770000063], + [-80.166005011999857, 25.728176174000126], + [-80.162912563999868, 25.734930731000148], + [-80.156076626999948, 25.734930731000148], + [-80.158314581999946, 25.679266669000143] + ] + ], + [ + [ + [-171.722808397999927, 25.773016669000143], + [-171.729359503999916, 25.751939195000134], + [-171.739084438999868, 25.756293036000116], + [-171.740671352999897, 25.769029039000159], + [-171.722849087999919, 25.773016669000143], + [-171.722808397999927, 25.773016669000143] + ] + ], + [ + [ + [-81.373199022999898, 25.816107489000089], + [-81.370716925999943, 25.810126044000143], + [-81.377430792999917, 25.807033596000068], + [-81.387562628999945, 25.806097723], + [-81.393218553999958, 25.802191473], + [-81.397084113999966, 25.797593492000161], + [-81.399891730999911, 25.794867255], + [-81.399728969999842, 25.791815497000087], + [-81.403228318999936, 25.793524481000091], + [-81.406809048999918, 25.796698309000149], + [-81.41771399599989, 25.808783270000063], + [-81.425160285999965, 25.811468817000062], + [-81.433338995999861, 25.804754950000117], + [-81.439564581999917, 25.803900458], + [-81.439849412999962, 25.826483466000084], + [-81.441232876999948, 25.832505601], + [-81.440500454999921, 25.842433986000074], + [-81.429514126999948, 25.850897528000033], + [-81.412220831999946, 25.843247789000102], + [-81.405181443999879, 25.836981512000065], + [-81.38707434799997, 25.824123440000122], + [-81.380482550999915, 25.82094961100016], + [-81.373199022999898, 25.816107489000089] + ] + ], + [ + [ + [-81.465158657999893, 25.865668036000031], + [-81.45799719999988, 25.850409247000059], + [-81.456125454999892, 25.841864325000031], + [-81.453439907999922, 25.838812567000119], + [-81.450510219999899, 25.832342841000028], + [-81.453358527999939, 25.82550690300009], + [-81.459624803999901, 25.822821356000034], + [-81.466949022999898, 25.829331773000106], + [-81.471058722999942, 25.835272528000061], + [-81.473866339999887, 25.840399481000148], + [-81.479562954999977, 25.84760163], + [-81.495269334999932, 25.848700262000037], + [-81.498036261999886, 25.852118231000063], + [-81.502837693999879, 25.855454820000162], + [-81.507883266999926, 25.852036851000079], + [-81.508371548999918, 25.847316799000154], + [-81.509103969999842, 25.843491929000052], + [-81.510975714999915, 25.83685944200009], + [-81.51203365799995, 25.836127020000148], + [-81.512115037999934, 25.840277411], + [-81.51496334499987, 25.84300364800005], + [-81.519764777999882, 25.848700262000037], + [-81.516916469999927, 25.859767971000068], + [-81.503041144999941, 25.86587148600016], + [-81.494455532999922, 25.867621161000059], + [-81.489816860999895, 25.869818427000055], + [-81.47435462099989, 25.87246328300013], + [-81.465158657999893, 25.865668036000031] + ] + ], + [ + [ + [-81.676136847999885, 25.90127187700007], + [-81.663400844999927, 25.896918036000088], + [-81.660023566999911, 25.886542059000178], + [-81.672027147999927, 25.86725495000006], + [-81.677398240999878, 25.861476955000072], + [-81.690256313999924, 25.863104559000092], + [-81.696156378999945, 25.865790106000176], + [-81.698801235999923, 25.872626044000086], + [-81.701568162999905, 25.877508856000148], + [-81.706369594999899, 25.881496486000131], + [-81.70856686099998, 25.88377513200011], + [-81.710764126999948, 25.889715887000037], + [-81.7084041009999, 25.898667710000083], + [-81.69896399599989, 25.899847723], + [-81.688872850999928, 25.899318752000042], + [-81.676136847999885, 25.90127187700007] + ] + ], + [ + [ + [-81.536488410999908, 25.870917059000092], + [-81.545765753999945, 25.8536644550001], + [-81.548491990999906, 25.857489325000088], + [-81.546457485999895, 25.872748114000061], + [-81.54784094999988, 25.881659247000115], + [-81.554025844999842, 25.884507554000052], + [-81.558705206999946, 25.889064846000011], + [-81.561024542999917, 25.894842841000141], + [-81.558338995999947, 25.903387762000179], + [-81.545887824999909, 25.902411200000117], + [-81.53921464799987, 25.895331122000144], + [-81.542225714999887, 25.89386627800009], + [-81.54312089799987, 25.893011786000088], + [-81.541005011999857, 25.890122789000046], + [-81.536040818999908, 25.88499583500014], + [-81.53355872299997, 25.878648179000109], + [-81.536488410999908, 25.870917059000092] + ] + ], + [ + [ + [-173.95917721299989, 26.059637762000122], + [-173.959950324999909, 26.055324611000017], + [-173.965646938999896, 26.058579820000162], + [-173.966379360999923, 26.061957098000093], + [-173.965199347999885, 26.066107489000117], + [-173.964995897999927, 26.071356512000094], + [-173.962839321999923, 26.06663646], + [-173.960519985999895, 26.063137111000017], + [-173.95917721299989, 26.059637762000122] + ] + ], + [ + [ + [-82.129221157999922, 26.46112702], + [-82.096262173999946, 26.454535223000121], + [-82.076812303999958, 26.456203518000152], + [-82.068430141999897, 26.467962958000115], + [-82.026844855999911, 26.447455145000063], + [-82.04552161399991, 26.443752346000124], + [-82.07091223899991, 26.424627997000144], + [-82.088246222999913, 26.419501044000057], + [-82.103586391999869, 26.422552802000141], + [-82.163929816999882, 26.454291083], + [-82.175038214999915, 26.462469794000086], + [-82.184071417999917, 26.473334052], + [-82.191314256999959, 26.4884300800001], + [-82.200672980999883, 26.519598700000174], + [-82.204945441999911, 26.550482489000117], + [-82.196278449999909, 26.544501044000114], + [-82.19078528599988, 26.536525783000158], + [-82.187163865999906, 26.526922919000086], + [-82.184437628999945, 26.515773830000157], + [-82.175892706999917, 26.494940497000087], + [-82.164133266999841, 26.479559637000037], + [-82.148793097999885, 26.468573309000178], + [-82.129221157999922, 26.46112702] + ] + ], + [ + [ + [-82.229318813999868, 26.633775132000054], + [-82.225453253999945, 26.611273505000057], + [-82.239084438999896, 26.634182033000158], + [-82.247670050999915, 26.654364325000088], + [-82.260161912999934, 26.701320705000015], + [-82.255482550999915, 26.701239325000031], + [-82.252349412999934, 26.699611721000011], + [-82.245961066999911, 26.694525458], + [-82.244536912999934, 26.67080312700007], + [-82.229318813999868, 26.633775132000054] + ] + ], + [ + [ + [-82.080962693999908, 26.509019273000106], + [-82.082020636999857, 26.491522528000175], + [-82.095082160999937, 26.495835679000081], + [-82.108509894999912, 26.516302802000141], + [-82.12364661399991, 26.56537506700009], + [-82.136708136999886, 26.584662177000112], + [-82.132435675999886, 26.609808661], + [-82.145741339999915, 26.640122789000159], + [-82.16466223899991, 26.671942450000031], + [-82.177642381999931, 26.701320705000015], + [-82.163970506999874, 26.701320705000015], + [-82.143910285999937, 26.694647528000147], + [-82.124501105999911, 26.676459052000084], + [-82.113636847999942, 26.654364325000088], + [-82.123199022999927, 26.618719794000029], + [-82.11156165299991, 26.596380927000027], + [-82.096018032999922, 26.574937242000161], + [-82.088246222999913, 26.560451565000122], + [-82.080962693999908, 26.509019273000106] + ] + ], + [ + [ + [-82.25910396999987, 26.737250067], + [-82.266428188999868, 26.714992580000157], + [-82.274647589999887, 26.736151434000149], + [-82.277821417999945, 26.785060940000122], + [-82.287505662999905, 26.803127346000068], + [-82.281483527999882, 26.809475002000099], + [-82.278431769999884, 26.810044664000074], + [-82.273833787999962, 26.803127346000068], + [-82.262928839999887, 26.780096747000087], + [-82.257964647999927, 26.758530992000161], + [-82.25910396999987, 26.737250067] + ] + ], + [ + [ + [-97.163398650999852, 26.113592979000046], + [-97.166379235999926, 26.102846573000036], + [-97.179330813999854, 26.11982858100005], + [-97.18831397999989, 26.149335642000139], + [-97.213016566999841, 26.292714116000113], + [-97.227160603999948, 26.337414977000108], + [-97.239898240999963, 26.364935614000061], + [-97.249175584999904, 26.390814520000092], + [-97.26036536399991, 26.467962958000115], + [-97.268381313999868, 26.490383205000128], + [-97.292062954999977, 26.52920156500015], + [-97.301340298999946, 26.550482489000117], + [-97.313221808999884, 26.60675690300009], + [-97.318104620999861, 26.616441148000078], + [-97.329253709999875, 26.633042710000112], + [-97.337880011999886, 26.653957424000069], + [-97.35008704299986, 26.697414455000043], + [-97.363392706999974, 26.721177476000108], + [-97.355946417999888, 26.728583075000117], + [-97.362538214999887, 26.734442450000145], + [-97.366810675999886, 26.740708726000108], + [-97.369211391999841, 26.747788804000081], + [-97.370228644999884, 26.755926825000088], + [-97.368234829999949, 26.759955145000148], + [-97.358265753999945, 26.762518622000144], + [-97.355946417999888, 26.76585521], + [-97.357004360999866, 26.771551825000145], + [-97.36192786399991, 26.779282945000162], + [-97.363392706999974, 26.783270575000145], + [-97.367421027999853, 26.79120514500012], + [-97.397531704999977, 26.831000067], + [-97.388050910999965, 26.865545966000028], + [-97.385406053999873, 26.900376695000048], + [-97.393910285999908, 26.994289455000015], + [-97.403065558999884, 27.030910549000126], + [-97.405018683999941, 27.050767320000048], + [-97.398019985999866, 27.088364976000051], + [-97.397084113999881, 27.107326565000065], + [-97.405018683999941, 27.125230210000112], + [-97.396962042999917, 27.146185614000061], + [-97.391590949999852, 27.193101304000109], + [-97.377064581999917, 27.207831122000115], + [-97.383900519999941, 27.187933661000031], + [-97.376291469999899, 26.931626695000105], + [-97.342884894999912, 26.756740627000099], + [-97.238677537999934, 26.445786851000051], + [-97.239898240999963, 26.43378327000012], + [-97.231271938999868, 26.421087958000086], + [-97.224924282999922, 26.399074611000074], + [-97.21219000499994, 26.340282908000077], + [-97.202259894999969, 26.298773505000085], + [-97.198312954999977, 26.276109117000132], + [-97.182679856999926, 26.231154556], + [-97.177423894999919, 26.205007664], + [-97.17067950899991, 26.179523321000048], + [-97.164401777999899, 26.131494536], + [-97.163398650999852, 26.113592979000046] + ] + ], + [ + [ + [-82.59308834499987, 27.339829820000048], + [-82.58918209499987, 27.324448960000112], + [-82.606678839999915, 27.336655992000189], + [-82.649037238999938, 27.381333726000051], + [-82.657460089999887, 27.39679596600017], + [-82.66441809799997, 27.404486395], + [-82.676625128999945, 27.421779690000093], + [-82.680978969999842, 27.434068101000051], + [-82.664214647999927, 27.426906643], + [-82.654286261999914, 27.419663804], + [-82.630116339999915, 27.37970612200003], + [-82.59308834499987, 27.339829820000048] + ] + ], + [ + [ + [-97.178007216999845, 27.652843669], + [-97.259354604999942, 27.496174655000132], + [-97.320256321999892, 27.357574337000088], + [-97.346609416999883, 27.274163730000069], + [-97.351642487999953, 27.235170581000162], + [-97.365912490999904, 27.224231404000122], + [-97.388091600999957, 27.223944403000175], + [-97.397531704999977, 27.228908596000124], + [-97.389759894999969, 27.245550848000065], + [-97.370252640999922, 27.348366418000111], + [-97.338758743999847, 27.409122490000172], + [-97.321527833999937, 27.456231586000129], + [-97.312397116999961, 27.477972228000127], + [-97.298182559999873, 27.507865422000023], + [-97.282954363999949, 27.540472627000113], + [-97.270767838999888, 27.566737607000093], + [-97.257232225999928, 27.59275950700011], + [-97.245106574999852, 27.623195705000072], + [-97.244007941999911, 27.632635809000092], + [-97.249582485999923, 27.643784898000106], + [-97.254139777999853, 27.659654039000046], + [-97.230620897999898, 27.651190497000087], + [-97.219227667999945, 27.643947658000073], + [-97.211984829999921, 27.632961330000015], + [-97.205718553999873, 27.632961330000015], + [-97.15103105399993, 27.739894924000069], + [-97.123850063999924, 27.769517320000105], + [-97.081857876999919, 27.804144598], + [-97.075428839999915, 27.814520575000088], + [-97.067534959999932, 27.840887762000094], + [-97.052601691999911, 27.844183661000145], + [-97.044016079999892, 27.83527252800009], + [-97.054921027999882, 27.824774481000034], + [-97.178007216999845, 27.652843669] + ] + ], + [ + [ + [-80.167225714999887, 27.197007554000109], + [-80.162912563999868, 27.173651434000121], + [-80.177316860999952, 27.202215887000094], + [-80.197621222999942, 27.223944403000175], + [-80.208159959999904, 27.26292552300005], + [-80.268950975999928, 27.382310289000131], + [-80.27277584499987, 27.39679596600017], + [-80.275868292999945, 27.401760158000044], + [-80.289540167999888, 27.411810614], + [-80.292591925999972, 27.417303778000033], + [-80.294056769999912, 27.429917710000112], + [-80.306874152999853, 27.461655992000161], + [-80.347808397999898, 27.612494208000058], + [-80.356760219999927, 27.629339911000059], + [-80.36583411399991, 27.642238674000069], + [-80.372914191999882, 27.656561591000141], + [-80.377797003999945, 27.686468817000119], + [-80.386789516999869, 27.706732489000146], + [-80.388783331999917, 27.718654690000093], + [-80.39110266799986, 27.727443752000156], + [-80.409901495999918, 27.756496486000131], + [-80.438465949999909, 27.830471096000011], + [-80.450917120999918, 27.852036851000108], + [-80.447417772999927, 27.8556175800001], + [-80.444569464999887, 27.857489325000145], + [-80.43724524599989, 27.859564520000092], + [-80.43724524599989, 27.854559637000037], + [-80.435536261999886, 27.8517113300001], + [-80.432728644999941, 27.849351304000137], + [-80.429798956999917, 27.845892645000148], + [-80.422189907999979, 27.804999091000113], + [-80.401926235999952, 27.764146226000051], + [-80.361480272999927, 27.701239325000117], + [-80.347238735999923, 27.664129950000117], + [-80.342762824999852, 27.643255927000141], + [-80.341053839999859, 27.62246328300013], + [-80.337635870999947, 27.606634833000115], + [-80.167225714999887, 27.197007554000109] + ] + ], + [ + [ + [-97.028675910999937, 27.871527411000031], + [-97.034413214999915, 27.852036851000108], + [-97.043039516999926, 27.870306708], + [-97.029774542999888, 27.900580145000092], + [-96.993478969999899, 27.948309637000037], + [-96.963978644999912, 27.976711330000072], + [-96.959339972999885, 27.983058986000103], + [-96.953033006999931, 27.994208075000117], + [-96.953358527999882, 28.000311591000113], + [-96.972564256999931, 28.005031643], + [-96.972564256999931, 28.009914455000072], + [-96.914051886999857, 28.099107164000046], + [-96.900257941999939, 28.101955471000096], + [-96.89289303299995, 28.109198309000092], + [-96.887603318999879, 28.119208075000088], + [-96.88023841099988, 28.130113023000078], + [-96.867583787999905, 28.135565497000115], + [-96.854847785999965, 28.130682684000035], + [-96.845366990999963, 28.121242580000015], + [-96.842640753999888, 28.112779039000159], + [-96.845692511999886, 28.102850653000175], + [-96.847157355999855, 28.080471096000153], + [-96.85008704299986, 28.071193752000013], + [-96.938221808999884, 27.983058986000103], + [-96.979237433999884, 27.927801825000088], + [-97.01463782499988, 27.890936591000028], + [-97.028675910999937, 27.871527411000031] + ] + ], + [ + [ + [-80.629017706999917, 28.181057033000073], + [-80.63646399599989, 28.181057033000073], + [-80.638010219999927, 28.193426825000117], + [-80.640695766999897, 28.204169012000037], + [-80.64858964799987, 28.222723700000031], + [-80.631988084999932, 28.19041575700011], + [-80.629017706999917, 28.181057033000073] + ] + ], + [ + [ + [-96.406727667999888, 28.344427802000084], + [-96.415150519999912, 28.333075262000094], + [-96.416859503999916, 28.328762111000103], + [-96.489491339999915, 28.297105210000112], + [-96.522328253999916, 28.289618231000148], + [-96.553537563999896, 28.271429755000057], + [-96.608631964999944, 28.22943756700009], + [-96.702626105999883, 28.185532945000048], + [-96.727650519999912, 28.161607164000159], + [-96.781158006999931, 28.126450914000102], + [-96.808705206999946, 28.103257554], + [-96.820871548999918, 28.088324286000145], + [-96.82835852799991, 28.071193752000013], + [-96.835804816999968, 28.071193752000013], + [-96.832508917999945, 28.088771877000127], + [-96.824289516999841, 28.107489325000088], + [-96.813221808999913, 28.12368398600016], + [-96.801665818999879, 28.133856512000094], + [-96.801665818999879, 28.140082098000065], + [-96.808990037999877, 28.151434637000037], + [-96.812367316999911, 28.170111395], + [-96.807769334999961, 28.187648830000157], + [-96.791127081999917, 28.19525788], + [-96.770741339999915, 28.197455145000092], + [-96.738514777999882, 28.206854559000092], + [-96.722238735999866, 28.208970445000105], + [-96.7103572259999, 28.213364976000022], + [-96.672108527999853, 28.23371002800009], + [-96.663889126999948, 28.239691473], + [-96.654286261999886, 28.257147528000147], + [-96.612049933999856, 28.277492580000157], + [-96.602447068999879, 28.287502346000124], + [-96.594797329999949, 28.292669989000146], + [-96.548451300999972, 28.311428127000013], + [-96.528065558999884, 28.330145575000174], + [-96.514963344999927, 28.336818752000127], + [-96.493234829999949, 28.33930084800015], + [-96.455433722999913, 28.336004950000117], + [-96.443226691999911, 28.341376044000171], + [-96.431141730999911, 28.359767971000039], + [-96.430490688999868, 28.36782461100016], + [-96.431467251999948, 28.388983466000141], + [-96.427723761999914, 28.393296617000075], + [-96.418812628999973, 28.395086981000063], + [-96.412342902999882, 28.397528387000179], + [-96.40758216099988, 28.39638906500015], + [-96.403797980999855, 28.387111721000096], + [-96.40298417899993, 28.360785223000093], + [-96.403797980999855, 28.35236237200003], + [-96.406727667999888, 28.344427802000084] + ] + ], + [ + [ + [-178.298397057999921, 28.387372162000148], + [-178.30271836599988, 28.386464725000039], + [-178.304366162999884, 28.387912197000063], + [-178.29798837599995, 28.390993294000097], + [-178.294286781999915, 28.394978087000098], + [-178.292436738999868, 28.3980567360001], + [-178.290381138999891, 28.401678575000105], + [-178.287904780999895, 28.392989461000141], + [-178.292224761999933, 28.390090854000121], + [-178.298397057999921, 28.387372162000148] + ] + ], + [ + [ + [-96.350087042999888, 28.408880927000055], + [-96.369699673999946, 28.406927802000027], + [-96.369699673999946, 28.414455471000068], + [-96.312896287999877, 28.458563544000143], + [-96.275257941999911, 28.478705145], + [-96.232533331999889, 28.489488023000021], + [-96.232533331999889, 28.482733466000141], + [-96.240467902999853, 28.481919664000046], + [-96.244618292999888, 28.480169989000061], + [-96.247873501999919, 28.477769273000106], + [-96.246734178999901, 28.475246486000103], + [-96.254953579999892, 28.471096096000153], + [-96.27603105399993, 28.457098700000088], + [-96.283924933999884, 28.447658596000068], + [-96.308216925999972, 28.441717841000141], + [-96.333729620999861, 28.418850002000127], + [-96.350087042999888, 28.408880927000055] + ] + ], + [ + [ + [-80.612172003999916, 28.568833726000136], + [-80.618478969999842, 28.537665106000148], + [-80.649525519999969, 28.475246486000103], + [-80.658192511999857, 28.437486070000134], + [-80.66421464799987, 28.31509023600016], + [-80.66893469999988, 28.29706452000012], + [-80.669992641999926, 28.287502346000124], + [-80.667958136999886, 28.275946356000119], + [-80.659006313999868, 28.256293036000059], + [-80.651478644999912, 28.239976304000137], + [-80.649769660999908, 28.225165106000148], + [-80.664947068999908, 28.252590236000017], + [-80.700184699999937, 28.348089911000116], + [-80.714711066999882, 28.369777736000103], + [-80.719634568999936, 28.388332424000012], + [-80.728342251999919, 28.469061591000028], + [-80.737416144999912, 28.484849351000079], + [-80.739898240999935, 28.517482815000122], + [-80.732289191999911, 28.544623114000146], + [-80.710926886999857, 28.544134833000058], + [-80.704701300999886, 28.560614325000031], + [-80.6986384759999, 28.567775783000073], + [-80.67747962099989, 28.578924872000087], + [-80.655506964999887, 28.593329169000171], + [-80.642933722999885, 28.598130601000051], + [-80.629017706999917, 28.598781643], + [-80.612172003999916, 28.568833726000136] + ] + ], + [ + [ + [-82.683216925999915, 28.73773834800015], + [-82.677601691999911, 28.736070054000137], + [-82.672718878999945, 28.737046617000104], + [-82.666005011999914, 28.734442450000117], + [-82.667062954999949, 28.722357489], + [-82.672271287999934, 28.715236721000153], + [-82.673736131999902, 28.714422919000143], + [-82.678212042999888, 28.714260158000073], + [-82.681874152999939, 28.716945705000157], + [-82.681874152999939, 28.720851955000157], + [-82.696034308999856, 28.725572007000054], + [-82.695871548999889, 28.728949286000088], + [-82.692005988999881, 28.729152736000131], + [-82.688140428999873, 28.728989976000079], + [-82.685617641999869, 28.730047919000029], + [-82.689279751999919, 28.731756903000033], + [-82.688954230999883, 28.735296942000033], + [-82.683216925999915, 28.73773834800015] + ] + ], + [ + [ + [-82.682199673999946, 28.760321356000119], + [-82.692534959999961, 28.760239976000136], + [-82.697377081999946, 28.761460679000052], + [-82.696400519999969, 28.76398346600017], + [-82.692738410999908, 28.769354559000035], + [-82.691639777999882, 28.773098049000069], + [-82.695464647999898, 28.776434637000094], + [-82.697580532999893, 28.782294012000037], + [-82.694935675999915, 28.787583726000108], + [-82.688099738999881, 28.788153387000179], + [-82.679921027999882, 28.784654039000188], + [-82.673491990999963, 28.777085679000137], + [-82.673817511999886, 28.76666901200015], + [-82.682199673999946, 28.760321356000119] + ] + ], + [ + [ + [-90.879628058999884, 29.051255601], + [-90.915109829999949, 29.051255601], + [-90.943714972999942, 29.060777085], + [-90.903187628999916, 29.057196356000119], + [-90.879628058999884, 29.051255601] + ] + ], + [ + [ + [-90.643950975999928, 29.070624091000113], + [-90.656320766999869, 29.063218492000132], + [-90.672759568999936, 29.057277736000103], + [-90.7494197259999, 29.040961005000085], + [-90.765207485999952, 29.040961005000085], + [-90.767160610999895, 29.047064520000063], + [-90.73997962099989, 29.052883205000015], + [-90.73501542899993, 29.05760325700011], + [-90.714100714999887, 29.06541575700011], + [-90.708241339999944, 29.06541575700011], + [-90.705433722999885, 29.061753648000078], + [-90.69684811099998, 29.059230861000131], + [-90.684071417999917, 29.06085846600017], + [-90.676625128999945, 29.065171617000161], + [-90.673573370999861, 29.067938544000029], + [-90.657093878999973, 29.066839911000088], + [-90.652088995999918, 29.067206122000087], + [-90.648833787999877, 29.069403387000094], + [-90.642201300999915, 29.072943427000084], + [-90.643950975999928, 29.070624091000113] + ] + ], + [ + [ + [-90.413970506999931, 29.052435614000117], + [-90.41340084499987, 29.048570054000109], + [-90.42015540299991, 29.048732815000065], + [-90.464588995999918, 29.057806708000086], + [-90.512359178999873, 29.074855861000131], + [-90.510975714999887, 29.080308335000083], + [-90.452300584999961, 29.06956614800005], + [-90.428578253999945, 29.061224677], + [-90.417388475999957, 29.055487372000115], + [-90.413970506999931, 29.052435614000117] + ] + ], + [ + [ + [-90.283843553999958, 29.078558661000088], + [-90.346547003999945, 29.058050848000121], + [-90.31859290299991, 29.078558661000088], + [-90.31078040299991, 29.082424221000068], + [-90.302561001999919, 29.084906317], + [-90.293609178999901, 29.08612702000012], + [-90.283843553999958, 29.086004950000145], + [-90.283843553999958, 29.078558661000088] + ] + ], + [ + [ + [-83.036773240999906, 29.13751862200003], + [-83.049956834999932, 29.131984768], + [-83.058176235999952, 29.136175848000121], + [-83.057525193999908, 29.150091864000117], + [-83.050282355999883, 29.155707098000121], + [-83.042958136999857, 29.151271877000127], + [-83.038197394999969, 29.145209052000055], + [-83.03294837099989, 29.14126211100016], + [-83.029652472999942, 29.139797268], + [-83.036773240999906, 29.13751862200003] + ] + ], + [ + [ + [-90.450021938999896, 29.235093492000047], + [-90.4525447259999, 29.224025783000016], + [-90.45360266799986, 29.237982489000089], + [-90.44627844999988, 29.260321356000119], + [-90.43455969999988, 29.264471747000144], + [-90.433827277999939, 29.255113023000106], + [-90.440256313999868, 29.247707424000126], + [-90.446766730999855, 29.242132880000113], + [-90.450021938999896, 29.235093492000047] + ] + ], + [ + [ + [-90.02375240799995, 29.216376044000171], + [-90.030629035999937, 29.216376044000171], + [-90.024281378999916, 29.238470770000063], + [-90.001698370999947, 29.249090887000094], + [-89.976633266999869, 29.256903387000094], + [-89.962961391999926, 29.270982164000046], + [-89.955474412999934, 29.270982164000046], + [-89.962961391999926, 29.264146226000108], + [-89.955474412999934, 29.257310289000102], + [-89.976144985999952, 29.245062567000147], + [-90.010365363999938, 29.229437567000062], + [-90.02375240799995, 29.216376044000171] + ] + ], + [ + [ + [-89.914458787999934, 29.284857489000117], + [-89.929269985999923, 29.27659739800005], + [-89.938954230999883, 29.277248440000093], + [-89.933827277999853, 29.284572658000101], + [-89.927845831999946, 29.28815338700015], + [-89.922759568999908, 29.289292710000026], + [-89.913156704999949, 29.290228583], + [-89.914458787999934, 29.284857489000117] + ] + ], + [ + [ + [-94.814279751999891, 29.352932033000073], + [-94.724408970999974, 29.333154895000078], + [-94.891654983999871, 29.224861529000165], + [-94.947248464999916, 29.193913693000141], + [-95.075955386999908, 29.114043627000157], + [-95.108281049999903, 29.088597249000046], + [-95.116543590999896, 29.088992912000023], + [-95.102255879999916, 29.11117147], + [-95.081280775999915, 29.136083932000176], + [-95.034002990999937, 29.162938401000147], + [-94.967765416999924, 29.20787631400016], + [-94.943098856999939, 29.22286028800012], + [-94.928740668999893, 29.236891388000132], + [-94.920725063999868, 29.250474351], + [-94.917225714999887, 29.255316473000065], + [-94.875111456999917, 29.284613348000093], + [-94.866810675999943, 29.299953518000123], + [-94.862049933999941, 29.305121161000145], + [-94.839833136999886, 29.310492255], + [-94.837880011999943, 29.311265367000104], + [-94.828033006999931, 29.31761302300005], + [-94.821644660999908, 29.331122137000122], + [-94.824289516999897, 29.343329169000086], + [-94.84154212099989, 29.346096096000153], + [-94.84154212099989, 29.352932033000073], + [-94.836496548999946, 29.352362372000115], + [-94.835275844999842, 29.353989976000136], + [-94.835275844999842, 29.356838283000073], + [-94.834095831999917, 29.359767971000096], + [-94.831939256999902, 29.360174872000087], + [-94.827870245999861, 29.359767971000096], + [-94.827015753999945, 29.353949286000145], + [-94.814279751999891, 29.352932033000073] + ] + ], + [ + [ + [-89.182606574999909, 29.473130601000051], + [-89.203236456999917, 29.469142971000096], + [-89.221831834999932, 29.46963125200007], + [-89.187814907999893, 29.480373440000093], + [-89.173003709999932, 29.489325262000122], + [-89.167836066999911, 29.503729559000178], + [-89.163156704999921, 29.504461981000119], + [-89.161610480999883, 29.503159898000106], + [-89.161366339999915, 29.500637111000103], + [-89.160389777999853, 29.497503973000121], + [-89.166249152999882, 29.482367255000113], + [-89.182606574999909, 29.473130601000051] + ] + ], + [ + [ + [-90.104644334999932, 29.511379299000012], + [-90.095814581999974, 29.510077216000113], + [-90.081776495999918, 29.511297919000029], + [-90.061105923999889, 29.504543361000103], + [-90.053578253999945, 29.500474351000136], + [-90.048980272999898, 29.496649481000119], + [-90.041086391999841, 29.493394273000078], + [-90.030100063999868, 29.490912177000141], + [-90.020415818999908, 29.486639716000028], + [-90.014556443999965, 29.478583075000088], + [-90.01805579299986, 29.474351304000081], + [-90.028391079999977, 29.47540924700003], + [-90.028146938999924, 29.47190989800005], + [-90.01805579299986, 29.461330471000096], + [-90.009103969999842, 29.457586981000148], + [-90.001861131999902, 29.459621486000074], + [-89.998443162999905, 29.461249091000113], + [-89.997303839999859, 29.465562242000104], + [-89.995716925999943, 29.46474844], + [-89.994862433999941, 29.459377346000124], + [-89.994943813999924, 29.456610419000086], + [-89.993234829999921, 29.458441473000065], + [-89.991525844999899, 29.455715236000103], + [-89.991688605999883, 29.44863515800013], + [-89.995838995999918, 29.444810289000102], + [-90.001047329999892, 29.445705471000011], + [-90.015736456999889, 29.443793036000145], + [-90.021311001999919, 29.448309637000094], + [-90.024891730999883, 29.456854559000035], + [-90.031483527999853, 29.463283596000124], + [-90.03921464799987, 29.464422919000171], + [-90.044341600999871, 29.461411851000079], + [-90.049956834999875, 29.461411851000079], + [-90.053781704999892, 29.463527736000074], + [-90.057687954999892, 29.466213283000158], + [-90.06208248599998, 29.47284577000012], + [-90.061350063999839, 29.477240302000112], + [-90.058827277999939, 29.478013414000131], + [-90.06419837099989, 29.478664455000072], + [-90.078602667999945, 29.476629950000145], + [-90.091949022999955, 29.47353750200007], + [-90.101796027999882, 29.478338934000149], + [-90.119007941999911, 29.496242580000015], + [-90.119862433999913, 29.505519924000069], + [-90.113514777999882, 29.510728257000054], + [-90.104644334999932, 29.511379299000012] + ] + ], + [ + [ + [-89.091420050999915, 29.523911851000108], + [-89.098500128999973, 29.520941473], + [-89.057036912999962, 29.562079169000171], + [-89.054798956999974, 29.563625393000038], + [-89.049916144999912, 29.565008856000091], + [-89.05402584499987, 29.559515692000062], + [-89.084095831999917, 29.529445705000128], + [-89.091420050999915, 29.523911851000108] + ] + ], + [ + [ + [-88.968820766999897, 29.638576565000065], + [-88.97826087099989, 29.631659247000172], + [-88.979603644999884, 29.632879950000088], + [-88.97008216099988, 29.639797268000095], + [-88.964507615999878, 29.642767645], + [-88.968820766999897, 29.638576565000065] + ] + ], + [ + [ + [-91.802072719999899, 29.490057684000035], + [-91.840484178999901, 29.483832098000093], + [-91.898019985999895, 29.517035223], + [-91.908192511999943, 29.521144924000154], + [-91.91844641799986, 29.529974677000027], + [-92.020497199999852, 29.568752346000124], + [-92.036529100999928, 29.58209870000006], + [-92.03538977799991, 29.596177476], + [-92.012318488999938, 29.613714911000116], + [-91.993275519999941, 29.618841864000146], + [-91.973703579999977, 29.620510158000158], + [-91.949126756999959, 29.627264716000084], + [-91.94351152299987, 29.631537177], + [-91.933338995999918, 29.64394765800013], + [-91.929269985999866, 29.647121486000103], + [-91.917103644999969, 29.648138739000061], + [-91.861398891999869, 29.637193101], + [-91.845570441999939, 29.628241278000147], + [-91.819976365999963, 29.606146552000084], + [-91.789947068999908, 29.594631252000127], + [-91.788685675999886, 29.592474677000141], + [-91.758534308999884, 29.586737372000172], + [-91.733957485999866, 29.58502838700015], + [-91.72020423099994, 29.581732489000117], + [-91.713978644999884, 29.573716539000159], + [-91.723215298999946, 29.558986721000096], + [-91.759632941999911, 29.541164455000015], + [-91.773101365999906, 29.530991929000081], + [-91.778431769999969, 29.514308986000131], + [-91.778635219999927, 29.500555731000119], + [-91.780832485999923, 29.493353583000086], + [-91.787749803999901, 29.490545966000028], + [-91.802072719999899, 29.490057684000035] + ] + ], + [ + [ + [-85.086089647999927, 29.685736395000063], + [-85.083648240999906, 29.675034898000135], + [-85.0892634759999, 29.670152085000055], + [-85.095814581999889, 29.662420966000141], + [-85.101307745999918, 29.653265692000062], + [-85.103586391999897, 29.643988348000121], + [-85.108713344999899, 29.634019273000135], + [-85.120350714999915, 29.633978583000143], + [-85.141753709999961, 29.64085521000014], + [-85.150461391999841, 29.644476630000028], + [-85.158070441999882, 29.652655341000113], + [-85.165109829999949, 29.661932684000149], + [-85.171864386999886, 29.66885000200007], + [-85.182281053999873, 29.673976955000072], + [-85.202300584999932, 29.680975653000147], + [-85.212798631999902, 29.688706773000078], + [-85.171538865999963, 29.683254299000126], + [-85.153065558999941, 29.684637762000122], + [-85.138295050999943, 29.69550202], + [-85.113677537999934, 29.691961981000119], + [-85.100453253999916, 29.688055731000119], + [-85.087757941999939, 29.68683502800009], + [-85.086089647999927, 29.685736395000063] + ] + ], + [ + [ + [-88.925404425999915, 29.683091539000159], + [-88.938832160999908, 29.673285223000121], + [-88.874094204999892, 29.747463283000073], + [-88.889556443999936, 29.725327867000189], + [-88.925404425999915, 29.683091539000159] + ] + ], + [ + [ + [-84.969471808999913, 29.611761786000088], + [-84.990874803999873, 29.606146552000084], + [-85.04918372299997, 29.605861721000124], + [-85.07127844999988, 29.611761786000088], + [-85.097320115999935, 29.627264716000084], + [-85.081206834999961, 29.623968817000147], + [-85.05402584499987, 29.609442450000117], + [-85.03156490799995, 29.610907294000171], + [-84.987456834999961, 29.620428778000175], + [-84.774566209999932, 29.709784247000087], + [-84.771311001999976, 29.713812567000062], + [-84.770904100999871, 29.718329169000114], + [-84.76817786399991, 29.721909898], + [-84.757883266999897, 29.72345612200003], + [-84.749989386999914, 29.725490627000156], + [-84.74559485599994, 29.729966539000131], + [-84.742258266999897, 29.734442450000088], + [-84.737375454999921, 29.736476955000015], + [-84.724110480999911, 29.740301825000031], + [-84.70523027299987, 29.758490302000112], + [-84.69269771999987, 29.764390367000047], + [-84.69269771999987, 29.756984768000066], + [-84.698353644999969, 29.754584052000112], + [-84.706613735999952, 29.748032945000048], + [-84.706369594999899, 29.743963934000178], + [-84.728911912999905, 29.735825914000159], + [-84.788238084999961, 29.69550202], + [-84.887847459999904, 29.657945054], + [-84.908762173999975, 29.642482815000065], + [-84.969471808999913, 29.611761786000088] + ] + ], + [ + [ + [-89.435210740999935, 29.77228424700003], + [-89.43211829299986, 29.757635809000121], + [-89.42731686099998, 29.743963934000178], + [-89.440256313999896, 29.748480536000145], + [-89.447417772999927, 29.757798570000162], + [-89.452381964999887, 29.76703522300015], + [-89.458607550999943, 29.771226304000081], + [-89.466908331999917, 29.766424872000087], + [-89.476714647999927, 29.743719794000057], + [-89.48997962099989, 29.736476955000015], + [-89.494048631999931, 29.778794664000131], + [-89.490589972999942, 29.793768622000144], + [-89.475697394999969, 29.805365302000084], + [-89.463368292999917, 29.798895575000174], + [-89.458607550999943, 29.795396226], + [-89.455189581999917, 29.791693427000141], + [-89.441314256999931, 29.784613348000065], + [-89.435210740999935, 29.77228424700003] + ] + ], + [ + [ + [-89.33543860599994, 29.812201239], + [-89.304351365999935, 29.805365302000084], + [-89.29360917899993, 29.807114976000079], + [-89.283762173999889, 29.811021226000079], + [-89.277170376999919, 29.812079169000029], + [-89.276478644999884, 29.805365302000084], + [-89.290679490999906, 29.771226304000081], + [-89.337025519999969, 29.806626695], + [-89.33543860599994, 29.812201239] + ] + ], + [ + [ + [-84.608713344999899, 29.78925202], + [-84.664702928999958, 29.77871328300013], + [-84.656849738999966, 29.787054755000113], + [-84.617014126999891, 29.805365302000084], + [-84.593413865999935, 29.81854889500012], + [-84.583607550999915, 29.821844794000143], + [-84.576405402999882, 29.819769598000121], + [-84.586333787999905, 29.799953518000123], + [-84.608713344999899, 29.78925202] + ] + ], + [ + [ + [-89.284820115999935, 29.923488674000126], + [-89.293934699999937, 29.920070705000128], + [-89.295480923999975, 29.924627997000172], + [-89.27904212099989, 29.937201239000061], + [-89.26105709499987, 29.943345445000048], + [-89.234364386999914, 29.948431708000058], + [-89.238758917999917, 29.94135163], + [-89.238840298999889, 29.936265367000161], + [-89.235503709999961, 29.931626695000048], + [-89.240589972999885, 29.929348049000069], + [-89.2552791009999, 29.929348049000069], + [-89.27407792899993, 29.926336981000176], + [-89.284820115999935, 29.923488674000126] + ] + ], + [ + [ + [-89.322580532999922, 29.917181708], + [-89.32787024599989, 29.915920315000093], + [-89.317738410999937, 29.926092841000028], + [-89.309437628999945, 29.93650950700011], + [-89.304351365999935, 29.945990302000112], + [-89.293812628999973, 29.962103583], + [-89.278065558999913, 29.982123114000061], + [-89.272938605999911, 29.982082424000069], + [-89.280629035999908, 29.965765692000147], + [-89.295806443999908, 29.942206122000115], + [-89.3041072259999, 29.932359117000161], + [-89.322580532999922, 29.917181708] + ] + ], + [ + [ + [-88.829579230999911, 29.810288804000137], + [-88.854562954999921, 29.769191799000126], + [-88.853382941999911, 29.774603583], + [-88.853586391999869, 29.780218817], + [-88.855458136999914, 29.785956122000144], + [-88.859364386999914, 29.791693427000141], + [-88.829945441999911, 29.843410549000069], + [-88.823963995999918, 29.860663153000175], + [-88.823353644999941, 29.91299062700007], + [-88.823963995999918, 29.928900458000086], + [-88.817779100999928, 29.935126044000143], + [-88.832142706999917, 29.96234772300015], + [-88.83625240799995, 29.978420315000122], + [-88.83141028599988, 29.989691473000036], + [-88.838246222999913, 29.997219143000066], + [-88.848011847999942, 30.033107815000065], + [-88.857574022999927, 30.048041083000115], + [-88.87242591099988, 30.058661200000145], + [-88.850453253999973, 30.04682038], + [-88.840077277999882, 30.025458075000031], + [-88.832142706999917, 30.001857815], + [-88.817779100999928, 29.983547268000123], + [-88.810943162999905, 29.915228583000143], + [-88.821034308999884, 29.83266836100016], + [-88.829579230999911, 29.810288804000137] + ] + ], + [ + [ + [-89.424916144999941, 30.142564195000134], + [-89.431263800999943, 30.133368231000148], + [-89.439361131999902, 30.136542059000035], + [-89.433013475999957, 30.145697333000115], + [-89.426421678999873, 30.14838288], + [-89.424916144999941, 30.142564195000134] + ] + ], + [ + [ + [-89.221831834999932, 30.07290273600016], + [-89.216542120999947, 30.063218492000189], + [-89.215646938999868, 30.058661200000145], + [-89.208119269999912, 30.063177802000112], + [-89.202219204999949, 30.067857164000131], + [-89.197661912999934, 30.073187567], + [-89.194488084999961, 30.079738674000069], + [-89.188343878999973, 30.079738674000069], + [-89.187408006999902, 30.063218492000189], + [-89.191761847999885, 30.049139716000141], + [-89.201161261999914, 30.041571356000119], + [-89.215646938999868, 30.044989325000117], + [-89.222075975999871, 30.033758856000119], + [-89.228871222999913, 30.035956122000115], + [-89.242990688999839, 30.052435614], + [-89.246001756999931, 30.057114976000108], + [-89.248890753999973, 30.064032294000114], + [-89.253041144999912, 30.070257880000085], + [-89.26036536399991, 30.07290273600016], + [-89.267241990999906, 30.070624091000084], + [-89.272572394999884, 30.065741278000118], + [-89.275786912999934, 30.060858466000141], + [-89.276478644999884, 30.058661200000145], + [-89.283843553999873, 30.059515692000062], + [-89.288238084999961, 30.061997789000159], + [-89.291167772999898, 30.064846096000124], + [-89.29442298099994, 30.066066799000126], + [-89.301258917999945, 30.063950914000131], + [-89.306996222999913, 30.059271552000112], + [-89.310699022999955, 30.05459219], + [-89.311838344999899, 30.052435614], + [-89.332102016999897, 30.0489769550001], + [-89.339263475999957, 30.052679755000142], + [-89.345326300999943, 30.066066799000126], + [-89.333485480999883, 30.067572333], + [-89.319935675999915, 30.070949611000017], + [-89.30894934799997, 30.076076565000122], + [-89.304351365999935, 30.083156643000095], + [-89.297718878999973, 30.08397044500002], + [-89.284901495999918, 30.08397044500002], + [-89.276682094999842, 30.089504299000012], + [-89.283924933999856, 30.107082424000154], + [-89.268625454999892, 30.111558335000112], + [-89.254465298999975, 30.11798737200003], + [-89.229318813999896, 30.134344794000057], + [-89.209868943999908, 30.154771226000108], + [-89.196400519999912, 30.164984442000147], + [-89.180816209999932, 30.168524481000034], + [-89.180816209999932, 30.161688544000114], + [-89.194406704999977, 30.155259507], + [-89.207142706999917, 30.146429755000142], + [-89.235463019999969, 30.120672919000114], + [-89.249908006999931, 30.101996161000116], + [-89.236195441999911, 30.093491929], + [-89.218617316999968, 30.086737372000144], + [-89.221831834999932, 30.07290273600016] + ] + ], + [ + [ + [-88.942738410999908, 30.213812567000147], + [-88.969309048999975, 30.210638739000089], + [-88.967355923999918, 30.214300848000121], + [-88.940785285999965, 30.217515367000189], + [-88.927845831999946, 30.217596747000172], + [-88.942738410999908, 30.213812567000147] + ] + ], + [ + [ + [-88.427357550999886, 30.216253973000093], + [-88.43419348899991, 30.209418036000059], + [-88.46971594999988, 30.210842190000122], + [-88.503041144999969, 30.216253973000093], + [-88.503041144999969, 30.223781643000123], + [-88.427357550999886, 30.216253973000093] + ] + ], + [ + [ + [-89.06480872299997, 30.236761786000145], + [-89.068186001999976, 30.225816148000078], + [-89.084624803999873, 30.195786851000108], + [-89.089466925999943, 30.196600653000033], + [-89.092518683999856, 30.197658596000096], + [-89.095285610999923, 30.199530341000141], + [-89.09894771999987, 30.2032738300001], + [-89.094838019999912, 30.206122137000037], + [-89.089507615999935, 30.21198151200015], + [-89.084624803999873, 30.216253973000093], + [-89.092152472999942, 30.223781643000123], + [-89.09894771999987, 30.216253973000093], + [-89.107980923999975, 30.227118231000148], + [-89.12140865799995, 30.230861721000011], + [-89.153553839999915, 30.229925848000121], + [-89.153553839999915, 30.236761786000145], + [-89.101307745999918, 30.235052802000141], + [-89.077015753999945, 30.240790106000091], + [-89.06480872299997, 30.257798570000077], + [-89.057972785999937, 30.257798570000077], + [-89.057484503999945, 30.252671617000047], + [-89.062977667999888, 30.249741929000137], + [-89.065541144999912, 30.24697500200007], + [-89.06480872299997, 30.236761786000145] + ] + ], + [ + [ + [-88.546457485999923, 30.220363674000126], + [-88.556263800999943, 30.216742255000085], + [-88.75633704299986, 30.244208075000117], + [-88.75633704299986, 30.250433661000088], + [-88.731312628999945, 30.257228908000101], + [-88.697824673999889, 30.257879950000145], + [-88.665191209999932, 30.252386786000116], + [-88.643055792999888, 30.240464585000083], + [-88.621205206999917, 30.23151276200015], + [-88.559681769999969, 30.231146552000141], + [-88.537912563999896, 30.224432684000092], + [-88.546457485999923, 30.220363674000126] + ] + ], + [ + [ + [-88.090972459999932, 30.244696356000091], + [-88.311268683999856, 30.236761786000145], + [-88.296986456999946, 30.244696356000091], + [-88.20482337099989, 30.257798570000077], + [-88.149647589999859, 30.257798570000077], + [-88.134632941999939, 30.259995835000055], + [-88.125314907999979, 30.265082098000093], + [-88.118031378999973, 30.271144924000069], + [-88.109038865999963, 30.276109117000132], + [-88.071115688999839, 30.257798570000077], + [-88.071115688999839, 30.250433661000088], + [-88.084095831999917, 30.245917059000121], + [-88.090972459999932, 30.244696356000091] + ] + ], + [ + [ + [-86.617095506999931, 30.412014065000093], + [-86.52183997299997, 30.40127187700007], + [-86.530140753999945, 30.396877346000096], + [-86.540272589999915, 30.395412502000042], + [-86.551380988999938, 30.396795966000113], + [-86.562408006999874, 30.401109117000104], + [-86.562611456999917, 30.401190497000087], + [-86.562814907999979, 30.40127187700007], + [-86.56273352799991, 30.401190497000087], + [-86.562611456999917, 30.401149807000095], + [-86.562489386999857, 30.401109117000104], + [-86.901844855999911, 30.36361318600008], + [-87.241200324999909, 30.326117255000057], + [-87.296498175999886, 30.332342841000028], + [-87.278228318999936, 30.338120835000083], + [-87.197132941999882, 30.33978913], + [-87.081166144999912, 30.356634833], + [-87.022775844999842, 30.374579169000143], + [-86.951730923999975, 30.373928127000099], + [-86.92711341099988, 30.380764065], + [-86.918202277999939, 30.383978583000058], + [-86.890695766999897, 30.393133856000148], + [-86.87531490799995, 30.395005601000108], + [-86.831410285999937, 30.393622137000037], + [-86.724029100999871, 30.406236070000105], + [-86.7005916009999, 30.414943752000013], + [-86.693755662999877, 30.408107815000093], + [-86.659250454999949, 30.415838934000092], + [-86.617095506999931, 30.412014065000093] + ] + ], + [ + [ + [-81.454213019999941, 30.734849351000079], + [-81.461659308999913, 30.72581614800005], + [-81.469146287999877, 30.729315497000144], + [-81.478749152999853, 30.805975653000118], + [-81.47801673099994, 30.831691799000154], + [-81.478749152999853, 30.840073960000112], + [-81.481597459999904, 30.848863023], + [-81.490467902999853, 30.868109442000119], + [-81.49242102799991, 30.874212958000115], + [-81.482167120999861, 30.904364325000031], + [-81.432687954999921, 30.938788153000175], + [-81.424143032999893, 30.970404364000061], + [-81.41730709499987, 30.970404364000061], + [-81.417062954999921, 30.949896552], + [-81.419422980999883, 30.925279039000188], + [-81.428293423999946, 30.892564195000077], + [-81.431955532999893, 30.863104559000178], + [-81.44155839799987, 30.82737864800005], + [-81.457020636999886, 30.799750067000147], + [-81.457142706999946, 30.784572658000158], + [-81.450795050999915, 30.754461981000034], + [-81.454213019999941, 30.734849351000079] + ] + ], + [ + [ + [-81.26171836599994, 31.387792473000118], + [-81.279610537999929, 31.385481299000119], + [-81.291210182999919, 31.395217086000102], + [-81.300320438999904, 31.411516397000085], + [-81.289076365999847, 31.439955905000048], + [-81.271367433999927, 31.46190300300016], + [-81.257555471999922, 31.49035609], + [-81.251289383999904, 31.50457806900009], + [-81.234850875999939, 31.526501102000068], + [-81.220780584999886, 31.527681633000142], + [-81.20290879399991, 31.534334064000163], + [-81.184963349999947, 31.530085360000058], + [-81.1746502579999, 31.521421082000032], + [-81.186007987999858, 31.502812252000169], + [-81.198631143999904, 31.483102318000149], + [-81.213714904999875, 31.453559403000114], + [-81.235289851999937, 31.433784704000132], + [-81.26171836599994, 31.387792473000118] + ] + ], + [ + [ + [-81.149601264999916, 31.587015093], + [-81.16095992399994, 31.567313750000082], + [-81.175071153999909, 31.570502761000128], + [-81.170090199999891, 31.586896920000086], + [-81.167639602999913, 31.600002680000088], + [-81.177992497999867, 31.611943952], + [-81.179484529999854, 31.635942425000124], + [-81.171939179999953, 31.652357992000148], + [-81.160554923999911, 31.669889304000137], + [-81.149258050999919, 31.698338704000108], + [-81.136434531999839, 31.698409526000106], + [-81.131259533999923, 31.692978298000142], + [-81.133715716999859, 31.679863862000147], + [-81.133526625999934, 31.656941275000051], + [-81.128168949999917, 31.628596155000153], + [-81.138283112999943, 31.612172422000086], + [-81.149601264999916, 31.587015093] + ] + ], + [ + [ + [-118.595690633999936, 33.035281301000069], + [-118.589857487999851, 33.029967116000122], + [-118.577164844999928, 33.032455749000135], + [-118.564367112999918, 33.023762111000067], + [-118.565465458999938, 33.018407652000164], + [-118.560180125999878, 33.006330697000109], + [-118.549787298999902, 33.001576939000145], + [-118.545049309999925, 32.985612929000084], + [-118.516022975999917, 32.958162318000163], + [-118.504424056999895, 32.941329224000143], + [-118.483562601999893, 32.921599942000014], + [-118.466738940999846, 32.914819848000022], + [-118.450661601999911, 32.897624555000121], + [-118.407109687999935, 32.864257863], + [-118.381983559999952, 32.847662402000182], + [-118.358766391999907, 32.827828497000112], + [-118.350941535999951, 32.818670966000028], + [-118.363596157999837, 32.816839911000145], + [-118.384180700999934, 32.824391357000124], + [-118.401483379999902, 32.819990138000108], + [-118.404164191999939, 32.812404690000065], + [-118.411366339999873, 32.809800523000078], + [-118.425011087999891, 32.802416140000062], + [-118.429043422999925, 32.802872774000107], + [-118.438367387999918, 32.81692165800014], + [-118.449915045999958, 32.818819046000115], + [-118.474263153999885, 32.8381217230001], + [-118.489901248999885, 32.844903564000091], + [-118.499149718999945, 32.850627919000047], + [-118.506771710999885, 32.865249260000141], + [-118.508595383999875, 32.876468773000013], + [-118.520151559999917, 32.885466869000069], + [-118.531234811999909, 32.90340769500007], + [-118.537593170999926, 32.9057514980001], + [-118.546917738999895, 32.918750014000025], + [-118.548187619999894, 32.937190824000126], + [-118.551701850999862, 32.945411119000099], + [-118.558689245999886, 32.953108413000066], + [-118.575546478999868, 32.969004341000087], + [-118.579904751999962, 32.987779039000188], + [-118.58675346699988, 33.003329658000141], + [-118.593759444999932, 33.013946066000031], + [-118.608244568999936, 33.014376784000078], + [-118.607215286999946, 33.030856352000157], + [-118.595690633999936, 33.035281301000069] + ] + ], + [ + [ + [-79.360951300999972, 33.005682684000035], + [-79.368397589999944, 33.005682684000035], + [-79.368072068999908, 33.024888414000188], + [-79.363107876999976, 33.043036200000088], + [-79.35309811099998, 33.057562567000119], + [-79.337757941999939, 33.066148179000052], + [-79.335560675999943, 33.064683335], + [-79.335113084999932, 33.063177802000141], + [-79.336577928999901, 33.061712958000086], + [-79.34044348899991, 33.060248114000117], + [-79.341623501999948, 33.045233466000084], + [-79.360951300999972, 33.005682684000035] + ] + ], + [ + [ + [-119.513339989999849, 33.276456669000041], + [-119.49784820799988, 33.266124827000155], + [-119.48860446699986, 33.267188126000107], + [-119.48253091599986, 33.263603347000142], + [-119.46220396799994, 33.256544526000155], + [-119.44339065499986, 33.242169710000056], + [-119.434462582999927, 33.231317053000154], + [-119.434336974999837, 33.22401178600002], + [-119.439182447999926, 33.219843984000065], + [-119.446812677999844, 33.219295845000161], + [-119.456582632999883, 33.215980487000039], + [-119.46859456499989, 33.216292155000147], + [-119.472942058999891, 33.215324263000113], + [-119.487180598999913, 33.217886180000065], + [-119.491015440999945, 33.218752130000141], + [-119.495365090999954, 33.21732714000008], + [-119.502514552999884, 33.220891169000097], + [-119.515099988999907, 33.22210224200002], + [-119.523382283999865, 33.227932842000186], + [-119.544188332999894, 33.231319744000089], + [-119.566909339999924, 33.247472164000115], + [-119.567003653999919, 33.252496030000131], + [-119.574225471999881, 33.258797130000019], + [-119.572698580999941, 33.264755664000106], + [-119.578926043999871, 33.27609667500009], + [-119.577894128999844, 33.27930804400016], + [-119.562447845999912, 33.271741240000054], + [-119.55058211199993, 33.280117057000112], + [-119.542886423999917, 33.280178295000141], + [-119.532103489999912, 33.286278258], + [-119.513339989999849, 33.276456669000041] + ] + ], + [ + [ + [-118.535860837999863, 33.477278162000133], + [-118.530102725999939, 33.469976175000014], + [-118.524377885999925, 33.466714878000104], + [-118.517747515999957, 33.459782452000084], + [-118.508057996999909, 33.454680973000151], + [-118.499706173999883, 33.451812500000031], + [-118.499682794999899, 33.44815369700008], + [-118.498770320999895, 33.442665713000125], + [-118.493060577999898, 33.441589198000045], + [-118.490442104999957, 33.443421645000157], + [-118.485636536999891, 33.444876593000103], + [-118.484329640999945, 33.447093576000114], + [-118.476900714999886, 33.447445403000089], + [-118.472499288999956, 33.441963898000054], + [-118.468075783999879, 33.442408711], + [-118.462823692999905, 33.439843866000061], + [-118.457540441999924, 33.435110204000082], + [-118.450054222999938, 33.431861993], + [-118.444791158999934, 33.428584013000105], + [-118.437307795999914, 33.429362591000043], + [-118.433853213999896, 33.427155365000132], + [-118.429443462999899, 33.428282726000148], + [-118.421119870999888, 33.427947626000119], + [-118.394449177999917, 33.415962763000053], + [-118.389098455999957, 33.417460528000092], + [-118.382598976999887, 33.410526297000033], + [-118.379374826999921, 33.410182864000106], + [-118.374027800999912, 33.410206772000052], + [-118.369206483999875, 33.408392662000054], + [-118.368302772999883, 33.405101551000072], + [-118.366907513999905, 33.398881928000051], + [-118.36958062699992, 33.394849740000112], + [-118.368289460999847, 33.389002583000106], + [-118.363376394999946, 33.388277561000066], + [-118.355131151999856, 33.377346319000068], + [-118.343628195999955, 33.366762193000156], + [-118.331757313999901, 33.359112834000157], + [-118.326514339999889, 33.348901252000175], + [-118.326343656999882, 33.344607568000086], + [-118.322764640999964, 33.343132417000064], + [-118.31725463899997, 33.343429236000034], + [-118.308665395999924, 33.33642000100015], + [-118.304344449999903, 33.319268941000118], + [-118.307854332999867, 33.318724439000093], + [-118.310583629999925, 33.314231484000132], + [-118.304340113999899, 33.309040023000122], + [-118.312127837999881, 33.305542270000089], + [-118.314709021999931, 33.301629145000121], + [-118.326034906999922, 33.29863279700011], + [-118.346016731999882, 33.305231359000018], + [-118.354946583999947, 33.312944618000145], + [-118.364003247999861, 33.315047967000012], + [-118.374796158999899, 33.319511779000138], + [-118.396096027999931, 33.320100243000141], + [-118.410465684999878, 33.320371925000146], + [-118.422664262999959, 33.316634174000072], + [-118.443834805999941, 33.318826713000121], + [-118.46358558599988, 33.323514310000107], + [-118.472771269999896, 33.332942806000133], + [-118.484243943999871, 33.346074552000161], + [-118.489581558999902, 33.358498939000171], + [-118.484399969999899, 33.368413836000045], + [-118.486164956999914, 33.372427754000157], + [-118.480071710999894, 33.380143233000112], + [-118.474872309999924, 33.382370955000127], + [-118.479324236999858, 33.386750276], + [-118.487232176999839, 33.402811890000137], + [-118.484523316999883, 33.405381113000189], + [-118.48714958099994, 33.408304122000104], + [-118.486345800999871, 33.415967844000036], + [-118.490734640999918, 33.419625399000054], + [-118.497756378999853, 33.42143085400015], + [-118.503907513999962, 33.423224902000172], + [-118.510496250999864, 33.423938125000021], + [-118.515654118999947, 33.423005280000112], + [-118.520788897999893, 33.427514671000026], + [-118.530673002999961, 33.428580903000025], + [-118.535084784999952, 33.429311825000028], + [-118.542988218999923, 33.432922771], + [-118.550885946999955, 33.433253662000041], + [-118.559226277999912, 33.432853992], + [-118.56673559899987, 33.436856014000014], + [-118.57285073199985, 33.437906618000099], + [-118.573730276999882, 33.440455082000099], + [-118.574117225999913, 33.44661376700013], + [-118.579049097999956, 33.448476365000047], + [-118.584382505999912, 33.452864114000093], + [-118.589607025999911, 33.460095565000145], + [-118.595881198999891, 33.466705629000117], + [-118.602116222999925, 33.471470083000085], + [-118.603913367999851, 33.476588999000128], + [-118.59686781099991, 33.476973211000129], + [-118.58677851199991, 33.475571359000057], + [-118.578002707999886, 33.476350805000052], + [-118.569624876999924, 33.474536554000125], + [-118.563435898999884, 33.473426576000136], + [-118.545937539999883, 33.475028762000093], + [-118.540674604999893, 33.475783166000085], + [-118.535860837999863, 33.477278162000133] + ] + ], + [ + [ + [-118.226577624999933, 33.765449583000034], + [-118.22391862499984, 33.756066514000125], + [-118.243878229999922, 33.750844216000033], + [-118.236346109999943, 33.728046034000116], + [-118.250134425999931, 33.723618208000133], + [-118.245571496999872, 33.714879458000055], + [-118.257628533999963, 33.716554070000072], + [-118.261326341999848, 33.725000144000077], + [-118.25912648099991, 33.729407138000013], + [-118.244320061999886, 33.734290960000081], + [-118.248993863999971, 33.749427260000132], + [-118.253853961999937, 33.746218959000075], + [-118.25110729, 33.736269119000056], + [-118.260562331999878, 33.73345394400009], + [-118.268615110999946, 33.728931446], + [-118.270859149999893, 33.739639570000136], + [-118.267506095999934, 33.747028786], + [-118.254988861999948, 33.75808264400014], + [-118.250319951999913, 33.757555440000132], + [-118.245547112999887, 33.759683031000137], + [-118.234675975999863, 33.763152826000166], + [-118.226577624999933, 33.765449583000034] + ] + ], + [ + [ + [-77.94204667899993, 33.916815497000087], + [-77.96239173099994, 33.85687897300015], + [-77.969960089999887, 33.847967841000028], + [-77.981312628999945, 33.853827216000141], + [-77.997710740999963, 33.858954169000171], + [-78.012277798999889, 33.865627346000124], + [-78.01781165299991, 33.875881252000156], + [-78.010080532999893, 33.892035223000121], + [-77.995228644999941, 33.899318752000127], + [-77.979725714999915, 33.898179429], + [-77.969960089999887, 33.889553127000099], + [-77.963286912999934, 33.894476630000057], + [-77.94204667899993, 33.916815497000087] + ] + ], + [ + [ + [-120.042324519999866, 34.028081162000106], + [-120.049937673999878, 34.015605371000092], + [-120.04700351399994, 34.003812582000094], + [-120.033968531999847, 33.989577195000081], + [-120.008337388999905, 33.97902667000001], + [-119.980407272999912, 33.983467124000171], + [-119.978781448999953, 33.959370996000061], + [-119.970692784999926, 33.952931074000119], + [-119.968830159999911, 33.941116579000109], + [-119.999628467999912, 33.941479228], + [-120.018949772999932, 33.93415329900013], + [-120.049688375999864, 33.914781298], + [-120.071290524999952, 33.911785084000158], + [-120.080626792999894, 33.906362829000145], + [-120.101298472999915, 33.90688890100013], + [-120.109011043999899, 33.899737962000088], + [-120.10989116399989, 33.893140151000139], + [-120.124205654999898, 33.895086377000055], + [-120.133400634999873, 33.902824408000114], + [-120.15263550099985, 33.911687703], + [-120.17560998499988, 33.922231553000032], + [-120.184467483999924, 33.937422165000143], + [-120.189428045999932, 33.94479976300012], + [-120.198079576999888, 33.952101495000036], + [-120.210243987999903, 33.972487739000158], + [-120.219359467999965, 33.976723149000023], + [-120.22549272399992, 33.988458458000153], + [-120.237181432999918, 33.991713313000062], + [-120.248516704999886, 34.001127158000045], + [-120.236564990999895, 34.008803220000019], + [-120.217615999999865, 34.010541155000041], + [-120.201055341999904, 34.004695622000057], + [-120.185819994999918, 34.008918186000031], + [-120.170962859999875, 34.007413919], + [-120.158485535999915, 34.015951829000144], + [-120.145480934999938, 34.02449689800001], + [-120.136097785999922, 34.024725653000118], + [-120.096665303999899, 34.017860670000076], + [-120.07247756799984, 34.024894548000063], + [-120.057874835999883, 34.037784863000169], + [-120.044138729999872, 34.037272705000149], + [-120.042324519999866, 34.028081162000106] + ] + ], + [ + [ + [-120.360690360999882, 34.053097529000141], + [-120.356017773999895, 34.047080956000073], + [-120.344581841999869, 34.046492220000047], + [-120.335766106999912, 34.048702926000161], + [-120.330301140999907, 34.047174813000126], + [-120.318325774999906, 34.040055005000156], + [-120.311306009999868, 34.034476555000182], + [-120.306556533999924, 34.02639704400012], + [-120.308301269999859, 34.018200390000132], + [-120.329612341999848, 34.018629218000072], + [-120.351232122999889, 34.019022108000073], + [-120.360439239999891, 34.014757433000099], + [-120.373824538999926, 34.017764392000018], + [-120.382382058999838, 34.024128673000106], + [-120.392774212999925, 34.025965751000129], + [-120.406225727999939, 34.031414923000071], + [-120.415194010999898, 34.03246878400013], + [-120.423769553999875, 34.024945950000031], + [-120.438196941999891, 34.029559783000039], + [-120.446088133999922, 34.030216641000138], + [-120.449202675999871, 34.035865963000035], + [-120.437970384999886, 34.038538274000146], + [-120.415273713999923, 34.054496065000038], + [-120.403405948999946, 34.051456813000115], + [-120.394042700999904, 34.053285218000141], + [-120.3800094959999, 34.0608976810001], + [-120.368979028999931, 34.071311326000014], + [-120.369068028999919, 34.076225100000059], + [-120.362212693999908, 34.07168203300013], + [-120.358966172999956, 34.064972361000102], + [-120.356262126999866, 34.058510533000018], + [-120.360690360999882, 34.053097529000141] + ] + ], + [ + [ + [-119.835159866999845, 34.063585676000017], + [-119.82437089799987, 34.055080471000096], + [-119.806996222999899, 34.051947333000115], + [-119.787740187999944, 34.056188569000099], + [-119.77785356099993, 34.055863163000097], + [-119.759262504999938, 34.055808821000042], + [-119.752833634999945, 34.052281636000046], + [-119.744292772999898, 34.052150783000158], + [-119.737005455999935, 34.046430236000148], + [-119.732147472999884, 34.048557464000041], + [-119.711835934999911, 34.042254864000185], + [-119.70379551699989, 34.034561746000023], + [-119.692381916999921, 34.028223749000077], + [-119.685359820999864, 34.019871289], + [-119.677022679999894, 34.020750575000093], + [-119.666636794999874, 34.016764887000093], + [-119.654397726999917, 34.019084734000117], + [-119.633182665999882, 34.013635007000133], + [-119.615639117999962, 34.019543137000127], + [-119.607930806999974, 34.029474258000093], + [-119.610079325999934, 34.039645939000039], + [-119.58864085099988, 34.049712044000088], + [-119.57540772099992, 34.050677210000103], + [-119.564930792999917, 34.055324611000131], + [-119.532521882999887, 34.041423910000091], + [-119.521494225999874, 34.034291329000112], + [-119.529426059999892, 34.025248406000017], + [-119.542666345999919, 34.020164343000189], + [-119.544527335999888, 34.013617241000176], + [-119.54783312899994, 34.003847125000121], + [-119.559521218999876, 33.994308649000132], + [-119.580325866999971, 33.993586235000137], + [-119.589497547999883, 33.989005583000122], + [-119.624820943999921, 33.987315553000187], + [-119.645457367999953, 33.986212475000045], + [-119.657682596999919, 33.986061776], + [-119.667048150999904, 33.983050180000035], + [-119.673278146999877, 33.978096858000086], + [-119.68211608499989, 33.976333644000036], + [-119.684945141999933, 33.973874143000117], + [-119.700174026999917, 33.968738494], + [-119.706478544999925, 33.968674579000137], + [-119.712690855999952, 33.961674293000115], + [-119.719512041999891, 33.959134293], + [-119.742213280999891, 33.962449514000028], + [-119.753468400999878, 33.962301480000136], + [-119.759239190999878, 33.957341699], + [-119.772047500999861, 33.959598317000129], + [-119.788251176999864, 33.959765133000147], + [-119.801565511999883, 33.963211129000072], + [-119.817204834999899, 33.959337927000078], + [-119.825197394999876, 33.96653235400008], + [-119.840504051999901, 33.969574153000124], + [-119.85076733199989, 33.967383031000125], + [-119.866711383999899, 33.978934276000118], + [-119.874109320999878, 33.980046565000023], + [-119.881261996999896, 33.991349371000169], + [-119.884370573999888, 34.001838363], + [-119.887068710999927, 34.008776658000144], + [-119.877082120999916, 34.024386762000134], + [-119.877221801999923, 34.032482766000143], + [-119.88625449899989, 34.038108749000131], + [-119.899179466999854, 34.049601328000065], + [-119.913563605999926, 34.055894273000021], + [-119.919123166999853, 34.057536940000134], + [-119.921549780999896, 34.054679350000029], + [-119.928468376999916, 34.055800203000118], + [-119.933019092999942, 34.060229146000111], + [-119.924292045999863, 34.066858478000185], + [-119.921019781999931, 34.073446135], + [-119.917224857999898, 34.078820327000031], + [-119.904627893999901, 34.074301803000097], + [-119.88704397599993, 34.074300968000117], + [-119.856411932999933, 34.070551942000165], + [-119.835159866999845, 34.063585676000017] + ] + ], + [ + [ + [-77.818714972999885, 34.172674872000172], + [-77.820627407999922, 34.171576239000117], + [-77.823353644999912, 34.171861070000077], + [-77.825998501999891, 34.170640367000047], + [-77.845936652999882, 34.123765367000189], + [-77.860178188999981, 34.100409247000087], + [-77.8744197259999, 34.08812083500014], + [-77.864003058999913, 34.113674221000124], + [-77.856556769999912, 34.142645575000031], + [-77.844227667999888, 34.16665273600016], + [-77.819203253999973, 34.177476304000052], + [-77.818714972999885, 34.172674872000172] + ] + ], + [ + [ + [-77.35252844999988, 34.522284247000144], + [-77.354400193999936, 34.521185614000117], + [-77.357411261999943, 34.521389065000065], + [-77.360463019999941, 34.520086981000176], + [-77.386341925999943, 34.501695054000137], + [-77.467762824999909, 34.465399481000034], + [-77.500721808999884, 34.458685614000089], + [-77.514556443999965, 34.453762111000017], + [-77.617787238999881, 34.377630927000141], + [-77.6341853509999, 34.362494208000143], + [-77.614735480999883, 34.395453192000119], + [-77.57872473899991, 34.425360419000086], + [-77.449818488999938, 34.495672919000029], + [-77.43187415299991, 34.499660549000012], + [-77.413726365999906, 34.503973700000088], + [-77.374134894999969, 34.523138739000061], + [-77.353016730999855, 34.52757396000014], + [-77.35252844999988, 34.522284247000144] + ] + ], + [ + [ + [-76.537709113999938, 34.642157294000029], + [-76.551665818999908, 34.636867580000128], + [-76.556223110999952, 34.64061107], + [-76.592681443999908, 34.663519598000093], + [-76.64321855399993, 34.678412177000141], + [-76.654774542999945, 34.68455638200011], + [-76.654774542999945, 34.691473700000117], + [-76.634266730999883, 34.691473700000117], + [-76.565337693999936, 34.67096588700015], + [-76.554798956999974, 34.664211330000015], + [-76.542144334999904, 34.652899481000034], + [-76.537709113999938, 34.642157294000029] + ] + ], + [ + [ + [-76.681467251999948, 34.705145575000145], + [-76.681467251999948, 34.698228257000054], + [-76.801869269999912, 34.705145575000145], + [-76.827504035999965, 34.702948309000149], + [-77.09976152299987, 34.64984772300015], + [-77.082386847999885, 34.665472723000121], + [-77.054432745999861, 34.67487213700015], + [-76.89745032499988, 34.698228257000054], + [-76.733550584999904, 34.717596747000144], + [-76.681467251999948, 34.705145575000145] + ] + ], + [ + [ + [-76.519642706999917, 34.615790106000034], + [-76.53062903599988, 34.589056708000115], + [-76.539214647999898, 34.608221747000172], + [-76.525054490999963, 34.637844143000123], + [-76.407785610999895, 34.794419664000188], + [-76.304676886999857, 34.883246161000116], + [-76.262318488999966, 34.906724351], + [-76.256255662999877, 34.913641669000086], + [-76.24950110599994, 34.92186107], + [-76.233957485999923, 34.931708075000117], + [-76.215972459999904, 34.940334377000013], + [-76.202259894999969, 34.944728908000101], + [-76.222767706999917, 34.917425848000121], + [-76.249663865999906, 34.903225002000013], + [-76.299875454999977, 34.858587958000143], + [-76.322092251999919, 34.849066473000121], + [-76.340402798999889, 34.838446356000091], + [-76.39598548099994, 34.787583726000079], + [-76.519642706999917, 34.615790106000034] + ] + ], + [ + [ + [-76.140858527999882, 34.992499091000141], + [-76.147043423999946, 34.992499091000141], + [-76.137277798999918, 35.003404039000131], + [-76.106434699999852, 35.030340887000179], + [-76.099842902999882, 35.044623114000089], + [-76.096506313999924, 35.04962799700003], + [-76.088978644999884, 35.055243231000034], + [-76.081532355999911, 35.062201239000117], + [-76.078114386999886, 35.071600653000033], + [-76.07249915299991, 35.074774481000091], + [-76.059681769999969, 35.071478583000058], + [-76.037180141999869, 35.061346747000115], + [-76.04059811099998, 35.05768463700015], + [-76.043934699999909, 35.056301174000069], + [-76.047515428999873, 35.055731512000122], + [-76.051421678999873, 35.054592190000065], + [-76.12559973899991, 35.011542059000035], + [-76.140858527999882, 34.992499091000141] + ] + ], + [ + [ + [-75.908070441999939, 35.136460679000137], + [-76.017323370999861, 35.075018622000144], + [-76.005970831999889, 35.085150458], + [-75.998850063999924, 35.09707265800013], + [-75.98997962099989, 35.123439846000124], + [-75.96703040299991, 35.117743231000148], + [-75.939849412999905, 35.126898505000142], + [-75.886341925999972, 35.156968492000161], + [-75.798898891999926, 35.184230861000074], + [-75.770253058999941, 35.197943427], + [-75.77599036399991, 35.190741278000147], + [-75.782093878999916, 35.185858466000084], + [-75.79820716099988, 35.178045966000113], + [-75.817372199999937, 35.162909247000115], + [-75.908070441999939, 35.136460679000137] + ] + ], + [ + [ + [-75.543771938999953, 35.233303127000013], + [-75.553700324999852, 35.232001044000029], + [-75.585316535999937, 35.233303127000013], + [-75.623158331999889, 35.219061591000113], + [-75.644439256999959, 35.21576569200009], + [-75.682199673999918, 35.201239325000031], + [-75.698312954999892, 35.197943427], + [-75.704009568999879, 35.19594961100016], + [-75.717518683999856, 35.186916408000158], + [-75.72557532499988, 35.184881903000033], + [-75.735747850999928, 35.187689520000063], + [-75.73338782499988, 35.194037177000027], + [-75.724680141999897, 35.200913804000109], + [-75.715687628999973, 35.20538971600017], + [-75.705962693999908, 35.206244208000086], + [-75.701568162999934, 35.210028387000094], + [-75.698963995999947, 35.21482982], + [-75.694569464999859, 35.219061591000113], + [-75.693023240999906, 35.221991278000033], + [-75.69237219999988, 35.226874091000113], + [-75.690337693999936, 35.23135000200007], + [-75.684966600999871, 35.233303127000013], + [-75.681955532999979, 35.231512762000037], + [-75.6810603509999, 35.228013414000046], + [-75.679798956999974, 35.225246486000074], + [-75.675363735999895, 35.22581614800005], + [-75.612619594999927, 35.25259023600016], + [-75.543120897999898, 35.273098049000012], + [-75.516346808999913, 35.291001695000077], + [-75.51707923099994, 35.321478583000115], + [-75.510894334999961, 35.333685614000089], + [-75.498768683999884, 35.382879950000088], + [-75.494374152999882, 35.420477606000091], + [-75.48452714799987, 35.456691799000041], + [-75.482248501999891, 35.479071356000034], + [-75.483631964999887, 35.489935614000117], + [-75.488758917999888, 35.509222723000065], + [-75.489125128999916, 35.52069733300003], + [-75.485259568999908, 35.532049872000172], + [-75.471669074999852, 35.554348049000041], + [-75.468617316999939, 35.565090236000131], + [-75.469349738999881, 35.588771877000156], + [-75.475819464999887, 35.630113023], + [-75.50096594999988, 35.703314520000148], + [-75.502756313999953, 35.722723700000145], + [-75.52000891799986, 35.756659247000087], + [-75.526112433999941, 35.775702216000084], + [-75.51707923099994, 35.780747789000131], + [-75.499501105999911, 35.767482815], + [-75.48668372299997, 35.743801174000069], + [-75.47874915299991, 35.717230536000116], + [-75.476063605999911, 35.695379950000174], + [-75.473540818999908, 35.674872137000037], + [-75.454945441999911, 35.623114325000117], + [-75.45181230399993, 35.582505601000108], + [-75.470570441999911, 35.504787502000099], + [-75.49083411399991, 35.336411851000051], + [-75.515614386999886, 35.260199286], + [-75.525380011999914, 35.243963934000149], + [-75.543771938999953, 35.233303127000013] + ] + ], + [ + [ + [-75.62535559799997, 35.830145575000088], + [-75.643950975999871, 35.829169012000122], + [-75.659291144999912, 35.836004950000031], + [-75.666167772999927, 35.852280992000161], + [-75.670643683999884, 35.871323960000055], + [-75.678456183999884, 35.886908270000063], + [-75.707753058999913, 35.913397528000033], + [-75.715687628999973, 35.924750067], + [-75.721262173999975, 35.929999091000084], + [-75.727772589999887, 35.934556382000139], + [-75.7298884759999, 35.939398505000113], + [-75.721831834999932, 35.945257880000057], + [-75.713042772999898, 35.946966864000061], + [-75.70376542899993, 35.945705471000153], + [-75.695220506999902, 35.942450262000094], + [-75.688343878999888, 35.938421942000119], + [-75.67406165299991, 35.933294989000117], + [-75.667388475999957, 35.929510809000092], + [-75.661040818999908, 35.924750067], + [-75.659331834999904, 35.915432033000158], + [-75.647043423999946, 35.899237372000115], + [-75.612619594999927, 35.863267320000134], + [-75.621896938999981, 35.844916083000086], + [-75.622141079999921, 35.834662177000055], + [-75.62535559799997, 35.830145575000088] + ] + ], + [ + [ + [-75.857643583999902, 37.19405349200018], + [-75.839550312999904, 37.192793578000092], + [-75.823226891999951, 37.196322534000061], + [-75.817301653999948, 37.20699019600012], + [-75.811724207999902, 37.209081221000119], + [-75.810779290999875, 37.200169376000119], + [-75.816242171999875, 37.18607639700015], + [-75.829063995999917, 37.17674031300011], + [-75.84959102699986, 37.163584232000133], + [-75.871327919999914, 37.142872242000166], + [-75.886520223999895, 37.123105777000077], + [-75.899460469999951, 37.117310204000077], + [-75.914537451999905, 37.11232258400004], + [-75.928601938999918, 37.112221513000023], + [-75.926316896999936, 37.117843892000096], + [-75.915383639999931, 37.118544935], + [-75.907615631999874, 37.122960471000127], + [-75.903772929999917, 37.129214309000034], + [-75.892816255999918, 37.140674254000103], + [-75.894323477999905, 37.161239546000118], + [-75.901794543999898, 37.175593717000098], + [-75.906213787999889, 37.194590194000071], + [-75.905419867999939, 37.234426456000037], + [-75.895603355999953, 37.252969990000096], + [-75.889483445999929, 37.280404557000011], + [-75.873970533999881, 37.290379804000096], + [-75.858674916999888, 37.282514126000038], + [-75.851751548999914, 37.270772896000054], + [-75.854055205999941, 37.26088484500012], + [-75.867196051999912, 37.25411214800009], + [-75.876666174999912, 37.240672164000145], + [-75.883245709999926, 37.218648076000036], + [-75.877139417999899, 37.205592522000032], + [-75.869313885999901, 37.198439284000145], + [-75.857643583999902, 37.19405349200018] + ] + ], + [ + [ + [-75.685037571999885, 37.414915019000048], + [-75.719214311999906, 37.368297608000105], + [-75.724573768999875, 37.373899392000155], + [-75.707945937999881, 37.39861533100013], + [-75.684319121999863, 37.436734982000146], + [-75.676477466999955, 37.455072995000151], + [-75.670329446999915, 37.462843914000089], + [-75.656127420999894, 37.461505501000104], + [-75.660430400999957, 37.443184451000079], + [-75.685037571999885, 37.414915019000048] + ] + ], + [ + [ + [-75.659574709999845, 37.482975749000119], + [-75.670617250999925, 37.477057165000147], + [-75.674374746999973, 37.48583466200013], + [-75.66219507699995, 37.504461516000063], + [-75.643928848999906, 37.534846196000117], + [-75.6342270049999, 37.558354016000138], + [-75.621981072999915, 37.571119736000171], + [-75.613391905999976, 37.57800280700009], + [-75.599805919999937, 37.575130510000022], + [-75.602194676999972, 37.562408279000138], + [-75.642532350999915, 37.511396818000051], + [-75.659574709999845, 37.482975749000119] + ] + ], + [ + [ + [-75.981290971999897, 37.992836254000096], + [-75.989768470999934, 37.973150901000153], + [-75.995650528999874, 37.945146582000135], + [-76.005049315999941, 37.950471527], + [-76.010153000999907, 37.960734322000135], + [-76.021359023999906, 37.961139669000104], + [-76.016870257999955, 37.950381436], + [-76.019280001999846, 37.943985813000026], + [-76.019823120999945, 37.937604423000138], + [-76.017226170999919, 37.928794343], + [-76.02281804699993, 37.928260202000146], + [-76.026367898999922, 37.913515256000053], + [-76.029495904999919, 37.914962447000065], + [-76.03154517, 37.929663813], + [-76.029831743999921, 37.941941898], + [-76.027453454999943, 37.950790470000115], + [-76.03310258399992, 37.954671353000137], + [-76.036786470999886, 37.950718316000078], + [-76.043613276999878, 37.949192180000026], + [-76.045064639999879, 37.965370371000134], + [-76.045254665999977, 37.980087770000168], + [-76.051421678999873, 37.994086005000028], + [-76.046131964999887, 37.999416408000073], + [-76.03056423299995, 37.999827016000111], + [-76.013648893999857, 37.991614997000013], + [-76.003041144999969, 38.00096263200011], + [-76.013539191999939, 38.010484117000104], + [-76.039458787999934, 38.021144924000126], + [-76.040285303999923, 38.029194685000121], + [-76.029128393999883, 38.033696697000138], + [-76.017353921999899, 38.038692814000157], + [-76.010464090999875, 38.035799724000142], + [-76.00536477299994, 38.026514029000012], + [-75.987207329999933, 38.018796120000118], + [-75.981290971999897, 37.992836254000096] + ] + ], + [ + [ + [-76.025944393999879, 38.153420958000041], + [-76.033230297999921, 38.148551101000166], + [-76.06275995799993, 38.158906715000072], + [-76.083607762999947, 38.160666373000097], + [-76.079009401999969, 38.18284381000008], + [-76.064461302999916, 38.194510306000112], + [-76.048607684999922, 38.200407545000175], + [-76.036217811999933, 38.189907737000127], + [-76.023818623999944, 38.178457834000099], + [-76.029782187999899, 38.165901169000151], + [-76.025944393999879, 38.153420958000041] + ] + ], + [ + [ + [-75.342142507999881, 37.875660905000032], + [-75.352277924999981, 37.867622419], + [-75.365410935999904, 37.862877446000155], + [-75.378535209999939, 37.855772599], + [-75.39291340399987, 37.864699272000067], + [-75.400126542999914, 37.874113272000059], + [-75.388778431999867, 37.878387484000044], + [-75.369018297999872, 37.869472149], + [-75.358275612999904, 37.874211754000143], + [-75.349956729999946, 37.889319871000069], + [-75.36372687599993, 37.894950624000117], + [-75.374499694999912, 37.897757569000092], + [-75.367965439999892, 37.909090647000156], + [-75.350087042999888, 37.913031317000062], + [-75.339100714999915, 37.91620514500012], + [-75.330474412999905, 37.922430731000091], + [-75.325266079999921, 37.932684637000122], + [-75.318267381999931, 37.940375067000119], + [-75.304758266999869, 37.973618882000139], + [-75.297596808999913, 37.984930731000034], + [-75.278553839999944, 38.007635809000149], + [-75.254465298999918, 38.030910549000097], + [-75.250640428999901, 38.036891994000101], + [-75.229644334999961, 38.069891669000143], + [-75.199818488999938, 38.103827216000113], + [-75.194894985999895, 38.113959052000055], + [-75.190337693999936, 38.142726955000015], + [-75.179310675999915, 38.168198960000112], + [-75.153309699999909, 38.207017320000134], + [-75.114369269999941, 38.28021881700009], + [-75.098703579999949, 38.302639065], + [-75.092437303999901, 38.302639065], + [-75.102691209999932, 38.273138739000117], + [-75.138661261999914, 38.218817450000088], + [-75.171197075999942, 38.148288511000104], + [-75.189694718999959, 38.089779714000159], + [-75.228871222999942, 38.047512111000131], + [-75.234079555999926, 38.038600979000094], + [-75.313580985999863, 37.919094879000127], + [-75.326039191999939, 37.892279364000061], + [-75.342142507999881, 37.875660905000032] + ] + ], + [ + [ + [-74.359242316999882, 39.401556708000086], + [-74.393381313999981, 39.389146226000051], + [-74.425526495999947, 39.393744208], + [-74.448150193999908, 39.419867255000142], + [-74.430897589999915, 39.425360419000171], + [-74.421701626999919, 39.416937567000119], + [-74.413563605999911, 39.404771226000136], + [-74.399769660999908, 39.399359442], + [-74.386626756999931, 39.40648021000014], + [-74.371734178999901, 39.436590887000179], + [-74.3587947259999, 39.447170315000122], + [-74.36754309799997, 39.46503327], + [-74.351633266999841, 39.470200914000188], + [-74.302113410999908, 39.464748440000065], + [-74.304921027999853, 39.459784247000115], + [-74.313343878999916, 39.455145575000174], + [-74.317860480999855, 39.454006252000127], + [-74.330922003999945, 39.426092841000113], + [-74.359242316999882, 39.401556708000086] + ] + ], + [ + [ + [-74.231632420999887, 39.552991248000026], + [-74.256418423999975, 39.522202867000161], + [-74.255767381999931, 39.529730536000116], + [-74.254465298999918, 39.534613348000093], + [-74.254639712999875, 39.547361925000118], + [-74.24007209699991, 39.575387884000136], + [-74.159986580999941, 39.685463525], + [-74.132883266999869, 39.714667059000121], + [-74.118275519999941, 39.737982489000117], + [-74.109486456999889, 39.748928127000099], + [-74.098133917999917, 39.755682684000035], + [-74.10578365799995, 39.729152736000074], + [-74.129681643999902, 39.701289716000034], + [-74.147901462999926, 39.665895583000108], + [-74.184308354999899, 39.615554709000079], + [-74.231632420999887, 39.552991248000026] + ] + ], + [ + [ + [-73.389515753999916, 40.616766669000143], + [-73.574120034999851, 40.575093006000046], + [-73.56639295699992, 40.590320242000175], + [-73.443846537999917, 40.618936383000076], + [-73.400732991999888, 40.629640755000153], + [-73.377738167999922, 40.634617012000049], + [-73.357600610999953, 40.640327809000055], + [-73.339384144999968, 40.644592667000055], + [-73.318311166999877, 40.646661882000117], + [-73.269456782999924, 40.649295803000186], + [-73.248401601999973, 40.647720291000113], + [-73.25614437599998, 40.639051948000187], + [-73.3203241679999, 40.635055865000126], + [-73.389515753999916, 40.616766669000143] + ] + ], + [ + [ + [-74.074615135999863, 40.63403299500014], + [-74.071941277999969, 40.623331691000132], + [-74.061451202999933, 40.614608642000022], + [-74.053568731999945, 40.602703867000102], + [-74.102102654999925, 40.55457049200011], + [-74.133917983999964, 40.532668015000141], + [-74.139674179999901, 40.534644207000142], + [-74.148036611999913, 40.534629064000129], + [-74.163164211999856, 40.527446857000072], + [-74.179854991999918, 40.519861493000022], + [-74.192361444999904, 40.511488534000122], + [-74.209069023999945, 40.509462598000184], + [-74.228368888999853, 40.502257783000019], + [-74.242983653999943, 40.499434562000104], + [-74.250830956999948, 40.501396666000076], + [-74.252944180999918, 40.507354413000186], + [-74.248259573999917, 40.512937402], + [-74.239392175999853, 40.516939516000107], + [-74.238930238999927, 40.527258953000157], + [-74.241603460999869, 40.539165454000127], + [-74.232759232999854, 40.547928974000016], + [-74.218665239999893, 40.553132482000152], + [-74.207195510999895, 40.560311463000133], + [-74.201487383999847, 40.569856296000111], + [-74.197894548999869, 40.584956394000088], + [-74.194351857999919, 40.612766385], + [-74.191801699999957, 40.628264243000146], + [-74.18241904899989, 40.637422431000104], + [-74.170927338999945, 40.643410194000083], + [-74.153631248999886, 40.637489667000139], + [-74.126088019999941, 40.633490302], + [-74.110259568999908, 40.637762762000094], + [-74.097320115999906, 40.643500067000062], + [-74.083536306999946, 40.649517990000092], + [-74.076715703999952, 40.648744482000112], + [-74.073052142999956, 40.644372259000122], + [-74.071450231999933, 40.638030716000159], + [-74.074615135999863, 40.63403299500014] + ] + ], + [ + [ + [-73.147531704999892, 40.644313869000158], + [-73.24578304899984, 40.623806097000127], + [-73.29745864599991, 40.622622436000157], + [-73.30504608499993, 40.629921830000157], + [-73.255291545999938, 40.629668423000155], + [-73.218830254999887, 40.639634581000067], + [-73.176609963999852, 40.650997904000135], + [-73.104658647999969, 40.667220301000086], + [-73.040342970999887, 40.681995243000173], + [-73.013905402999939, 40.690456447000102], + [-72.948903813999948, 40.71538570100013], + [-72.914268560999915, 40.72452721700013], + [-72.881511091999926, 40.734399851000049], + [-72.832370115999879, 40.747744334000103], + [-72.779230118999891, 40.766843235000081], + [-72.757082747999902, 40.768802103000084], + [-72.757239253999899, 40.760085740000179], + [-72.804921027999882, 40.750840562000022], + [-72.83153235599994, 40.74164459800015], + [-72.913476531999947, 40.712901219000102], + [-72.991525844999899, 40.688177802000112], + [-73.041005011999857, 40.672634182000124], + [-73.147531704999892, 40.644313869000158] + ] + ], + [ + [ + [-74.002227342999902, 40.704046942000062], + [-74.016916469999899, 40.699286200000145], + [-74.011977144999975, 40.730038127000128], + [-74.003155496999881, 40.75587118900016], + [-73.98696855399993, 40.778713283000073], + [-73.939157680999898, 40.854234117000189], + [-73.932810024999867, 40.868841864000117], + [-73.928049282999979, 40.877508856000119], + [-73.917958136999914, 40.875067450000174], + [-73.916656053999901, 40.863348700000088], + [-73.929676886999886, 40.843817450000117], + [-73.938791469999899, 40.828192450000031], + [-73.940093553999901, 40.81386953300013], + [-73.933379686999842, 40.797186591000113], + [-73.946424705999874, 40.777234373000013], + [-73.972219057999922, 40.740679303000135], + [-73.972293428999933, 40.727202721000182], + [-73.975805636999922, 40.714012798000155], + [-74.002227342999902, 40.704046942000062] + ] + ], + [ + [ + [-72.278469953999888, 41.058459579000029], + [-72.282389982999888, 41.047881126000149], + [-72.275660300999846, 41.03927114700015], + [-72.27552668699991, 41.031833217000056], + [-72.28625314199985, 41.034203040000037], + [-72.297891043999897, 41.041522594000114], + [-72.317750215999922, 41.048753110000078], + [-72.340762692999931, 41.048506604000025], + [-72.358797710999909, 41.045830657000025], + [-72.371305754999923, 41.054991786000144], + [-72.372391265999852, 41.06861794300012], + [-72.361916808999894, 41.0798920350001], + [-72.34155907199991, 41.090651640000132], + [-72.340158782999964, 41.103683108000112], + [-72.327844947999921, 41.105055633000077], + [-72.322713373999903, 41.094572403000186], + [-72.305248736999943, 41.084218047000022], + [-72.295336769999949, 41.081841638000029], + [-72.280481500999883, 41.078894846000097], + [-72.282769755999936, 41.068953265000076], + [-72.278469953999888, 41.058459579000029] + ] + ], + [ + [ + [-72.079033592999934, 41.094844765000161], + [-72.085092645999879, 41.091725159000035], + [-72.084971027999927, 41.083542954], + [-72.081450656999891, 41.074878819000091], + [-72.086100767999881, 41.068189192], + [-72.0927894699999, 41.061478812000175], + [-72.100822928999946, 41.054246244000112], + [-72.101020651999875, 41.067545871000064], + [-72.102584503999964, 41.081343332000088], + [-72.108138394999855, 41.090505812000131], + [-72.122438565999914, 41.09293289600005], + [-72.136025491999931, 41.092807360000151], + [-72.141520829999962, 41.096849278], + [-72.134807581999979, 41.10202611300015], + [-72.128131927999902, 41.109246518000177], + [-72.131021871999906, 41.120472208000038], + [-72.109071842999896, 41.106860885000131], + [-72.091353886999855, 41.101899546000155], + [-72.078430715999872, 41.09996428400008], + [-72.079033592999934, 41.094844765000161] + ] + ], + [ + [ + [-72.246896938999924, 41.135443427000112], + [-72.260243292999945, 41.12502676000004], + [-72.276193813999953, 41.117051499000169], + [-72.289458787999877, 41.113348700000031], + [-72.304432745999918, 41.131944078000132], + [-72.343617316999939, 41.114203192000119], + [-72.412342902999939, 41.064886786000145], + [-72.415304877999887, 41.054447018000118], + [-72.399973110999895, 41.051336981000176], + [-72.392811652999882, 41.047186591000141], + [-72.38508053299995, 41.044460354000179], + [-72.390542936999907, 41.031470594], + [-72.412076657999933, 41.034132382000152], + [-72.431121424999901, 41.030403194000044], + [-72.437408006999931, 41.025702216000028], + [-72.438832160999908, 41.015977281000161], + [-72.435699022999927, 41.005886135000097], + [-72.433461066999939, 40.993231512000037], + [-72.437733527999882, 40.984198309000121], + [-72.4466853509999, 40.991400458000058], + [-72.454945441999882, 41.003729559000092], + [-72.466457344999895, 41.003826693000136], + [-72.472539347999884, 40.990394246000122], + [-72.494943813999924, 40.989813544000029], + [-72.499582485999952, 40.988959052000112], + [-72.510548404999923, 40.984899506000048], + [-72.520659959999875, 40.985174872000087], + [-72.53392195899994, 40.974852572000188], + [-72.543562169999888, 40.966622917000151], + [-72.543080206999889, 40.956569729000122], + [-72.562442498999928, 40.944198054000097], + [-72.580044077999844, 40.932878172000173], + [-72.599562218999893, 40.930714996000162], + [-72.615937256999956, 40.927718727000027], + [-72.624623175999915, 40.907822984000106], + [-72.613433397999898, 40.908880927000055], + [-72.60285396999987, 40.908392645000063], + [-72.593006964999944, 40.905829169000143], + [-72.58429928299995, 40.900417385000097], + [-72.563588019999941, 40.912380276000036], + [-72.54393469999988, 40.910101630000085], + [-72.523833787999934, 40.903021552000112], + [-72.501361214999861, 40.897389032000021], + [-72.480846811999896, 40.89793746], + [-72.457142706999974, 40.910264390000052], + [-72.449882699999961, 40.919798586000113], + [-72.443714972999885, 40.931748765000165], + [-72.441029425999915, 40.942979234000163], + [-72.42929964699988, 40.946945601000053], + [-72.408179945999933, 40.950647239], + [-72.386131264999932, 40.971808593000119], + [-72.367184446999914, 40.994600253000144], + [-72.342111782999893, 40.999823309000092], + [-72.326538788999954, 40.999224229], + [-72.321105165999967, 41.005910246000056], + [-72.332091667999947, 41.030699717000076], + [-72.321522589999859, 41.035834052000084], + [-72.30668324399997, 41.03552480900008], + [-72.30126195099993, 41.020346417], + [-72.298456258999863, 41.006000018000023], + [-72.270104262999951, 41.002427612000119], + [-72.26344585599989, 41.015454601000087], + [-72.248633136999871, 41.017633218000029], + [-72.242543728999891, 41.029075175000131], + [-72.240210863999977, 41.037788731000077], + [-72.233709181999899, 41.044065751000019], + [-72.213785742999875, 41.039804036000092], + [-72.186752243999905, 41.0091633440001], + [-72.18355467899994, 41.02782147300006], + [-72.180043097999913, 41.047064520000063], + [-72.166865938999962, 41.056647412000089], + [-72.155384894999912, 41.054999091000056], + [-72.122873501999919, 41.017401434000035], + [-72.118153449999937, 41.006862697000159], + [-72.108998175999943, 41.001410223000121], + [-72.088042772999898, 41.004828192000147], + [-72.049875454999921, 41.017686265000165], + [-72.011708136999857, 41.042100328000018], + [-71.992746548999946, 41.049627997000172], + [-71.975707177999908, 41.043397001000116], + [-71.958752629999964, 41.046282747000063], + [-71.958067816999886, 41.06971829000004], + [-71.945304415999971, 41.073475417000125], + [-71.933427361999918, 41.064925487000053], + [-71.918934699999937, 41.058661200000088], + [-71.918934699999937, 41.064886786000145], + [-71.930904400999907, 41.078790580000188], + [-71.903300180999878, 41.084672137], + [-71.875111456999974, 41.075710354000037], + [-71.857411261999886, 41.071722723000065], + [-71.864898240999935, 41.062079169000086], + [-71.884969602999917, 41.045397036000125], + [-71.929511641999852, 41.037847875000168], + [-72.008872330999878, 41.0073856610001], + [-72.087147589999915, 40.983425197000102], + [-72.159820115999878, 40.95526764500012], + [-72.219862084999932, 40.933422721000014], + [-72.316991699999875, 40.896260082000126], + [-72.37173417899993, 40.875840562000107], + [-72.40665794899985, 40.862072135000162], + [-72.441273566999939, 40.855007229000122], + [-72.460764126999948, 40.852606512000179], + [-72.448353644999912, 40.86823151200015], + [-72.447417772999927, 40.879095770000148], + [-72.459136522999927, 40.885362046000083], + [-72.484689907999893, 40.887396552000112], + [-72.496571417999945, 40.88410065300009], + [-72.50059973899991, 40.87604401200015], + [-72.498361782999922, 40.865790106000034], + [-72.491525844999927, 40.856024481000176], + [-72.490793423999889, 40.846869208], + [-72.502308722999913, 40.839056708000115], + [-72.541818813999981, 40.82050202], + [-72.605279860999929, 40.801330324000119], + [-72.704442139999941, 40.776177001000107], + [-72.723954719999881, 40.770419324000116], + [-72.732004360999952, 40.769964911], + [-72.737904425999915, 40.773789781000019], + [-72.731694441999906, 40.77764891000011], + [-72.72538681799989, 40.778378957000129], + [-72.678458505999885, 40.790999752000133], + [-72.650516448999952, 40.79745521800011], + [-72.663580017999919, 40.800773149000022], + [-72.67932500099991, 40.800939970000158], + [-72.700344896999951, 40.799570565000082], + [-72.726960578999893, 40.807789457000055], + [-72.743946776999906, 40.796839494000082], + [-72.765170690999952, 40.783147914], + [-72.801898582999939, 40.782710473000137], + [-72.828008902999898, 40.78970843600014], + [-72.813628709999875, 40.781602281000019], + [-72.81794186099998, 40.768418687000164], + [-72.832753058999856, 40.759629624000084], + [-72.852792144999938, 40.749423148000076], + [-72.879074698999943, 40.745685802000125], + [-72.889257383999848, 40.765638468000148], + [-72.91036189899998, 40.758273537000079], + [-72.926258917999917, 40.756415106000034], + [-72.94681688299994, 40.741891623000171], + [-73.012196417999917, 40.749579169000029], + [-73.022572394999912, 40.747585354000179], + [-73.033421404999899, 40.731434457000105], + [-73.054954202999937, 40.729211969000161], + [-73.083323361999931, 40.724651524000123], + [-73.099099901999921, 40.72039401100001], + [-73.114731929999948, 40.728049412000146], + [-73.129383547999879, 40.730135124000142], + [-73.140435726999954, 40.726237526000077], + [-73.142404751999891, 40.716131903000147], + [-73.145393247999891, 40.705219127000149], + [-73.158029800999884, 40.699741432000067], + [-73.179514126999891, 40.704697984000106], + [-73.211931149999884, 40.705641452000108], + [-73.233323368999919, 40.714504671000086], + [-73.24702646199998, 40.707036144000128], + [-73.2618169, 40.695598322000095], + [-73.275003328999929, 40.686929889000069], + [-73.317488744999963, 40.683573226000178], + [-73.37221703599991, 40.662365485000024], + [-73.402157394999875, 40.657719149000073], + [-73.504545765999893, 40.643829900000085], + [-73.561120824999875, 40.638048905000133], + [-73.627173416999966, 40.614397052000115], + [-73.643433137999892, 40.604904261000073], + [-73.65286479, 40.601351179000076], + [-73.664367163999941, 40.603760995000172], + [-73.655975527999885, 40.608905716000052], + [-73.655417366999899, 40.618040455000127], + [-73.667950370999847, 40.626014131000133], + [-73.695790167999917, 40.621527411000059], + [-73.710925150999856, 40.610211603000025], + [-73.71044687299991, 40.59511485000003], + [-73.606336608999868, 40.594086480000115], + [-73.575480501999891, 40.593206284000033], + [-73.581800787999953, 40.58448644500011], + [-73.707343238999869, 40.582794339000159], + [-73.752349146999904, 40.585650805000071], + [-73.768050210999974, 40.58964326600001], + [-73.812589607999939, 40.583735717000181], + [-73.897117599999945, 40.554678083000127], + [-73.939470184999919, 40.541958871000148], + [-73.939478888999929, 40.555477037000074], + [-73.850548545999914, 40.580884281000138], + [-73.789791963999875, 40.600291753000093], + [-73.776156962999977, 40.610607521000176], + [-73.768805901999883, 40.618545669000085], + [-73.771419689999874, 40.623318697000045], + [-73.780848758999866, 40.62889794200008], + [-73.798128849999927, 40.638059347000123], + [-73.815411419999919, 40.64562735000014], + [-73.829559114999881, 40.648818970000079], + [-73.851563736999879, 40.643670073000109], + [-73.868848696999891, 40.640104301000022], + [-73.87722978899987, 40.636135967000044], + [-73.882989330999919, 40.631767981000124], + [-73.891346808999884, 40.623602606000176], + [-73.892935723999898, 40.614289357000175], + [-73.883515680999949, 40.600379116000127], + [-73.877761104999962, 40.582095511], + [-73.891888319999907, 40.576935281000075], + [-73.897644047999904, 40.583296509000078], + [-73.911770011999948, 40.583697425000096], + [-73.926417976999915, 40.583698501000114], + [-73.932169250999976, 40.577737156000168], + [-73.941582930999942, 40.574557584000061], + [-73.988125445999913, 40.569370426000049], + [-74.003816963999896, 40.570550837000113], + [-74.011673825999907, 40.579288274000149], + [-74.000694911999858, 40.583271640000063], + [-73.998086972999914, 40.589632339], + [-74.00489548799996, 40.597182034000113], + [-74.030021284999918, 40.60549772800006], + [-74.039989745999947, 40.619785734000104], + [-74.035834780999892, 40.63885938600005], + [-74.023810964999882, 40.649200055000065], + [-74.012839686999911, 40.664700094000111], + [-74.015479257999914, 40.677803734000108], + [-74.001879397999886, 40.690127016000119], + [-73.997696619999942, 40.696087389000169], + [-73.990589972999913, 40.699774481000063], + [-73.980336066999968, 40.704616604000122], + [-73.969335484999903, 40.708749400000116], + [-73.959371441999878, 40.724663351000046], + [-73.956796235999946, 40.743171457000088], + [-73.930233316999932, 40.773121062000129], + [-73.908599852999913, 40.788677409000016], + [-73.88709434699993, 40.779934320000123], + [-73.870302940999892, 40.782312821000104], + [-73.8608600499999, 40.776351255000137], + [-73.823053986999895, 40.797382220000131], + [-73.778989037999906, 40.792176561000176], + [-73.757522417999922, 40.771111135000083], + [-73.750136660999914, 40.791345974000095], + [-73.764259992999882, 40.810031622000011], + [-73.755523240999906, 40.832790432000152], + [-73.739816860999923, 40.834336656000104], + [-73.729359503999945, 40.824082749000169], + [-73.721791144999912, 40.811224677000055], + [-73.71458899599989, 40.804795640000137], + [-73.702992316999939, 40.810166734000106], + [-73.696888800999972, 40.821885484000077], + [-73.700428839999859, 40.833604234000077], + [-73.733062303999901, 40.843695380000142], + [-73.731271938999924, 40.854437567000147], + [-73.720204230999883, 40.86623769700013], + [-73.705306454999942, 40.866744483000119], + [-73.674351139999914, 40.856755178000142], + [-73.665514773999945, 40.838452057], + [-73.653309699999852, 40.823919989000117], + [-73.646117115999914, 40.830866767000074], + [-73.653360533999887, 40.867785537000103], + [-73.63265498699991, 40.899585676000029], + [-73.56527346799993, 40.914514375000138], + [-73.520463477999868, 40.917601860000062], + [-73.512684699999909, 40.90509674700003], + [-73.515288865999906, 40.900417385000097], + [-73.52860364199995, 40.891722363000028], + [-73.540669920999932, 40.895338276000146], + [-73.549097950999879, 40.890985467000164], + [-73.534981193999897, 40.878627729000144], + [-73.51134759699994, 40.877349385000159], + [-73.509721879999887, 40.88569418900012], + [-73.507571480999871, 40.893637954000056], + [-73.493394042999938, 40.891991487000084], + [-73.492936759999935, 40.881643621000094], + [-73.47982825399987, 40.877244456000184], + [-73.472443886999969, 40.882367618000146], + [-73.475534850999907, 40.890738775000088], + [-73.468129035999908, 40.893622137000179], + [-73.469146287999877, 40.901312567], + [-73.485340949999937, 40.917914130000057], + [-73.494095341999866, 40.927052509000148], + [-73.485687170999881, 40.945625696000022], + [-73.46208391599987, 40.936382307000102], + [-73.431304490999935, 40.933294989], + [-73.440825975999928, 40.914658921000026], + [-73.432199673999918, 40.907660223000121], + [-73.420318162999877, 40.900417385000097], + [-73.405021252999859, 40.903954901000148], + [-73.388661261999914, 40.905951239000117], + [-73.370920376999919, 40.900091864000089], + [-73.358265753999945, 40.900417385000097], + [-73.354725714999859, 40.914129950000031], + [-73.360636864999918, 40.925092679], + [-73.378960844999938, 40.924464349000161], + [-73.399568848999934, 40.925418193000112], + [-73.410023566999939, 40.939886786000088], + [-73.407761527999924, 40.947162289000133], + [-73.401930500999924, 40.954404294000184], + [-73.395174359999942, 40.954367892], + [-73.379781533999903, 40.94701298400004], + [-73.374064543999907, 40.936073438000122], + [-73.350960147999871, 40.930856422000133], + [-73.325900791999914, 40.929256722], + [-73.293184226999898, 40.92470378700007], + [-73.263428446999939, 40.913623240000121], + [-73.243723110999952, 40.910264390000052], + [-73.23534094999988, 40.907822984000106], + [-73.224598761999886, 40.908270575000088], + [-73.17870032499988, 40.919012762000094], + [-73.159494594999842, 40.930243231000119], + [-73.148101365999878, 40.945624091000141], + [-73.152821417999888, 40.962469794000143], + [-73.13536536399991, 40.968451239000061], + [-73.113148566999968, 40.973456122000115], + [-73.098744269999884, 40.969509182000124], + [-73.104400193999879, 40.948797919000114], + [-73.091297980999911, 40.948350328000018], + [-73.082142706999946, 40.951605536000059], + [-73.079172329999921, 40.958563544000143], + [-73.084584113999966, 40.969305731000148], + [-73.076222684999948, 40.971944765000117], + [-73.048441013999877, 40.963015009000131], + [-73.008968787999947, 40.967066290000147], + [-72.900376287999848, 40.963255021000109], + [-72.830089225999899, 40.969175333000024], + [-72.781120910999846, 40.965079675000183], + [-72.696092176999883, 40.981017533000013], + [-72.628325975999957, 40.983587958000058], + [-72.606109178999901, 40.989935614], + [-72.541347084999927, 41.023818126000023], + [-72.471651720999887, 41.055953110000118], + [-72.453861659999916, 41.074423881000101], + [-72.445176584999842, 41.085848868000127], + [-72.412923105999909, 41.089811820000094], + [-72.38304602799991, 41.108913479000151], + [-72.35871334499987, 41.131130276000121], + [-72.343413865999906, 41.140651760000125], + [-72.289458787999877, 41.161159572000159], + [-72.275542772999898, 41.162624416000128], + [-72.25999915299991, 41.160834052000141], + [-72.247222459999961, 41.155707098000121], + [-72.24168860599994, 41.146795966000084], + [-72.246896938999924, 41.135443427000112] + ] + ], + [ + [ + [-71.571571694999903, 41.149769275000082], + [-71.599550269999924, 41.145778973000134], + [-71.613747606999908, 41.15518087400001], + [-71.612717179999919, 41.167466984000058], + [-71.608024977999889, 41.180589387000012], + [-71.597486495999959, 41.187669262000142], + [-71.591216600999871, 41.197333075000088], + [-71.582671678999958, 41.204046942000147], + [-71.58043372299997, 41.214789130000057], + [-71.57919993, 41.225571522000038], + [-71.572580532999979, 41.228827216000113], + [-71.567046678999958, 41.22483958500014], + [-71.553541122999917, 41.214571842000012], + [-71.55947373399988, 41.201024044000135], + [-71.56615149599989, 41.193752346000124], + [-71.559925910999908, 41.183742580000128], + [-71.551869269999969, 41.17572663], + [-71.544473261999883, 41.162887597000136], + [-71.549094582999885, 41.1520420720001], + [-71.571571694999903, 41.149769275000082] + ] + ], + [ + [ + [-70.801756294999933, 41.24807623400001], + [-70.810902549999867, 41.24804580500016], + [-70.8231082369999, 41.250759965000029], + [-70.832282438999954, 41.256691798000091], + [-70.830471037999899, 41.260365562000132], + [-70.821934590999973, 41.260392670000059], + [-70.814020616999926, 41.263167429000148], + [-70.809126441999894, 41.259514254000052], + [-70.801797508999954, 41.256784545000059], + [-70.801756294999933, 41.24807623400001] + ] + ], + [ + [ + [-71.970152916999979, 41.273622163000184], + [-71.988328753999895, 41.260085361000122], + [-71.998733526999871, 41.251666100000122], + [-72.022806512999949, 41.253486779000028], + [-72.038797679999846, 41.249446826000067], + [-72.036563179999888, 41.260865196000097], + [-72.026228000999907, 41.266903798000115], + [-72.022129892999914, 41.276858134000136], + [-72.011349225999936, 41.276207975], + [-72.003362312999883, 41.267012781000076], + [-71.998077193999933, 41.274082014000115], + [-71.994003807999974, 41.283080978000143], + [-71.976809354999972, 41.284705958000032], + [-71.953888265999922, 41.286710664000069], + [-71.939756728999953, 41.292197055000159], + [-71.920732329999908, 41.291396489000093], + [-71.928000764999894, 41.28197883000017], + [-71.94657542899995, 41.276567892000017], + [-71.970152916999979, 41.273622163000184] + ] + ], + [ + [ + [-70.019202133999926, 41.370116838000072], + [-70.0052791009999, 41.342718817000147], + [-69.974964972999913, 41.302191473000121], + [-69.957759819999922, 41.275747900000013], + [-69.967149245999906, 41.24945285400004], + [-70.00112988399988, 41.239256614000098], + [-70.043038490999947, 41.243333906000103], + [-70.097596060999905, 41.241829638000084], + [-70.137745228999904, 41.247152366000037], + [-70.233143683999856, 41.283758856000091], + [-70.256348598999864, 41.292767142000073], + [-70.278112397999934, 41.307906609000142], + [-70.272358116999982, 41.311347581000078], + [-70.256287786999906, 41.309160085000102], + [-70.240816118999902, 41.300931916000096], + [-70.217287877999894, 41.29742713200001], + [-70.16105114699991, 41.292966801], + [-70.124288156999881, 41.295870942000036], + [-70.106800910999908, 41.295233466000141], + [-70.097767706999889, 41.290432033000158], + [-70.089711066999939, 41.289984442000062], + [-70.081939256999959, 41.292547919000143], + [-70.071400519999884, 41.301581122000172], + [-70.046009894999969, 41.30756256700009], + [-70.031402147999955, 41.317531643000095], + [-70.020090298999975, 41.330796617000104], + [-70.01402747299997, 41.344631252000013], + [-70.032338019999941, 41.339504299000097], + [-70.060292120999861, 41.31663646], + [-70.076079881999902, 41.311102606000148], + [-70.044300910999965, 41.35097890800013], + [-70.037220831999917, 41.372870184000178], + [-70.054149404999919, 41.392686019000067], + [-70.052396188999893, 41.396562483000181], + [-70.039745775999933, 41.394359283000043], + [-70.028870052999963, 41.386119721000071], + [-70.019202133999926, 41.370116838000072] + ] + ], + [ + [ + [-70.446685350999928, 41.36741771000014], + [-70.452870245999918, 41.358872789000102], + [-70.465484178999901, 41.360256252000099], + [-70.481271938999924, 41.369574286000145], + [-70.494781053999901, 41.382310289000188], + [-70.500599738999966, 41.39362213700015], + [-70.486927863999938, 41.402655341000084], + [-70.470692511999886, 41.420314846000096], + [-70.455718553999958, 41.429632880000142], + [-70.446034308999884, 41.413519598000065], + [-70.444935675999943, 41.382025458000058], + [-70.446685350999928, 41.36741771000014] + ] + ], + [ + [ + [-70.927916692999901, 41.418619697000068], + [-70.938665493999935, 41.411220055000129], + [-70.948503408999898, 41.41412356000005], + [-70.94067753399986, 41.420774915000052], + [-70.926029890999928, 41.428916850000135], + [-70.911335139999892, 41.429705943000144], + [-70.897646195999869, 41.436371808000118], + [-70.8711762289999, 41.438669510000167], + [-70.859464515999974, 41.448265053000156], + [-70.856493551999904, 41.443127761000184], + [-70.848598487999908, 41.434332142000116], + [-70.85445358399997, 41.429167623000083], + [-70.875983758999951, 41.42248052900014], + [-70.892653934999913, 41.422422083000086], + [-70.906385821999919, 41.422371097000152], + [-70.927916692999901, 41.418619697000068] + ] + ], + [ + [ + [-70.593006964999887, 41.47166575700011], + [-70.603667772999927, 41.448228257000139], + [-70.588775193999965, 41.45416901200015], + [-70.5794978509999, 41.465887762000065], + [-70.570423956999917, 41.473944403000175], + [-70.555897589999887, 41.46873607], + [-70.545765753999916, 41.453924872000115], + [-70.546254035999908, 41.444281317000147], + [-70.556548631999931, 41.436509507000054], + [-70.57640540299991, 41.427801825000145], + [-70.563343878999945, 41.418687242000075], + [-70.549305792999888, 41.414536851000136], + [-70.517404751999976, 41.413519598000065], + [-70.507435675999886, 41.362616278000147], + [-70.525013800999915, 41.359076239000061], + [-70.666005011999886, 41.357001044000143], + [-70.69627844999988, 41.351507880000113], + [-70.72394771999987, 41.342718817000147], + [-70.747670050999886, 41.331000067000062], + [-70.775908982999852, 41.304388739000117], + [-70.786407029999936, 41.304144598000093], + [-70.804676886999886, 41.312567450000031], + [-70.814971482999908, 41.320705471000153], + [-70.834055141999897, 41.339911200000088], + [-70.84622148299988, 41.346665757000139], + [-70.84622148299988, 41.354071356000034], + [-70.781971808999856, 41.35423411699999], + [-70.75450598899991, 41.372503973000065], + [-70.742176886999857, 41.384833075000117], + [-70.715321417999888, 41.420355536000088], + [-70.702626105999911, 41.427801825000145], + [-70.689605272999927, 41.433091539000046], + [-70.65990149599989, 41.456529039000102], + [-70.605132615999878, 41.474025783000158], + [-70.593006964999887, 41.47166575700011] + ] + ], + [ + [ + [-70.76830594199987, 41.459546233000182], + [-70.790816343999978, 41.449198852000151], + [-70.808457403999881, 41.446946159], + [-70.832950695999898, 41.442465380000087], + [-70.839860588999926, 41.450530765000124], + [-70.828125195999888, 41.457181823000113], + [-70.813402837999973, 41.455017817000126], + [-70.802652704999929, 41.463133107000132], + [-70.782123842999908, 41.478623419000158], + [-70.742966652999939, 41.500765861], + [-70.724354383999867, 41.511099655000166], + [-70.710638157999909, 41.519213976000074], + [-70.694925507999955, 41.517037162000079], + [-70.679194013999847, 41.510449556000097], + [-70.699784321999886, 41.502326750000108], + [-70.718398387999912, 41.491998179000021], + [-70.742893235999901, 41.481654371000118], + [-70.75856515699985, 41.475740581000096], + [-70.757554008999961, 41.468392619], + [-70.76830594199987, 41.459546233000182] + ] + ], + [ + [ + [-71.392648891999926, 41.463283596000153], + [-71.398793097999913, 41.461900132000082], + [-71.40099036399991, 41.468451239000061], + [-71.39517167899993, 41.490912177000055], + [-71.398793097999913, 41.50287506700009], + [-71.392201300999915, 41.505926825000174], + [-71.389475063999953, 41.509222723000121], + [-71.387806769999941, 41.512884833000086], + [-71.384429490999935, 41.517157294000086], + [-71.395334438999896, 41.526434637000037], + [-71.392689581999917, 41.542669989000089], + [-71.377674933999884, 41.577948309000121], + [-71.368397589999944, 41.576239325000117], + [-71.362416144999912, 41.572455145000092], + [-71.35912024599989, 41.56639232], + [-71.357818162999877, 41.558172919000086], + [-71.357289191999911, 41.536566473000093], + [-71.360422329999977, 41.514553127000099], + [-71.365630662999877, 41.495347398000135], + [-71.371449347999942, 41.482367255000142], + [-71.376088019999941, 41.476996161000088], + [-71.384144660999908, 41.469468492000104], + [-71.392648891999926, 41.463283596000153] + ] + ], + [ + [ + [-70.002105272999927, 41.553778387000094], + [-70.021473761999943, 41.550726630000113], + [-69.981027798999918, 41.627671617000104], + [-69.97301184799997, 41.653713283000073], + [-69.96507727799991, 41.65135325700011], + [-69.96129309799997, 41.646958726000051], + [-69.95995032499988, 41.640692450000088], + [-69.959380662999905, 41.632635809000149], + [-69.976226365999906, 41.612290757000082], + [-70.002105272999927, 41.553778387000094] + ] + ], + [ + [ + [-71.238026495999918, 41.500311591000084], + [-71.233631964999915, 41.489203192000147], + [-71.264800584999904, 41.496079820000077], + [-71.285959438999924, 41.482001044000029], + [-71.303212042999917, 41.466376044000029], + [-71.323068813999924, 41.46873607], + [-71.33495032499988, 41.459051825000031], + [-71.346180792999888, 41.454738674000126], + [-71.354562954999949, 41.45831940300009], + [-71.357818162999877, 41.472479559000121], + [-71.35130774599989, 41.477850653000175], + [-71.319976365999935, 41.48847077000012], + [-71.30882727799991, 41.495428778000118], + [-71.321359829999921, 41.50853099199999], + [-71.325550910999937, 41.519964911000116], + [-71.322255011999914, 41.530422268], + [-71.312489386999886, 41.540757554000109], + [-71.309152798999946, 41.546087958], + [-71.30817623599998, 41.553168036000145], + [-71.30882727799991, 41.567775783000073], + [-71.305775519999941, 41.57172272300015], + [-71.291086391999926, 41.578273830000128], + [-71.285511847999913, 41.581732489000146], + [-71.279449022999927, 41.593085028000118], + [-71.27358964799987, 41.62099844000015], + [-71.26781165299991, 41.632635809000149], + [-71.257801886999943, 41.640692450000088], + [-71.232736782999922, 41.652777411], + [-71.220611131999931, 41.660549221000011], + [-71.220611131999931, 41.64004140800013], + [-71.23257402299987, 41.605902411000145], + [-71.233631964999915, 41.530829169000029], + [-71.235096808999884, 41.518988348000065], + [-71.237538214999915, 41.509507554000052], + [-71.238026495999918, 41.500311591000084] + ] + ], + [ + [ + [-71.315093553999873, 41.580796617000047], + [-71.330718553999958, 41.575588283000158], + [-71.33722896999987, 41.582098700000145], + [-71.33722896999987, 41.592515367000047], + [-71.330718553999958, 41.610744533000044], + [-71.335926886999857, 41.626369533000016], + [-71.356760219999927, 41.631577867000104], + [-71.359364386999914, 41.641994533000101], + [-71.355458136999943, 41.660223700000174], + [-71.343739386999943, 41.670640367000075], + [-71.335926886999857, 41.657619533000073], + [-71.330718553999958, 41.64720286699999], + [-71.31769771999987, 41.632879950000088], + [-71.303374803999901, 41.626369533000016], + [-71.304676886999886, 41.604234117000132], + [-71.315093553999873, 41.580796617000047] + ] + ], + [ + [ + [-69.652333136999886, 43.790432033000101], + [-69.664051886999857, 43.789129950000088], + [-69.684885219999842, 43.81126536699999], + [-69.688791469999842, 43.828192450000145], + [-69.67316646999987, 43.85293203300013], + [-69.647124803999873, 43.83730703300013], + [-69.648426886999886, 43.819077867000075], + [-69.652333136999886, 43.790432033000101] + ] + ], + [ + [ + [-69.714820772999957, 43.859451721000184], + [-69.714833136999914, 43.859442450000031], + [-69.721343553999901, 43.872463283000016], + [-69.730458136999886, 43.890692450000088], + [-69.722645636999914, 43.907619533000073], + [-69.700510219999927, 43.927150783000158], + [-69.69399980399993, 43.945379950000031], + [-69.678374803999958, 43.967515367000104], + [-69.66926021999987, 43.955796617000132], + [-69.66926021999987, 43.94277578300013], + [-69.680978969999842, 43.933661200000145], + [-69.69009355399993, 43.90501536699999], + [-69.690124219999888, 43.904863117], + [-69.6901618979999, 43.904677304000089], + [-69.690213886999942, 43.904422367000123], + [-69.690279751999896, 43.904101304000122], + [-69.69035905399997, 43.903717117000141], + [-69.690451355999869, 43.903272804000053], + [-69.690556219999934, 43.902771367000028], + [-69.690673209999943, 43.902215804], + [-69.690801886999935, 43.901609117000149], + [-69.690941813999956, 43.900954304000052], + [-69.691092553999908, 43.900254367000159], + [-69.691253667999916, 43.899512304000112], + [-69.691424719999929, 43.898731117000139], + [-69.691605272999965, 43.897913804000112], + [-69.691794886999929, 43.897063367], + [-69.691993126999904, 43.896182804000048], + [-69.692199553999927, 43.895275117], + [-69.692413730999874, 43.894343304000088], + [-69.692635219999914, 43.893390367000123], + [-69.692863584999884, 43.892419304000057], + [-69.693098386999878, 43.891433117000091], + [-69.693339188999886, 43.890434804000094], + [-69.693585553999952, 43.889427367000124], + [-69.693837042999888, 43.888413804000109], + [-69.694093219999843, 43.887397117000106], + [-69.69435364799989, 43.88638030400007], + [-69.694617886999907, 43.885366367000032], + [-69.694885501999948, 43.884358304000116], + [-69.695156053999938, 43.883359117000126], + [-69.695429105999978, 43.882371804000158], + [-69.695704219999925, 43.881399367000157], + [-69.695980959999901, 43.880444804000049], + [-69.696258886999885, 43.879511117000064], + [-69.696537563999954, 43.8786013040001], + [-69.696816553999923, 43.877718367000156], + [-69.697095417999918, 43.876865304], + [-69.697373719999945, 43.876045117000089], + [-69.697651022999963, 43.875260804000121], + [-69.697926886999966, 43.874515367000171], + [-69.698200876999891, 43.873811804000027], + [-69.698472553999892, 43.873153117000172], + [-69.698741480999871, 43.872542304000078], + [-69.699007219999913, 43.87198236700003], + [-69.69926933499994, 43.871476304000069], + [-69.699527386999961, 43.871027117000111], + [-69.699780938999879, 43.87063780400014], + [-69.700029553999855, 43.870311367000127], + [-69.700272792999897, 43.870050804000172], + [-69.700510219999927, 43.869859117000104], + [-69.701009136999915, 43.869522450000048], + [-69.701280001999947, 43.869336929000056], + [-69.701564053999903, 43.869140783], + [-69.701860480999926, 43.868934637000095], + [-69.702168469999918, 43.868719117000026], + [-69.702487209999902, 43.868494846000104], + [-69.702815886999929, 43.868262450000159], + [-69.70315368899989, 43.86802255400012], + [-69.703499803999932, 43.867775783000027], + [-69.703853417999966, 43.867522762000149], + [-69.704213719999927, 43.867264117000062], + [-69.704579897999849, 43.867000471000111], + [-69.704951136999938, 43.866732450000043], + [-69.70532662699992, 43.866460679000042], + [-69.705705553999906, 43.866185783000034], + [-69.706087105999956, 43.865908387000061], + [-69.706470469999971, 43.865629117000154], + [-69.706854834999973, 43.865348596000118], + [-69.707239386999902, 43.865067450000041], + [-69.70762331399996, 43.864786304000134], + [-69.708005803999896, 43.864505783000098], + [-69.708386042999905, 43.864226512000087], + [-69.708763219999952, 43.863949117000132], + [-69.709136522999927, 43.863674221000124], + [-69.709505136999951, 43.863402450000038], + [-69.709868251999893, 43.863134429000141], + [-69.71022505399992, 43.862870783000105], + [-69.710574730999923, 43.862612137], + [-69.710916469999944, 43.862359117000139], + [-69.711249459999863, 43.862112346000131], + [-69.711572886999903, 43.861872450000092], + [-69.71188593899987, 43.861640054000063], + [-69.712187803999882, 43.861415783000055], + [-69.712477667999877, 43.861200262000082], + [-69.712754719999907, 43.860994117000175], + [-69.713018147999918, 43.86079797100011], + [-69.713267136999917, 43.860612450000119], + [-69.713500876999916, 43.860438179000184], + [-69.713718553999882, 43.860275783000148], + [-69.713919355999877, 43.860125887], + [-69.714102469999943, 43.859989117000154], + [-69.714267084999875, 43.85986609600009], + [-69.714412386999925, 43.859757450000146], + [-69.714537563999869, 43.85966380400005], + [-69.714641803999882, 43.859585783000071], + [-69.714724292999875, 43.859524012000023], + [-69.714784219999871, 43.859479117000049], + [-69.714820772999957, 43.859451721000184] + ] + ], + [ + [ + [-68.634103969999927, 44.018296617000075], + [-68.656239386999886, 44.010484117000075], + [-68.662749803999901, 44.019598700000145], + [-68.660145636999886, 44.03261953300013], + [-68.653635219999899, 44.052150783000044], + [-68.651031053999901, 44.065171617000104], + [-68.640614386999914, 44.078192450000088], + [-68.626291469999927, 44.091213283000073], + [-68.606760219999842, 44.08860911699999], + [-68.601551886999857, 44.070379950000117], + [-68.59894771999987, 44.046942450000031], + [-68.60806230399993, 44.023504950000145], + [-68.634103969999927, 44.018296617000075] + ] + ], + [ + [ + [-68.807118292999888, 44.037543036], + [-68.815459764999844, 44.031927802000027], + [-68.83458411399991, 44.035101630000085], + [-68.869252081999889, 44.048366604000094], + [-68.860096808999913, 44.065212307000095], + [-68.868031378999973, 44.079372463000126], + [-68.886748826999849, 44.089870510000097], + [-68.910186326999934, 44.095526434000092], + [-68.901560024999924, 44.114040432000095], + [-68.884144660999937, 44.113836981000148], + [-68.848133917999888, 44.095526434000092], + [-68.827381964999887, 44.089789130000113], + [-68.782744920999932, 44.084662177], + [-68.772979295999875, 44.081895249000141], + [-68.774647589999887, 44.061875718000081], + [-68.786732550999886, 44.052354234000077], + [-68.800567186999899, 44.046576239000117], + [-68.807118292999888, 44.037543036] + ] + ], + [ + [ + [-68.841135219999899, 44.13808828300013], + [-68.851551886999886, 44.125067450000145], + [-68.863270636999886, 44.119859117000047], + [-68.88801021999987, 44.13027578300013], + [-68.90103105399993, 44.13418203300013], + [-68.919260219999927, 44.125067450000145], + [-68.937489386999914, 44.105536200000174], + [-68.942697719999899, 44.117254950000145], + [-68.940093553999901, 44.125067450000145], + [-68.92837480399993, 44.14199453300013], + [-68.889312303999958, 44.164129950000117], + [-68.856760219999899, 44.181057033000101], + [-68.820301886999914, 44.178452867000019], + [-68.81118730399993, 44.169338283000016], + [-68.81118730399993, 44.148504950000031], + [-68.824208136999914, 44.144598700000031], + [-68.841135219999899, 44.13808828300013] + ] + ], + [ + [ + [-68.443999803999901, 44.181057033000101], + [-68.438791469999927, 44.174546617000104], + [-68.427072719999927, 44.175848700000088], + [-68.41665605399993, 44.18235911699999], + [-68.402333136999857, 44.175848700000088], + [-68.390614386999886, 44.162827867000104], + [-68.39191646999987, 44.14590078300013], + [-68.40363521999987, 44.13418203300013], + [-68.43228105399993, 44.128973700000145], + [-68.442697719999927, 44.144598700000031], + [-68.454416469999899, 44.151109117000132], + [-68.463531053999901, 44.149807033000044], + [-68.48957271999987, 44.140692450000031], + [-68.502593553999958, 44.148504950000031], + [-68.506499803999958, 44.160223700000117], + [-68.492176886999857, 44.169338283000016], + [-68.475249803999873, 44.166734117000104], + [-68.472645636999886, 44.177150783000101], + [-68.459624803999901, 44.184963283000101], + [-68.443999803999901, 44.181057033000101] + ] + ], + [ + [ + [-68.6142878899999, 44.223985093000138], + [-68.608509894999941, 44.212836005000142], + [-68.620106574999852, 44.208441473000065], + [-68.644317186999871, 44.203192450000174], + [-68.656361456999974, 44.19916413], + [-68.65062415299991, 44.190293687000135], + [-68.643055792999945, 44.18463776200015], + [-68.622792120999947, 44.177516994000101], + [-68.622792120999947, 44.17133209800015], + [-68.662058071999951, 44.156195380000057], + [-68.681996222999942, 44.152614651000178], + [-68.716338670999903, 44.167344468000167], + [-68.720204230999883, 44.17214590100015], + [-68.714629686999899, 44.181219794000143], + [-68.710886196999951, 44.190456447000102], + [-68.713327602999897, 44.200995184000178], + [-68.724598761999886, 44.219061591000084], + [-68.71625729099992, 44.218451239000146], + [-68.698923305999926, 44.219671942000062], + [-68.690459764999872, 44.219061591000084], + [-68.695057745999918, 44.22862376500008], + [-68.696766730999911, 44.239528713000155], + [-68.695301886999857, 44.250433661000145], + [-68.690459764999872, 44.260036526000121], + [-68.678944464999944, 44.26963939000008], + [-68.667469855999911, 44.270127671000083], + [-68.642079230999883, 44.260036526000121], + [-68.623076951999877, 44.249863999000169], + [-68.616485154999907, 44.237087307000039], + [-68.6142878899999, 44.223985093000138] + ] + ], + [ + [ + [-68.885406053999958, 44.29954661699999], + [-68.90103105399993, 44.28001536699999], + [-68.92056230399993, 44.237046617000047], + [-68.933583136999914, 44.23574453300013], + [-68.933583136999914, 44.24355703300013], + [-68.927072719999927, 44.266994533000016], + [-68.92446855399993, 44.281317450000088], + [-68.941395636999914, 44.281317450000088], + [-68.942697719999899, 44.290432033000073], + [-68.92446855399993, 44.307359117000075], + [-68.90103105399993, 44.311265367000075], + [-68.885406053999958, 44.29954661699999] + ] + ], + [ + [ + [-68.475249803999873, 44.324286200000145], + [-68.484364386999886, 44.313869533000158], + [-68.49738521999987, 44.320379950000145], + [-68.509103969999842, 44.322984117000047], + [-68.52212480399993, 44.322984117000047], + [-68.52993730399993, 44.330796617000047], + [-68.52993730399993, 44.345119533000044], + [-68.524728969999927, 44.359442450000117], + [-68.519520636999943, 44.367254950000088], + [-68.511708136999943, 44.378973700000088], + [-68.502593553999958, 44.380275783000101], + [-68.496083136999857, 44.376369533000101], + [-68.492176886999857, 44.364650783000016], + [-68.48957271999987, 44.347723700000031], + [-68.486968553999873, 44.334702867000047], + [-68.475249803999873, 44.324286200000145] + ] + ], + [ + [ + [-68.885406053999958, 44.330796617000047], + [-68.903635219999842, 44.319077867000047], + [-68.91665605399993, 44.332098700000031], + [-68.91665605399993, 44.345119533000044], + [-68.911447719999842, 44.365952867000104], + [-68.899728969999842, 44.37767161699999], + [-68.88410396999987, 44.391994533000073], + [-68.86847896999987, 44.38157786699999], + [-68.859364386999886, 44.358140367000104], + [-68.86847896999987, 44.347723700000031], + [-68.885406053999958, 44.330796617000047] + ] + ], + [ + [ + [-68.198923305999926, 44.308620510000154], + [-68.240834113999938, 44.294541734000049], + [-68.283314581999889, 44.292425848000121], + [-68.306874152999853, 44.308417059000121], + [-68.313710089999859, 44.308417059000121], + [-68.320098436999899, 44.284938869000044], + [-68.309437628999945, 44.270941473], + [-68.296498175999943, 44.261094468000167], + [-68.296335415999891, 44.250067450000031], + [-68.308786587999919, 44.237860419000143], + [-68.326039191999911, 44.225897528000118], + [-68.341297980999883, 44.223578192000062], + [-68.347849087999862, 44.240179755000113], + [-68.352284308999941, 44.238063869000101], + [-68.363758917999888, 44.234727281000076], + [-68.368356899999924, 44.232733466000028], + [-68.380116339999887, 44.246446031000161], + [-68.414051886999943, 44.258612372000144], + [-68.423573370999947, 44.274278062000022], + [-68.40847734299993, 44.278347072000159], + [-68.405466274999924, 44.28526439000008], + [-68.41238359299993, 44.291856187000135], + [-68.427276170999875, 44.294785874000169], + [-68.434803839999944, 44.299994208000058], + [-68.433867967999873, 44.312038479000179], + [-68.428741014999844, 44.325710354000122], + [-68.410104946999951, 44.360052802000084], + [-68.40135657499988, 44.371771552000055], + [-68.392567511999914, 44.376735744000101], + [-68.378936326999877, 44.379502671000168], + [-68.36746171799993, 44.386419989000061], + [-68.364287889999872, 44.395331122000115], + [-68.375762498999904, 44.404079494000158], + [-68.354969855999911, 44.423285223000121], + [-68.315907355999855, 44.436957098000065], + [-68.274037238999938, 44.439276434000035], + [-68.244821743999921, 44.424505927000055], + [-68.24193274599989, 44.404974677000084], + [-68.18529212099989, 44.357001044000171], + [-68.176543748999904, 44.328314520000035], + [-68.198923305999926, 44.308620510000154] + ] + ], + [ + [ + [-67.566395636999914, 44.461004950000117], + [-67.584624803999901, 44.444077867000132], + [-67.593739386999886, 44.457098700000117], + [-67.605458136999886, 44.48314036699999], + [-67.615874803999958, 44.505275783000158], + [-67.61457271999987, 44.514390367000047], + [-67.600249803999873, 44.518296617000047], + [-67.582020636999886, 44.514390367000047], + [-67.578114386999914, 44.49095286699999], + [-67.566395636999914, 44.47923411699999], + [-67.566395636999914, 44.461004950000117] + ] + ], + [ + [ + [-67.276031053999901, 44.602932033000158], + [-67.302072719999899, 44.596421617000075], + [-67.32160396999987, 44.602932033000158], + [-67.318999803999958, 44.612046617000047], + [-67.303374803999873, 44.625067450000031], + [-67.283843553999901, 44.619859117000047], + [-67.270822719999927, 44.613348700000145], + [-67.276031053999901, 44.602932033000158] + ] + ], + [ + [ + [-66.986073370999918, 44.909776109000134], + [-66.989572719999899, 44.897609768000066], + [-67.012115037999877, 44.899359442000062], + [-67.01732337099989, 44.908026434000149], + [-67.045114712999947, 44.92715078300013], + [-67.045114712999947, 44.944484768000038], + [-67.038156704999949, 44.954901434000092], + [-67.029489712999862, 44.944484768000038], + [-67.003448045999903, 44.925401109000134], + [-66.986073370999918, 44.909776109000134] + ] + ], + [ + [ + [-66.920562303999873, 44.850327867000104], + [-66.91926021999987, 44.837307033000016], + [-66.93879146999987, 44.838609117000104], + [-66.95571855399993, 44.846421617000104], + [-66.97524980399993, 44.860744533000101], + [-66.981760219999899, 44.872463283000073], + [-66.958322719999842, 44.87767161699999], + [-66.954416469999842, 44.889390367000075], + [-66.954416469999842, 44.899807033000158], + [-66.946603969999842, 44.91543203300013], + [-66.940093553999958, 44.925848700000031], + [-66.933583136999857, 44.941473700000117], + [-66.921864386999886, 44.947984117000104], + [-66.904937303999901, 44.955796617000104], + [-66.904937303999901, 44.946682033000016], + [-66.903635219999899, 44.933661200000031], + [-66.891916469999899, 44.921942450000031], + [-66.893218553999901, 44.906317450000145], + [-66.901031053999901, 44.889390367000075], + [-66.916656053999873, 44.87767161699999], + [-66.93097896999987, 44.86985911699999], + [-66.920562303999873, 44.850327867000104] + ] + ], + [ + [ + [-66.977853969999927, 44.936265367000104], + [-66.985666469999899, 44.925848700000031], + [-67.005197719999899, 44.947984117000104], + [-67.014312303999873, 44.96360911699999], + [-67.01691646999987, 44.97923411699999], + [-67.005197719999899, 44.989650783000073], + [-66.989572719999899, 45.001369533000158], + [-66.973947719999927, 45.018296617000047], + [-66.954416469999842, 45.027411200000031], + [-66.93879146999987, 45.02480703300013], + [-66.940093553999958, 45.01178620000006], + [-66.945301886999943, 45.000067450000145], + [-66.94790605399993, 44.98314036699999], + [-66.96353105399993, 44.961004950000088], + [-66.977853969999927, 44.936265367000104] + ] + ], + [ + [ + [-123.315661128999906, 46.148536334000099], + [-123.337982852999943, 46.147594230000138], + [-123.357860546999902, 46.150489106000023], + [-123.376900531999908, 46.156129577000073], + [-123.396638058999912, 46.168933311000117], + [-123.41104639299995, 46.175079562000107], + [-123.420570513999891, 46.18559215700013], + [-123.422956321999948, 46.187805964000162], + [-123.417084890999973, 46.204842387000113], + [-123.40504284399988, 46.200934099000122], + [-123.388368537999852, 46.190369727000089], + [-123.366208324999945, 46.179202599000078], + [-123.348859523999892, 46.166408939000164], + [-123.324326823999883, 46.154661723000046], + [-123.315661128999906, 46.148536334000099] + ] + ], + [ + [ + [-123.436684247999906, 46.220399101000154], + [-123.440840311999878, 46.213248060000083], + [-123.45266382599992, 46.218285565000073], + [-123.468439305999922, 46.22500342299999], + [-123.4778060189999, 46.236092680000027], + [-123.482424040999902, 46.249340785000086], + [-123.480746802999946, 46.255943786], + [-123.471194763999918, 46.25478849100007], + [-123.460126576999926, 46.247562316000099], + [-123.444334921999925, 46.235899076000081], + [-123.436684247999906, 46.220399101000154] + ] + ], + [ + [ + [-123.945530795999915, 46.417647034000041], + [-123.964121070999937, 46.406790580000077], + [-123.974716258999948, 46.440181221000088], + [-123.9977626189999, 46.453397257000134], + [-123.990952824999908, 46.473173406000129], + [-123.990346363999919, 46.488292977000057], + [-123.981109178999901, 46.497463283000016], + [-123.973997197999878, 46.492929715000074], + [-123.971207071999856, 46.484780393000037], + [-123.963894818999862, 46.480118485000119], + [-123.948180199999925, 46.464190148000071], + [-123.947117611999928, 46.448679532000071], + [-123.945530795999915, 46.417647034000041] + ] + ], + [ + [ + [-122.701079881999931, 47.123968817000119], + [-122.706776495999918, 47.123968817000119], + [-122.715240037999948, 47.128159898000078], + [-122.723744269999884, 47.132391669000086], + [-122.737904425999915, 47.142320054], + [-122.742176886999914, 47.143744208000058], + [-122.746408657999851, 47.15371328300013], + [-122.737904425999915, 47.157904364000089], + [-122.729400193999879, 47.162176825000088], + [-122.723744269999884, 47.17206452], + [-122.718088344999899, 47.180609442000119], + [-122.705393032999837, 47.181952216000028], + [-122.685536261999928, 47.180609442000119], + [-122.675607876999919, 47.176336981000119], + [-122.671376105999911, 47.164984442000147], + [-122.672759568999894, 47.15509674700003], + [-122.677072719999884, 47.139553127000127], + [-122.689768032999851, 47.129584052000141], + [-122.701079881999931, 47.123968817000119] + ] + ], + [ + [ + [-122.859689907999837, 47.177720445], + [-122.873850063999853, 47.167873440000065], + [-122.879465298999946, 47.17206452], + [-122.882313605999897, 47.180609442000119], + [-122.88801021999987, 47.193304755], + [-122.890777147999927, 47.200384833000058], + [-122.8978572259999, 47.208889065000093], + [-122.912017381999917, 47.218817450000088], + [-122.921945766999912, 47.228705145], + [-122.921945766999912, 47.237209377000127], + [-122.914865688999868, 47.255560614000089], + [-122.912017381999917, 47.26972077], + [-122.904937303999944, 47.278265692000119], + [-122.890777147999927, 47.278265692000119], + [-122.882313605999897, 47.283880927000112], + [-122.865305141999926, 47.289536851000108], + [-122.858225063999868, 47.29242584800015], + [-122.846913214999887, 47.298041083000058], + [-122.852609829999864, 47.285345770000092], + [-122.866769985999895, 47.278265692000119], + [-122.868153449999866, 47.268296617000132], + [-122.868153449999866, 47.255560614000089], + [-122.869536912999948, 47.242865302000112], + [-122.858225063999868, 47.231512762000037], + [-122.848296678999958, 47.220200914000159], + [-122.848296678999958, 47.207464911000031], + [-122.848296678999958, 47.193304755], + [-122.859689907999837, 47.177720445] + ] + ], + [ + [ + [-122.422434048999918, 47.408840236000017], + [-122.406158006999888, 47.400336005000085], + [-122.38735917899993, 47.39398834800015], + [-122.366810675999886, 47.383530992000075], + [-122.374338344999856, 47.383246161000116], + [-122.417795376999891, 47.370794989000032], + [-122.449533657999851, 47.347723700000145], + [-122.469227667999888, 47.336371161000088], + [-122.474720831999917, 47.349554755000113], + [-122.473784959999932, 47.362860419000143], + [-122.466379360999852, 47.373195705000157], + [-122.452219204999835, 47.377346096000011], + [-122.44225012899993, 47.382513739], + [-122.439849412999891, 47.392808335000112], + [-122.446400519999969, 47.40058014500012], + [-122.463042772999913, 47.397772528000147], + [-122.455637173999932, 47.391017971000124], + [-122.475249803999901, 47.384466864000146], + [-122.485422329999849, 47.379828192000119], + [-122.48973548099994, 47.373928127000099], + [-122.490223761999928, 47.353827216000056], + [-122.492176886999886, 47.344183661000059], + [-122.49657141799986, 47.336371161000088], + [-122.503407355999883, 47.331529039000102], + [-122.510487433999941, 47.332098700000145], + [-122.518299933999927, 47.337307033000158], + [-122.527251756999959, 47.346258856000091], + [-122.531483527999882, 47.356919664000131], + [-122.527577277999882, 47.366441148000106], + [-122.521066860999895, 47.374416408000073], + [-122.51768958199996, 47.380438544000086], + [-122.510243292999903, 47.455796617000047], + [-122.503977016999855, 47.467474677000141], + [-122.489003058999913, 47.482652085000112], + [-122.471018032999879, 47.495794989000089], + [-122.455637173999932, 47.500881252000013], + [-122.462066209999946, 47.486761786000088], + [-122.457630988999966, 47.480169989], + [-122.448597785999951, 47.475409247000087], + [-122.441314256999945, 47.466742255000028], + [-122.439116990999949, 47.456244208000143], + [-122.438059048999904, 47.435858466000141], + [-122.435129360999881, 47.42572663], + [-122.422434048999918, 47.408840236000017] + ] + ], + [ + [ + [-122.495106574999895, 47.601548570000105], + [-122.493275519999926, 47.594224351000108], + [-122.488636847999899, 47.589585679], + [-122.480376756999902, 47.586859442], + [-122.488636847999899, 47.581366278000175], + [-122.498768683999856, 47.571234442000119], + [-122.520863410999937, 47.573960679], + [-122.542347785999965, 47.595526434000092], + [-122.557606574999937, 47.597886460000055], + [-122.570546027999939, 47.596096096000068], + [-122.577870245999947, 47.601548570000105], + [-122.569569464999873, 47.61810944200009], + [-122.567697719999899, 47.629584052000112], + [-122.574615037999905, 47.637884833], + [-122.579253709999918, 47.648667710000026], + [-122.580474412999934, 47.662990627000099], + [-122.578928188999896, 47.669378973], + [-122.561879035999937, 47.685614325000145], + [-122.558013475999942, 47.695746161000031], + [-122.558949347999928, 47.705959377000127], + [-122.557769334999904, 47.713812567000119], + [-122.547922329999878, 47.716986395], + [-122.537709113999938, 47.71478913], + [-122.526519334999932, 47.70929596600017], + [-122.516835089999873, 47.702378648], + [-122.51097571499993, 47.695868231000176], + [-122.505848761999914, 47.663275458000115], + [-122.499623175999943, 47.648667710000026], + [-122.489857550999915, 47.641262111000017], + [-122.498036261999914, 47.633612372000087], + [-122.503285285999908, 47.630031643000038], + [-122.51097571499993, 47.627590236000074], + [-122.500152147999927, 47.619289455000015], + [-122.500599738999924, 47.611721096000153], + [-122.496937628999973, 47.607123114000117], + [-122.495106574999895, 47.601548570000105] + ] + ], + [ + [ + [-122.67711341099988, 48.048651434000035], + [-122.67320716099988, 48.023749091000113], + [-122.681507941999953, 48.007269598000036], + [-122.700184699999937, 48.00775788], + [-122.71760006399991, 48.023016669000171], + [-122.730783657999865, 48.042425848000093], + [-122.736724412999891, 48.055731512000094], + [-122.740874803999915, 48.0743675800001], + [-122.738921678999873, 48.082505601000108], + [-122.729318813999896, 48.082993882], + [-122.723011847999956, 48.076239325000145], + [-122.720326300999972, 48.054754950000031], + [-122.716297980999911, 48.048285223000121], + [-122.701975063999924, 48.049221096000011], + [-122.701649542999903, 48.064398505], + [-122.711984829999906, 48.083644924000126], + [-122.729318813999896, 48.096747137000094], + [-122.718902147999913, 48.102240302000141], + [-122.709217902999853, 48.102240302000141], + [-122.701161261999914, 48.097601630000113], + [-122.686879035999922, 48.073228257000054], + [-122.67711341099988, 48.048651434000035] + ] + ], + [ + [ + [-122.586496548999946, 48.390814520000063], + [-122.584584113999895, 48.383368231000176], + [-122.582875128999888, 48.380316473000093], + [-122.579009568999879, 48.37714264500012], + [-122.577707485999881, 48.35667552300005], + [-122.515980597999956, 48.321966864], + [-122.5175675119999, 48.29401276200015], + [-122.530873175999915, 48.283840236000017], + [-122.546376105999926, 48.281398830000072], + [-122.562123175999886, 48.28620026200015], + [-122.575917120999904, 48.297674872000115], + [-122.59398352799991, 48.307928778000033], + [-122.608998175999943, 48.29913971600017], + [-122.620350714999915, 48.281927802000055], + [-122.627430792999874, 48.267279364000146], + [-122.641265428999873, 48.287990627000156], + [-122.646799282999893, 48.280829169000114], + [-122.648548956999889, 48.262640692000119], + [-122.651356574999937, 48.249945380000057], + [-122.665923631999874, 48.242173570000048], + [-122.723703579999892, 48.233791408000101], + [-122.710072394999941, 48.221421617000047], + [-122.696115688999882, 48.22016022300015], + [-122.66502844999988, 48.226385809000092], + [-122.651926235999909, 48.22406647300015], + [-122.628325975999871, 48.214300848], + [-122.616932745999904, 48.212062893000123], + [-122.595529751999948, 48.20538971600017], + [-122.580637173999904, 48.188462632], + [-122.571034308999927, 48.166245835000112], + [-122.558664516999897, 48.121323960000112], + [-122.554595506999931, 48.066066799000012], + [-122.546620245999875, 48.017035223000065], + [-122.535511847999942, 48.005926825000031], + [-122.522043423999961, 48.01194896000014], + [-122.510243292999903, 48.035223700000145], + [-122.522857225999886, 48.057074286], + [-122.52403723899991, 48.079413153000033], + [-122.514027472999913, 48.090765692], + [-122.493153449999852, 48.079657294000143], + [-122.476958787999905, 48.065252997000087], + [-122.460031704999921, 48.053452867000132], + [-122.381092902999882, 48.01581452000012], + [-122.365549282999879, 47.999660549000069], + [-122.359364386999914, 47.976629950000117], + [-122.350656704999835, 47.960923570000048], + [-122.346791144999926, 47.95058828300013], + [-122.349476691999897, 47.945949611000017], + [-122.355213995999875, 47.941961981000034], + [-122.37364661399991, 47.919175523000106], + [-122.378488735999895, 47.914699611000131], + [-122.381906704999892, 47.907782294000057], + [-122.386708136999886, 47.904933986000103], + [-122.392974412999934, 47.905096747000144], + [-122.394683397999941, 47.910345770000148], + [-122.395822719999884, 47.916489976000108], + [-122.400380011999914, 47.919175523000106], + [-122.422271287999948, 47.912339585], + [-122.435414191999911, 47.910467841000028], + [-122.441314256999945, 47.915472723000065], + [-122.443348761999886, 47.936916408000101], + [-122.449696417999903, 47.959458726], + [-122.460519985999909, 47.977850653000033], + [-122.476063605999911, 47.986883856000034], + [-122.488514777999924, 47.985093492000047], + [-122.50706946499993, 47.970851955000128], + [-122.51768958199996, 47.966294664000102], + [-122.530344204999849, 47.967352606000148], + [-122.539214647999898, 47.972154039000046], + [-122.54808509, 47.979966539000046], + [-122.562001105999911, 47.987372137000122], + [-122.580189581999903, 48.004868882000082], + [-122.593332485999866, 48.025376695000134], + [-122.592152472999942, 48.04205963700015], + [-122.609771287999962, 48.060492255], + [-122.614857550999886, 48.074896552000055], + [-122.600168423999889, 48.130113023], + [-122.607248501999948, 48.153753973000036], + [-122.622954881999917, 48.163316148000106], + [-122.644398566999939, 48.161444403000033], + [-122.668446417999888, 48.150580145000148], + [-122.693226691999939, 48.180243231000091], + [-122.699777798999932, 48.184759833000143], + [-122.710113084999932, 48.187079169000114], + [-122.723540818999936, 48.19269440300009], + [-122.736154751999919, 48.199652411], + [-122.744130011999871, 48.205877997000144], + [-122.755726691999882, 48.229641018000152], + [-122.75121009, 48.249945380000057], + [-122.668446417999888, 48.362860419000029], + [-122.656564907999837, 48.385077216000084], + [-122.630848761999886, 48.384670315000065], + [-122.616688605999869, 48.389593817000119], + [-122.605458136999871, 48.39842357], + [-122.595773891999897, 48.401922919000086], + [-122.586496548999946, 48.390814520000063] + ] + ], + [ + [ + [-122.849354620999918, 48.461615302000084], + [-122.836293097999942, 48.459947007000054], + [-122.820952928999887, 48.472601630000113], + [-122.808338995999904, 48.458197333000058], + [-122.806141730999911, 48.442043361000103], + [-122.81309973899991, 48.427313544000114], + [-122.827748175999915, 48.417385158000016], + [-122.88988196499993, 48.424139716000141], + [-122.88345292899993, 48.441473700000031], + [-122.89867102799991, 48.447902736000131], + [-122.921376105999855, 48.450995184000035], + [-122.937611456999889, 48.458319403000033], + [-122.942534959999946, 48.475775458], + [-122.937001105999926, 48.49323151200015], + [-122.924875454999849, 48.507147528000033], + [-122.910308397999913, 48.51357656500015], + [-122.916249152999939, 48.523871161000059], + [-122.916981574999866, 48.533636786], + [-122.912464972999913, 48.541734117000132], + [-122.910308397999913, 48.54706452], + [-122.887074347999885, 48.563666083000058], + [-122.877023891999912, 48.56586334800015], + [-122.860747850999886, 48.539618231000119], + [-122.859038865999878, 48.521307684000149], + [-122.86192786399991, 48.48932526200015], + [-122.858469204999906, 48.472845770000063], + [-122.849354620999918, 48.461615302000084] + ] + ], + [ + [ + [-122.694081183999856, 48.543524481000119], + [-122.703033006999888, 48.541896877000099], + [-122.714344855999869, 48.54193756700009], + [-122.722889777999882, 48.548163153000033], + [-122.737049933999913, 48.577134507000139], + [-122.735422329999892, 48.590399481000148], + [-122.726796027999882, 48.60150788], + [-122.715484178999901, 48.606024481000148], + [-122.702870245999918, 48.600409247000144], + [-122.696400519999912, 48.592271226000136], + [-122.693714972999928, 48.585923570000105], + [-122.67845618399987, 48.572902736000017], + [-122.67454993399987, 48.568793036000059], + [-122.679269985999881, 48.564520575000145], + [-122.685902472999942, 48.556952216000113], + [-122.688059048999946, 48.547023830000015], + [-122.694081183999856, 48.543524481000119] + ] + ], + [ + [ + [-122.992258266999855, 48.51357656500015], + [-123.002349412999905, 48.509182033000158], + [-123.01056881399991, 48.51162344], + [-123.016590949999909, 48.511419989000146], + [-123.020171678999887, 48.499335028000033], + [-123.016835089999859, 48.496649481000148], + [-122.999134894999955, 48.472601630000113], + [-122.991322394999955, 48.46767812700007], + [-122.982899542999917, 48.463609117000104], + [-122.96495520699996, 48.458319403000033], + [-122.96495520699996, 48.451483466000028], + [-122.979318813999853, 48.45636627800009], + [-122.990386522999884, 48.455877997000087], + [-123.001616990999878, 48.453111070000048], + [-123.016468878999945, 48.451483466000028], + [-123.030018683999913, 48.453802802000084], + [-123.038441535999951, 48.459418036000088], + [-123.04527747299997, 48.466376044000171], + [-123.053700324999923, 48.472601630000113], + [-123.065419074999909, 48.478501695000077], + [-123.070383266999869, 48.480129299000097], + [-123.091623501999948, 48.478827216000084], + [-123.102650519999898, 48.480292059000064], + [-123.116363084999918, 48.484198309000035], + [-123.129709438999839, 48.489732164000159], + [-123.139312303999915, 48.495835679000052], + [-123.149159308999927, 48.505601304], + [-123.154449022999913, 48.51312897300015], + [-123.166574673999904, 48.543524481000119], + [-123.173939581999903, 48.573431708], + [-123.174143032999865, 48.578436591000028], + [-123.177561001999962, 48.598822333000115], + [-123.158436652999896, 48.614569403000175], + [-123.129139777999868, 48.620062567], + [-123.102121548999918, 48.609116929000137], + [-123.093820766999855, 48.59760163], + [-123.076649542999917, 48.584051825000031], + [-123.05776933499989, 48.572902736000017], + [-123.024647589999859, 48.562811591000141], + [-123.004302537999948, 48.539455471000153], + [-122.977650519999926, 48.531317450000031], + [-122.979969855999897, 48.525132554000081], + [-122.992258266999855, 48.51357656500015] + ] + ], + [ + [ + [-122.857818162999948, 48.708685614], + [-122.745838995999875, 48.664374091000141], + [-122.750884568999908, 48.654730536000088], + [-122.757232225999928, 48.650051174000069], + [-122.800445115999935, 48.62962474199999], + [-122.804514126999891, 48.623724677000055], + [-122.805409308999884, 48.616888739000117], + [-122.808949347999956, 48.611273505000142], + [-122.820952928999887, 48.609116929000137], + [-122.831125454999849, 48.612697658000016], + [-122.841379360999866, 48.620917059000092], + [-122.865874803999901, 48.649603583000058], + [-122.879872199999866, 48.677191473000093], + [-122.882394985999881, 48.687974351], + [-122.886789516999855, 48.696275132000054], + [-122.896351691999939, 48.699774481000148], + [-122.905913865999921, 48.697333075000031], + [-122.910308397999913, 48.687974351], + [-122.908762173999961, 48.676947333000143], + [-122.906117316999882, 48.671087958], + [-122.905629035999894, 48.666083075000145], + [-122.910308397999913, 48.657538153000033], + [-122.86192786399991, 48.601711330000128], + [-122.874379035999922, 48.59373607], + [-122.887521938999882, 48.589992580000157], + [-122.917144334999932, 48.588690497000144], + [-122.93333899599989, 48.59275950700011], + [-122.941395636999914, 48.602606512000037], + [-122.945871548999975, 48.614081122000087], + [-122.951283331999932, 48.623439846000039], + [-122.968413865999963, 48.634588934000035], + [-122.980091925999957, 48.638617255000028], + [-122.985463019999912, 48.63304271], + [-122.986236131999931, 48.619330145000063], + [-122.989613410999951, 48.604641018000066], + [-122.997059699999937, 48.597154039000102], + [-123.009632941999925, 48.60541413], + [-123.022206183999913, 48.618394273], + [-123.026519334999918, 48.626532294000114], + [-123.026356574999866, 48.636460679000109], + [-123.020904100999914, 48.642482815], + [-122.997141079999921, 48.660589911000116], + [-122.988840298999932, 48.664374091000141], + [-122.977772589999901, 48.667792059000149], + [-122.929310675999915, 48.70844147300015], + [-122.917958136999943, 48.711411851000051], + [-122.896636522999884, 48.712144273], + [-122.857818162999948, 48.708685614] + ] + ], + [ + [ + [-122.613148566999882, 48.648423570000048], + [-122.620472785999894, 48.645941473], + [-122.633615688999853, 48.65167877800009], + [-122.655140753999959, 48.664740302000055], + [-122.662220831999917, 48.670314846000068], + [-122.679432745999932, 48.688177802000141], + [-122.703114386999871, 48.70791250200007], + [-122.716542120999861, 48.715236721000068], + [-122.720285610999895, 48.724920966000028], + [-122.715158657999879, 48.739081122000144], + [-122.69847571499993, 48.73468659100017], + [-122.671376105999911, 48.704820054], + [-122.662342902999896, 48.697699286000116], + [-122.64736894399995, 48.690741278000061], + [-122.635161912999891, 48.683294989000061], + [-122.628407355999855, 48.677069403000118], + [-122.621408657999879, 48.668524481000091], + [-122.61534583199996, 48.658636786000088], + [-122.613148566999882, 48.648423570000048] + ] + ], + [ + [ + [-123.035289663048076, 48.992514547075118], + [-123.035308397999884, 48.992499091000113], + [-123.04527747299997, 48.98436107], + [-123.088490363999881, 48.972235419000086], + [-123.089344855999883, 48.987982489000061], + [-123.090484178999915, 48.992499091000113], + [-123.090488167733341, 48.992514547010543], + [-123.035306345999899, 48.992514547000056], + [-123.035289663048076, 48.992514547075118] + ] + ], + [ + [ + [-95.160569213999906, 49.369494121000074], + [-95.102820800999922, 49.35393951500005], + [-94.982518066999944, 49.356161601000153], + [-94.926087402999912, 49.345567933000083], + [-94.856195028999906, 49.318282776000061], + [-94.839141804999969, 49.308877665000111], + [-94.827256225999946, 49.29285797200005], + [-94.819892334999963, 49.252033590000067], + [-94.810358032999972, 49.229606019000173], + [-94.806120565999919, 49.21089915], + [-94.811184855999898, 49.16656077100005], + [-94.803743449999871, 49.14640696300016], + [-94.792038736999899, 49.126459860000139], + [-94.753772339999898, 49.026155904000078], + [-94.711216796999935, 48.914586487000079], + [-94.711733561999949, 48.862755026000102], + [-94.712146972999875, 48.842446187000078], + [-94.713283854999901, 48.823842672000026], + [-94.710906738999938, 48.807512920000178], + [-94.701785848999947, 48.790097962000132], + [-94.688892578999969, 48.778832498999989], + [-94.592851928999949, 48.726432597000056], + [-94.519161336999929, 48.704470113000085], + [-94.479499674999971, 48.700697734000144], + [-94.311577107999938, 48.713926900000061], + [-94.29258601899997, 48.711911520000015], + [-94.284033569999963, 48.709069316000054], + [-94.274499267999971, 48.7041083780001], + [-94.265481729999919, 48.697752177000055], + [-94.258453735999922, 48.690827536000157], + [-94.255766560999888, 48.683541158000097], + [-94.252459268999985, 48.662405497000137], + [-94.251038167999894, 48.65728953000017], + [-94.232150431999855, 48.652018535000039], + [-94.034849812999937, 48.643311056000172], + [-93.874885417999906, 48.636205546000141], + [-93.835740519999945, 48.617136943000062], + [-93.809385538999976, 48.543575541000067], + [-93.778663900999931, 48.519468486000122], + [-93.7567789309999, 48.516548767000032], + [-93.61629655, 48.531302389000032], + [-93.599889282999953, 48.526341451000079], + [-93.566583821999927, 48.538278707000032], + [-93.491756347999882, 48.542309469000131], + [-93.459923665999952, 48.557398987000127], + [-93.452249714999965, 48.57272105], + [-93.453774170999878, 48.586957907000155], + [-93.451474568999942, 48.597422384000097], + [-93.417316446999877, 48.604114482000014], + [-93.385716308999889, 48.614863180000143], + [-93.257739624999914, 48.630314433000038], + [-93.131700805999969, 48.624630025], + [-92.979720417999971, 48.617679546000105], + [-92.955587524999913, 48.612227682000125], + [-92.884196532999908, 48.579878235000038], + [-92.725549886999914, 48.548691508000061], + [-92.648603678999905, 48.536263326], + [-92.630181030999978, 48.519468486000122], + [-92.627468018999963, 48.502776998000073], + [-92.646743326999911, 48.49742848800004], + [-92.691365925999918, 48.489857891000085], + [-92.710641235999873, 48.482881572000068], + [-92.718909464999911, 48.459782207], + [-92.70405249099997, 48.44515777600013], + [-92.67712906899996, 48.441747132], + [-92.657052776, 48.438233134000043], + [-92.570520588999898, 48.446656393000055], + [-92.52693151899993, 48.445622864000072], + [-92.490628824999959, 48.433117168000152], + [-92.474531615999894, 48.410482890000097], + [-92.467581136999911, 48.394282329000092], + [-92.467064371999982, 48.353225403000138], + [-92.462465169999916, 48.329299215000148], + [-92.451380574999916, 48.312685242000143], + [-92.418230142999903, 48.282041118], + [-92.384640462999982, 48.232405904000032], + [-92.371850545999905, 48.222587382000071], + [-92.353815470999905, 48.222897441000143], + [-92.327873901999965, 48.229434509000114], + [-92.303663492999959, 48.239278870000092], + [-92.291028605999941, 48.24956248000008], + [-92.292062134999924, 48.270336406000027], + [-92.301415568999971, 48.290645244000146], + [-92.303095052999936, 48.310928243000049], + [-92.281597656999878, 48.331779684000125], + [-92.259118408999967, 48.339634502000152], + [-92.154732014999922, 48.350124818000111], + [-92.070499430999917, 48.34671417300008], + [-92.043420979999951, 48.334596049000183], + [-92.030114298999962, 48.313176169000158], + [-92.021355142999965, 48.287441305000172], + [-92.00799678599995, 48.262481588000085], + [-91.992157959999929, 48.247908834000143], + [-91.975492309999908, 48.236565857000144], + [-91.957302205999866, 48.22832346600002], + [-91.852244018999926, 48.195974019000019], + [-91.764988362999929, 48.187344056000157], + [-91.744136922999957, 48.179592590000155], + [-91.727574625999949, 48.168327128000115], + [-91.695509399999935, 48.137579651000138], + [-91.716438354999923, 48.112051494000028], + [-91.692512166999933, 48.097866313000068], + [-91.618614868999941, 48.089572246000117], + [-91.597479207999896, 48.090399068000139], + [-91.589676065999896, 48.08833201200018], + [-91.581097778999947, 48.080942281000077], + [-91.579805867999909, 48.07096873000016], + [-91.585128539999943, 48.060840149000015], + [-91.586988891999937, 48.052571920000062], + [-91.574844929999955, 48.048205262000081], + [-91.487098348999922, 48.053476258], + [-91.464722452999922, 48.04895457], + [-91.446273966999911, 48.040738017000038], + [-91.427928833999943, 48.036448874000158], + [-91.365400349999931, 48.057842916000098], + [-91.276361857999945, 48.064767558000156], + [-91.238069621999955, 48.082647604000115], + [-91.203963175999974, 48.107658997000115], + [-91.071103068999975, 48.170859274000108], + [-91.028159952999914, 48.18483774900001], + [-91.008109497999868, 48.194372051000087], + [-90.92315344299999, 48.22710907], + [-90.873802449999886, 48.234343771000155], + [-90.840677856999974, 48.220106914], + [-90.837939005999942, 48.21054677299999], + [-90.848842733999902, 48.198712871000069], + [-90.84972123299994, 48.189566142000089], + [-90.843003296, 48.176982931000069], + [-90.834269979999931, 48.171789449000144], + [-90.823883016999901, 48.168327128000115], + [-90.812307495999875, 48.160989075000103], + [-90.803057413999937, 48.147165629000156], + [-90.79670121299992, 48.11706410699999], + [-90.786469278999931, 48.100450134000155], + [-90.750347452999932, 48.08399119100001], + [-90.7013065189999, 48.084559632000051], + [-90.6110794679999, 48.103499044], + [-90.586843220999896, 48.104816793000154], + [-90.573872436999892, 48.097892151000067], + [-90.562193562999909, 48.08884877600012], + [-90.542013916999935, 48.08373280900004], + [-90.531601115, 48.084559632000051], + [-90.501887166999921, 48.094274801], + [-90.490492513999925, 48.096238506000034], + [-90.483464518999909, 48.09448150700014], + [-90.477857625999974, 48.091535950000051], + [-90.470622925999919, 48.089882304000085], + [-90.178625244999893, 48.116443990000036], + [-90.120385905999882, 48.115358786000016], + [-90.073256998999966, 48.101199443000084], + [-90.06103552299993, 48.091019186000111], + [-90.008222209, 48.029730937000139], + [-89.99532893899999, 48.018594666000027], + [-89.980316936, 48.010093893000104], + [-89.920449788999946, 47.987459615000077], + [-89.902440551999945, 47.985909323000058], + [-89.803454346999871, 48.013762919000115], + [-89.780975097999942, 48.017199402000145], + [-89.763301758999944, 48.017302755000074], + [-89.745964314999924, 48.013762919000115], + [-89.724596109999936, 48.005908102], + [-89.712788045999929, 48.003375956000085], + [-89.678655762999938, 48.008698629000051], + [-89.656589925999953, 48.007975159000139], + [-89.593105428, 47.996502991000128], + [-89.498962443999886, 47.995094552000026], + [-89.461847289999923, 47.994539286000091], + [-89.387097330999921, 47.98053497299999], + [-89.363636230999958, 47.979604797000135], + [-89.340381835999921, 47.984152324000078], + [-89.24552974499997, 48.021178488000132], + [-89.095254678999936, 48.079934591], + [-88.904620320999925, 48.154296977000016], + [-88.782147175999967, 48.202071838000094], + [-88.642724162999883, 48.25659047500001], + [-88.578877929999919, 48.270388082000139], + [-88.407906453999971, 48.304055278000092], + [-88.376461344999939, 48.305114645000074], + [-88.347264159999895, 48.298655091000043], + [-88.159678711999931, 48.224886984000179], + [-87.972093261999959, 48.151170553000057], + [-87.784481974999977, 48.077428284000021], + [-87.59689652499992, 48.003737692000087], + [-87.409259399999939, 47.929995422000061], + [-87.221699788999871, 47.856253154000015], + [-87.034166015999915, 47.782485047000179], + [-86.846554728999934, 47.708742778000143], + [-86.741806600999979, 47.666445618000139], + [-86.637058471999921, 47.624122620000051], + [-86.532310343999967, 47.581902975000091], + [-86.427613891999925, 47.539579977000173], + [-86.322865763999943, 47.497205302000069], + [-86.21811763499997, 47.454933981000082], + [-86.113369506999931, 47.412662659], + [-86.008569702999949, 47.370365499000016], + [-85.883616088999901, 47.318559876000123], + [-85.758610798999939, 47.266780090000154], + [-85.633631347999966, 47.215026144], + [-85.508626058999909, 47.16322052000011], + [-85.383646606999946, 47.111440735000045], + [-85.258641316999899, 47.059686788000093], + [-85.133661865999926, 47.007829488000098], + [-85.008656575999879, 46.95599802700012], + [-84.992404337999943, 46.948789164000161], + [-84.976203776999938, 46.941476949000062], + [-84.959977376999944, 46.934242249000093], + [-84.943673461999907, 46.927007548000134], + [-84.927447062999903, 46.91966949500015], + [-84.911168985999979, 46.91248647], + [-84.894942586999974, 46.905148417000092], + [-84.878690347999878, 46.897913717000122], + [-84.863730021999885, 46.881945700000088], + [-84.85419572, 46.861171773000066], + [-84.835411336999897, 46.803862610000081], + [-84.816446085999956, 46.74590749100004], + [-84.787455606999885, 46.657179057000022], + [-84.773322102999941, 46.633433736000157], + [-84.693688720999972, 46.564859111000047], + [-84.589405679999942, 46.475122986000073], + [-84.566564696999961, 46.461196188000159], + [-84.541294921999878, 46.452824606000021], + [-84.51230444299992, 46.451636047000179], + [-84.492176473999933, 46.456881206], + [-84.478301350999885, 46.466467184000109], + [-84.465408080999879, 46.478171896000092], + [-84.448096475999961, 46.489721578000044], + [-84.423240111999917, 46.511580709000057], + [-84.389702107999909, 46.520262350000124], + [-84.352469237999884, 46.522742818], + [-84.305340331999872, 46.501607158000141], + [-84.242010864999969, 46.52646352100011], + [-84.19728491199993, 46.546358948000105], + [-84.147675536999941, 46.541346334000067], + [-84.110442667999934, 46.52646352100011], + [-84.158811808999957, 46.433342591000027], + [-84.147675536999941, 46.399882101000017], + [-84.129046183999975, 46.375025737000058], + [-84.105430053999868, 46.347740580000149], + [-84.112897298999968, 46.327870992000058], + [-84.119098470999887, 46.314228414000141], + [-84.114137532999933, 46.295573222000158], + [-84.106670288999908, 46.276969706000116], + [-84.099228882999881, 46.250873108000022], + [-84.099228882999881, 46.237230530000105], + [-84.096774250999914, 46.224828187000142], + [-84.086800700999902, 46.201212057000035], + [-84.055820678999879, 46.171446432000053], + [-84.021042439999917, 46.151602681000057], + [-84.014169474999875, 46.115997620000158], + [-84.008769287999911, 46.112328593000186], + [-83.995824340999974, 46.101166484000046], + [-83.976394001999978, 46.073106181000028], + [-83.964585937999885, 46.063184307000043], + [-83.947300171999899, 46.060600484000034], + [-83.930737874999892, 46.066956686000154], + [-83.872679402999921, 46.107884420000076], + [-83.856427165999918, 46.115739238000018], + [-83.839296427999869, 46.119201559000047], + [-83.818057413999981, 46.116566060000039], + [-83.766536010999886, 46.106489157000013], + [-83.664836791999932, 46.119149883000048], + [-83.613883829999907, 46.115635885000088], + [-83.565437174999943, 46.09077952100013], + [-83.50882564399987, 46.047371317000128], + [-83.492030802999892, 46.03708770700014], + [-83.474099080999935, 46.023135071000141], + [-83.462807780999952, 46.007787171000174], + [-83.465856689999896, 45.993111064000104], + [-83.510246744999932, 45.932391256000088], + [-83.556212930999919, 45.869656068000054], + [-83.595254475999951, 45.816429342000092], + [-83.510711832999874, 45.779067281000138], + [-83.396326050999903, 45.728527731], + [-83.199309652999943, 45.641556295000086], + [-83.019010579999957, 45.561871236000016], + [-82.759439860999947, 45.447201233000058], + [-82.588778442999882, 45.37180531900016], + [-82.54828995799997, 45.334598287000077], + [-82.532141073, 45.293515523000011], + [-82.484081990999925, 45.083244120000174], + [-82.436022908999888, 44.872972718000042], + [-82.387886312999882, 44.662701315], + [-82.339878905999939, 44.452429912000085], + [-82.291845662999975, 44.242210185000076], + [-82.243683227999924, 44.031938782000125], + [-82.195624145999943, 43.821693217000089], + [-82.147565063999906, 43.611344299000152], + [-82.145446329999913, 43.600647278000125], + [-82.14565303599997, 43.576411031000148], + [-82.153611205999937, 43.549590963000171], + [-82.185857299999981, 43.487295024000147], + [-82.218000041999943, 43.425024923000038], + [-82.250194458999971, 43.362780660000013], + [-82.282388875999914, 43.300484721000188], + [-82.314505778999944, 43.238188782000165], + [-82.346726033999914, 43.175841167000115], + [-82.378920450999942, 43.113571066000091], + [-82.411089029999886, 43.051275127000068], + [-82.416411702999937, 43.017142843], + [-82.414603027999959, 42.983243104000096], + [-82.430441853999952, 42.95130706800002], + [-82.453179483999918, 42.918983460000121], + [-82.464780842999886, 42.883636780000032], + [-82.468036458999876, 42.863973898], + [-82.482324991999945, 42.835112610000138], + [-82.485270548999949, 42.818524476000121], + [-82.47361751299988, 42.798163961000014], + [-82.470982015999965, 42.790567525000043], + [-82.471343749999875, 42.77984466600013], + [-82.47695064399997, 42.761473694000031], + [-82.483410197999945, 42.719254049000156], + [-82.511263793999916, 42.64667450000006], + [-82.526224121999888, 42.619906108000166], + [-82.549245971999937, 42.590941468], + [-82.575833496999877, 42.571795349000084], + [-82.608467162999915, 42.561098328000085], + [-82.644330606999887, 42.557816874000096], + [-82.694405069999874, 42.519137065000095], + [-82.800135050999899, 42.417980449000098], + [-82.83282039499997, 42.398007508], + [-82.943511311999941, 42.355477804000131], + [-83.040352946999889, 42.331861674000109], + [-83.079962930999926, 42.30506744400013], + [-83.10983191, 42.272278748000119], + [-83.128512939999922, 42.239955140000134], + [-83.135928507999949, 42.200267639000131], + [-83.139649210999949, 42.115854188000029], + [-83.159492960999927, 42.046323548000132], + [-83.157012492999883, 42.000434876000057], + [-83.132506619999873, 41.941952808000039], + [-83.123448649999943, 41.9203364050001], + [-83.097377888999972, 41.87576548300008], + [-83.068413249999907, 41.847731019000079], + [-82.98379309099991, 41.808069357000093], + [-82.865221516999981, 41.752491353], + [-82.711122395999922, 41.680247701000056], + [-82.666913207999897, 41.669085592000116], + [-82.451319132999913, 41.671901957], + [-82.424860799999948, 41.676811219000044], + [-82.281355346999931, 41.743292949000093], + [-82.137746540999927, 41.809800517000056], + [-81.994241088999928, 41.876204733000108], + [-81.850735635999939, 41.942712301000157], + [-81.707281860999871, 42.009219869000148], + [-81.563724731999969, 42.075675761000085], + [-81.420219278999951, 42.142157491000077], + [-81.276662150999954, 42.208665060000115], + [-81.147884480999977, 42.228250427000049], + [-81.019158488999977, 42.247809957000172], + [-80.890380818999915, 42.267447002000026], + [-80.761654826999944, 42.28703236900013], + [-80.632877156999939, 42.306643575000138], + [-80.520233196999925, 42.323782098000137], + [-80.50415116399995, 42.326228943000089], + [-80.375373494999877, 42.345788473000184], + [-80.24659582599989, 42.365477194000121], + [-80.093168497999898, 42.420150859], + [-79.939767008999922, 42.474772848000143], + [-79.786391357999946, 42.529368999000084], + [-79.763006634999897, 42.53770492800011], + [-79.633015706999885, 42.584042664000108], + [-79.479640055999909, 42.63871632899999], + [-79.326186889999917, 42.69333831800013], + [-79.172759562999914, 42.748011984000172], + [-79.019383910999949, 42.802685649000026], + [-78.963056600999948, 42.84012522400009], + [-78.918950765999966, 42.889243673000138], + [-78.909054727999973, 42.930223084], + [-78.915255900999938, 42.94761220300002], + [-78.936339884999967, 42.960040385000084], + [-78.959956013999914, 42.966215719000061], + [-78.983520467999909, 42.976137593000075], + [-79.008350992999937, 42.991046245000021], + [-79.022019409999956, 43.002234193000149], + [-79.031967122999873, 43.01342214], + [-79.028246419999874, 43.034506124000032], + [-79.022019409999956, 43.049414775000074], + [-79.023259643999978, 43.058070578000027], + [-79.030752726999935, 43.066803894000188], + [-79.041863159999963, 43.075459697000056], + [-79.055531575999879, 43.087887879000121], + [-79.062947143999878, 43.096543681000171], + [-79.06527258299991, 43.105897116000037], + [-79.065737670999937, 43.120237326], + [-79.061422689999887, 43.130288392000139], + [-79.055583251999877, 43.13842743000005], + [-79.051604166999908, 43.146850688000043], + [-79.049330403999988, 43.15984731000016], + [-79.048606933999878, 43.170621847000106], + [-79.053774576999899, 43.26035797100009], + [-79.058425455999952, 43.277798767000107], + [-79.091627563999879, 43.342523499000109], + [-79.174309855999951, 43.464531555000164], + [-79.078992675999928, 43.498948060000103], + [-78.946184244999955, 43.546722921000097], + [-78.750821492999961, 43.617054546000091], + [-78.688086303999938, 43.631808167000102], + [-78.457273518999926, 43.630981344000091], + [-78.226460734999904, 43.630206197000078], + [-77.995673787999891, 43.629431051000054], + [-77.764835163999891, 43.62865590400007], + [-77.533996541999869, 43.627854920000132], + [-77.303209594999942, 43.627105612000136], + [-77.072370971999931, 43.626330465000123], + [-76.84153234899992, 43.625503642000083], + [-76.836002970999914, 43.628035788], + [-76.830473591999919, 43.630438741000049], + [-76.824892536999897, 43.632893372000112], + [-76.819363158999892, 43.635425517], + [-76.813782104999888, 43.63788014800015], + [-76.80830440299988, 43.640308940000025], + [-76.802723348999876, 43.642789409], + [-76.797193970999871, 43.645269877000075], + [-76.754354206999921, 43.700098572000073], + [-76.711514444999892, 43.755004781000181], + [-76.668674682999949, 43.809885153], + [-76.625886596999919, 43.864765523000116], + [-76.582995157999875, 43.919594218], + [-76.54020707199993, 43.974474589000025], + [-76.497367309999902, 44.029354960000134], + [-76.454630900999888, 44.084235332000119], + [-76.430032918999899, 44.103303935000113], + [-76.350089477999887, 44.151724752000078], + [-76.344405069999937, 44.158184306000024], + [-76.341356160999908, 44.165780742], + [-76.337118692999951, 44.173738912000047], + [-76.327765258999904, 44.18149037700006], + [-76.317171590999948, 44.185056051000132], + [-76.206635701999915, 44.217405498000019], + [-76.185758422999925, 44.225673727000171], + [-76.169325317999949, 44.242365214000088], + [-76.169738728999874, 44.247687887000055], + [-76.178058634999928, 44.27213084], + [-76.178678751999911, 44.27864207000006], + [-76.149791626999871, 44.304531962000098], + [-76.067264363999925, 44.347991842000013], + [-75.898695841999938, 44.399978333000135], + [-75.870325480999924, 44.408608297000072], + [-75.855701049999936, 44.42204417000012], + [-75.845417439999949, 44.439045715000034], + [-75.830948038999935, 44.464315491000107], + [-75.791183024999924, 44.496768291000038], + [-75.75462194799988, 44.527567444000098], + [-75.699689900999971, 44.581672668000081], + [-75.578198608999941, 44.661512757000182], + [-75.455958007999925, 44.741766256000105], + [-75.341830606999935, 44.816748759000163], + [-75.270232909999976, 44.863774313000036], + [-75.129647175999963, 44.925165914000118], + [-75.075593627999893, 44.935501200000132], + [-75.058721273999907, 44.941030578000138], + [-75.014899657999905, 44.965990296000101], + [-74.998647420999902, 44.972398173000059], + [-74.940201375999919, 44.987746074000128], + [-74.903743652, 45.005212708000087], + [-74.886509562999919, 45.009398499000113], + [-74.868474486999929, 45.01012196900011], + [-74.741557169999936, 44.998856507000042], + [-74.712961391999926, 44.99925364800005], + [-74.695875203999918, 44.998029684000031], + [-74.596113850999927, 44.998494772000143], + [-74.496352497999908, 44.999011536000083], + [-74.396616984999923, 44.99947662300012], + [-74.296881469999903, 44.999993388000135], + [-74.1971459559999, 45.000458476000077], + [-74.097384603999899, 45.000975240000017], + [-73.997649088999907, 45.001440328000129], + [-73.897887736999905, 45.001957093], + [-73.798152221999914, 45.002473857000112], + [-73.698416707999911, 45.002938945000054], + [-73.598655355999909, 45.003404033], + [-73.498919840999889, 45.003920797000106], + [-73.399158487999898, 45.004385885000048], + [-73.351340858999919, 45.004633645000027], + [-73.299422973999896, 45.004902649000186], + [-73.199687459999979, 45.005419414000031], + [-73.099951944999901, 45.005884502000143], + [-73.000268106999926, 45.006349590000085], + [-72.900480916999896, 45.006866354000024], + [-72.800693725999878, 45.007331442000137], + [-72.700958211999904, 45.007796530000078], + [-72.6012743739999, 45.008313294000018], + [-72.501487183, 45.008830058000157], + [-72.401751668999907, 45.009295146000071], + [-72.301964477999974, 45.009760233000023], + [-72.202228963999886, 45.010328674000064], + [-72.10254512599991, 45.010793762], + [-72.00280961099989, 45.011258850000118], + [-71.903074097, 45.011775615000047], + [-71.803286905999897, 45.01224070300016], + [-71.70355139199998, 45.012757467000128], + [-71.603815877999892, 45.013274231000153], + [-71.505848136999958, 45.013731075000024], + [-71.504080363999975, 45.013739319000095], + [-71.506612507999961, 45.037045390000017], + [-71.504752156999956, 45.052961731000053], + [-71.497259073999942, 45.066552633000057], + [-71.45658972199999, 45.110994365000025], + [-71.451215373999929, 45.121691386000023], + [-71.44599605399992, 45.140294902000065], + [-71.441603556999922, 45.150681865000095], + [-71.413026488999947, 45.186183574000054], + [-71.406566934999972, 45.204942119000137], + [-71.42268998299997, 45.217189434000076], + [-71.44904496299992, 45.226904603000108], + [-71.438813028999874, 45.233467510000096], + [-71.394888061999922, 45.241529033000077], + [-71.381245482999901, 45.250779114000082], + [-71.352099975999892, 45.27832265300016], + [-71.334323283999964, 45.288709616000105], + [-71.311533976999954, 45.294135641000153], + [-71.293395548999939, 45.29232696600009], + [-71.209369669999916, 45.254758199], + [-71.18513342299994, 45.248557027000103], + [-71.160328735999968, 45.24576650000013], + [-71.141725219999927, 45.252329407000119], + [-71.111029418999891, 45.287107646000081], + [-71.095242269999915, 45.30090525300001], + [-71.085552937999978, 45.304212545000112], + [-71.084951960999973, 45.304292578000073], + [-71.064210571999979, 45.307054749000187], + [-71.054417887999904, 45.310362040000186], + [-71.036667033999976, 45.323384501000035], + [-71.027597818999936, 45.334649963000075], + [-71.016539062999925, 45.343124898], + [-70.993155477999949, 45.347827454000154], + [-70.968118245999875, 45.34452016200008], + [-70.951607625999969, 45.332014466000075], + [-70.906907511999918, 45.246231588000157], + [-70.892412272999906, 45.234604390000086], + [-70.87435136, 45.24566314800002], + [-70.870604817999975, 45.255274964000122], + [-70.872491007999969, 45.274188538000047], + [-70.870243082999963, 45.283128561000083], + [-70.862620808999907, 45.290363261000053], + [-70.842389485999917, 45.30121531200011], + [-70.835258137999972, 45.309793599000116], + [-70.832080037999901, 45.328552144000028], + [-70.835464844999933, 45.373097229000123], + [-70.833837036999881, 45.393096008000057], + [-70.82598221799995, 45.410459290000077], + [-70.812985595999919, 45.423430074000109], + [-70.794873006999893, 45.430406392000108], + [-70.771876993999939, 45.430044658], + [-70.752550007999901, 45.422344870000117], + [-70.718004313999899, 45.397281799], + [-70.696739461999925, 45.388651836000136], + [-70.67578466799992, 45.388703512000077], + [-70.653589640999911, 45.395473124000105], + [-70.641316487999887, 45.40849558500004], + [-70.650256510999981, 45.427460836000094], + [-70.668162394999882, 45.439036357000063], + [-70.707384806999926, 45.456399638000065], + [-70.722836059999906, 45.470920716000094], + [-70.732008626999914, 45.491591289000112], + [-70.730329142999949, 45.507972717000158], + [-70.686791748999923, 45.572723287000159], + [-70.589614216999934, 45.651788229000047], + [-70.572405965999934, 45.662278544000017], + [-70.514735066999975, 45.68170888300007], + [-70.484762735999936, 45.699640605000141], + [-70.472799641999899, 45.703568014000112], + [-70.450423746999917, 45.703723044000142], + [-70.439132446999935, 45.705893453000058], + [-70.41931453499987, 45.716900533000128], + [-70.407351441, 45.73152496400003], + [-70.402442179999952, 45.749663391000141], + [-70.403940795999887, 45.771160787], + [-70.408281616999943, 45.781651103000129], + [-70.413681803999907, 45.787697246000093], + [-70.417169962999964, 45.79379506500014], + [-70.415232096999944, 45.80438873300001], + [-70.409935262999909, 45.81074493500013], + [-70.389807291999944, 45.825059306000028], + [-70.312654378999952, 45.867640686000087], + [-70.283172973999967, 45.89048166900001], + [-70.262528238999948, 45.923037821000051], + [-70.255939493999875, 45.94887603800008], + [-70.263148355999931, 45.956834208000046], + [-70.280434123999925, 45.959314677000023], + [-70.303946899999914, 45.968616435000129], + [-70.316297566999964, 45.982982483000129], + [-70.316891845999919, 45.999002177000094], + [-70.306143147999904, 46.035330709000064], + [-70.303636840999928, 46.038482971000022], + [-70.29430924499988, 46.044942526000071], + [-70.292009643999876, 46.048663229000098], + [-70.293017333999927, 46.054037578000063], + [-70.296092081999888, 46.057861634000076], + [-70.300794636999939, 46.061737366000145], + [-70.304773722999926, 46.065974834000187], + [-70.311362467999913, 46.071865947], + [-70.312628540999953, 46.079565735000088], + [-70.30032955, 46.089280905000024], + [-70.264440266999969, 46.106592510000112], + [-70.249479939999901, 46.120596823000042], + [-70.244002238999911, 46.141009013000158], + [-70.24924739599993, 46.162764791000185], + [-70.263329223999875, 46.183228659000136], + [-70.284800781999905, 46.191858622], + [-70.280899210999934, 46.211857401000131], + [-70.253407348999957, 46.251493226], + [-70.236173258999969, 46.288338522000018], + [-70.223693400999906, 46.300792542000082], + [-70.201885945999976, 46.305495097000076], + [-70.199508829999928, 46.315261943000124], + [-70.197028360999951, 46.336862692000082], + [-70.188398396999901, 46.358411764000053], + [-70.167417764999897, 46.368178610000101], + [-70.153051716999897, 46.372829488000079], + [-70.074322672999926, 46.419544983000051], + [-70.061816976999921, 46.44540903700009], + [-70.050086425999922, 46.511270651000174], + [-70.03272314499992, 46.609765930000052], + [-70.023628092999928, 46.661287334000136], + [-70.007763427999919, 46.704075419000063], + [-69.989960896999975, 46.721697083000052], + [-69.899708008999966, 46.811562398000078], + [-69.809403441999933, 46.901298523000051], + [-69.719098876999908, 46.991086324000051], + [-69.628794311999968, 47.08079661100011], + [-69.538463907999926, 47.170610250000109], + [-69.448159342999986, 47.260346375000111], + [-69.357906453999959, 47.350134176000026], + [-69.267627726999933, 47.439844462000067], + [-69.25091040099997, 47.452918600000132], + [-69.237267822999883, 47.458809713000122], + [-69.221971598999914, 47.459688213000064], + [-69.069655313999931, 47.431886292000016], + [-69.054023193999882, 47.418398743000139], + [-69.054333251999964, 47.389253235000027], + [-69.066192993999977, 47.32967030900015], + [-69.06513362599992, 47.296339010000096], + [-69.063559775999892, 47.290809266000153], + [-69.057485514999939, 47.269467265000074], + [-69.040199747999935, 47.24905507400014], + [-68.906228596999938, 47.190221457000135], + [-68.889717976999947, 47.190609029000157], + [-68.761818807999902, 47.237040304000075], + [-68.717790486999945, 47.245231018000098], + [-68.668801229999929, 47.24342234300012], + [-68.64420324699995, 47.245282694000124], + [-68.625599731999898, 47.255204570000032], + [-68.607926391999882, 47.269829], + [-68.585240437999914, 47.282489726000122], + [-68.539661824999939, 47.299853008000142], + [-68.518009398999936, 47.30476226800009], + [-68.49201615399997, 47.307552796000138], + [-68.466746378999915, 47.305692444000115], + [-68.435327107999882, 47.291274720000033], + [-68.422563029999907, 47.29310923300001], + [-68.410212361999953, 47.297424215], + [-68.385614380999897, 47.301713359000146], + [-68.383392292999957, 47.307139384000109], + [-68.384839233999884, 47.315872701], + [-68.382048705999921, 47.327809957000127], + [-68.347838907999915, 47.358505758], + [-68.299728148999947, 47.367833354000098], + [-68.246449747999975, 47.360572816000129], + [-68.19704707899993, 47.341400859000132], + [-68.184334675999906, 47.333132629], + [-68.156067667999906, 47.306674296], + [-68.145060587999922, 47.301454977000091], + [-68.115398315999954, 47.29228241], + [-68.101445679999955, 47.286184591000122], + [-68.039382283999913, 47.245231018000098], + [-67.993183552999938, 47.223216859000118], + [-67.962436075999904, 47.197688700000086], + [-67.953702758999924, 47.186629944000074], + [-67.949982055999925, 47.172935689000056], + [-67.943419148999936, 47.16453827], + [-67.899132446999914, 47.138777568000179], + [-67.870607055999955, 47.107358297000033], + [-67.854742390999945, 47.097849834000058], + [-67.813556274999939, 47.081907654000034], + [-67.808698689999915, 47.075138042000091], + [-67.805184692999973, 47.035631409000146], + [-67.802549194999955, 46.901246847000138], + [-67.800017049999951, 46.766784770000115], + [-67.79743322799996, 46.632296855000064], + [-67.794849406999873, 46.49786061600004], + [-67.792317260999965, 46.363476054000117], + [-67.789733439999878, 46.229013978000083], + [-67.787149617999972, 46.094551900000155], + [-67.784565796999885, 45.960141500000034], + [-67.782757120999889, 45.950529684000017], + [-67.776555949999903, 45.942933248000074], + [-67.767460896999921, 45.93595693000016], + [-67.75965775599991, 45.928567200000046], + [-67.757849080999904, 45.919472148000082], + [-67.769424601999873, 45.903969218000086], + [-67.787356323999916, 45.890016581000069], + [-67.799241902999967, 45.875650534000087], + [-67.792627318999877, 45.858907370000125], + [-67.776090861999961, 45.840820618000024], + [-67.772835245999971, 45.828056540000048], + [-67.779863240999902, 45.815705872000095], + [-67.794125935999972, 45.799169413000087], + [-67.806269897999954, 45.781754456000058], + [-67.811127482999979, 45.766509908000117], + [-67.807045043999977, 45.712869772000047], + [-67.800120401999976, 45.699847311000113], + [-67.786116088999904, 45.691217346000158], + [-67.761776488999971, 45.680106913000046], + [-67.748030558999943, 45.677781474000099], + [-67.740744180999883, 45.683620911], + [-67.735524861999949, 45.690752258000046], + [-67.727980102999908, 45.692250875000141], + [-67.717386433999906, 45.685377910000071], + [-67.710461791999933, 45.67540435800008], + [-67.704829060999913, 45.664190572000123], + [-67.690773070999882, 45.653803609000093], + [-67.660335652999919, 45.637370504000117], + [-67.607522338999871, 45.620058900000132], + [-67.551866820999948, 45.610447083000039], + [-67.506391561999891, 45.609826966000142], + [-67.475799112999965, 45.6129792280001], + [-67.449960896999954, 45.61080881700012], + [-67.431305704999971, 45.597941386000016], + [-67.4221073, 45.568795878000017], + [-67.426189737999977, 45.533449199000088], + [-67.443036254999981, 45.522183736000144], + [-67.467530883999927, 45.508282776000058], + [-67.493214070999898, 45.493141581000046], + [-67.482310343999956, 45.455521139000112], + [-67.428825236999927, 45.387049866000112], + [-67.434561319999972, 45.35030792300013], + [-67.459055948999918, 45.318423564000071], + [-67.468667765999925, 45.301835429000064], + [-67.475023966999885, 45.28235341400007], + [-67.471303263999943, 45.266282044000107], + [-67.427585001999972, 45.236568095000123], + [-67.390533, 45.193108216000113], + [-67.356271525999915, 45.165926412000047], + [-67.31921952299993, 45.153885804000154], + [-67.284647989999939, 45.169698792000148], + [-67.279583699999961, 45.17905222600011], + [-67.279221964999948, 45.187372131000146], + [-67.277206583999913, 45.195071920000075], + [-67.267336384999936, 45.202513326000158], + [-67.254985718999961, 45.205045472000066], + [-67.242428344999951, 45.202565003000089], + [-67.219070597999917, 45.192126363000156], + [-67.2061662079999, 45.189400586000133], + [-67.176014777999853, 45.178656317000119], + [-67.191273566999911, 45.180365302000112], + [-67.204375779999907, 45.178208726000136], + [-67.210316535999908, 45.171087958000086], + [-67.203887498999904, 45.157497463000126], + [-67.199899868999921, 45.156602281000048], + [-67.179676886999914, 45.157497463000126], + [-67.172393357999908, 45.155137437000164], + [-67.168446417999917, 45.149522203000075], + [-67.165964321999894, 45.142849026000121], + [-67.159616665999948, 45.132350979000037], + [-67.154164191999911, 45.119167385000097], + [-67.15208899599989, 45.116563218000081], + [-67.145985480999911, 45.115179755000113], + [-67.139393683999941, 45.111558335000055], + [-67.128203904999907, 45.102891343000138], + [-67.113474087999919, 45.086940822000045], + [-67.100290493999893, 45.069362697000102], + [-67.111195441999939, 45.053656317000062], + [-67.1045222649999, 45.037949937000079], + [-67.090036587999947, 45.025864976], + [-67.077015753999973, 45.020982164000102], + [-67.071644660999908, 45.014390367000047], + [-67.051991339999859, 44.98338450700011], + [-67.040069139999929, 44.973171291000156], + [-67.052235480999911, 44.961289781000048], + [-67.056019660999937, 44.945420640000108], + [-67.062733527999882, 44.931423244000044], + [-67.083485480999883, 44.925401109000134], + [-67.094512498999904, 44.933050848000065], + [-67.105946417999888, 44.945786851000108], + [-67.117298956999946, 44.948350328000018], + [-67.128203904999907, 44.925401109000134], + [-67.113067186999928, 44.915554104000122], + [-67.112090623999848, 44.904079494000158], + [-67.121693488999938, 44.894558010000154], + [-67.138417120999861, 44.890651760000154], + [-67.15135657499988, 44.89594147300015], + [-67.184763149999924, 44.916774807000039], + [-67.196481899999924, 44.918565171000026], + [-67.20339921799993, 44.904893296000083], + [-67.190541144999884, 44.89057038], + [-67.172311977999925, 44.877224026000178], + [-67.162953253999973, 44.866725979000122], + [-67.148671027999882, 44.81553782800016], + [-67.145985480999911, 44.825710354000094], + [-67.143788214999915, 44.85573965100015], + [-67.141835089999859, 44.863308010000097], + [-67.130360480999911, 44.864732164000159], + [-67.114369269999912, 44.846909898000021], + [-67.100290493999893, 44.849636135000154], + [-67.107696092999873, 44.857123114000117], + [-67.094105597999913, 44.863308010000097], + [-67.09711666599992, 44.867783921000168], + [-67.102284308999913, 44.877956447000102], + [-67.107696092999873, 44.883164781000019], + [-67.08849036399991, 44.888128973000065], + [-67.074737107999908, 44.870794989000061], + [-67.067128058999856, 44.844427802000084], + [-67.06615149599989, 44.822292385000097], + [-67.043649868999893, 44.833970445], + [-67.04198157499988, 44.854437567000062], + [-67.059315558999856, 44.897447007000025], + [-67.043690558999884, 44.894029039000188], + [-67.032948370999861, 44.88438548400002], + [-67.012155727999868, 44.857123114000117], + [-67.009063279999907, 44.856390692], + [-66.99474036399991, 44.857123114000117], + [-66.991403774999895, 44.855658270000063], + [-66.991444464999887, 44.851914781000133], + [-66.992298956999974, 44.847398179], + [-66.991688605999911, 44.843491929], + [-66.979481574999937, 44.818793036], + [-66.977324998999933, 44.81553782800016], + [-66.984974738999966, 44.804917710000112], + [-67.019398566999911, 44.774929104000151], + [-67.032582160999937, 44.767116604000151], + [-67.042469855999855, 44.766221421000168], + [-67.063954230999883, 44.76858144700013], + [-67.073597785999965, 44.767116604000151], + [-67.074086066999939, 44.763698635000154], + [-67.082264777999853, 44.74571360900002], + [-67.08661861899995, 44.739772854000094], + [-67.094105597999913, 44.747259833000058], + [-67.103993292999917, 44.728989976], + [-67.113229946999894, 44.716253973000121], + [-67.169178839999944, 44.67092519700013], + [-67.17796790299991, 44.667588609000106], + [-67.195342576999877, 44.663275458], + [-67.203887498999904, 44.657253322000187], + [-67.20136471299989, 44.653591213000041], + [-67.196481899999924, 44.644232489], + [-67.224395311999871, 44.644232489], + [-67.232696092999845, 44.646755276000121], + [-67.248768683999913, 44.655503648], + [-67.251088019999884, 44.657253322000187], + [-67.261992967999873, 44.657700914000188], + [-67.269073045999932, 44.654811916000071], + [-67.26903235599994, 44.646348374000027], + [-67.258534308999856, 44.629909572000102], + [-67.280547654999879, 44.631374416000156], + [-67.294789191999968, 44.639634507000082], + [-67.308054165999891, 44.649766343000024], + [-67.32685299399995, 44.657253322000187], + [-67.32685299399995, 44.664740302000055], + [-67.310983852999925, 44.682399807000152], + [-67.314076300999915, 44.700710354000037], + [-67.332020636999857, 44.709499416000099], + [-67.360951300999943, 44.698838609000163], + [-67.347360805999898, 44.692653713000098], + [-67.360788540999891, 44.68557363500004], + [-67.373321092999902, 44.685899156000161], + [-67.38512122299997, 44.691188869000044], + [-67.395741339999915, 44.698838609000163], + [-67.389393683999884, 44.682481187000135], + [-67.37755286399991, 44.670762437000164], + [-67.371327277999853, 44.657700914000188], + [-67.382069464999887, 44.637396552], + [-67.367217576999906, 44.627468166000185], + [-67.370350714999887, 44.622300523], + [-67.379383917999888, 44.621283270000035], + [-67.382069464999887, 44.623765367000047], + [-67.398426886999886, 44.611802476000108], + [-67.404530402999882, 44.605698960000112], + [-67.409413214999944, 44.595811265000023], + [-67.422149217999902, 44.614976304000081], + [-67.426747199999937, 44.639390367000132], + [-67.434681769999884, 44.659206447000045], + [-67.457142706999889, 44.664740302000055], + [-67.450795050999972, 44.647650458000115], + [-67.451852993999921, 44.632269598000065], + [-67.450469529999936, 44.619370835000055], + [-67.436716274999924, 44.609483140000137], + [-67.454335089999944, 44.604600328000075], + [-67.472523566999939, 44.60313548400002], + [-67.48997962099989, 44.604925848], + [-67.50560462099989, 44.609483140000137], + [-67.499460415999891, 44.623806057000039], + [-67.505726691999939, 44.633571682000152], + [-67.51703854099992, 44.634873765000165], + [-67.52607174399995, 44.623765367000047], + [-67.532907680999955, 44.623765367000047], + [-67.539051886999943, 44.646226304000052], + [-67.554392055999898, 44.644069729000037], + [-67.593739386999886, 44.61631907800016], + [-67.573190883999928, 44.617539781000076], + [-67.56586666599992, 44.609808661000059], + [-67.56708736899995, 44.579046942], + [-67.569284633999928, 44.571153062000022], + [-67.573231574999937, 44.562486070000105], + [-67.574981248999933, 44.553493557000095], + [-67.570423956999974, 44.544907945], + [-67.569040493999893, 44.538682359000049], + [-67.577870245999861, 44.535264390000023], + [-67.589792446999894, 44.533189195000105], + [-67.597401495999947, 44.530951239000117], + [-67.603464321999923, 44.528102932000181], + [-67.612090623999933, 44.526597398000135], + [-67.621286587999919, 44.526393947000159], + [-67.628448045999846, 44.52753327], + [-67.638701951999877, 44.531683661000059], + [-67.639759894999941, 44.534776109000134], + [-67.638661261999886, 44.539333401000178], + [-67.639841274999924, 44.547552802000084], + [-67.640410936999899, 44.554877020000092], + [-67.643747524999924, 44.563910223], + [-67.648955857999908, 44.56854889500012], + [-67.659209764999929, 44.56667715100015], + [-67.668568488999966, 44.561468817000062], + [-67.683705206999946, 44.548041083000058], + [-67.714141404999907, 44.500759182000095], + [-67.728016730999911, 44.503200588000041], + [-67.740183071999894, 44.510362046000083], + [-67.748768683999913, 44.521999416000185], + [-67.751983201999877, 44.538072007000082], + [-67.740467902999939, 44.588242906000161], + [-67.744577602999868, 44.595811265000023], + [-67.755604620999918, 44.589626369000044], + [-67.78612219999988, 44.541774807000124], + [-67.783314581999917, 44.537298895000148], + [-67.78612219999988, 44.52753327], + [-67.790150519999941, 44.531724351000051], + [-67.800526495999918, 44.541205145000148], + [-67.796416795999875, 44.554470119000158], + [-67.785511847999913, 44.570583401000064], + [-67.779286261999943, 44.585882880000028], + [-67.782663540999863, 44.60150788], + [-67.79051673099994, 44.59988027600015], + [-67.799590623999848, 44.58860911699999], + [-67.806630011999914, 44.575384833000143], + [-67.817168748999876, 44.583766994000101], + [-67.828358527999882, 44.584255276000178], + [-67.837147589999859, 44.577744859000077], + [-67.84593665299991, 44.551296291000099], + [-67.857289191999882, 44.546087958000115], + [-67.869007941999882, 44.544541734000077], + [-67.874867316999911, 44.541774807000124], + [-67.87205969999988, 44.530056057000039], + [-67.852324998999848, 44.508653062000079], + [-67.847604946999923, 44.497097072000045], + [-67.852284308999856, 44.482530015000023], + [-67.863555467999845, 44.479356187000164], + [-67.877308722999942, 44.482367255000057], + [-67.889149542999917, 44.486558335], + [-67.884999152999882, 44.466905015000137], + [-67.899606899999895, 44.422105210000112], + [-67.902211066999911, 44.39720286699999], + [-67.92125403599988, 44.411363023], + [-67.923451300999972, 44.437770901000178], + [-67.915028449999937, 44.466294664000159], + [-67.902211066999911, 44.486558335], + [-67.917103644999941, 44.481553453000132], + [-67.92800859299993, 44.468288479000122], + [-67.934681769999884, 44.45136139500012], + [-67.93700110599994, 44.435044664000102], + [-67.934356248999876, 44.416367906000133], + [-67.93700110599994, 44.408636786000116], + [-67.947214321999894, 44.41425202000012], + [-67.953561977999925, 44.419134833], + [-67.959014451999849, 44.422390041000043], + [-67.962839321999866, 44.426743882000139], + [-67.96430416599992, 44.435044664000102], + [-67.967722133999928, 44.500759182000095], + [-67.97789466099988, 44.499131578000075], + [-67.982899542999917, 44.49416738500004], + [-67.984567837999947, 44.486314195000048], + [-67.984730597999913, 44.476019598000121], + [-67.98875891799986, 44.466498114000117], + [-67.998158331999889, 44.466498114000117], + [-68.015817837999919, 44.472927151000064], + [-68.028797980999911, 44.468532619000158], + [-68.01585852799991, 44.458848374000112], + [-67.984730597999913, 44.445583401000178], + [-67.984405076999877, 44.440659898000106], + [-67.97398841099988, 44.413519598], + [-67.971140102999954, 44.410834052000112], + [-67.972157355999911, 44.403753973000065], + [-67.974720831999917, 44.395290432000124], + [-67.978871222999942, 44.387884833000115], + [-67.984730597999913, 44.383530992000047], + [-67.994618292999917, 44.383530992000047], + [-67.99779212099989, 44.389268296000111], + [-67.999460415999891, 44.395534572000074], + [-68.005238410999937, 44.39720286699999], + [-68.015004035999908, 44.393744208000086], + [-68.015329555999926, 44.390570380000028], + [-68.014108852999897, 44.385524807000152], + [-68.019520636999943, 44.376695054000109], + [-68.050323045999932, 44.340358791000128], + [-68.060536261999857, 44.328314520000035], + [-68.072987433999884, 44.338324286], + [-68.076405402999882, 44.349351304000052], + [-68.073475714999859, 44.362046617000104], + [-68.066639777999939, 44.376695054000109], + [-68.082386847999913, 44.372341213000126], + [-68.088408982999908, 44.369248765000137], + [-68.097523566999911, 44.38572825700011], + [-68.107411261999914, 44.415554104000037], + [-68.112416144999941, 44.441351630000057], + [-68.108021613999966, 44.463609117000104], + [-68.111520962999862, 44.480088609000077], + [-68.139352993999921, 44.486558335], + [-68.143259243999921, 44.489284572000159], + [-68.14305579299986, 44.494981187000135], + [-68.143503383999956, 44.500026760000154], + [-68.149199998999933, 44.500759182000095], + [-68.158070441999882, 44.496812242000104], + [-68.159942186999871, 44.491725979000094], + [-68.159901495999861, 44.485866604000151], + [-68.162871873999876, 44.479112046000026], + [-68.162627732999937, 44.473578192], + [-68.158924933999884, 44.466782945000077], + [-68.158151821999866, 44.461045640000108], + [-68.16661536399991, 44.458685614000146], + [-68.181589321999951, 44.459092515000137], + [-68.187285936999928, 44.462184963000041], + [-68.189564581999889, 44.469509182000039], + [-68.190215623999848, 44.497544664000046], + [-68.193633592999873, 44.520005601000051], + [-68.202015753999916, 44.525091864000089], + [-68.217518683999913, 44.500759182000095], + [-68.219838019999884, 44.485947984000134], + [-68.219227667999917, 44.472031968000138], + [-68.222116665999863, 44.466294664000159], + [-68.254261847999913, 44.493516343000081], + [-68.259266730999883, 44.504177151000121], + [-68.25849361899995, 44.520697333], + [-68.276356574999909, 44.520493882000139], + [-68.294300910999965, 44.527777411000059], + [-68.308135545999875, 44.529038804000052], + [-68.313710089999859, 44.510484117000047], + [-68.281524217999902, 44.499375718000024], + [-68.26980546799993, 44.486070054000109], + [-68.286407029999879, 44.466091213000041], + [-68.281442837999919, 44.462673244000129], + [-68.278309699999852, 44.459011135000154], + [-68.275827602999925, 44.455308335000112], + [-68.27273515499985, 44.451849677000112], + [-68.317087368999893, 44.451198635000154], + [-68.337635870999918, 44.455104885000154], + [-68.354685024999895, 44.466091213000041], + [-68.36192786399991, 44.445827541000128], + [-68.386463995999918, 44.424343166000185], + [-68.382598436999928, 44.410834052000112], + [-68.409291144999941, 44.404649156000133], + [-68.422963019999884, 44.405137437000135], + [-68.426706508999928, 44.41722239800005], + [-68.423329230999911, 44.470974026000093], + [-68.43187415299991, 44.486599026000178], + [-68.449940558999941, 44.493679104000037], + [-68.478220180999898, 44.493394273000106], + [-68.459828253999945, 44.462103583000058], + [-68.457753058999941, 44.448716539000046], + [-68.459502732999937, 44.442897854000094], + [-68.462839321999951, 44.438666083000086], + [-68.464466925999972, 44.434271552], + [-68.461130337999947, 44.428208726], + [-68.456044074999937, 44.424343166000185], + [-68.451893683999884, 44.422308661000059], + [-68.449696417999888, 44.418727932000095], + [-68.450306769999941, 44.410834052000112], + [-68.455189581999917, 44.401800848], + [-68.464792446999894, 44.389837958000086], + [-68.474069790999948, 44.382432359000077], + [-68.478220180999898, 44.387233791000156], + [-68.478138800999915, 44.410834052000112], + [-68.480091925999943, 44.421616929000109], + [-68.485056118999921, 44.431911526000036], + [-68.504424607999937, 44.413356838000041], + [-68.525990363999938, 44.405625718000024], + [-68.54942786399991, 44.405747789000188], + [-68.574411587999919, 44.410834052000112], + [-68.56301835799988, 44.400580145], + [-68.551503058999941, 44.377224026000093], + [-68.543080206999974, 44.366156317000062], + [-68.541778123999876, 44.356919664000188], + [-68.556141730999855, 44.330023505000113], + [-68.560170050999915, 44.318345445000105], + [-68.555856899999924, 44.306179104000037], + [-68.545928514999929, 44.302435614], + [-68.534535285999965, 44.300645249000027], + [-68.525990363999938, 44.294785874000169], + [-68.520863410999937, 44.28001536699999], + [-68.52318274599989, 44.269558010000097], + [-68.532012498999848, 44.266628322000187], + [-68.546498175999886, 44.274278062000022], + [-68.541005011999857, 44.263698635000154], + [-68.533640102999868, 44.256374416000156], + [-68.524362758999928, 44.250921942000119], + [-68.512928839999859, 44.246364651000178], + [-68.54137122299997, 44.237331447000159], + [-68.633493618999864, 44.296250718000053], + [-68.666940883999928, 44.298203843000081], + [-68.683705206999946, 44.294460354000066], + [-68.7041316399999, 44.305121161000088], + [-68.732045050999943, 44.328314520000035], + [-68.756214972999942, 44.334458726], + [-68.791778123999933, 44.31639232], + [-68.820790167999917, 44.314642645000092], + [-68.811797654999907, 44.35158926000004], + [-68.803944464999915, 44.369248765000137], + [-68.789784308999884, 44.376695054000109], + [-68.780262824999909, 44.374538479000122], + [-68.770863410999965, 44.365179755], + [-68.762806769999941, 44.363063869000158], + [-68.753285285999937, 44.367539781000133], + [-68.754261847999913, 44.377875067000147], + [-68.760446743999893, 44.389349677], + [-68.766224738999938, 44.39720286699999], + [-68.75320390499985, 44.404974677000084], + [-68.741973436999871, 44.41425202000012], + [-68.735300258999899, 44.414658921000026], + [-68.714792446999951, 44.405300197000102], + [-68.704782680999955, 44.404038804], + [-68.699330206999917, 44.409694729000179], + [-68.717396613999938, 44.431586005000113], + [-68.718373175999915, 44.445583401000178], + [-68.756214972999942, 44.430894273], + [-68.766224738999938, 44.424505927000055], + [-68.784413214999944, 44.402777411000088], + [-68.795847133999899, 44.392564195000048], + [-68.807118292999888, 44.390977281000019], + [-68.816192186999871, 44.402085679000052], + [-68.814401821999894, 44.417995510000154], + [-68.807240363999938, 44.434108791000043], + [-68.800323045999846, 44.445583401000178], + [-68.796579555999926, 44.448513088000098], + [-68.784657355999883, 44.453843492000075], + [-68.779245571999923, 44.458685614000146], + [-68.776641404999936, 44.46495189000008], + [-68.774932420999932, 44.480210679000052], + [-68.772979295999875, 44.486558335], + [-68.742624477999897, 44.537298895000148], + [-68.746205206999974, 44.554877020000092], + [-68.779245571999923, 44.561712958], + [-68.795847133999899, 44.561997789000046], + [-68.801625128999945, 44.560288804000137], + [-68.807118292999888, 44.534369208000115], + [-68.82762610599994, 44.479112046000026], + [-68.821400519999969, 44.478461005000057], + [-68.807118292999888, 44.472927151000064], + [-68.824696417999917, 44.461045640000108], + [-68.845244920999875, 44.453802802000084], + [-68.857126430999898, 44.456081447000045], + [-68.848133917999888, 44.472927151000064], + [-68.86274166599992, 44.475368557000181], + [-68.879628058999913, 44.468532619000158], + [-68.906483527999882, 44.448716539000046], + [-68.919422980999883, 44.441392320000048], + [-68.965443488999938, 44.431911526000036], + [-68.986602342999845, 44.421169338000126], + [-68.982289191999939, 44.413600979000179], + [-68.971913214999944, 44.405788479000179], + [-68.975087042999917, 44.394069729000094], + [-68.972767706999946, 44.383815822000159], + [-68.944569464999887, 44.348822333000058], + [-68.937489386999914, 44.331976630000057], + [-68.945546027999939, 44.317165432000095], + [-68.964100714999944, 44.307806708000058], + [-68.98460852799991, 44.301214911], + [-68.998972133999871, 44.294785874000169], + [-69.021595831999946, 44.247788804000052], + [-69.036244269999941, 44.232611395000063], + [-69.053578253999945, 44.18492259300011], + [-69.067901170999932, 44.158962307000095], + [-69.077748175999943, 44.144964911000145], + [-69.088327602999897, 44.136501369000101], + [-69.088327602999897, 44.130316473000121], + [-69.082875128999945, 44.115261135000125], + [-69.089548305999926, 44.098089911], + [-69.086903449999937, 44.086696682000039], + [-69.053578253999945, 44.089300848000121], + [-69.065215623999848, 44.06761302300005], + [-69.075795050999915, 44.052516994000044], + [-69.09150143099987, 44.043809312000135], + [-69.118763800999943, 44.040879624000027], + [-69.126210089999944, 44.031032619000101], + [-69.130645311999899, 44.011745510000154], + [-69.142038540999863, 43.998724677], + [-69.170277472999942, 44.007432359000077], + [-69.171823696999894, 43.997178453000132], + [-69.175892706999946, 43.991400458], + [-69.182484503999916, 43.990016994000101], + [-69.191395636999943, 43.993109442], + [-69.199574347999942, 43.981878973000093], + [-69.203643357999908, 43.970322984000163], + [-69.201649542999888, 43.959987697000045], + [-69.191395636999943, 43.952175197000159], + [-69.227040167999888, 43.935248114000089], + [-69.238514777999939, 43.931667385000097], + [-69.258005337999919, 43.92800527600015], + [-69.26341712099989, 43.929917710000112], + [-69.259632941999939, 43.955267645000148], + [-69.229237433999884, 43.990993557000181], + [-69.219471808999856, 44.008490302000112], + [-69.238514777999939, 44.007432359000077], + [-69.298858201999877, 43.950384833000086], + [-69.310536261999886, 43.94163646], + [-69.313750779999936, 43.954331773000078], + [-69.303171352999897, 43.981227932000039], + [-69.313954230999883, 43.986273505000085], + [-69.328317837999862, 43.983384507000139], + [-69.353301561999871, 43.972438869000158], + [-69.369496222999942, 43.972642320000134], + [-69.35326087099989, 43.994655666000043], + [-69.347157355999911, 44.00775788], + [-69.351796027999939, 44.013617255000142], + [-69.369414842999845, 44.015855210000112], + [-69.370147264999872, 44.021511135000125], + [-69.351796027999939, 44.037543036], + [-69.347279425999972, 44.050767320000048], + [-69.354196743999864, 44.060492255], + [-69.364287889999844, 44.060532945], + [-69.369496222999942, 44.044663804000052], + [-69.376576300999886, 44.036729234000106], + [-69.390980597999942, 44.031927802000027], + [-69.402211066999968, 44.02659739800005], + [-69.394886847999942, 44.002427476000136], + [-69.407704230999883, 43.994330145], + [-69.424265102999954, 43.991644598000121], + [-69.43036861899995, 43.993109442], + [-69.440907355999911, 43.981390692], + [-69.447783982999908, 43.967556057000095], + [-69.478789842999845, 43.880316473], + [-69.494130011999886, 43.851100979000151], + [-69.512928839999944, 43.834906317], + [-69.514352993999921, 43.85565827], + [-69.521677212999919, 43.870347398000021], + [-69.52989661399991, 43.883002020000063], + [-69.533965623999876, 43.897569078000103], + [-69.540231899999924, 43.897569078000103], + [-69.545440232999908, 43.883286851000108], + [-69.547596808999913, 43.867865302000084], + [-69.547637498999904, 43.834906317], + [-69.561268683999856, 43.849107164000102], + [-69.553822394999969, 43.856553453000103], + [-69.569081183999941, 43.86839427300005], + [-69.570505337999919, 43.877915757000054], + [-69.56541907499988, 43.886989651000064], + [-69.561268683999856, 43.897569078000103], + [-69.559803839999887, 43.904079494000186], + [-69.55492102799991, 43.915798244000158], + [-69.553822394999969, 43.920843817000033], + [-69.556019660999965, 43.927679755000113], + [-69.565378383999899, 43.934271552000027], + [-69.567494269999912, 43.94163646], + [-69.558867967999902, 43.964585679], + [-69.529042120999918, 44.004380601], + [-69.533965623999876, 44.021022854000037], + [-69.544870571999951, 44.011948960000112], + [-69.554066535999908, 43.998561916000128], + [-69.567494269999912, 43.972642320000134], + [-69.580555792999888, 43.957017320000048], + [-69.585804816999968, 43.948472398000106], + [-69.584584113999938, 43.94163646], + [-69.581817186999899, 43.934556382000139], + [-69.584217902999939, 43.92576732], + [-69.589304165999863, 43.917344468000024], + [-69.5947566399999, 43.911159572000045], + [-69.589344855999855, 43.904811916000128], + [-69.587513800999972, 43.897243557000152], + [-69.589304165999863, 43.889634507000139], + [-69.5947566399999, 43.883246161000116], + [-69.584828253999888, 43.87071360900002], + [-69.577910936999899, 43.85565827], + [-69.576039191999939, 43.83897532800016], + [-69.581166144999941, 43.821804104000037], + [-69.592396613999938, 43.807725328000103], + [-69.596140102999897, 43.815904039000102], + [-69.5947566399999, 43.849107164000102], + [-69.609893357999908, 43.839585679000109], + [-69.62446041599992, 43.838405666000185], + [-69.639637824999909, 43.84446849199999], + [-69.656931118999921, 43.856553453000103], + [-69.668894008999928, 43.867051499000141], + [-69.670114712999862, 43.873561916000071], + [-69.649403449999852, 43.897569078000103], + [-69.65379798099994, 43.904974677], + [-69.655018683999856, 43.910508531000019], + [-69.653431769999912, 43.916205145000092], + [-69.649403449999852, 43.924261786000116], + [-69.642445441999968, 43.921250718000024], + [-69.629343227999897, 43.919216213000183], + [-69.622792120999918, 43.917425848], + [-69.63121497299997, 43.929225979000151], + [-69.642689581999917, 43.933457749000084], + [-69.652617967999902, 43.938991604000122], + [-69.656931118999921, 43.955267645000148], + [-69.653675910999965, 43.967759507000054], + [-69.636423305999955, 44.003688869000044], + [-69.630116339999915, 44.00804271000014], + [-69.619170701999849, 44.017523505000142], + [-69.615101691999882, 44.025905666000099], + [-69.62958736899995, 44.027289130000085], + [-69.64317786399991, 44.020982164000046], + [-69.656971808999913, 44.009222723000065], + [-69.749704555999926, 43.900661526000178], + [-69.759226040999948, 43.886419989000089], + [-69.752674933999856, 43.879136460000055], + [-69.740264451999934, 43.874863999000141], + [-69.731963670999846, 43.869574286000088], + [-69.729725714999859, 43.855943101000136], + [-69.732655402999882, 43.84190501500008], + [-69.746286587999919, 43.814398505000057], + [-69.735869920999846, 43.820583401000121], + [-69.722401495999861, 43.844224351000051], + [-69.712147589999944, 43.849107164000102], + [-69.704701300999943, 43.842027085000055], + [-69.707264777999882, 43.826931057000039], + [-69.73074296799993, 43.775905666000071], + [-69.744984503999945, 43.75877513200011], + [-69.758005337999919, 43.759507554000052], + [-69.766794399999895, 43.787624416000043], + [-69.76622473899991, 43.794867255000057], + [-69.763620571999923, 43.798936265000023], + [-69.760690883999899, 43.801621812000107], + [-69.75926673099994, 43.804429429000052], + [-69.761463995999918, 43.811550197000102], + [-69.766306118999893, 43.813666083000115], + [-69.77118893099987, 43.813666083000115], + [-69.773548956999917, 43.814398505000057], + [-69.780384894999941, 43.862779039000046], + [-69.783640102999897, 43.873480536000088], + [-69.790720180999955, 43.886704820000105], + [-69.794056769999969, 43.897569078000103], + [-69.795277472999885, 43.910427151000036], + [-69.794870571999894, 43.922145901000121], + [-69.795684373999904, 43.933457749000084], + [-69.800892706999889, 43.944688218000081], + [-69.80337480399993, 43.964911200000117], + [-69.80728105399993, 43.983140367000019], + [-69.804676886999914, 43.997463283000073], + [-69.802072719999927, 44.014390367000075], + [-69.790353969999842, 44.02871328300013], + [-69.781239386999943, 44.03652578300013], + [-69.77082271999987, 44.045640367000132], + [-69.768218553999958, 44.053452867000132], + [-69.768218553999958, 44.058661200000031], + [-69.77472896999987, 44.059963283000016], + [-69.782541469999842, 44.057359117000104], + [-69.789051886999943, 44.049546617000132], + [-69.79946855399993, 44.04433828300013], + [-69.817697719999899, 44.03652578300013], + [-69.84504146999987, 44.010484117000075], + [-69.86457271999987, 43.997463283000073], + [-69.874989386999943, 43.98704661699999], + [-69.882801886999943, 43.976629950000088], + [-69.882801886999943, 43.963609117000104], + [-69.87238521999987, 43.958400783000016], + [-69.854156053999873, 43.958400783000016], + [-69.841135219999899, 43.966213283000016], + [-69.832020636999886, 43.974025783000016], + [-69.825510219999899, 43.970119533000016], + [-69.821603969999899, 43.961004950000031], + [-69.815093553999901, 43.933661200000145], + [-69.802235480999883, 43.860541083000058], + [-69.800892706999889, 43.825181382000054], + [-69.791940883999871, 43.791001695000077], + [-69.78250077999985, 43.772935289000046], + [-69.780384894999941, 43.763454494000044], + [-69.787302212999947, 43.737534898000135], + [-69.790638800999972, 43.733099677000055], + [-69.803171352999868, 43.729681708000058], + [-69.814239061999899, 43.721177476000108], + [-69.82286536399991, 43.70994700700011], + [-69.828155076999877, 43.69826894700013], + [-69.83930416599992, 43.709255276000178], + [-69.841826951999934, 43.740261135000097], + [-69.852080857999852, 43.746690171000026], + [-69.857899542999917, 43.754258531000161], + [-69.85838782499988, 43.770778713000041], + [-69.855498826999877, 43.793890692], + [-69.85179602799991, 43.800808010000097], + [-69.847035285999908, 43.803737697000102], + [-69.843006964999944, 43.807806708000086], + [-69.841257290999948, 43.818060614], + [-69.844593878999973, 43.826768296000083], + [-69.85960852799991, 43.836533921000026], + [-69.862985805999926, 43.845729885000097], + [-69.860218878999973, 43.856227932000152], + [-69.856190558999913, 43.862087307000095], + [-69.857126430999898, 43.865708726000079], + [-69.869130011999914, 43.869574286000088], + [-69.879261847999942, 43.87055084800015], + [-69.888539191999911, 43.868353583000058], + [-69.896839972999885, 43.86355215100015], + [-69.903920050999943, 43.856553453000103], + [-69.891713019999969, 43.851345119000101], + [-69.881337042999888, 43.844020901000093], + [-69.87535559799997, 43.832302151000093], + [-69.8760066399999, 43.814398505000057], + [-69.88300533799989, 43.800563869000044], + [-69.894764777999882, 43.789333401000064], + [-69.905629035999965, 43.78729889500012], + [-69.910145636999914, 43.801296291000156], + [-69.951120571999923, 43.760362046000139], + [-69.958200649999895, 43.756333726], + [-69.965280727999954, 43.75462474199999], + [-69.970692511999914, 43.751491604000094], + [-69.974354620999947, 43.734971421000026], + [-69.978505011999886, 43.729437567], + [-69.984852667999917, 43.726345119000129], + [-69.992665167999917, 43.725612697000187], + [-69.92629960799988, 43.828558661000059], + [-69.93065344999988, 43.849107164000102], + [-69.942128058999913, 43.841498114000089], + [-69.958363410999937, 43.821804104000037], + [-69.972767706999917, 43.799505927], + [-69.978993292999888, 43.783962307000095], + [-69.98294023299988, 43.767442124000027], + [-69.993438279999936, 43.751817124000027], + [-70.008900519999941, 43.741237697000159], + [-70.027455206999946, 43.739935614000089], + [-70.009470180999926, 43.766872463000041], + [-69.962635870999861, 43.821030992000104], + [-69.951120571999923, 43.849107164000102], + [-69.973093227999954, 43.847113348000065], + [-70.006377732999937, 43.827093817], + [-70.020008917999888, 43.828640041000043], + [-70.010853644999912, 43.833278713000155], + [-70.000681118999864, 43.84084707200013], + [-69.99168860599994, 43.850856838000098], + [-69.985829230999911, 43.862779039000046], + [-69.999379035999965, 43.861517645000148], + [-70.011748826999906, 43.85565827], + [-70.022328253999945, 43.847194729000151], + [-70.039580857999852, 43.830064195000105], + [-70.050038214999944, 43.823960679000137], + [-70.074655727999925, 43.814398505000057], + [-70.088002081999946, 43.811061916000128], + [-70.098907029999936, 43.809922593000081], + [-70.10883541599992, 43.806748765000023], + [-70.160878058999884, 43.766546942000119], + [-70.182606574999852, 43.757066148000106], + [-70.208688930999926, 43.715277411], + [-70.239125128999973, 43.700059312000022], + [-70.238474087999919, 43.687038479000122], + [-70.233754035999908, 43.673041083000058], + [-70.232289191999968, 43.664170640000023], + [-70.242949998999904, 43.653916734000077], + [-70.256703253999916, 43.650132554000052], + [-70.286854620999918, 43.65049876500008], + [-70.286854620999918, 43.643052476000022], + [-70.257761196999866, 43.640488999000084], + [-70.231556769999941, 43.641546942000147], + [-70.210886196999923, 43.63503652600015], + [-70.198109503999973, 43.609564520000148], + [-70.198231574999937, 43.598659572000159], + [-70.202870245999861, 43.56761302300005], + [-70.204945441999882, 43.561143296000139], + [-70.220244920999846, 43.559068101000136], + [-70.245838995999918, 43.549790757], + [-70.260202602999897, 43.547471421000026], + [-70.255889451999906, 43.554388739000117], + [-70.252715623999933, 43.561143296000139], + [-70.271514451999877, 43.556911526000036], + [-70.292591925999915, 43.534531968000024], + [-70.307972785999937, 43.526963609000163], + [-70.310536261999857, 43.548366604000122], + [-70.325428839999915, 43.549546617000047], + [-70.343739386999886, 43.539496161000059], + [-70.356434699999937, 43.526963609000163], + [-70.36738033799989, 43.505316473000065], + [-70.370716925999915, 43.486354885000154], + [-70.368397589999859, 43.467230536], + [-70.362578904999907, 43.445054429000109], + [-70.343210415999891, 43.454291083], + [-70.332793748999904, 43.457546291000043], + [-70.32164466099988, 43.458726304000052], + [-70.32164466099988, 43.45250071800011], + [-70.335235154999936, 43.447292385000097], + [-70.346913214999944, 43.439439195000105], + [-70.366403774999924, 43.420843817000119], + [-70.369496222999913, 43.415513414000074], + [-70.373524542999888, 43.401882229000122], + [-70.37625077999985, 43.397243557000181], + [-70.382435675999915, 43.393744208], + [-70.395049607999908, 43.392604885000154], + [-70.403553839999915, 43.389837958], + [-70.422596808999913, 43.376898505], + [-70.437692837999919, 43.362982489000117], + [-70.454457160999937, 43.350612697000159], + [-70.478708462999919, 43.342637437000022], + [-70.508737758999899, 43.341498114], + [-70.519520636999886, 43.339544989000146], + [-70.530506964999944, 43.331773179000137], + [-70.56187903599988, 43.301052151000064], + [-70.570546027999882, 43.298488674000126], + [-70.581654425999915, 43.274888414000102], + [-70.583119269999969, 43.250881252000156], + [-70.568918423999946, 43.228989976000108], + [-70.583607550999943, 43.213934637000094], + [-70.596791144999912, 43.195461330000072], + [-70.582590298999889, 43.188625393000066], + [-70.599517381999874, 43.182237046000139], + [-70.611724412999934, 43.173000393000095], + [-70.630970831999889, 43.147080796000083], + [-70.660145636999943, 43.094142971000124], + [-70.671945766999926, 43.085598049000012], + [-70.687123175999915, 43.092149156000104], + [-70.700306769999941, 43.108465887000122], + [-70.714670376999919, 43.121934312000107], + [-70.733387824999909, 43.120428778000147], + [-70.731271938999981, 43.114650783000073], + [-70.742339647999927, 43.087958075000145], + [-70.744089321999923, 43.083807684000035], + [-70.75450598899991, 43.058986721000068], + [-70.732492641999897, 43.063299872000172], + [-70.709543423999918, 43.065171617000047], + [-70.704213019999941, 43.058905341000084], + [-70.708485480999855, 43.045233466000141], + [-70.715891079999949, 43.032171942000062], + [-70.719715949999852, 43.02757396000014], + [-70.728382941999939, 43.011297919000114], + [-70.781809048999889, 42.94912344], + [-70.803293423999918, 42.913885809000064], + [-70.811879035999937, 42.893133856000148], + [-70.814279751999976, 42.877305406000019], + [-70.815337693999936, 42.870266018000123], + [-70.80724036399991, 42.83494700700011], + [-70.809152798999946, 42.826239325000031], + [-70.818267381999959, 42.823919989000061], + [-70.863758917999917, 42.826239325000031], + [-70.853627081999974, 42.816961981000176], + [-70.844146287999962, 42.811997789000131], + [-70.822743292999917, 42.804429429], + [-70.820220506999902, 42.804348049000012], + [-70.812652147999955, 42.805243231000091], + [-70.809152798999946, 42.804429429], + [-70.805775519999941, 42.801255601000108], + [-70.800770636999914, 42.792547919000029], + [-70.804351365999963, 42.780381578000132], + [-70.775095180999926, 42.716335354000151], + [-70.7826228509999, 42.708929755000085], + [-70.812408006999902, 42.74213288], + [-70.823597785999908, 42.749863999000112], + [-70.819610154999936, 42.718736070000105], + [-70.798451300999943, 42.701890367000104], + [-70.7416072259999, 42.68162669500002], + [-70.757110154999907, 42.675482489000117], + [-70.765288865999906, 42.674302476], + [-70.775095180999926, 42.674790757], + [-70.757110154999907, 42.657212632000054], + [-70.701324022999927, 42.653306382000054], + [-70.700062628999916, 42.64061107], + [-70.68228105399993, 42.632188218000138], + [-70.677683071999894, 42.641343492000104], + [-70.679554816999939, 42.667954820000077], + [-70.671416795999932, 42.677110093000138], + [-70.658965623999904, 42.68431224199999], + [-70.631743943999908, 42.694606838000098], + [-70.633656378999973, 42.680039781000161], + [-70.629912889999844, 42.67206452], + [-70.621245897999955, 42.66868724199999], + [-70.607858852999954, 42.667954820000077], + [-70.598052537999905, 42.664984442000147], + [-70.599395311999899, 42.657700914000046], + [-70.602202928999958, 42.648667710000112], + [-70.597035285999937, 42.64061107], + [-70.597035285999937, 42.634466864000032], + [-70.611480272999898, 42.634507554000024], + [-70.618438279999907, 42.628851630000113], + [-70.623443162999934, 42.620469468000138], + [-70.631743943999908, 42.612738348000121], + [-70.642486131999931, 42.60667552300005], + [-70.647328253999916, 42.604518947000045], + [-70.665882941999911, 42.606472072000187], + [-70.666940883999871, 42.608506578000018], + [-70.669097459999875, 42.611680406000076], + [-70.674753383999956, 42.612290757000054], + [-70.686390753999973, 42.606472072000187], + [-70.695668097999913, 42.597398179], + [-70.701324022999927, 42.588568427000141], + [-70.708892381999959, 42.581813869000101], + [-70.81029212099989, 42.562811591000084], + [-70.861398891999869, 42.546942450000145], + [-70.878000454999921, 42.537543036000145], + [-70.87059485599994, 42.530707098000121], + [-70.878895636999914, 42.525946356000034], + [-70.88512122299997, 42.519964911000031], + [-70.889312303999901, 42.512274481000091], + [-70.891672329999949, 42.502752997000087], + [-70.877797003999973, 42.507879950000117], + [-70.864328579999892, 42.518296617000019], + [-70.854115363999938, 42.523667710000055], + [-70.850087042999888, 42.513657945000077], + [-70.840321417999945, 42.504868882000025], + [-70.838205532999922, 42.499172268000123], + [-70.846750454999949, 42.496568101000108], + [-70.855295376999976, 42.495062567000062], + [-70.860747850999928, 42.491359768000123], + [-70.865223761999886, 42.486883856000148], + [-70.88512122299997, 42.472845770000035], + [-70.891672329999949, 42.469305731000034], + [-70.89940344999988, 42.468166408000101], + [-70.91551673099994, 42.469427802000027], + [-70.92210852799991, 42.465562242000104], + [-70.925404425999943, 42.453192450000145], + [-70.91755123599998, 42.442775783000073], + [-70.904286261999943, 42.434393622000115], + [-70.891672329999949, 42.428290106000034], + [-70.916371222999942, 42.422430731000176], + [-70.943674282999922, 42.446966864], + [-70.963042772999955, 42.438299872000115], + [-70.973378058999856, 42.425116278000147], + [-70.974354620999918, 42.416449286000059], + [-70.966175910999908, 42.400376695], + [-70.963042772999955, 42.378363348000093], + [-70.96031653599988, 42.369045315000122], + [-70.95250403599988, 42.359442450000145], + [-70.96727454299986, 42.360744533000158], + [-70.983631964999887, 42.376613674000097], + [-70.997181769999941, 42.380560614000061], + [-71.007232225999928, 42.37759023600016], + [-71.005848761999943, 42.370794989000117], + [-70.997670050999943, 42.363674221000068], + [-70.987212693999936, 42.359442450000145], + [-71.006011522999898, 42.357123114], + [-71.022694464999944, 42.366644598], + [-71.036854620999861, 42.37246328300013], + [-71.048695441999911, 42.359442450000145], + [-71.037424282999922, 42.357001044000029], + [-71.027699347999885, 42.353583075000117], + [-71.02000891799986, 42.347967841000028], + [-71.014556443999936, 42.338934637000094], + [-71.029855923999975, 42.337836005000057], + [-71.042307094999899, 42.331773179000052], + [-71.046783006999959, 42.321519273000135], + [-71.038441535999908, 42.307928778000175], + [-71.027211066999911, 42.300482489], + [-71.017811652999882, 42.300197658000073], + [-70.993478969999899, 42.310980536000088], + [-70.998890753999945, 42.283758856000176], + [-70.983509894999912, 42.279608466000028], + [-70.962880011999886, 42.280218817], + [-70.95250403599988, 42.267238674000012], + [-70.955311652999939, 42.261786200000145], + [-70.966175910999908, 42.25381094], + [-70.966175910999908, 42.249579169000086], + [-70.961781378999945, 42.246242580000157], + [-70.955311652999939, 42.243312893000123], + [-70.949533657999979, 42.242824611000131], + [-70.946888800999886, 42.246486721000011], + [-70.940500454999949, 42.24599844], + [-70.925770636999886, 42.250392971000011], + [-70.909535285999937, 42.257228908000016], + [-70.898508266999897, 42.263861395000092], + [-70.887196417999888, 42.250555731000148], + [-70.875396287999934, 42.254461981000148], + [-70.867339647999898, 42.264837958000058], + [-70.867095506999959, 42.270656643], + [-70.880116339999944, 42.276678778000118], + [-70.891916469999899, 42.290716864000061], + [-70.899077928999958, 42.306586005], + [-70.898508266999897, 42.318426825000145], + [-70.85578365799995, 42.283921617000047], + [-70.831410285999908, 42.269680080000128], + [-70.783802863999938, 42.25967031500015], + [-70.761586066999968, 42.249212958000058], + [-70.741810675999943, 42.23566315300009], + [-70.716297980999855, 42.211859442000033], + [-70.713734503999945, 42.205145575000145], + [-70.71349036399991, 42.175360419000143], + [-70.713124152999882, 42.172430731000034], + [-70.70836341099988, 42.172186591000084], + [-70.695871548999975, 42.163885809000121], + [-70.67821204299986, 42.144110419000086], + [-70.652984178999901, 42.109035549000012], + [-70.630970831999889, 42.092515367000132], + [-70.6361384759999, 42.075425523], + [-70.627756313999924, 42.059149481000148], + [-70.597564256999931, 42.023098049000012], + [-70.592193162999962, 42.020086981000091], + [-70.59080969999988, 42.017320054000137], + [-70.596791144999912, 42.01064687700007], + [-70.606760219999899, 42.004584052], + [-70.617298956999946, 42.00324127800009], + [-70.627919074999909, 42.005560614000061], + [-70.637806769999912, 42.01064687700007], + [-70.632883266999869, 42.012111721000124], + [-70.623605923999889, 42.016058661000116], + [-70.617298956999946, 42.016791083000058], + [-70.629302537999877, 42.044338283000073], + [-70.638905402999853, 42.058905341000113], + [-70.648345506999874, 42.065252997000059], + [-70.655751105999855, 42.058010158000016], + [-70.665109829999892, 42.01064687700007], + [-70.675038214999887, 42.014715887000037], + [-70.682850714999887, 42.016058661000116], + [-70.690337693999965, 42.014715887000037], + [-70.714833136999886, 42.002671617000132], + [-70.654937303999958, 41.957098700000174], + [-70.623687303999873, 41.955064195000048], + [-70.604969855999911, 41.952541408000044], + [-70.565825975999871, 41.95538971600017], + [-70.544992641999897, 41.940619208], + [-70.529652472999942, 41.90648021], + [-70.523915167999888, 41.868394273000021], + [-70.531646287999877, 41.841782945000048], + [-70.533111131999931, 41.816229559000149], + [-70.504261847999913, 41.790025132000139], + [-70.43919837099989, 41.756089585], + [-70.400868292999945, 41.745021877000156], + [-70.274728969999842, 41.736273505000085], + [-70.289865688999924, 41.731634833000058], + [-70.32648678299995, 41.731390692], + [-70.339507615999935, 41.725734768], + [-70.335194464999944, 41.719224351000108], + [-70.315256313999953, 41.715562242000075], + [-70.274728969999842, 41.715155341000141], + [-70.243723110999923, 41.724107164000188], + [-70.191314256999931, 41.747056382], + [-70.100819464999887, 41.765936591000113], + [-70.070241354999922, 41.773458363000103], + [-70.036447719999899, 41.785834052000027], + [-70.021473761999943, 41.790920315000122], + [-70.000111456999889, 41.81631094000015], + [-70.003845379999944, 41.84629625700002], + [-70.001820441999911, 41.88190338700015], + [-70.021473761999943, 41.906927802], + [-70.011586066999939, 41.906887111000103], + [-70.003163214999887, 41.908596096000011], + [-69.986683722999913, 41.913763739], + [-69.986683722999913, 41.921210028000175], + [-70.006011522999927, 41.922837632], + [-70.018666144999912, 41.930080471000124], + [-70.028146938999896, 41.937974351], + [-70.037912563999953, 41.941636460000055], + [-70.051828579999921, 41.935248114000117], + [-70.057362433999941, 41.904242255], + [-70.068674282999922, 41.893296617000047], + [-70.071840605999881, 41.927678962000115], + [-70.074490303999937, 41.947629265000117], + [-70.079790032999938, 41.995005957000032], + [-70.08378508699991, 42.012454048000123], + [-70.09985153, 42.037390252000122], + [-70.138096235999882, 42.057351722000178], + [-70.16561855899991, 42.063835382], + [-70.189793965999911, 42.04938290900013], + [-70.192128058999856, 42.037909247000172], + [-70.176665818999936, 42.037502346000068], + [-70.17162024599989, 42.037909247000172], + [-70.170807835999909, 42.027879022], + [-70.18927424799989, 42.017859987000051], + [-70.202556304999916, 42.026203178000159], + [-70.224615563999919, 42.050380918000101], + [-70.231350656999922, 42.05723842700003], + [-70.240090436999907, 42.059226541000115], + [-70.246819749999901, 42.061468091000151], + [-70.24431172199985, 42.068718454000177], + [-70.236596393999918, 42.075855142000094], + [-70.229376759999951, 42.080616148000118], + [-70.215764130999929, 42.084642532000103], + [-70.19221991, 42.086062010000049], + [-70.167661709999919, 42.082976925000153], + [-70.146466263999912, 42.081010900000095], + [-70.117863494999966, 42.073805360000065], + [-70.081197774999879, 42.058353658000115], + [-70.051123477999937, 42.039752634000095], + [-70.014011529999976, 41.998940519000044], + [-69.982167981999936, 41.953621164000097], + [-69.943255322999931, 41.857625261000081], + [-69.924672003999945, 41.838080145000035], + [-69.927723761999943, 41.834865627000156], + [-69.93101966099988, 41.832953192], + [-69.934681769999941, 41.832098700000088], + [-69.938872850999957, 41.831854559000149], + [-69.95335852799991, 41.84088776200015], + [-69.963961179999927, 41.843532877000158], + [-69.97203528599988, 41.839178778000147], + [-69.975738084999932, 41.810532945], + [-69.97984778599988, 41.79706452], + [-69.956654425999943, 41.807806708000115], + [-69.942005988999938, 41.806463934000035], + [-69.93423417899993, 41.792954820000048], + [-69.932525193999936, 41.741034247000172], + [-69.938872850999957, 41.674221096000124], + [-69.978138800999972, 41.681830145000063], + [-70.136870897999927, 41.660549221000011], + [-70.185292120999947, 41.660549221000011], + [-70.217355923999918, 41.648260809000035], + [-70.229644334999875, 41.646226304000109], + [-70.239898240999906, 41.643255927], + [-70.248524542999917, 41.635687567000062], + [-70.264149542999888, 41.616156317000062], + [-70.272775844999899, 41.610581773000078], + [-70.271229620999947, 41.621039130000142], + [-70.261057094999899, 41.646226304000109], + [-70.275990363999938, 41.644232489000089], + [-70.303049282999979, 41.634751695000077], + [-70.319081183999884, 41.632635809000149], + [-70.351958787999962, 41.635199286000059], + [-70.36587480399993, 41.632798570000105], + [-70.380848761999886, 41.622992255], + [-70.391590949999909, 41.619208075000145], + [-70.405873175999886, 41.63751862200003], + [-70.418080206999946, 41.64004140800013], + [-70.428374803999873, 41.631903387000037], + [-70.459095831999974, 41.591620184000149], + [-70.479847785999965, 41.573879299000154], + [-70.504261847999913, 41.563706773000106], + [-70.53270423099994, 41.559149481000148], + [-70.565825975999871, 41.558172919000086], + [-70.59605872299997, 41.55304596600017], + [-70.658681674999883, 41.521349108], + [-70.685617641999869, 41.530829169000029], + [-70.661732550999972, 41.550482489000061], + [-70.652495897999927, 41.57802969], + [-70.652007615999935, 41.654242255000057], + [-70.657093878999945, 41.670558986000074], + [-70.658273891999869, 41.68447500200007], + [-70.652007615999935, 41.693915106000176], + [-70.639963344999927, 41.702297268000123], + [-70.631906704999977, 41.71112702], + [-70.637806769999912, 41.721991278000175], + [-70.628163214999944, 41.728094794000171], + [-70.623605923999889, 41.729437567000062], + [-70.63060462099989, 41.740139065000093], + [-70.640004035999908, 41.74095286699999], + [-70.648182745999918, 41.734198309000149], + [-70.651437954999949, 41.721991278000175], + [-70.658273891999869, 41.721991278000175], + [-70.68980872299997, 41.739691473000093], + [-70.710438605999911, 41.748032945000048], + [-70.719715949999852, 41.746161200000088], + [-70.72329667899993, 41.71377187700007], + [-70.721913214999944, 41.701605536], + [-70.712880011999943, 41.687811591000084], + [-70.739328579999921, 41.690130927000055], + [-70.749094204999949, 41.679754950000145], + [-70.756092902999939, 41.663031317000119], + [-70.774322068999908, 41.646226304000109], + [-70.786040818999908, 41.660467841000028], + [-70.79784094999988, 41.658880927], + [-70.805734829999949, 41.651027736000017], + [-70.805734829999949, 41.646226304000109], + [-70.805002407999922, 41.642564195000077], + [-70.821115688999981, 41.634995835000112], + [-70.840565558999884, 41.628892320000134], + [-70.850087042999888, 41.629543361000074], + [-70.84398352799991, 41.603949286], + [-70.845204230999911, 41.592474677000055], + [-70.856922980999911, 41.591620184000149], + [-70.862904425999915, 41.597235419000143], + [-70.869984503999973, 41.615871486000131], + [-70.874256964999887, 41.622992255], + [-70.881011522999927, 41.627915757000054], + [-70.905384894999884, 41.64004140800013], + [-70.907338019999941, 41.614935614000061], + [-70.920969204999977, 41.598334052], + [-70.931630011999914, 41.580267645000092], + [-70.925160285999908, 41.550726630000113], + [-70.947621222999913, 41.536444403000118], + [-70.959706183999913, 41.531195380000142], + [-70.973622199999909, 41.530829169000029], + [-70.972238735999923, 41.535101630000113], + [-70.97093665299991, 41.537665106000034], + [-71.015451626999919, 41.512274481000119], + [-71.040150519999912, 41.50714752800009], + [-71.06981360599994, 41.517157294000086], + [-71.04946855399993, 41.523749091000141], + [-71.043853318999936, 41.536851304000109], + [-71.049305792999888, 41.551947333000115], + [-71.062367316999968, 41.564357815000065], + [-71.062123175999915, 41.543850002000013], + [-71.07371985599994, 41.538723049000097], + [-71.110747850999957, 41.543850002000013], + [-71.101551886999886, 41.528306382000025], + [-71.097157355999911, 41.523382880000142], + [-71.121896938999981, 41.513006903000061], + [-71.18590247299997, 41.46873607], + [-71.199126756999902, 41.492132880000085], + [-71.202015753999945, 41.502630927000141], + [-71.196400519999941, 41.513413804000052], + [-71.195668097999913, 41.520819403000033], + [-71.206939256999902, 41.558172919000086], + [-71.21051998599998, 41.602240302], + [-71.209706183999856, 41.626166083000058], + [-71.206939256999902, 41.646226304000109], + [-71.19395911399991, 41.676865953000018], + [-71.190256313999953, 41.685614325000088], + [-71.135568813999924, 41.755519924000041], + [-71.110747850999957, 41.79706452], + [-71.126047329999921, 41.792425848000093], + [-71.138091600999928, 41.779933986000074], + [-71.169545050999943, 41.73330312700007], + [-71.176258917999917, 41.726629950000117], + [-71.18590247299997, 41.721991278000175], + [-71.207997199999852, 41.729152736000017], + [-71.221058722999942, 41.731390692], + [-71.226877407999979, 41.725734768], + [-71.228993292999888, 41.720933335000112], + [-71.23684648299988, 41.709580796000139], + [-71.238392706999917, 41.70734284100017], + [-71.240549282999922, 41.69806549700003], + [-71.240223761999914, 41.684637762000037], + [-71.241037563999924, 41.681219794000029], + [-71.244862433999913, 41.680324611000017], + [-71.26040605399993, 41.65110911699999], + [-71.285715298999975, 41.659613348000036], + [-71.301828579999949, 41.659613348000036], + [-71.30882727799991, 41.670803127000127], + [-71.306752081999917, 41.684719143], + [-71.301503058999913, 41.702622789000159], + [-71.294056769999941, 41.720160223], + [-71.280913865999878, 41.741400458], + [-71.283029751999891, 41.748846747000144], + [-71.289702928999958, 41.754095770000148], + [-71.298817511999943, 41.756089585], + [-71.301991339999915, 41.751695054000109], + [-71.304432745999947, 41.730047919000029], + [-71.30882727799991, 41.721991278000175], + [-71.318186001999948, 41.72479889500012], + [-71.337066209999904, 41.73379140800013], + [-71.355620897999898, 41.746283270000063], + [-71.364003058999856, 41.759833075000031], + [-71.365589972999885, 41.777655341000084], + [-71.370350714999887, 41.79205963700015], + [-71.378814256999931, 41.80499909100017], + [-71.391346808999913, 41.818793036000088], + [-71.395008917999888, 41.805731512000094], + [-71.396311001999976, 41.783270575000088], + [-71.395090298999946, 41.759507554], + [-71.391346808999913, 41.742499091000028], + [-71.384755011999857, 41.735663153000118], + [-71.375599738999966, 41.730536200000088], + [-71.36750240799995, 41.723822333000058], + [-71.364003058999856, 41.712062893000066], + [-71.366851365999906, 41.703558661000145], + [-71.3802791009999, 41.683661200000145], + [-71.384429490999935, 41.674221096000124], + [-71.391468878999888, 41.683010158000016], + [-71.398426886999886, 41.689764716000056], + [-71.40689042899993, 41.693833726], + [-71.41860917899993, 41.694647528000118], + [-71.430246548999918, 41.691107489000117], + [-71.441639777999882, 41.684068101000051], + [-71.446766730999911, 41.677232164000046], + [-71.423329230999911, 41.66815827000012], + [-71.413807745999918, 41.652899481000148], + [-71.410267706999946, 41.632961330000072], + [-71.412464972999942, 41.612738348000065], + [-71.423695441999939, 41.594305731000034], + [-71.437367316999968, 41.58478424700003], + [-71.442779100999928, 41.574652411000088], + [-71.429514126999891, 41.554388739000061], + [-71.424631313999924, 41.538885809000149], + [-71.423410610999895, 41.486395575000088], + [-71.426096157999979, 41.46873607], + [-71.454791809999904, 41.406131900000148], + [-71.469618487999924, 41.391331281000149], + [-71.483957485999895, 41.379950262000037], + [-71.488270636999886, 41.370591539000102], + [-71.497710740999906, 41.366278387000094], + [-71.507801886999886, 41.36810944200009], + [-71.530384894999941, 41.376450914000046], + [-71.555828068999887, 41.374845528], + [-71.598884489999904, 41.367522493000095], + [-71.753814256999931, 41.331040757000054], + [-71.828972493999885, 41.316984425], + [-71.871474674999973, 41.302575088000154], + [-71.87791399799994, 41.311512218000033], + [-71.85653400399994, 41.322501385000137], + [-71.862375454999921, 41.332586981000091], + [-71.872141079999949, 41.339260158000158], + [-71.88536536399991, 41.344631252000013], + [-71.898060675999943, 41.346502997000172], + [-71.96324622299997, 41.345363674000126], + [-71.972889777999939, 41.343695380000113], + [-72.036244269999884, 41.317857164000102], + [-72.083404100999871, 41.352036851], + [-72.095122850999957, 41.346096096000068], + [-72.101144985999952, 41.322455145000148], + [-72.110707160999937, 41.311102606000148], + [-72.13540605399993, 41.312079169000143], + [-72.168039516999897, 41.322455145000148], + [-72.194325324999909, 41.323797919000029], + [-72.200062628999973, 41.297430731000034], + [-72.226918097999942, 41.310695705000157], + [-72.287953253999916, 41.282945054], + [-72.319894985999923, 41.293687242000104], + [-72.327015753999888, 41.298732815000122], + [-72.341053839999944, 41.30337148600016], + [-72.34715735599994, 41.307318427000141], + [-72.350412563999981, 41.314642645000148], + [-72.34780839799987, 41.321600653000033], + [-72.343983527999882, 41.329291083000058], + [-72.343413865999906, 41.338364976000051], + [-72.348378058999941, 41.348334052000055], + [-72.358225063999953, 41.357977606000119], + [-72.372710740999906, 41.364732164000074], + [-72.391835089999887, 41.366278387000094], + [-72.380197719999899, 41.350083726000051], + [-72.363636847999913, 41.336900132], + [-72.354359503999945, 41.321234442000119], + [-72.364572719999899, 41.297430731000034], + [-72.354888475999928, 41.291449286000116], + [-72.35090084499987, 41.289984442000062], + [-72.369781053999901, 41.27659739800005], + [-72.390777147999927, 41.277777411000088], + [-72.433461066999939, 41.289984442000062], + [-72.452626105999911, 41.28790924700003], + [-72.475087042999917, 41.281073309000121], + [-72.495269334999961, 41.270331122000115], + [-72.507923956999917, 41.256415106000034], + [-72.513335740999963, 41.261053778000147], + [-72.516916469999842, 41.262925523000106], + [-72.519520636999943, 41.264960028000147], + [-72.522206183999913, 41.270168361000131], + [-72.529652472999885, 41.270168361000131], + [-72.540638800999943, 41.263657945000048], + [-72.581898566999911, 41.27875397300015], + [-72.604807094999899, 41.283758856000091], + [-72.661773240999906, 41.274074611000131], + [-72.671050584999875, 41.267482815000065], + [-72.678781704999977, 41.26048411699999], + [-72.686675584999961, 41.256415106000034], + [-72.699330206999917, 41.25657786699999], + [-72.709095831999974, 41.260565497000144], + [-72.717884894999941, 41.26585521000014], + [-72.727650519999969, 41.270168361000131], + [-72.741322394999912, 41.272162177000084], + [-72.779449022999898, 41.270168361000131], + [-72.789784308999884, 41.267320054000024], + [-72.806019660999937, 41.257757880000113], + [-72.813343878999945, 41.259588934000092], + [-72.826511668999927, 41.256508012000083], + [-72.842892007999865, 41.258471221000079], + [-72.856066570999872, 41.245418825000129], + [-72.892426694999898, 41.244974743000071], + [-72.895725820999928, 41.255582446000162], + [-72.895253058999884, 41.26585521000014], + [-72.903146938999953, 41.277167059000121], + [-72.905832485999923, 41.300523179000109], + [-72.909982876999976, 41.305121161000059], + [-72.918934699999909, 41.298651434000149], + [-72.927357550999943, 41.288804429000137], + [-72.930043097999942, 41.283758856000091], + [-72.967274542999917, 41.256415106000034], + [-72.992909308999884, 41.228989976000079], + [-73.002023891999869, 41.221747137000065], + [-73.013827767999885, 41.206723785000023], + [-73.0384376129999, 41.205227028000181], + [-73.053537563999953, 41.211737372000144], + [-73.063710089999915, 41.204779364000089], + [-73.085519985999952, 41.197007554000081], + [-73.094471808999884, 41.191310940000093], + [-73.103749152999939, 41.180365302000112], + [-73.107411261999886, 41.174709377000127], + [-73.110591825999876, 41.161942588000116], + [-73.108485080999912, 41.148708693000074], + [-73.134237146999908, 41.147207262], + [-73.155086966999932, 41.158858700000124], + [-73.164338142999952, 41.165109096], + [-73.17010966299992, 41.169571071000163], + [-73.18406770099989, 41.174108750000173], + [-73.184277537999947, 41.161773039000124], + [-73.208914855999893, 41.156722824000056], + [-73.215809699999909, 41.163031317000119], + [-73.219105597999942, 41.166001695000048], + [-73.221099412999877, 41.167141018000095], + [-73.225168423999946, 41.163275458000086], + [-73.224232249999915, 41.149812032000156], + [-73.227855536999868, 41.142795121000077], + [-73.233800505999881, 41.136681440000146], + [-73.244462403999904, 41.127966256000079], + [-73.262127241999934, 41.120185131000099], + [-73.271521241999949, 41.117622037000118], + [-73.278338650999842, 41.130017491000061], + [-73.286452311999881, 41.134492373000043], + [-73.293648322999843, 41.123094779000056], + [-73.301933495999975, 41.116990281000156], + [-73.315993464999877, 41.115338998000041], + [-73.33238108499998, 41.113712437000018], + [-73.350026931999935, 41.106797636000138], + [-73.364068014999958, 41.106025200000019], + [-73.371937628999973, 41.101955471000068], + [-73.379750128999945, 41.100165106000176], + [-73.423736131999874, 41.077704169000086], + [-73.437611456999974, 41.073065497000144], + [-73.474598761999914, 41.054754950000088], + [-73.485218878999945, 41.053859768], + [-73.504198604999942, 41.042567679000157], + [-73.523211028999896, 41.021490678000177], + [-73.537123985999898, 41.031278356000158], + [-73.546701626999919, 41.028876044000086], + [-73.564849412999934, 41.018947658000073], + [-73.589993528999884, 41.01479138100008], + [-73.596875070999943, 41.023670370000119], + [-73.603923338999948, 41.022815711000121], + [-73.611147364999908, 41.01133620500012], + [-73.619367333999975, 41.008738009000169], + [-73.634581963999921, 41.007055073000103], + [-73.641700113999946, 41.001773909000022], + [-73.650257941999968, 40.996568101000051], + [-73.64801998599998, 40.99209219], + [-73.653146938999896, 40.982123114], + [-73.674387173999975, 40.958807684000092], + [-73.676991339999887, 40.954779364000117], + [-73.698719855999855, 40.954779364000117], + [-73.710764126999948, 40.953029690000122], + [-73.720366990999935, 40.947007554000137], + [-73.764393683999856, 40.910101630000085], + [-73.777414516999841, 40.894110419000171], + [-73.782826300999886, 40.87604401200015], + [-73.788156704999949, 40.871771552000141], + [-73.799916144999912, 40.872259833000115], + [-73.811675584999904, 40.871039130000113], + [-73.816965298999975, 40.862005927], + [-73.819910300999936, 40.839129802000016], + [-73.805058856999921, 40.826147183], + [-73.797685063999978, 40.813193685000087], + [-73.829728052999911, 40.810897622000184], + [-73.866027933999931, 40.811837517000143], + [-73.893832631999942, 40.803853362000055], + [-73.926828579999949, 40.804795640000137], + [-73.932281053999901, 40.81777578300013], + [-73.932281053999901, 40.82558828300013], + [-73.925770636999914, 40.836004950000117], + [-73.915353969999899, 40.856838283000101], + [-73.90884355399993, 40.868557033000073], + [-73.912749803999901, 40.881577867000075], + [-73.921864386999914, 40.886786200000145], + [-73.898019985999923, 40.930487372000144], + [-73.889475063999896, 40.972154039000102], + [-73.875396287999962, 41.013332424000069], + [-73.872181769999912, 41.033636786000088], + [-73.871571417999945, 41.115545966000028], + [-73.875314907999979, 41.153265692], + [-73.885894334999932, 41.187567450000145], + [-73.895741339999859, 41.20319245000006], + [-73.907582160999908, 41.213364976], + [-73.940500454999892, 41.235988674000154], + [-73.957020636999886, 41.257757880000113], + [-73.953480597999885, 41.27472565300009], + [-73.945139126999919, 41.291001695000105], + [-73.947336391999897, 41.311102606000148], + [-73.965972459999904, 41.300116278000118], + [-73.97594153599988, 41.292181708000143], + [-73.982045050999972, 41.283758856000091], + [-73.98497473899991, 41.269598700000174], + [-73.982167120999947, 41.26113515800013], + [-73.977609829999892, 41.252875067000147], + [-73.970204230999911, 41.21906159100017], + [-73.963069279999843, 41.205698739000027], + [-73.952279859999919, 41.18929388700009], + [-73.932320866999902, 41.178269018000137], + [-73.917876756999931, 41.163519598000121], + [-73.916656053999901, 41.145697333000143], + [-73.920643683999884, 41.101955471000068], + [-73.906361456999889, 41.016262111000103], + [-73.907134568999908, 40.990790106000091], + [-73.907704230999883, 40.971869208000086], + [-73.918080206999974, 40.931463934000035], + [-73.954741990999906, 40.858587958], + [-73.991915736999914, 40.798459889000029], + [-74.006252545999899, 40.780613916000121], + [-74.014310803999876, 40.765843350000139], + [-74.018633012999913, 40.751682691000084], + [-74.020926850999899, 40.74205104900004], + [-74.028028207999853, 40.727857259000146], + [-74.031929412999972, 40.71418089700002], + [-74.048085089999887, 40.70062897300015], + [-74.071034308999884, 40.687201239000061], + [-74.089344855999855, 40.669256903000118], + [-74.096005799999944, 40.654757927000119], + [-74.110659702999982, 40.650361898000099], + [-74.131022201999912, 40.645176895000176], + [-74.142085422999912, 40.646322963000145], + [-74.138991247999883, 40.657847673000148], + [-74.105567969999953, 40.705192639000089], + [-74.112435420999901, 40.717893467000167], + [-74.126016755999899, 40.703170392000104], + [-74.133317875999865, 40.691238053000021], + [-74.142191382999897, 40.676120917000148], + [-74.150018138999911, 40.66418304800014], + [-74.16075598899991, 40.662461656000076], + [-74.17906653599988, 40.653509833000058], + [-74.19032065899998, 40.64938391200009], + [-74.209646772999861, 40.634230638000147], + [-74.215286196999898, 40.59165780700009], + [-74.221669074999909, 40.572088934000092], + [-74.233016929999877, 40.566537389000032], + [-74.249043802999978, 40.562974599000128], + [-74.260487582999957, 40.551819592000143], + [-74.259877644999932, 40.536731426000173], + [-74.263930321999879, 40.513289788000023], + [-74.269649527999945, 40.504920293000126], + [-74.282687445999841, 40.497318766000106], + [-74.269549955999878, 40.483058603000146], + [-74.256337042999888, 40.460028387000037], + [-74.221913214999859, 40.451890367000104], + [-74.205922003999973, 40.442938544000086], + [-74.197132941999911, 40.440863348000065], + [-74.145904100999957, 40.447699286000088], + [-74.119943813999953, 40.445257880000142], + [-74.032338019999941, 40.421616929000109], + [-73.992990688999953, 40.402411200000145], + [-73.988008610999913, 40.407833631000088], + [-73.995310921999902, 40.421852665000173], + [-73.998199022999927, 40.441107489], + [-74.018218553999901, 40.480536200000174], + [-73.989572719999842, 40.468207098000121], + [-73.97915605399993, 40.449286200000117], + [-73.975701151999885, 40.429270343], + [-73.970929989999917, 40.394748808000045], + [-73.972393743999902, 40.32765030000003], + [-73.979888019999919, 40.280157751000147], + [-73.992054816999968, 40.226874091000084], + [-74.010751982999949, 40.16755553000003], + [-74.018224365999856, 40.140894452000154], + [-74.025605695999872, 40.111030098000143], + [-74.030559571999873, 40.079340938000186], + [-74.036719425999905, 40.048585416], + [-74.040410622999872, 40.028078116000174], + [-74.046561585999967, 39.997336800000184], + [-74.058819376999878, 39.954516313000155], + [-74.062501720999904, 39.933095818000155], + [-74.067424091999953, 39.903305242000059], + [-74.072339591999878, 39.875379288000047], + [-74.093012632999915, 39.776337060000131], + [-74.100438434999887, 39.783232835000135], + [-74.080739697999917, 39.922878770000082], + [-74.072174928999942, 39.972990828], + [-74.066041948999896, 39.992554936000133], + [-74.05746527699992, 40.012122391000091], + [-74.051325299999945, 40.035393950000085], + [-74.050282355999883, 40.054999091000141], + [-74.06069902299987, 40.062160549000012], + [-74.080480269999953, 40.051265493000145], + [-74.078066071999842, 40.043810869000097], + [-74.067121821999905, 40.041934725000104], + [-74.06350300299988, 40.030751857000055], + [-74.075681355999905, 40.025177181000132], + [-74.08301557, 40.011209643000043], + [-74.103685518999981, 40.014023988000034], + [-74.109486456999889, 40.002834377000127], + [-74.12205969999988, 39.997300523000106], + [-74.126088019999941, 39.981594143000152], + [-74.105824347999942, 39.985541083000143], + [-74.102284308999856, 39.970933335000112], + [-74.112375454999921, 39.949693101000136], + [-74.132883266999869, 39.933783270000035], + [-74.113608745999898, 39.931076346000125], + [-74.10999225899991, 39.92174081800006], + [-74.127042612999873, 39.905893387000063], + [-74.136799836999927, 39.890967340000188], + [-74.131991183999872, 39.87229385000002], + [-74.125884568999879, 39.855617580000015], + [-74.12726803299995, 39.848456122000144], + [-74.145904100999957, 39.830755927000055], + [-74.165865231999874, 39.80656409], + [-74.186518894999921, 39.772110756000032], + [-74.190196861999937, 39.744163243000017], + [-74.163319464999915, 39.735174872000172], + [-74.161139800999877, 39.720868789000164], + [-74.166013727999911, 39.704098069000125], + [-74.167551235999952, 39.699367580000157], + [-74.181779425999906, 39.691988520000152], + [-74.198762344999892, 39.676139540000108], + [-74.210908821999936, 39.650965306000117], + [-74.243622470999952, 39.643485902000165], + [-74.252114890999877, 39.631354767000161], + [-74.24754798099994, 39.621405341000113], + [-74.256418423999975, 39.61163971600017], + [-74.276367305999969, 39.607072361000078], + [-74.290905097999968, 39.605187201000078], + [-74.306666225999919, 39.594895349000112], + [-74.328490899999878, 39.576184835000092], + [-74.329709796999907, 39.562177996000131], + [-74.303537563999981, 39.54165273600016], + [-74.290191209999961, 39.523138739000146], + [-74.297352667999917, 39.508612372000115], + [-74.31090247299997, 39.506659247000144], + [-74.316273566999939, 39.514553127000127], + [-74.318186001999891, 39.524644273000021], + [-74.32127844999988, 39.529730536000116], + [-74.3587947259999, 39.550197658000073], + [-74.373646613999938, 39.543443101000051], + [-74.386789516999897, 39.544419664000131], + [-74.398019985999923, 39.550034898000106], + [-74.40721594999988, 39.557033596000011], + [-74.406483527999853, 39.520086981000148], + [-74.401275193999965, 39.502427476000136], + [-74.389271613999938, 39.494940497000172], + [-74.380116339999859, 39.487494208], + [-74.383697068999936, 39.471096096000096], + [-74.396351691999911, 39.447170315000122], + [-74.411244269999941, 39.450181382000139], + [-74.422108527999939, 39.455145575000174], + [-74.432972785999908, 39.456203518000123], + [-74.448150193999908, 39.447170315000122], + [-74.454904751999948, 39.439032294000114], + [-74.462066209999904, 39.426418361000131], + [-74.467518683999913, 39.412095445000048], + [-74.468658006999959, 39.399359442], + [-74.450306769999912, 39.406439520000148], + [-74.434396938999896, 39.395005601000022], + [-74.421783006999902, 39.375230210000083], + [-74.413441535999937, 39.357123114000061], + [-74.444406704999977, 39.347113348000093], + [-74.502837693999936, 39.318182684000178], + [-74.530140753999945, 39.310614325000031], + [-74.530140753999945, 39.316229559000035], + [-74.521107550999915, 39.330389716000141], + [-74.508859829999949, 39.343451239000117], + [-74.481760219999842, 39.364650783000044], + [-74.509632941999882, 39.378851630000142], + [-74.542347785999908, 39.347316799000126], + [-74.555246548999918, 39.32929108300003], + [-74.550648566999882, 39.316229559000035], + [-74.550648566999882, 39.310614325000031], + [-74.614491339999915, 39.312404690000037], + [-74.64207923099994, 39.306708075000031], + [-74.660471157999979, 39.289496161000116], + [-74.642567511999914, 39.289007880000113], + [-74.629505988999938, 39.284369208], + [-74.61815344999988, 39.278753973], + [-74.605213995999861, 39.275213934000121], + [-74.550648566999882, 39.289496161000116], + [-74.550648566999882, 39.282660223], + [-74.578968878999945, 39.267767645000148], + [-74.620838995999947, 39.223211981000148], + [-74.643055792999917, 39.213812567000119], + [-74.654367641999897, 39.201361395000035], + [-74.701486782999979, 39.124416408000016], + [-74.711822068999879, 39.1310082050001], + [-74.722808397999955, 39.13182200700011], + [-74.733265753999916, 39.127427476000108], + [-74.74242102799991, 39.118150132000082], + [-74.737538214999944, 39.117743231000148], + [-74.736724412999934, 39.116766669000086], + [-74.736968553999873, 39.114691473000065], + [-74.735585089999887, 39.111395575000031], + [-74.725249803999873, 39.115952867000161], + [-74.716379360999923, 39.114935614000117], + [-74.710194464999859, 39.10879140800013], + [-74.708322719999899, 39.097723700000088], + [-74.713734503999945, 39.091131903000033], + [-74.737172003999916, 39.070257880000057], + [-74.745716925999943, 39.054510809000092], + [-74.753814256999874, 39.048773505000113], + [-74.764068162999905, 39.044256903000175], + [-74.788075324999852, 39.03904857], + [-74.78937740799995, 39.03119538], + [-74.785267706999889, 39.022040106000119], + [-74.783355272999927, 39.015122789000102], + [-74.803293423999918, 38.987616278000175], + [-74.836089647999927, 38.963446356000176], + [-74.875111456999889, 38.944525458000058], + [-74.933094855999883, 38.926336981000148], + [-74.944243943999908, 38.924383856000119], + [-74.954701300999886, 38.926418361000131], + [-74.967640753999888, 38.935777085000083], + [-74.969333779999914, 38.945996873000027], + [-74.9651503179999, 38.957010710000063], + [-74.961798332999933, 38.969322707000103], + [-74.956768190999924, 38.98811157400003], + [-74.952566038999862, 39.007548164000085], + [-74.94432532499988, 39.02472565300009], + [-74.894439256999931, 39.107611395], + [-74.887277798999889, 39.146795966000141], + [-74.906320766999869, 39.179632880000142], + [-74.922230597999885, 39.188544012000179], + [-74.938588019999912, 39.192531643000152], + [-74.978871222999885, 39.193304755000085], + [-74.986439581999946, 39.192328192], + [-75.003732876999919, 39.188055731000091], + [-75.01305091099988, 39.187079169000029], + [-75.022206183999856, 39.189276434000121], + [-75.023426886999886, 39.194891669000114], + [-75.0228572259999, 39.202460028000147], + [-75.026682094999927, 39.210679429000052], + [-75.040272589999887, 39.214544989000061], + [-75.061146613999938, 39.213527736000103], + [-75.092437303999901, 39.207586981000176], + [-75.106597459999932, 39.200140692], + [-75.117176886999886, 39.192816473000093], + [-75.128895636999886, 39.187689520000092], + [-75.146473761999914, 39.187079169000029], + [-75.145008917999945, 39.191473700000088], + [-75.159331834999932, 39.19863515800013], + [-75.166981574999852, 39.207586981000176], + [-75.168812628999916, 39.216009833000115], + [-75.165638800999972, 39.228338934000149], + [-75.166981574999852, 39.23427969], + [-75.175770636999914, 39.242010809000092], + [-75.211659308999913, 39.264349677000141], + [-75.225941535999908, 39.268988348000065], + [-75.234201626999891, 39.273382880000142], + [-75.242095506999874, 39.292629299000097], + [-75.249501105999855, 39.296942450000088], + [-75.287424282999979, 39.296942450000088], + [-75.303618943999936, 39.303290106000034], + [-75.313221808999913, 39.317816473000065], + [-75.320912238999938, 39.333685614], + [-75.331410285999908, 39.344142971000068], + [-75.340565558999884, 39.345038153000147], + [-75.348215298999918, 39.342027085000055], + [-75.35448157499988, 39.338568427000055], + [-75.359364386999943, 39.337876695000105], + [-75.367176886999914, 39.34259674700003], + [-75.371937628999916, 39.34772370000006], + [-75.375559048999889, 39.352728583000086], + [-75.477650519999941, 39.440863348000093], + [-75.508168097999885, 39.45734284100017], + [-75.53160559799997, 39.477972723], + [-75.541330532999922, 39.50885651200015], + [-75.537342902999853, 39.503159898000078], + [-75.531646287999962, 39.498480536000059], + [-75.523833787999877, 39.494940497000172], + [-75.521555141999897, 39.514105536000145], + [-75.510406053999873, 39.559637762000094], + [-75.513661261999914, 39.573797919000029], + [-75.54747473899991, 39.601060289000102], + [-75.558216925999915, 39.613470770000148], + [-75.557443813999896, 39.621242580000128], + [-75.53538977799991, 39.638902085000055], + [-75.516509568999965, 39.64777252800009], + [-75.510243292999917, 39.65265534100017], + [-75.507150844999842, 39.662298895000148], + [-75.504994269999941, 39.676011460000083], + [-75.501128709999932, 39.68829987200003], + [-75.487538214999887, 39.696844794000143], + [-75.483143683999884, 39.70416901200015], + [-75.476673956999889, 39.711371161000088], + [-75.465199347999942, 39.714667059000121], + [-75.46336829299986, 39.719387111000131], + [-75.461822068999908, 39.748236395000148], + [-75.440174933999941, 39.777004299000097], + [-75.406117316999911, 39.802923895], + [-75.367298956999889, 39.823797919000171], + [-75.310902472999942, 39.843207098000065], + [-75.268299933999913, 39.850775458000115], + [-75.246083136999857, 39.85187409100017], + [-75.229074673999889, 39.854559637000065], + [-75.192941860999952, 39.867499091000141], + [-75.168853318999908, 39.872707424000154], + [-75.167591925999915, 39.873480536000059], + [-75.16624915299991, 39.873358466000084], + [-75.16075598899991, 39.878566799000097], + [-75.144154425999943, 39.874904690000122], + [-75.12938391799986, 39.88385651200015], + [-75.114816860999923, 39.897162177], + [-75.098703579999949, 39.906439520000148], + [-75.113677537999905, 39.92206452000012], + [-75.120228644999969, 39.94074127800009], + [-75.115956183999856, 39.952582098000065], + [-75.098703579999949, 39.947455145000148], + [-75.085031704999921, 39.9610863300001], + [-75.078765428999873, 39.953599351000136], + [-75.03941809799997, 40.002630927000084], + [-75.023589647999927, 40.016302802000112], + [-75.046538865999935, 40.009100653000175], + [-75.079986131999902, 39.986395575000031], + [-75.102406378999888, 39.981594143000152], + [-75.119699673999889, 39.974188544000143], + [-75.132923956999946, 39.956122137000037], + [-75.138742641999897, 39.933579820000077], + [-75.13341223899991, 39.912665106000091], + [-75.147775844999899, 39.90257396000014], + [-75.207915818999879, 39.885402736000017], + [-75.24868730399993, 39.867254950000117], + [-75.273101365999906, 39.864081122000144], + [-75.297352667999888, 39.871730861000074], + [-75.358876105999855, 39.848334052], + [-75.376454230999883, 39.845038153000147], + [-75.391713019999941, 39.839585679000109], + [-75.427642381999931, 39.803412177], + [-75.462961391999869, 39.784613348000121], + [-75.47671464799987, 39.772121486000046], + [-75.487660285999937, 39.731675523], + [-75.500721808999913, 39.714260158000016], + [-75.545765753999888, 39.670233466000113], + [-75.551136847999942, 39.666245835000112], + [-75.586822068999908, 39.655951239000032], + [-75.592152472999942, 39.649237372000144], + [-75.595204230999855, 39.638495184000149], + [-75.60114498599998, 39.627264716000141], + [-75.605213995999947, 39.616685289000188], + [-75.602691209999932, 39.607896226000136], + [-75.574045376999948, 39.585598049000097], + [-75.565500454999921, 39.576849677000112], + [-75.555816209999875, 39.559271552], + [-75.554595506999959, 39.541164455000072], + [-75.56118730399993, 39.523016669000171], + [-75.575062628999916, 39.50519440300009], + [-75.583566860999952, 39.483343817000062], + [-75.587938167999965, 39.462770639000112], + [-75.568863115999875, 39.440354876000029], + [-75.552760578999909, 39.425793962000157], + [-75.527891175999855, 39.403390924000135], + [-75.490793423999918, 39.353461005000113], + [-75.488514777999853, 39.347316799000126], + [-75.482411261999857, 39.344671942000147], + [-75.45916525699991, 39.328292960000127], + [-75.434410619999937, 39.31487386300013], + [-75.428490187999898, 39.291292781], + [-75.407704230999855, 39.270249742000161], + [-75.39801998599998, 39.249335028000118], + [-75.394154425999886, 39.224595445000134], + [-75.404757128999904, 39.172230870000092], + [-75.406116405999938, 39.151998866000113], + [-75.404572667999929, 39.130647151000161], + [-75.40161623599991, 39.117166347000122], + [-75.397445180999938, 39.102636364000048], + [-75.40140434099996, 39.078287597000084], + [-75.393789890999926, 39.055551025000014], + [-75.369205114999971, 39.040257328000095], + [-75.342582121999925, 39.020211252000038], + [-75.314849412999934, 38.984076239], + [-75.311128447999891, 38.967954136000017], + [-75.311070292999887, 38.949468208000027], + [-75.310325873999943, 38.927818264000152], + [-75.296620245999861, 38.913072007000139], + [-75.244352785999951, 38.859798652000123], + [-75.195482727999945, 38.815490865000029], + [-75.166326653999931, 38.794382357000117], + [-75.130414234999932, 38.782771825000012], + [-75.099926219999958, 38.788048410000059], + [-75.095860983999842, 38.797555178], + [-75.099252048999858, 38.805480878000125], + [-75.092474762999899, 38.807591577000053], + [-75.084340484999927, 38.795966511000088], + [-75.066122551999882, 38.678024950000164], + [-75.064807137999935, 38.632608972000028], + [-75.071848110999952, 38.638332424000012], + [-75.077621833999842, 38.686475198000082], + [-75.086410656999874, 38.693344819000018], + [-75.120921036999874, 38.683834673], + [-75.139188520999937, 38.68805248000011], + [-75.119781053999873, 38.658880927000055], + [-75.133941209999904, 38.660386460000112], + [-75.139393683999941, 38.662054755000113], + [-75.145863410999937, 38.66152578300013], + [-75.147206183999941, 38.660060940000093], + [-75.149973110999895, 38.659816799000126], + [-75.153309699999909, 38.658880927000055], + [-75.142567511999914, 38.6505394550001], + [-75.130441860999923, 38.643052476000108], + [-75.116118943999936, 38.638413804], + [-75.098703579999949, 38.638413804], + [-75.121408657999893, 38.621323960000055], + [-75.19005286399991, 38.606675523000135], + [-75.207915818999879, 38.590033270000092], + [-75.187408006999931, 38.590033270000092], + [-75.191517706999974, 38.582709052], + [-75.196441209999932, 38.576849677000141], + [-75.201975063999953, 38.572455145000063], + [-75.207915818999879, 38.569525458000143], + [-75.191761847999913, 38.566961981000034], + [-75.152211066999968, 38.588446356000148], + [-75.126047329999921, 38.590033270000092], + [-75.119618292999917, 38.584295966000028], + [-75.111683722999942, 38.574164130000057], + [-75.10326087099989, 38.565904039000159], + [-75.095570441999882, 38.566392320000077], + [-75.075184699999909, 38.586493231000119], + [-75.069567274999883, 38.593535570000071], + [-75.069203253999888, 38.608303127000156], + [-75.065337693999879, 38.614935614000117], + [-75.060091085999915, 38.612540620000019], + [-75.058745696999978, 38.60514757300011], + [-75.056734304999907, 38.586665777000078], + [-75.057728644999941, 38.552720445000134], + [-75.052845831999974, 38.527329820000105], + [-75.050021190999928, 38.498985334000011], + [-75.047328385999975, 38.475732608000143], + [-75.043975389999929, 38.453802802000112], + [-75.044056769999912, 38.453436591000113], + [-75.044748501999948, 38.425034898000078], + [-75.05113684799997, 38.387762762000094], + [-75.067008878999872, 38.353519856000119], + [-75.078765428999873, 38.336737372000115], + [-75.075795050999943, 38.36627838700015], + [-75.059234178999901, 38.422796942], + [-75.057728644999941, 38.453436591000113], + [-75.058094855999855, 38.453721421000054], + [-75.062733527999882, 38.457342841000084], + [-75.06859290299991, 38.459906317], + [-75.075795050999943, 38.461004950000145], + [-75.085031704999921, 38.460882880000085], + [-75.083892381999874, 38.453599351000079], + [-75.082915818999908, 38.447455145000092], + [-75.089882200999881, 38.432201367000076], + [-75.102016211999853, 38.438538203000107], + [-75.118196260999952, 38.437481204000122], + [-75.097978712999918, 38.407913028000152], + [-75.104045298999978, 38.395242014000146], + [-75.11213051999988, 38.399466031000046], + [-75.127628405999928, 38.405800428000035], + [-75.147845779999926, 38.413714890000122], + [-75.165367585999888, 38.416875316000144], + [-75.179509981999871, 38.40842047800011], + [-75.139754134999919, 38.399462658000132], + [-75.132341496999885, 38.394184582000136], + [-75.13341223899991, 38.385158596000011], + [-75.13341223899991, 38.377671617000132], + [-75.126047329999921, 38.377671617000132], + [-75.126047329999921, 38.371527411000059], + [-75.13060462099989, 38.369289455000072], + [-75.135365363999966, 38.36603424700003], + [-75.13963782499988, 38.364081122000172], + [-75.12547766799986, 38.360337632000054], + [-75.112131313999953, 38.362494208000143], + [-75.100738084999875, 38.36212799700003], + [-75.092437303999901, 38.351019598], + [-75.094227667999888, 38.33535390800013], + [-75.104400193999936, 38.316229559000149], + [-75.117990688999896, 38.298163153000033], + [-75.129750128999973, 38.285549221000153], + [-75.154286261999886, 38.240912177], + [-75.163889126999976, 38.233710028000147], + [-75.197499152999882, 38.232570705000015], + [-75.200672980999855, 38.240301825000031], + [-75.187408006999931, 38.261664130000085], + [-75.22004146999987, 38.247626044000029], + [-75.233062303999958, 38.238959052000141], + [-75.242665167999945, 38.226955471000011], + [-75.257150844999899, 38.16815827000012], + [-75.266916469999927, 38.159247137000179], + [-75.27171790299991, 38.15232982], + [-75.283273891999841, 38.120550848000121], + [-75.2904353509999, 38.110825914000188], + [-75.297352667999888, 38.110785223], + [-75.315907355999883, 38.116888739000089], + [-75.325266079999921, 38.117010809000149], + [-75.333892381999931, 38.111558335000112], + [-75.350168423999946, 38.09406159100017], + [-75.356027798999918, 38.090318101000136], + [-75.351185675999915, 38.082098700000031], + [-75.373036261999886, 38.031968492000047], + [-75.37515214799987, 38.023830471000124], + [-75.378285285999937, 38.011664130000142], + [-75.390980597999913, 38.002671617000104], + [-75.406849738999938, 37.997381903000061], + [-75.421457485999952, 37.987941799000126], + [-75.426177537999877, 37.976507880000085], + [-75.434344222999954, 37.961832993000101], + [-75.431881663999945, 37.951830343000083], + [-75.419151572999851, 37.943278643000113], + [-75.425163156999872, 37.936114395000018], + [-75.435424110999861, 37.93370459700013], + [-75.43478266199989, 37.925602755000099], + [-75.419654559999913, 37.919923128000093], + [-75.423855846999885, 37.913716503], + [-75.438921258999926, 37.906050951000097], + [-75.447920462999889, 37.893635372000077], + [-75.443071420999871, 37.889360228000115], + [-75.425577005999912, 37.892742699000124], + [-75.417100778999895, 37.886091984000146], + [-75.424895251999914, 37.875113328000126], + [-75.446591827999924, 37.867432140000162], + [-75.470658192999878, 37.851162519000027], + [-75.49228479599995, 37.83108400000016], + [-75.512081309999928, 37.808620754000131], + [-75.531269449999854, 37.787884126000094], + [-75.560505046999964, 37.743902112000129], + [-75.598144417999947, 37.700011217000068], + [-75.627078755999889, 37.67383181100017], + [-75.652822905999955, 37.642552348000052], + [-75.70595768799987, 37.580183078000104], + [-75.716686026999895, 37.559551193000075], + [-75.733469204999949, 37.536078192], + [-75.744876095999899, 37.524204036000029], + [-75.759799746999931, 37.507953766000114], + [-75.771473761999857, 37.490301825000088], + [-75.783924933999884, 37.483587958000143], + [-75.788319464999859, 37.475897528000033], + [-75.810496163999886, 37.462182433000166], + [-75.818707122999911, 37.454237853000066], + [-75.81031085199993, 37.443098825000092], + [-75.814804614999844, 37.436493676000069], + [-75.823831826999907, 37.427559640000098], + [-75.821677230999882, 37.419019681000137], + [-75.806309228999851, 37.414503307000089], + [-75.795874384999962, 37.405682914000025], + [-75.79996167099992, 37.400068415000177], + [-75.811537749999928, 37.398357022000155], + [-75.820169258999897, 37.391729234000039], + [-75.828439933999874, 37.390693559000155], + [-75.836357871999894, 37.395908136000045], + [-75.855005072999916, 37.397437837000112], + [-75.875846258999928, 37.369350848000025], + [-75.887308510999929, 37.356967294000086], + [-75.900477444999893, 37.325513665000145], + [-75.911529663999914, 37.290766132000087], + [-75.923491887999973, 37.244441581], + [-75.927296738999928, 37.211368332000077], + [-75.934157825999876, 37.173303837], + [-75.935040156999975, 37.158416935000062], + [-75.935925557999951, 37.135016347000132], + [-75.949111081999888, 37.124951910000149], + [-75.966428600999848, 37.134795304000036], + [-75.976121612999918, 37.161518403000102], + [-76.000778086999844, 37.194365245000128], + [-76.000965949999852, 37.220160223], + [-75.996205206999946, 37.23383209800015], + [-75.996205206999946, 37.239976304000109], + [-76.016957160999937, 37.257798570000105], + [-76.014963344999899, 37.281561591000113], + [-76.000111456999946, 37.303534247000115], + [-75.982533331999917, 37.316351630000057], + [-75.995920376999919, 37.320257880000142], + [-76.00145423099994, 37.319484768000123], + [-76.010568813999924, 37.316351630000057], + [-75.990793423999918, 37.353013414000159], + [-75.984771287999905, 37.371893622000087], + [-75.98997962099989, 37.384588934000149], + [-75.973784959999932, 37.391546942000147], + [-75.962147589999944, 37.403265692000119], + [-75.955881313999981, 37.415920315], + [-75.95531165299991, 37.425604559000149], + [-75.956450975999957, 37.424953518000038], + [-75.962228969999927, 37.425726630000142], + [-75.966175910999908, 37.424505927000112], + [-75.968251105999911, 37.418158270000092], + [-75.975697394999912, 37.418158270000092], + [-75.972889777999853, 37.435126044000143], + [-75.965646938999924, 37.452948309000035], + [-75.954009568999908, 37.466986395000092], + [-75.926177537999962, 37.47842031500015], + [-75.924631313999924, 37.488999742000189], + [-75.934152798999918, 37.495062567], + [-75.95531165299991, 37.487005927000055], + [-75.951771613999938, 37.515936591000141], + [-75.93781490799995, 37.53729889500012], + [-75.917103644999941, 37.552476304000109], + [-75.893788214999859, 37.56273021000014], + [-75.934722459999875, 37.576402085000083], + [-75.921254035999908, 37.585760809000092], + [-75.911040818999965, 37.594875393000095], + [-75.909494594999927, 37.603216864000061], + [-75.921742316999882, 37.610541083000058], + [-75.90461178299995, 37.619859117000104], + [-75.882679816999911, 37.623765367000104], + [-75.871449347999913, 37.629543361000074], + [-75.886341925999972, 37.644680080000072], + [-75.875721808999941, 37.660711981000148], + [-75.860829230999883, 37.669012762000037], + [-75.841704881999902, 37.672105210000112], + [-75.818674282999922, 37.672593492000104], + [-75.824940558999884, 37.687811591000084], + [-75.823841925999943, 37.696519273000078], + [-75.788685675999972, 37.727484442], + [-75.790516730999855, 37.733303127000156], + [-75.811879035999908, 37.733465887000122], + [-75.811879035999908, 37.740912177], + [-75.790842251999976, 37.75385163], + [-75.777455206999974, 37.766424872000087], + [-75.777902798999975, 37.78009674700003], + [-75.79820716099988, 37.796128648000106], + [-75.78685462099989, 37.809393622000144], + [-75.775542772999927, 37.80792877800009], + [-75.764475063999981, 37.800523179000024], + [-75.753488735999923, 37.796128648000106], + [-75.694569464999859, 37.802313544000086], + [-75.703724738999938, 37.81073639500012], + [-75.70848548099994, 37.821682033000016], + [-75.708119269999912, 37.833156643000152], + [-75.702015753999945, 37.843329169000086], + [-75.694813605999911, 37.844712632000082], + [-75.671376105999911, 37.841498114000117], + [-75.661040818999908, 37.843329169000086], + [-75.669504360999952, 37.852036851], + [-75.674305792999945, 37.861395575000117], + [-75.674224412999962, 37.87034739800005], + [-75.667836066999939, 37.878078518000152], + [-75.670969204999921, 37.892564195000105], + [-75.689279751999976, 37.903998114000061], + [-75.717518683999856, 37.909409898000106], + [-75.742990688999953, 37.905991929], + [-75.742990688999953, 37.912176825000145], + [-75.719146287999877, 37.927639065000093], + [-75.694569464999859, 37.939520575000031], + [-75.661773240999935, 37.944769598000121], + [-75.645863410999937, 37.949530341000028], + [-75.633127407999979, 37.960028387000179], + [-75.653675910999908, 37.967962958000058], + [-75.672596808999941, 37.971991278000118], + [-75.763172980999883, 37.978216864000089], + [-75.786284959999932, 37.975897528000118], + [-75.808176235999952, 37.963446356000091], + [-75.838124152999939, 37.941229559000035], + [-75.858021613999938, 37.931138414000159], + [-75.867095506999931, 37.936102606000034], + [-75.868967251999891, 37.943304755000057], + [-75.8724666009999, 37.946966864000032], + [-75.874989386999914, 37.951117255000057], + [-75.873361782999979, 37.960028387000179], + [-75.867502407999922, 37.967230536000116], + [-75.858794725999957, 37.973211981000034], + [-75.850412563999896, 37.981105861000017], + [-75.845366990999963, 37.994086005000028], + [-75.854847785999965, 37.993353583000086], + [-75.862700975999957, 37.990790106000148], + [-75.868885870999918, 37.986517645000063], + [-75.873361782999979, 37.980454820000077], + [-75.880116339999915, 37.980454820000077], + [-75.879546678999958, 37.985337632000139], + [-75.881011522999898, 37.986639716000028], + [-75.883656378999888, 37.986761786], + [-75.886341925999972, 37.987941799000126], + [-75.878651495999861, 37.994574286], + [-75.857248501999919, 38.021144924000126], + [-75.852853969999927, 38.031968492000047], + [-75.846424933999913, 38.039618231000148], + [-75.818267381999931, 38.042710679000052], + [-75.811879035999908, 38.045965887000094], + [-75.80207271999987, 38.058050848], + [-75.756581183999913, 38.092596747000115], + [-75.742990688999953, 38.110825914000188], + [-75.757679816999939, 38.113267320000134], + [-75.768625454999921, 38.1056175800001], + [-75.77953040299991, 38.095404364000061], + [-75.794504360999923, 38.090318101000136], + [-75.819081183999941, 38.091009833000086], + [-75.833322719999842, 38.08917877800009], + [-75.845366990999963, 38.083482164000102], + [-75.847564256999959, 38.086371161000145], + [-75.847767706999917, 38.087469794000086], + [-75.848622199999909, 38.088324286], + [-75.852853969999927, 38.090318101000136], + [-75.852853969999927, 38.097805080000015], + [-75.842600063999896, 38.101304429], + [-75.83238684799997, 38.107570705000128], + [-75.823882615999935, 38.115545966000084], + [-75.818674282999922, 38.124457098000121], + [-75.824859178999901, 38.131293036000059], + [-75.814442511999914, 38.135199286000145], + [-75.784413214999859, 38.139471747000144], + [-75.776478644999912, 38.144964911], + [-75.779693162999962, 38.155218817000119], + [-75.794016079999949, 38.158880927000084], + [-75.811634894999969, 38.157294012000037], + [-75.824859178999901, 38.159247137000179], + [-75.848133917999917, 38.152167059000121], + [-75.893462693999936, 38.156073309000121], + [-75.91429602799991, 38.151800848], + [-75.919545050999886, 38.144842841000028], + [-75.920643683999941, 38.13572825700011], + [-75.922759568999936, 38.127875067000147], + [-75.931304490999878, 38.124457098000121], + [-75.937408006999959, 38.127630927], + [-75.940500454999949, 38.135402736000103], + [-75.941558397999898, 38.155462958000058], + [-75.928456183999941, 38.193548895000148], + [-75.896311001999976, 38.210679429], + [-75.856027798999889, 38.219712632], + [-75.818674282999922, 38.233710028000147], + [-75.834584113999938, 38.240179755000057], + [-75.878732876999948, 38.242865302000141], + [-75.897206183999856, 38.251125393000123], + [-75.906646287999877, 38.270982164000131], + [-75.902414516999869, 38.293768622000144], + [-75.891224738999938, 38.315130927000112], + [-75.85806230399993, 38.358587958000058], + [-75.849110480999883, 38.373968817], + [-75.843373175999915, 38.395453192000119], + [-75.840728318999936, 38.400824286000088], + [-75.843251105999855, 38.404364325000145], + [-75.856271938999924, 38.405666408000158], + [-75.863148566999939, 38.401760158000158], + [-75.866444464999887, 38.392401434000035], + [-75.869007941999882, 38.38108958500014], + [-75.873361782999979, 38.371527411000059], + [-75.924712693999908, 38.324896552000055], + [-75.931304490999878, 38.316880601000108], + [-75.955677863999938, 38.25779857], + [-75.962717251999891, 38.247992255000142], + [-75.968251105999911, 38.254055080000128], + [-75.96808834499987, 38.26260000200007], + [-75.966623501999891, 38.27228424700003], + [-75.968251105999911, 38.282131252000127], + [-75.974110480999883, 38.28815338700015], + [-75.983631964999859, 38.295477606000148], + [-75.992339647999955, 38.30390045800003], + [-75.996205206999946, 38.313177802000055], + [-75.990101691999968, 38.325995184000092], + [-75.962391730999883, 38.335842190000037], + [-75.95531165299991, 38.351019598], + [-75.964833136999914, 38.373480536], + [-75.990467902999882, 38.362046617000047], + [-76.018910285999908, 38.334784247000144], + [-76.037180141999869, 38.309475002000013], + [-76.02672278599988, 38.304185289000046], + [-76.019276495999918, 38.294419664000102], + [-76.017323370999861, 38.281805731000119], + [-76.017323370999861, 38.267808335000055], + [-76.028675910999937, 38.241766669000086], + [-76.037912563999896, 38.232489325000031], + [-76.048817511999886, 38.23932526200015], + [-76.081206834999875, 38.284084377000099], + [-76.09117591099988, 38.292425848000065], + [-76.117502407999979, 38.298285223], + [-76.12437903599988, 38.3048363300001], + [-76.13341223899991, 38.323065497000172], + [-76.192941860999923, 38.382757880000057], + [-76.209706183999941, 38.392035223], + [-76.22085527299987, 38.383612372000144], + [-76.206532355999883, 38.338568427], + [-76.209706183999941, 38.316880601000108], + [-76.215931769999912, 38.316880601000108], + [-76.221099412999905, 38.343898830000157], + [-76.239857550999972, 38.368231512000122], + [-76.269886847999913, 38.405666408000158], + [-76.27513587099989, 38.411566473000093], + [-76.282338019999941, 38.421820380000113], + [-76.288889126999919, 38.433539130000028], + [-76.295480923999889, 38.455511786000116], + [-76.304025844999927, 38.463283596000124], + [-76.313303188999953, 38.468695380000085], + [-76.318959113999966, 38.473944403000147], + [-76.319813605999855, 38.49502187700007], + [-76.304676886999857, 38.502630927000112], + [-76.286366339999915, 38.5001488300001], + [-76.277414516999869, 38.490952867000104], + [-76.273101365999878, 38.467474677000055], + [-76.263742641999841, 38.465521552000027], + [-76.254302537999934, 38.47980377800009], + [-76.250070766999897, 38.504950262000179], + [-76.242339647999898, 38.521185614000117], + [-76.223947719999842, 38.52960846600017], + [-76.20148678299995, 38.53510163], + [-76.181792772999898, 38.542792059000121], + [-76.187245245999947, 38.553290106000091], + [-76.171986456999974, 38.566229559000092], + [-76.174956834999875, 38.576971747000115], + [-76.17926998599998, 38.580511786], + [-76.184478318999879, 38.582586981000119], + [-76.19098873599998, 38.583563544000086], + [-76.198841925999943, 38.583807684000035], + [-76.210519985999952, 38.582709052], + [-76.213368292999888, 38.57949453300013], + [-76.214182094999899, 38.574042059000092], + [-76.21934973899991, 38.566392320000077], + [-76.23021399599989, 38.559515692000147], + [-76.242665167999917, 38.556708075000088], + [-76.273671027999939, 38.556463934000149], + [-76.286040818999879, 38.562811591000084], + [-76.278472459999932, 38.576849677000141], + [-76.256255662999877, 38.597398179], + [-76.256255662999877, 38.604234117000104], + [-76.262603318999908, 38.607814846000068], + [-76.267323370999918, 38.611802476000051], + [-76.277414516999869, 38.624741929000052], + [-76.232492641999869, 38.618068752000013], + [-76.215931769999912, 38.617905992000047], + [-76.201283331999889, 38.620672919000086], + [-76.175404425999886, 38.629217841000028], + [-76.161284959999932, 38.631008205000015], + [-76.176136847999913, 38.620672919000086], + [-76.181792772999898, 38.617905992000047], + [-76.171864386999914, 38.610256252000013], + [-76.161284959999932, 38.604234117000104], + [-76.142648891999869, 38.607489325000145], + [-76.114974820999919, 38.587975443000076], + [-76.092353834999898, 38.59363380900011], + [-76.05358612099991, 38.568038512000115], + [-76.01166511699995, 38.565655094000178], + [-75.994292772999898, 38.583685614000061], + [-75.982533331999917, 38.590033270000092], + [-75.970204230999883, 38.606594143000152], + [-75.965321417999888, 38.637396552000112], + [-75.95531165299991, 38.652655341000084], + [-75.959380662999877, 38.655707098000093], + [-75.962717251999891, 38.658880927000055], + [-75.968251105999911, 38.658880927000055], + [-75.98997962099989, 38.623968817000119], + [-75.999926978999952, 38.602595207000135], + [-76.024243815999853, 38.592846354000145], + [-76.059347486999911, 38.606201199000154], + [-76.076943919999877, 38.61560427400012], + [-76.105028833999881, 38.624910126000131], + [-76.092396613999881, 38.658880927000055], + [-76.107492641999897, 38.653998114000089], + [-76.1205134759999, 38.647935289000188], + [-76.134999152999939, 38.64594147300015], + [-76.154449022999927, 38.652655341000084], + [-76.154449022999927, 38.658880927000055], + [-76.145375128999916, 38.665025132000139], + [-76.119618292999888, 38.675604559000178], + [-76.106068488999938, 38.679388739000032], + [-76.106068488999938, 38.686224677000112], + [-76.126861131999902, 38.684881903000033], + [-76.148508266999897, 38.680894273000078], + [-76.166127081999917, 38.681463934000035], + [-76.174956834999875, 38.693670966000113], + [-76.168324347999913, 38.699896552000055], + [-76.164540167999888, 38.708156643000152], + [-76.164296027999853, 38.717718817000147], + [-76.16812089799987, 38.727728583000115], + [-76.176991339999915, 38.716131903000118], + [-76.181467251999976, 38.702378648], + [-76.186919725999928, 38.691066799000012], + [-76.198649065999888, 38.67505635800002], + [-76.2090689959999, 38.68672448000008], + [-76.2265126449999, 38.700970811000147], + [-76.236467401999846, 38.715154570000053], + [-76.227815676999882, 38.735726853000031], + [-76.201837816999841, 38.732305854000131], + [-76.221878188999938, 38.750931670000156], + [-76.233850452999945, 38.757449349000026], + [-76.254399834999901, 38.749237355000119], + [-76.273657155999842, 38.714526703000061], + [-76.291942400999858, 38.721314589000102], + [-76.297311869999959, 38.750939216000162], + [-76.288442061999973, 38.766697874], + [-76.288038197999953, 38.775526088000035], + [-76.294383350999851, 38.773854203000056], + [-76.309832623999853, 38.761237941000061], + [-76.310585376999882, 38.735330673000121], + [-76.326515629999903, 38.718243454000017], + [-76.326746941999943, 38.698754971000128], + [-76.322008078999886, 38.689431406000054], + [-76.325821517999941, 38.677534132000133], + [-76.341292952999908, 38.673172934000078], + [-76.346262173999946, 38.689927476000079], + [-76.343617316999939, 38.714178778000147], + [-76.340321417999917, 38.728420315000065], + [-76.331206834999932, 38.745917059000121], + [-76.311634894999941, 38.804266669000114], + [-76.306548631999931, 38.814357815000065], + [-76.304676886999857, 38.822739976000136], + [-76.277251756999902, 38.840887762000037], + [-76.260346136999914, 38.858046002000052], + [-76.253168886999902, 38.85500277800007], + [-76.259559489999845, 38.839215203000109], + [-76.239320078999896, 38.822074675000138], + [-76.221007040999893, 38.815277173000126], + [-76.2124257239999, 38.807636661000132], + [-76.212102858999913, 38.788244976000087], + [-76.198437064999951, 38.776205481000105], + [-76.183595633999857, 38.764383585000118], + [-76.173110537999889, 38.756612444000083], + [-76.143910285999965, 38.768133856000176], + [-76.131459113999938, 38.772894598000065], + [-76.11754309799997, 38.78506094000015], + [-76.109038865999935, 38.800726630000113], + [-76.112904425999943, 38.816555080000072], + [-76.126332160999937, 38.800726630000113], + [-76.146839972999885, 38.790350653000033], + [-76.176967035999951, 38.78555069800008], + [-76.194376405999947, 38.813917755], + [-76.188167384999929, 38.846690832000135], + [-76.156997803999872, 38.86012378400001], + [-76.127064581999974, 38.866034247000115], + [-76.106068488999938, 38.877997137000065], + [-76.147857225999957, 38.891546942000033], + [-76.154449022999927, 38.89533112200003], + [-76.147328253999973, 38.915920315000065], + [-76.148345506999931, 38.924953518000095], + [-76.161284959999932, 38.926418361000131], + [-76.164418097999913, 38.920599677], + [-76.171783006999931, 38.896918036000059], + [-76.178374803999901, 38.891669012000179], + [-76.19788293499991, 38.878455907000088], + [-76.195057745999918, 38.912176825000031], + [-76.192779100999957, 38.928290106000119], + [-76.196905500999947, 38.935648094000058], + [-76.207953363999962, 38.944045698000153], + [-76.229920049999919, 38.952344295000117], + [-76.243275519999969, 38.950628973000121], + [-76.247181769999969, 38.951157945000105], + [-76.255441860999952, 38.943833726000108], + [-76.262766079999949, 38.935370184000149], + [-76.263742641999841, 38.93260325700011], + [-76.273752407999922, 38.927883205000015], + [-76.280506964999859, 38.926662502000099], + [-76.311268683999941, 38.924627997000144], + [-76.31932532499988, 38.922674872000115], + [-76.328846808999884, 38.916489976000136], + [-76.331898566999968, 38.906968492000047], + [-76.331982287999949, 38.895480098000021], + [-76.327062726999969, 38.880957851000161], + [-76.328363983999907, 38.865156181000103], + [-76.346930969999846, 38.856454414], + [-76.359241341999848, 38.846602146000166], + [-76.374747926999902, 38.841573223000083], + [-76.366316667999882, 38.896320777000128], + [-76.356285351999873, 38.948639309], + [-76.338856574999852, 38.977606512000094], + [-76.335764126999976, 38.985012111000074], + [-76.322092251999919, 39.006415106000034], + [-76.315297003999916, 39.029364325000117], + [-76.306385870999861, 39.031317450000145], + [-76.295033331999889, 39.027655341000113], + [-76.293261957999874, 39.008770509000058], + [-76.285144708999894, 38.98942810700008], + [-76.244386022999919, 38.978904315000094], + [-76.216214008999884, 38.974319368000167], + [-76.197561430999968, 38.979339881000087], + [-76.167876756999931, 38.996323960000055], + [-76.150990363999938, 39.009100653000118], + [-76.147043423999946, 39.029486395000092], + [-76.154896613999938, 39.033677476000108], + [-76.160878058999941, 39.039740302000112], + [-76.165191209999932, 39.047512111000017], + [-76.16812089799987, 39.056708075000088], + [-76.144602016999897, 39.060126044000086], + [-76.13341223899991, 39.062933661000145], + [-76.140858527999882, 39.069769598000065], + [-76.121652798999918, 39.092474677000112], + [-76.077219204999892, 39.128363348], + [-76.065093553999901, 39.146144924000097], + [-76.087798631999959, 39.138657945000134], + [-76.108998175999943, 39.125921942000062], + [-76.130523240999963, 39.117824611000131], + [-76.154449022999927, 39.124416408000016], + [-76.140858527999882, 39.13182200700011], + [-76.140858527999882, 39.138657945000134], + [-76.175119594999842, 39.124090887000094], + [-76.185121968999852, 39.094164026], + [-76.203910987999876, 39.080235820000084], + [-76.212461065999975, 39.051791498000071], + [-76.207625050999866, 39.029812234000062], + [-76.204206243999892, 39.014533238000084], + [-76.217211676999938, 39.013113964000169], + [-76.234876474999851, 39.024751929000146], + [-76.242618050999937, 39.033259639], + [-76.23110936, 39.058275918000149], + [-76.235717566999909, 39.098208193000133], + [-76.243045528999858, 39.115753230000095], + [-76.242597408999899, 39.126783396000022], + [-76.251445571999881, 39.132604068000077], + [-76.272685777999953, 39.151551665000071], + [-76.272628040999876, 39.167992072000018], + [-76.2558610399999, 39.188536055000142], + [-76.234091715999938, 39.230449344000149], + [-76.212807782999874, 39.261966868000158], + [-76.180572068999879, 39.288072007000054], + [-76.178618943999936, 39.307847398000078], + [-76.174956834999875, 39.316229559000035], + [-76.164865688999924, 39.323309637000094], + [-76.142933722999885, 39.326646226000108], + [-76.13341223899991, 39.330471096000124], + [-76.127797003999888, 39.338527736000074], + [-76.119984503999916, 39.360174872000144], + [-76.1166072259999, 39.364650783000044], + [-76.105362293999946, 39.372047815000101], + [-76.059605949999906, 39.369628903000077], + [-76.027857738999927, 39.362445336000164], + [-75.999639207999849, 39.362216741000069], + [-75.93149284799992, 39.364984416000098], + [-75.88567609999987, 39.362528612000048], + [-75.860092653999857, 39.36178451500011], + [-75.839182094999899, 39.371486721000124], + [-75.864017137999952, 39.379595491000131], + [-75.904705704999913, 39.374283418000076], + [-76.006596698999886, 39.380548214], + [-76.034264631999861, 39.39287729700014], + [-76.013905402999853, 39.416164455000015], + [-75.973947719999899, 39.450832424000069], + [-75.951975063999981, 39.46580638200011], + [-75.934722459999875, 39.474514065], + [-75.912464972999942, 39.476385809000149], + [-75.866118943999965, 39.464300848000065], + [-75.839182094999899, 39.460760809000178], + [-75.839182094999899, 39.466986395000148], + [-75.868763800999943, 39.480658270000092], + [-75.884022589999915, 39.492254950000088], + [-75.893788214999859, 39.508612372000115], + [-75.869130011999857, 39.51947663], + [-75.85130774599989, 39.538397528000118], + [-75.839263475999871, 39.56146881700009], + [-75.831695115999935, 39.584377346000068], + [-75.856027798999889, 39.577378648], + [-75.87340247299997, 39.562892971000153], + [-75.889149542999917, 39.545477606000176], + [-75.904930942999897, 39.521531681000127], + [-75.966052363999893, 39.481731521000157], + [-76.000712972999878, 39.452790123000156], + [-75.999663865999935, 39.485500393000152], + [-75.990630662999934, 39.504461981000148], + [-75.965484178999958, 39.532863674000097], + [-75.954660610999952, 39.548081773000078], + [-75.94684811099998, 39.565375067000062], + [-75.934722459999875, 39.604193427], + [-75.951039191999911, 39.601019598000121], + [-75.962554490999935, 39.590765692], + [-75.979156053999901, 39.567287502000127], + [-76.008350392999972, 39.548687008000158], + [-76.038206562999903, 39.556620648000134], + [-76.064796225999913, 39.555634986000101], + [-76.08299719999988, 39.557806708000115], + [-76.092396613999881, 39.550197658000073], + [-76.120350714999915, 39.494940497000172], + [-76.109730597999885, 39.485012111000074], + [-76.073068813999953, 39.475083726000079], + [-76.065093553999901, 39.470770575000145], + [-76.067534959999932, 39.457831122000144], + [-76.074126756999931, 39.448797919000143], + [-76.122425910999937, 39.411037502000099], + [-76.183705206999946, 39.383002020000092], + [-76.209706183999941, 39.364650783000044], + [-76.225900844999899, 39.37783437700007], + [-76.229603644999941, 39.397528387000122], + [-76.222767706999917, 39.440334377000013], + [-76.21613521999987, 39.459377346000011], + [-76.215809699999937, 39.467596747000087], + [-76.222767706999917, 39.474514065], + [-76.232492641999869, 39.474514065], + [-76.240142381999902, 39.46702708500014], + [-76.246815558999856, 39.458238023000078], + [-76.253163214999887, 39.454006252000127], + [-76.266835089999915, 39.378851630000142], + [-76.252674933999913, 39.361517645000148], + [-76.245228644999912, 39.349554755000113], + [-76.246652798999889, 39.344142971000068], + [-76.254017706999889, 39.340073960000112], + [-76.284169074999909, 39.310614325000031], + [-76.291656053999873, 39.357123114000061], + [-76.31151282499988, 39.402777411], + [-76.325184699999909, 39.407660223000065], + [-76.401478644999969, 39.392523505000085], + [-76.385568813999953, 39.38226959800015], + [-76.358062303999901, 39.377101955000128], + [-76.336659308999856, 39.369208075000174], + [-76.338856574999852, 39.350978908000101], + [-76.33263098899991, 39.350978908000101], + [-76.341664191999911, 39.340480861000017], + [-76.351633266999897, 39.338202216000141], + [-76.362375454999921, 39.337225653000175], + [-76.373605923999918, 39.330471096000124], + [-76.36652584499987, 39.31732819200009], + [-76.369130011999857, 39.313177802000141], + [-76.42446855399993, 39.323675848], + [-76.430816209999875, 39.318101304], + [-76.423451300999972, 39.305650132000082], + [-76.390492316999911, 39.271551825000174], + [-76.391184048999946, 39.264878648000106], + [-76.401478644999969, 39.256008205000072], + [-76.416900193999908, 39.263983466000028], + [-76.425933397999898, 39.273749091000141], + [-76.442494269999969, 39.296942450000088], + [-76.450672980999883, 39.302069403000118], + [-76.483469204999892, 39.310614325000031], + [-76.467762824999909, 39.282904364000146], + [-76.44774329299986, 39.256740627000099], + [-76.421538865999906, 39.238348700000145], + [-76.396865045999874, 39.237981451000124], + [-76.402770358999902, 39.227816484000087], + [-76.431966554999946, 39.205936307000101], + [-76.449177867999907, 39.194956886000099], + [-76.448559498999884, 39.208435067000082], + [-76.445238776999929, 39.217904850000153], + [-76.45531165299991, 39.220160223000065], + [-76.463002081999917, 39.213812567000119], + [-76.469470108999872, 39.207542411000119], + [-76.482508973999927, 39.207388024000139], + [-76.497315597999886, 39.20855739500017], + [-76.492467796999875, 39.227464775000144], + [-76.508297803999938, 39.236026734000134], + [-76.531995680999898, 39.245839572000179], + [-76.564572869999893, 39.264964190000072], + [-76.57081758399994, 39.273637551000078], + [-76.581166144999884, 39.267320054000052], + [-76.591053839999887, 39.263495184000035], + [-76.61656653599988, 39.262193101000136], + [-76.623199022999955, 39.259711005000113], + [-76.610463019999912, 39.254461981000034], + [-76.602592743999935, 39.248324191000151], + [-76.585845506999902, 39.248521226000022], + [-76.570276267999901, 39.244692263], + [-76.563902226999915, 39.231303655000048], + [-76.56359011899994, 39.215819648000107], + [-76.536520170999978, 39.211443883000172], + [-76.530267448999894, 39.203441508000182], + [-76.528289328999904, 39.191345123000033], + [-76.524672531999897, 39.184657017000077], + [-76.517562154999894, 39.17666312900009], + [-76.499989386999857, 39.164862372000144], + [-76.493792709999894, 39.161469948000118], + [-76.480002036999906, 39.167023043000043], + [-76.469334925999874, 39.155031707000077], + [-76.441029425999915, 39.135158596000124], + [-76.433282714999848, 39.131218416000181], + [-76.430226769999962, 39.106334232000123], + [-76.419506400999893, 39.089620823000146], + [-76.42530667199992, 39.074052964000188], + [-76.432993946999943, 39.067224002000117], + [-76.443571550999934, 39.076527794000143], + [-76.443267381999902, 39.088690497000087], + [-76.455922003999945, 39.090725002000013], + [-76.469146287999905, 39.083441473], + [-76.478375574999887, 39.080825592000011], + [-76.49743287599992, 39.078572207], + [-76.513209942999964, 39.086458471000142], + [-76.519276023999851, 39.085708683000021], + [-76.516476568999877, 39.075635855000044], + [-76.499849053999895, 39.068428057000105], + [-76.476327458999975, 39.06400332200009], + [-76.42913332899991, 39.045707992000146], + [-76.409910302999918, 39.037846908000134], + [-76.394195115999935, 39.024562893000123], + [-76.398548956999946, 39.014390367000161], + [-76.415191209999904, 39.009955145], + [-76.438710089999944, 39.008978583000143], + [-76.445952928999873, 39.005194403000118], + [-76.455569933999868, 38.98873483000007], + [-76.47265600699987, 38.995129801000118], + [-76.51194242699998, 39.021963273000054], + [-76.524618285999935, 39.045392050000103], + [-76.539591457999904, 39.064068545000069], + [-76.551665818999908, 39.077215887000037], + [-76.563547329999949, 39.074286200000031], + [-76.569162563999953, 39.066392320000048], + [-76.568511522999898, 39.056097723000121], + [-76.571187251999874, 39.038643620000144], + [-76.561587209999857, 39.036066782000105], + [-76.5432939989999, 39.031580718], + [-76.530955476999878, 39.021635731000131], + [-76.512505774999852, 39.005725367000153], + [-76.486157535999922, 38.98652514000004], + [-76.476404135999928, 38.975202277000122], + [-76.469928568999876, 38.953739787000032], + [-76.452426725999942, 38.943860711000028], + [-76.465193403999962, 38.932935287000035], + [-76.45961237899985, 38.912136603000093], + [-76.501440902999889, 38.927118559000164], + [-76.525292645999855, 38.951058495000055], + [-76.557481536999887, 38.958738721000131], + [-76.568607699999859, 38.952541830000044], + [-76.53490149599989, 38.937648830000128], + [-76.524403449999909, 38.926418361000131], + [-76.512399218999917, 38.912852827], + [-76.493100771999934, 38.898950019000054], + [-76.496197301999899, 38.880063411000137], + [-76.507421477999912, 38.87925578300009], + [-76.521407326999906, 38.887166072000113], + [-76.537464972999885, 38.891669012000179], + [-76.5365291009999, 38.887396552000084], + [-76.535308397999898, 38.884466864000146], + [-76.53062903599988, 38.877997137000065], + [-76.523684518999943, 38.870301789000067], + [-76.526970007999921, 38.861505348000108], + [-76.538991444999908, 38.856641417], + [-76.531722230999918, 38.83922899800011], + [-76.52227894299989, 38.842713578000129], + [-76.505881950999907, 38.84426207900016], + [-76.492915721999907, 38.844419789000156], + [-76.49428786799993, 38.825546431000177], + [-76.503773566999882, 38.807562567000147], + [-76.53065552299995, 38.783315912], + [-76.551665818999908, 38.775580145000148], + [-76.550282355999911, 38.755113023], + [-76.538889126999948, 38.737697658000016], + [-76.521527661999926, 38.72489274800013], + [-76.527077556999927, 38.702643416000157], + [-76.529534466999905, 38.675760092000175], + [-76.521561790999897, 38.650171732000118], + [-76.509148697999933, 38.628139405000141], + [-76.512196417999945, 38.571478583000086], + [-76.511977318999925, 38.527733910000151], + [-76.495500601999908, 38.496018047000078], + [-76.435503683999855, 38.438223843000017], + [-76.413982208999869, 38.412336458000127], + [-76.396056886999901, 38.391275176000093], + [-76.38190497699992, 38.384574651000108], + [-76.392764412999952, 38.353569848000078], + [-76.419359187999873, 38.321705733], + [-76.453562565999874, 38.324052805000136], + [-76.47130391399989, 38.335501598000079], + [-76.469146287999905, 38.364081122000172], + [-76.473947719999899, 38.373277085000055], + [-76.474964972999942, 38.379584052], + [-76.476714647999955, 38.385158596000011], + [-76.483469204999892, 38.392035223], + [-76.500111456999946, 38.400091864000146], + [-76.511341925999943, 38.403998114000146], + [-76.542836066999939, 38.40961334800015], + [-76.561640284999896, 38.424215095000093], + [-76.602456088999901, 38.444334536000085], + [-76.636474939999914, 38.474163406000159], + [-76.647699386999932, 38.505683473], + [-76.671783006999902, 38.654445705000072], + [-76.681467251999948, 38.679388739000032], + [-76.68407141799986, 38.672552802], + [-76.682850714999944, 38.664740302], + [-76.68423417899993, 38.653265692000062], + [-76.678822394999884, 38.580389716000028], + [-76.674672003999945, 38.558417059000092], + [-76.675200975999928, 38.535345770000148], + [-76.675916791999896, 38.509433360000017], + [-76.673643969999972, 38.486057864000102], + [-76.65705066599989, 38.450487181000042], + [-76.619740363999938, 38.423325914000159], + [-76.585845506999902, 38.398871161000116], + [-76.521311001999919, 38.374212958000143], + [-76.51073157499988, 38.367824611000017], + [-76.506092902999853, 38.349554755000142], + [-76.493804490999906, 38.329820054000109], + [-76.476389126999919, 38.312892971000124], + [-76.450633967999948, 38.293140520000136], + [-76.432303309999895, 38.294039673], + [-76.42458045499987, 38.301669697000094], + [-76.406361456999917, 38.308294989], + [-76.385783056999912, 38.306302981000115], + [-76.373382152999881, 38.298892537000185], + [-76.387120614999901, 38.282961133000143], + [-76.39645510699998, 38.267076257000056], + [-76.393299933999856, 38.24599844], + [-76.387277798999946, 38.226955471000011], + [-76.380482550999915, 38.21938711100016], + [-76.360088704999981, 38.194710594000171], + [-76.334106173999913, 38.16337546300015], + [-76.320506626999929, 38.138776121000049], + [-76.330831098999909, 38.12905995600012], + [-76.340304849999967, 38.120726740000023], + [-76.33263098899991, 38.090318101000136], + [-76.328048038999952, 38.07614873500016], + [-76.326051885999902, 38.063785637000038], + [-76.32389659699993, 38.043842087000044], + [-76.336341361999928, 38.053373361000141], + [-76.351283543999926, 38.05735794400006], + [-76.395915245999902, 38.102994318000029], + [-76.415257254999943, 38.108298778000162], + [-76.434086267999902, 38.132142561000094], + [-76.426750298999906, 38.158997491000136], + [-76.433583136999943, 38.190334377000099], + [-76.456125454999921, 38.207017320000134], + [-76.455230272999927, 38.197902736000131], + [-76.449940558999856, 38.182806708000115], + [-76.44871985599994, 38.175970770000035], + [-76.450917120999918, 38.166205145000063], + [-76.455799933999884, 38.158270575000117], + [-76.460804816999939, 38.15232982], + [-76.468861456999974, 38.139105536000145], + [-76.48216712099989, 38.146144924000012], + [-76.503895636999857, 38.166001695000105], + [-76.510121222999913, 38.140082098000121], + [-76.517160610999895, 38.131781317000147], + [-76.53062903599988, 38.138739325000031], + [-76.532378709999875, 38.147406317000119], + [-76.540322249999861, 38.159773202000096], + [-76.547807277999937, 38.183699020000162], + [-76.56296942599991, 38.198610491000167], + [-76.587662619999975, 38.210645935000159], + [-76.61674290499991, 38.223306495000188], + [-76.643835240999863, 38.225008069000111], + [-76.67809103299993, 38.234835317], + [-76.697364081999865, 38.238002953000077], + [-76.754724850999935, 38.227602311000069], + [-76.777645892999914, 38.237556697000102], + [-76.804209846999953, 38.253622573000044], + [-76.80101477799991, 38.276312567], + [-76.808583136999857, 38.289740302], + [-76.811756964999915, 38.299221096000096], + [-76.815581834999932, 38.336330471000011], + [-76.82762610599994, 38.362860419000143], + [-76.848988410999908, 38.382513739000117], + [-76.880686001999948, 38.398871161000116], + [-76.855946417999888, 38.355210679000137], + [-76.846099412999962, 38.330877997000144], + [-76.839100714999887, 38.302639065], + [-76.839215656999897, 38.257216826000089], + [-76.865767420999902, 38.271897818000028], + [-76.895726198999881, 38.282406338000087], + [-76.922174305999903, 38.291593193], + [-76.923639595999902, 38.314880599000091], + [-76.948536009999884, 38.330945532000058], + [-76.973376781999889, 38.344263777000052], + [-76.986683531999915, 38.370720352000077], + [-77.014020495999944, 38.441629492000075], + [-77.021581873999935, 38.461395300000035], + [-77.03156490799995, 38.481390692000119], + [-77.032378709999961, 38.471625067], + [-77.03490149599989, 38.462713934000149], + [-77.038889126999948, 38.454331773], + [-77.044545050999943, 38.446600653000175], + [-77.060129360999923, 38.428534247000144], + [-77.073231574999909, 38.420843817000147], + [-77.094637167999906, 38.408720077000126], + [-77.105219840999951, 38.411281588000136], + [-77.103627081999974, 38.43451569200009], + [-77.105295376999976, 38.445461330000128], + [-77.09976152299987, 38.453436591000113], + [-77.09976152299987, 38.460882880000085], + [-77.103179490999878, 38.463080145000063], + [-77.104359503999888, 38.464056708000143], + [-77.105051235999923, 38.465155341000084], + [-77.107248501999919, 38.467718817], + [-77.12083899599989, 38.461493231000034], + [-77.133941209999961, 38.453436591000113], + [-77.12718665299991, 38.450018622000087], + [-77.122954881999902, 38.445990302000112], + [-77.113433397999898, 38.432928778000147], + [-77.133941209999961, 38.398871161000116], + [-77.145253058999941, 38.388739325000174], + [-77.167795376999919, 38.380926825000174], + [-77.178334113999881, 38.374579169000143], + [-77.203651219999955, 38.364295392000045], + [-77.231931387999879, 38.374068355000148], + [-77.255258569999853, 38.393521921000016], + [-77.262324702999933, 38.424926647000078], + [-77.257859956999908, 38.451061215000109], + [-77.266394991999903, 38.472844197000157], + [-77.267041481999911, 38.494079540000186], + [-77.257049418999884, 38.511407645000034], + [-77.247758262999952, 38.523244902000059], + [-77.238840298999975, 38.537665106000119], + [-77.227528449999909, 38.556870835000055], + [-77.20913001699995, 38.555718346], + [-77.18637350599991, 38.556815084000064], + [-77.168080206999946, 38.576971747000115], + [-77.175597126999918, 38.578256890000134], + [-77.189358968999926, 38.569099363000035], + [-77.20592691799996, 38.566058663], + [-77.204436590999904, 38.57499805300013], + [-77.193524462999875, 38.59164737100015], + [-77.184437628999973, 38.604966539000131], + [-77.178944464999944, 38.60761139500012], + [-77.172596808999913, 38.609523830000072], + [-77.164947068999879, 38.614813544000143], + [-77.158314581999917, 38.616522528000147], + [-77.136341925999886, 38.615545966000084], + [-77.126454230999883, 38.617905992000047], + [-77.121001756999931, 38.623765367000161], + [-77.11481686099998, 38.640855210000112], + [-77.10606848899991, 38.657131252000156], + [-77.102406378999945, 38.673895575000174], + [-77.096343553999958, 38.682806708000115], + [-77.088693813999924, 38.689195054000137], + [-77.080799933999856, 38.694037177000112], + [-77.061869019999904, 38.697392534000087], + [-77.045638013999877, 38.700696371000063], + [-77.03734193899993, 38.696186182000119], + [-77.021858536999929, 38.695498175000026], + [-77.012466891999935, 38.697355469000129], + [-77.015561796999947, 38.700629659000143], + [-77.024125828999843, 38.699790516000078], + [-77.030669523999933, 38.703331044000109], + [-77.034677683999917, 38.708259924000075], + [-77.030159870999853, 38.715698017000179], + [-77.029729465999964, 38.731442541000106], + [-77.024728969999927, 38.740790106000091], + [-77.018422003999888, 38.743963934000149], + [-77.011161464999901, 38.743824806000092], + [-77.011680071999933, 38.747165551000123], + [-77.019533375999913, 38.751720510000055], + [-77.024337618999965, 38.754652946000036], + [-77.028061244999947, 38.765308087000122], + [-77.026210828999865, 38.776392240000106], + [-77.021227169999918, 38.782839352000011], + [-77.017997386999923, 38.790595449000037], + [-77.021148114999846, 38.795900647000153], + [-77.027387426999979, 38.819906384000078], + [-77.021496748999908, 38.836723267000181], + [-77.017841282999882, 38.845179560000147], + [-77.015932182999848, 38.854279484000173], + [-77.019577713999951, 38.861274602000108], + [-77.025934762999952, 38.872594094000121], + [-77.03607145099997, 38.879823073000139], + [-77.049630977999925, 38.888312384000088], + [-77.060083943999899, 38.899067862000138], + [-77.068332790999932, 38.901937596000081], + [-77.063687004999849, 38.891255191000042], + [-77.051814638999957, 38.881092938000151], + [-77.045243379999903, 38.876192925000069], + [-77.03901702099995, 38.868269890000178], + [-77.034951311999919, 38.860972798000105], + [-77.033039242999905, 38.85397047700009], + [-77.032801022999905, 38.845266666000057], + [-77.036952107999895, 38.839840201000143], + [-77.043821334999933, 38.839392799000066], + [-77.043279718999969, 38.835382697000099], + [-77.040048807999881, 38.827398977000072], + [-77.037571376999892, 38.815050405000093], + [-77.038353689999951, 38.796282775000137], + [-77.042959544999945, 38.791852943], + [-77.049748169999958, 38.788726534000133], + [-77.052617097999899, 38.783655209000088], + [-77.047693895999885, 38.776368119000054], + [-77.046589448999896, 38.767685749000023], + [-77.044751841999897, 38.747972456000085], + [-77.042527270999869, 38.728907994000096], + [-77.04777148799991, 38.715723534000162], + [-77.069956255999898, 38.710663832000122], + [-77.089222785999908, 38.710394598000121], + [-77.099354620999861, 38.706854559000149], + [-77.109445766999926, 38.707505601000108], + [-77.117258266999926, 38.706244208], + [-77.124012824999852, 38.687201239], + [-77.131035706999882, 38.677191406000119], + [-77.142403775999895, 38.676993583000083], + [-77.149054338999861, 38.685727080000063], + [-77.158297095999899, 38.691627542000148], + [-77.167785816999924, 38.688958693000032], + [-77.169333265999882, 38.679336560000067], + [-77.154296247999866, 38.663649438000093], + [-77.137996410999932, 38.650436947000131], + [-77.134865142999928, 38.636283075], + [-77.162924623999885, 38.631529249000053], + [-77.187163951999935, 38.620799528000092], + [-77.200888647999903, 38.623750638000033], + [-77.209287493999909, 38.63105833600018], + [-77.204973200999916, 38.638949803000045], + [-77.195423956999917, 38.655747789000159], + [-77.201771613999938, 38.665025132000139], + [-77.215891079999892, 38.664943752000156], + [-77.229888475999957, 38.656683661000059], + [-77.236317511999857, 38.641791083000115], + [-77.239369269999941, 38.626410223000065], + [-77.24742591099988, 38.609279690000122], + [-77.258656378999888, 38.593939520000092], + [-77.271717902999882, 38.583807684000035], + [-77.266957160999965, 38.580755927000141], + [-77.262928839999915, 38.57453034100017], + [-77.258046027999939, 38.569525458000143], + [-77.276478644999969, 38.559271552000112], + [-77.284779425999943, 38.556463934000149], + [-77.284779425999943, 38.549017645000092], + [-77.287342902999853, 38.530178127000127], + [-77.305383797999895, 38.502152550000133], + [-77.326592474999927, 38.450933675000144], + [-77.314250038999944, 38.4061286230001], + [-77.334700373999851, 38.416707976000154], + [-77.351828530999882, 38.432825036000096], + [-77.358716239999893, 38.429264964000041], + [-77.350225181999889, 38.409553772], + [-77.323379207999892, 38.390187873000016], + [-77.309055646999951, 38.379491343000055], + [-77.297357538999904, 38.368742998000172], + [-77.290779980999844, 38.353784626000092], + [-77.302160023999875, 38.354260637000138], + [-77.323897202999945, 38.350424368000134], + [-77.343070492999885, 38.348691042000084], + [-77.338511249999868, 38.342610785000076], + [-77.292131466999933, 38.340737020000105], + [-77.248978846999961, 38.329884729000028], + [-77.185414191999939, 38.343573309000035], + [-77.166737433999856, 38.347886460000112], + [-77.133534308999856, 38.367132880000085], + [-77.085649580999927, 38.3684115], + [-77.058461066999911, 38.394191799000012], + [-77.040841057999899, 38.395909955000079], + [-77.020369888999937, 38.384585805000043], + [-77.014780627999869, 38.372328363000165], + [-77.016954847999898, 38.355142367000084], + [-77.014000543999884, 38.343524214000141], + [-77.014475063999896, 38.330511786000145], + [-77.022997048999883, 38.320051459000084], + [-77.038862887999898, 38.322548884000142], + [-77.052035704999952, 38.32302757500004], + [-77.052738307999903, 38.316842403000138], + [-77.038593897999931, 38.312947387000108], + [-77.030131514999908, 38.307682062000183], + [-77.000476233999905, 38.27730818300013], + [-76.97492428299995, 38.270697333], + [-76.965443488999938, 38.267238674000097], + [-76.959819209999893, 38.260142505000132], + [-76.955118190999968, 38.247185987000037], + [-76.9565685849999, 38.235503717000043], + [-76.96136630299992, 38.218281619], + [-76.954171220999854, 38.210167718000108], + [-76.912867890999848, 38.199167541000165], + [-76.881773206999952, 38.177026676000182], + [-76.830033024999864, 38.165468837000091], + [-76.796981020999937, 38.169404907000157], + [-76.775124732999956, 38.166985947000015], + [-76.756418423999918, 38.160956122000087], + [-76.750355597999913, 38.14838288], + [-76.739328579999977, 38.136704820000105], + [-76.715199347999942, 38.14191315300009], + [-76.691477016999869, 38.153143622000087], + [-76.681467251999948, 38.159247137000179], + [-76.670033331999917, 38.15741608300003], + [-76.661936001999891, 38.152899481000148], + [-76.655100063999953, 38.147894598], + [-76.647328253999973, 38.144964911], + [-76.635365363999938, 38.145005601], + [-76.614613410999937, 38.150376695000134], + [-76.607168360999879, 38.143451553000105], + [-76.60144412899993, 38.132539124000132], + [-76.60715299099985, 38.112956789000108], + [-76.59531675, 38.105068056], + [-76.581266742999844, 38.097602095000084], + [-76.561135115999946, 38.089453468], + [-76.534423357999941, 38.075170823000136], + [-76.528714210999908, 38.064256008000157], + [-76.520741339999859, 38.052801825000117], + [-76.533111131999902, 38.042669989000061], + [-76.531890428999873, 38.038723049000069], + [-76.53062903599988, 38.025132554000109], + [-76.525624152999939, 38.022691148], + [-76.504482290999903, 38.023635889], + [-76.485134992999861, 38.021790564000085], + [-76.470527412999871, 38.016265823000126], + [-76.463071323999969, 38.01491766200003], + [-76.454416469999899, 38.006170966000113], + [-76.461781378999916, 38.002346096000096], + [-76.469146287999905, 38.00096263200011], + [-76.458648240999935, 37.995550848000065], + [-76.40818012, 37.969616697], + [-76.373036261999943, 37.960598049000154], + [-76.291241668999874, 37.924996808000131], + [-76.262002538999923, 37.914303811000096], + [-76.247908898999896, 37.903471013000157], + [-76.242453440999896, 37.881594977000034], + [-76.235829230999911, 37.859605210000112], + [-76.239613410999908, 37.836086330000072], + [-76.250070766999897, 37.822821356000034], + [-76.267893032999979, 37.824448960000055], + [-76.299387173999889, 37.850897528000061], + [-76.315256313999924, 37.857611395000092], + [-76.324859178999901, 37.84870026200015], + [-76.317860480999911, 37.828802802000055], + [-76.297840949999852, 37.796128648000106], + [-76.293853318999965, 37.780666408000101], + [-76.294097459999904, 37.771429755000142], + [-76.297840949999852, 37.761379299000154], + [-76.304676886999857, 37.747748114000117], + [-76.309152798999918, 37.746405341000028], + [-76.316029425999943, 37.747748114000117], + [-76.322377081999974, 37.748277085], + [-76.325184699999909, 37.744330145], + [-76.317046678999901, 37.732245184000092], + [-76.285511847999913, 37.710923570000134], + [-76.284169074999909, 37.699286200000031], + [-76.292225714999944, 37.694566148000106], + [-76.30370032499988, 37.694037177000141], + [-76.315663214999915, 37.696112372000144], + [-76.325184699999909, 37.699286200000031], + [-76.319732225999871, 37.685492255000113], + [-76.325306769999884, 37.679510809000092], + [-76.334136522999955, 37.675767320000077], + [-76.338856574999852, 37.668890692000062], + [-76.335438605999855, 37.659125067000119], + [-76.321115688999953, 37.643988348000121], + [-76.317860480999911, 37.637193101000022], + [-76.304676886999857, 37.637884833000143], + [-76.321115688999953, 37.624009507000054], + [-76.349436001999919, 37.627997137000037], + [-76.404652472999913, 37.644680080000072], + [-76.408802863999966, 37.649969794000143], + [-76.419300910999937, 37.66010163], + [-76.430083787999934, 37.666896877000127], + [-76.435047980999883, 37.661769924000012], + [-76.438628709999961, 37.662909247000144], + [-76.446441209999961, 37.670843817000033], + [-76.453765428999958, 37.683539130000085], + [-76.456125454999921, 37.692450262000122], + [-76.468902147999955, 37.708644924000069], + [-76.478667772999898, 37.695054429000109], + [-76.489613410999965, 37.658351955000015], + [-76.504994269999912, 37.656927802000141], + [-76.516916469999842, 37.668931382000054], + [-76.523915167999917, 37.687892971000068], + [-76.524403449999909, 37.699286200000031], + [-76.535511847999942, 37.715521552000084], + [-76.571359829999949, 37.75128815300009], + [-76.579009568999879, 37.771307684000149], + [-76.58348548099994, 37.777289130000085], + [-76.613148566999882, 37.796128648000106], + [-76.61778723899991, 37.803859768000123], + [-76.621937628999945, 37.813910223], + [-76.628570115999906, 37.818426825000145], + [-76.640492316999939, 37.809149481000091], + [-76.649566209999932, 37.813055731000091], + [-76.657826300999943, 37.818996486000046], + [-76.662668423999918, 37.828517971000124], + [-76.661529100999871, 37.843329169000086], + [-76.67414303299995, 37.832993882], + [-76.687652147999927, 37.831610419000114], + [-76.700917120999861, 37.836900132], + [-76.712757941999911, 37.84707265800013], + [-76.750355597999913, 37.895168361000103], + [-76.769528281999897, 37.914496255000032], + [-76.832261934999906, 37.942972161000071], + [-76.850295356999936, 37.981958341000123], + [-76.880068455999918, 37.990956927000113], + [-76.895737179999884, 38.007308822000098], + [-76.915394660999937, 38.069891669000143], + [-76.9349666009999, 38.093695380000057], + [-76.947092251999891, 38.103338934000121], + [-76.96263587099989, 38.110825914000188], + [-77.007435675999915, 38.118109442], + [-77.017201300999972, 38.117010809000149], + [-77.026600714999887, 38.128851630000113], + [-77.036203579999977, 38.145209052000141], + [-77.047596808999941, 38.159816799000154], + [-77.062570766999869, 38.166001695000105], + [-77.107167120999947, 38.174953518000152], + [-77.125884568999908, 38.176011460000026], + [-77.133941209999961, 38.166001695000105], + [-77.126698370999918, 38.155462958000058], + [-77.109445766999926, 38.148993231000148], + [-77.07591712099989, 38.144964911], + [-77.06314042899993, 38.149847723000065], + [-77.055490688999896, 38.149644273000106], + [-77.051991339999915, 38.141831773000106], + [-77.050892706999974, 38.128851630000113], + [-77.047352667999888, 38.118963934000092], + [-77.041005011999857, 38.111029364000146], + [-77.03156490799995, 38.103949286000088], + [-76.960560675999972, 38.089585679000109], + [-76.948963995999861, 38.079779364000089], + [-76.944691535999937, 38.074530341000084], + [-76.925892706999889, 38.058823960000112], + [-76.921701626999976, 38.052801825000117], + [-76.926414787999931, 37.996716461000133], + [-76.922613680999945, 37.980833409000027], + [-76.905798020999924, 37.975791766000057], + [-76.891713019999912, 37.974310614000089], + [-76.880238410999965, 37.969671942000062], + [-76.877445945999938, 37.956363301000138], + [-76.865920432999928, 37.941977236000085], + [-76.847035285999937, 37.928941148], + [-76.831166144999912, 37.918361721000124], + [-76.816455915999938, 37.903551999000101], + [-76.795286413999861, 37.89195732400016], + [-76.787890057999846, 37.88323062500011], + [-76.777800841999948, 37.862091024], + [-76.766890752999899, 37.842040419000128], + [-76.752675062999913, 37.822626235000158], + [-76.741730309999923, 37.809965091], + [-76.729119597999841, 37.799465396000144], + [-76.716244537999927, 37.788097022000116], + [-76.70303453899993, 37.786955171000145], + [-76.68797766799986, 37.789496161000059], + [-76.683990037999877, 37.78925202], + [-76.67992102799991, 37.789699611000017], + [-76.675200975999928, 37.788723049000126], + [-76.67442786399991, 37.785101630000085], + [-76.676014777999939, 37.771877346000124], + [-76.675200975999928, 37.768215236000074], + [-76.668658754999853, 37.755501546000104], + [-76.631935527999929, 37.750427883000057], + [-76.613400520999846, 37.739539010000087], + [-76.601722292999938, 37.719650339000012], + [-76.579986131999959, 37.69818756700009], + [-76.579009568999879, 37.695868231000119], + [-76.577219204999892, 37.688177802], + [-76.574029980999882, 37.673245908000084], + [-76.5708052519999, 37.6532445160001], + [-76.55198222899989, 37.62675763600005], + [-76.522221118999909, 37.614880813000141], + [-76.46349036399991, 37.618557033000016], + [-76.443023240999935, 37.618597723], + [-76.428212042999888, 37.624212958], + [-76.404286261999914, 37.594183661000059], + [-76.367583787999905, 37.584214585000055], + [-76.325266079999892, 37.580633856000091], + [-76.284169074999909, 37.56956614800005], + [-76.301909959999904, 37.557928778000061], + [-76.319243943999908, 37.552923895], + [-76.366118943999936, 37.549058335], + [-76.392974412999934, 37.542181708], + [-76.393381313999924, 37.533148505000085], + [-76.377674933999884, 37.525213934000121], + [-76.356516079999949, 37.521795966000113], + [-76.322661912999905, 37.501288153000147], + [-76.30125891799986, 37.493841864000089], + [-76.291656053999873, 37.504380601000136], + [-76.28981346799992, 37.519404105], + [-76.2700617, 37.51735554800014], + [-76.262772283999936, 37.502927826000089], + [-76.263905066999968, 37.487302114000144], + [-76.267648891999841, 37.481024481000034], + [-76.277211066999911, 37.470445054], + [-76.277414516999869, 37.459702867000161], + [-76.267404751999891, 37.453192450000174], + [-76.255726691999882, 37.453273830000157], + [-76.244536912999877, 37.449530341000028], + [-76.24463721199993, 37.430586257000144], + [-76.245442736999877, 37.398187], + [-76.249206488999903, 37.36342859600002], + [-76.257640131999949, 37.335510348000028], + [-76.280703764999885, 37.321351358000115], + [-76.298251264999863, 37.33506919100013], + [-76.318959113999966, 37.370917059000121], + [-76.321644660999937, 37.386297919000143], + [-76.33356686099998, 37.384955145000063], + [-76.348052537999934, 37.379950262000037], + [-76.366118943999936, 37.384588934000149], + [-76.396595831999889, 37.42959219000015], + [-76.415150519999912, 37.442694403000118], + [-76.428212042999888, 37.418158270000092], + [-76.416818813999924, 37.414984442000119], + [-76.409291144999941, 37.407782294000086], + [-76.404611782999922, 37.398911851000051], + [-76.401478644999969, 37.39081452000012], + [-76.411691860999895, 37.394924221000068], + [-76.422515428999901, 37.39752838700015], + [-76.433176235999923, 37.396714585000055], + [-76.442494269999969, 37.39081452000012], + [-76.447580532999893, 37.379868882000054], + [-76.442738410999908, 37.372015692000062], + [-76.415882941999939, 37.35569896000014], + [-76.408558722999913, 37.353664455000015], + [-76.403431769999912, 37.349798895], + [-76.401478644999969, 37.339911200000088], + [-76.40648352799991, 37.337713934000092], + [-76.435047980999883, 37.32933177300005], + [-76.435047980999883, 37.32314687700007], + [-76.402658657999893, 37.325018622000144], + [-76.394032355999883, 37.32314687700007], + [-76.386097785999908, 37.315130927000141], + [-76.376861131999959, 37.301214911000059], + [-76.371896938999896, 37.288031317], + [-76.378504947999886, 37.272332388000123], + [-76.457430166999956, 37.261052619000125], + [-76.496029407999856, 37.249114840000132], + [-76.509352490999902, 37.269565839], + [-76.540007106999923, 37.293235775000042], + [-76.554680493999854, 37.307945059000119], + [-76.561634894999912, 37.32314687700007], + [-76.574289516999869, 37.32518138200011], + [-76.582020636999886, 37.330471096000096], + [-76.642486131999902, 37.409002997000115], + [-76.658192511999857, 37.418158270000092], + [-76.680897589999887, 37.427476304000137], + [-76.700103318999936, 37.449408270000063], + [-76.729847785999965, 37.494452216000028], + [-76.781076626999919, 37.535467841000141], + [-76.790272589999887, 37.532700914000159], + [-76.795399542999888, 37.52558014500012], + [-76.797678188999953, 37.515611070000134], + [-76.79816646999987, 37.504380601000136], + [-76.794097459999904, 37.498277085000055], + [-76.784779425999943, 37.494452216000028], + [-76.773671027999939, 37.491359768000152], + [-76.764637824999909, 37.487005927000055], + [-76.721994594999899, 37.427232164000188], + [-76.690785285999908, 37.411078192000119], + [-76.676380988999938, 37.394924221000068], + [-76.654774542999945, 37.36351146000014], + [-76.606223636999886, 37.295789101000096], + [-76.533526468999895, 37.255504661000103], + [-76.50433652799984, 37.231813782000032], + [-76.468073376999939, 37.213966286000087], + [-76.432298759999895, 37.222423945000102], + [-76.402984178999901, 37.23383209800015], + [-76.385609503999945, 37.232489325000145], + [-76.373605923999918, 37.220160223], + [-76.375803188999896, 37.217759507000082], + [-76.378407355999911, 37.20726146], + [-76.38023841099988, 37.194566148000135], + [-76.379750128999888, 37.185370184000149], + [-76.373158331999917, 37.17597077000012], + [-76.361724412999962, 37.166571356000119], + [-76.35106360599994, 37.164211330000157], + [-76.346262173999946, 37.175482489000146], + [-76.317250128999945, 37.159491278000147], + [-76.298207160999965, 37.144598700000088], + [-76.291656053999873, 37.13011302300005], + [-76.303212042999917, 37.125921942000119], + [-76.325591600999928, 37.114081122000144], + [-76.338612433999913, 37.101711330000043], + [-76.322092251999919, 37.095933335000055], + [-76.281605597999913, 37.10415273600016], + [-76.270375128999916, 37.097642320000077], + [-76.269886847999913, 37.069281317000119], + [-76.274525519999941, 37.048041083000143], + [-76.28294837099989, 37.028225002000127], + [-76.296213344999927, 37.013576565000122], + [-76.315256313999924, 37.007879950000031], + [-76.339711066999939, 37.007391669000143], + [-76.357045050999943, 37.004828192000147], + [-76.371449347999913, 36.998521226000108], + [-76.399525519999912, 36.978338934000178], + [-76.415435350999928, 36.97256094], + [-76.429188605999855, 36.976304429000052], + [-76.440297003999973, 37.015773830000015], + [-76.452992316999939, 37.03017812700007], + [-76.52394065099989, 37.057669850000039], + [-76.546063567999909, 37.089407448000131], + [-76.563191258999979, 37.085757128000168], + [-76.611187582999889, 37.119442192000079], + [-76.618596180999958, 37.130785731000017], + [-76.619984503999888, 37.144435940000122], + [-76.610829230999911, 37.172552802000112], + [-76.617339647999898, 37.199164130000085], + [-76.634022589999944, 37.220689195], + [-76.654774542999945, 37.23383209800015], + [-76.66930091099988, 37.227118231000091], + [-76.710804816999882, 37.224025783000016], + [-76.729847785999965, 37.220160223], + [-76.735218878999916, 37.213202216000028], + [-76.738758917999917, 37.20331452], + [-76.743763800999943, 37.197495835000055], + [-76.753773566999939, 37.203070380000057], + [-76.758452928999958, 37.21124909100017], + [-76.762074347999913, 37.221421617000104], + [-76.766672329999949, 37.230129299000012], + [-76.774240688999896, 37.23383209800015], + [-76.791818813999924, 37.236965236000017], + [-76.828968878999916, 37.25104401200015], + [-76.842844204999921, 37.254299221000011], + [-76.855580206999974, 37.262437242000132], + [-76.857411261999857, 37.281887111000046], + [-76.856312628999916, 37.304673570000048], + [-76.860218878999888, 37.32314687700007], + [-76.869862433999884, 37.315497137000065], + [-76.873524542999917, 37.305161851000136], + [-76.873199022999898, 37.278469143000038], + [-76.878163214999944, 37.268988348], + [-76.889230923999889, 37.259182033000073], + [-76.908029751999919, 37.247463283000101], + [-76.931467251999919, 37.245266018], + [-76.94395911399991, 37.256048895], + [-76.953033006999931, 37.27362702000012], + [-76.98192298099994, 37.312404690000065], + [-76.990549282999922, 37.320257880000142], + [-77.003570115999935, 37.32314687700007], + [-77.014515753999888, 37.318752346000096], + [-77.04552161399991, 37.298407294000114], + [-77.051991339999915, 37.29181549700003], + [-77.055490688999896, 37.287176825000088], + [-77.062896287999905, 37.297023830000043], + [-77.070179816999911, 37.310288804000052], + [-77.072499152999882, 37.316351630000057], + [-77.082753058999913, 37.324408270000092], + [-77.091053839999887, 37.327826239], + [-77.100331183999941, 37.327093817000062], + [-77.113433397999898, 37.32314687700007], + [-77.134429490999935, 37.316880601000136], + [-77.144439256999931, 37.316351630000057], + [-77.155262824999909, 37.318345445], + [-77.172678188999981, 37.32733795800003], + [-77.178334113999881, 37.32933177300005], + [-77.220082160999908, 37.328517971000124], + [-77.234974738999966, 37.33417389500012], + [-77.250599738999938, 37.349839585], + [-77.277943488999938, 37.32933177300005], + [-77.274322068999965, 37.316351630000057], + [-77.264881964999859, 37.311183986000131], + [-77.255116339999915, 37.309271552], + [-77.250599738999938, 37.306097723000121], + [-77.239572719999899, 37.308661200000031], + [-77.174916144999969, 37.288397528000118], + [-77.089222785999908, 37.288397528000118], + [-77.08332271999987, 37.283270575000117], + [-77.076161261999914, 37.273260809000121], + [-77.067128058999913, 37.266506252000099], + [-77.055409308999913, 37.27138906500015], + [-77.025257941999911, 37.291978257], + [-77.017201300999972, 37.295233466000056], + [-76.995187954999949, 37.288072007], + [-76.986154751999948, 37.268988348], + [-76.981678839999887, 37.249172268], + [-76.973215298999946, 37.239976304000109], + [-76.950672980999883, 37.23517487200003], + [-76.913563605999855, 37.212836005000028], + [-76.893706834999932, 37.206488348000065], + [-76.801869269999912, 37.206488348000065], + [-76.787709113999881, 37.200100002000156], + [-76.762808420999903, 37.164255385000061], + [-76.739668037999905, 37.156574285000104], + [-76.717994977999894, 37.150013821000144], + [-76.689116990999906, 37.188625393], + [-76.669972192999921, 37.185007347000166], + [-76.666284340999965, 37.147296565000133], + [-76.655337124999846, 37.105121347000093], + [-76.673148543999929, 37.067138127000177], + [-76.659743361999915, 37.043310108000028], + [-76.638166951999921, 37.039028946000187], + [-76.571603969999899, 37.027736721000124], + [-76.571603969999899, 37.021470445], + [-76.581206834999875, 37.01585521], + [-76.584095831999889, 37.013739325000174], + [-76.585845506999902, 37.007879950000031], + [-76.579660610999923, 37.00397370000006], + [-76.566477016999869, 37.002915757], + [-76.55793209499987, 37.000433661000059], + [-76.551096157999922, 36.996649481000034], + [-76.537464972999885, 36.986761786000116], + [-76.513543922999872, 36.96518702200008], + [-76.494721874999954, 36.953985981000116], + [-76.492909308999913, 36.943426825000145], + [-76.491037563999924, 36.933172919000029], + [-76.481597459999932, 36.921535549000041], + [-76.475982225999928, 36.907904364000089], + [-76.481922980999855, 36.898586330000128], + [-76.495838995999918, 36.887355861000131], + [-76.524403449999909, 36.870672919000086], + [-76.524403449999909, 36.863226630000113], + [-76.49738521999987, 36.865220445000048], + [-76.475982225999928, 36.875189520000148], + [-76.456532355999911, 36.88788483300003], + [-76.435047980999883, 36.898016669000143], + [-76.408843553999958, 36.902044989000117], + [-76.380686001999976, 36.900620835000055], + [-76.354074673999918, 36.894354559000121], + [-76.33263098899991, 36.883734442000062], + [-76.334950324999852, 36.871812242000132], + [-76.32481848899991, 36.860500393000152], + [-76.308338995999918, 36.852240302000055], + [-76.291656053999873, 36.849554755000085], + [-76.309966600999928, 36.870428778000147], + [-76.317738410999937, 36.883530992000104], + [-76.315256313999924, 36.894598700000145], + [-76.30101477799991, 36.911607164000102], + [-76.306263800999886, 36.917629299000126], + [-76.328366099999897, 36.929285965000034], + [-76.330425853999969, 36.949787475], + [-76.310014525999918, 36.959612052000026], + [-76.268901347999901, 36.961415367000129], + [-76.168771938999924, 36.928412177000112], + [-76.1259856, 36.916252417000138], + [-76.078114386999886, 36.911607164000102], + [-76.05579919699997, 36.918246442000012], + [-76.035469161999885, 36.934849333], + [-76.00459196599985, 36.932358398000147], + [-75.988930089999911, 36.91195854200005], + [-75.960240790999904, 36.806753559000029], + [-75.86343339799987, 36.590562242000104], + [-75.853098110999952, 36.54901764500012], + [-75.852853969999927, 36.547919012000179], + [-75.811879035999908, 36.383449611000131], + [-75.796986456999946, 36.342840887000037], + [-75.792388475999928, 36.322170315000122], + [-75.79076087099989, 36.298081773000106], + [-75.786366339999915, 36.281968492000132], + [-75.757232225999957, 36.232611395000148], + [-75.7142634759999, 36.129828192000147], + [-75.563954230999883, 35.895331122000115], + [-75.553944464999915, 35.853664455000157], + [-75.523833787999877, 35.794378973000065], + [-75.53160559799997, 35.798407294000057], + [-75.551258917999917, 35.805121161000088], + [-75.557972785999965, 35.808661200000145], + [-75.560658331999946, 35.815619208000058], + [-75.560414191999911, 35.824693101000051], + [-75.561634894999912, 35.832586981000034], + [-75.583607550999943, 35.843817450000031], + [-75.589466925999886, 35.862046617000104], + [-75.592152472999942, 35.89744700700011], + [-75.607004360999923, 35.923814195000105], + [-75.675363735999895, 35.99990469], + [-75.681548631999874, 35.99990469], + [-75.694488084999875, 35.993557033000073], + [-75.709787563999924, 35.997788804], + [-75.719471808999884, 36.009995835000083], + [-75.715687628999973, 36.027167059000092], + [-75.707427537999877, 36.01650625200007], + [-75.698963995999947, 36.014960028000033], + [-75.675363735999895, 36.020941473000121], + [-75.679798956999974, 36.036688544000086], + [-75.687163865999878, 36.050034898000106], + [-75.696929490999906, 36.055609442000119], + [-75.708851691999939, 36.048285223], + [-75.723540818999936, 36.058823960000083], + [-75.730783657999979, 36.074896552000055], + [-75.735585089999859, 36.092962958000086], + [-75.742990688999953, 36.109767971000096], + [-75.742990688999953, 36.116522528000118], + [-75.738636847999942, 36.141180731000119], + [-75.749012824999852, 36.171616929000081], + [-75.763172980999883, 36.201239325000117], + [-75.773671027999853, 36.234035549000126], + [-75.801665818999879, 36.279038804000109], + [-75.815297003999916, 36.291245835], + [-75.818470831999889, 36.29677969], + [-75.81700598899991, 36.300238348], + [-75.813832160999965, 36.301743882000054], + [-75.811879035999908, 36.301499742000104], + [-75.818674282999922, 36.328843492000161], + [-75.824859178999901, 36.394273179000137], + [-75.828114386999857, 36.407538153000175], + [-75.842152472999913, 36.432033596000011], + [-75.845366990999963, 36.449204820000134], + [-75.85968990799995, 36.473456122000115], + [-75.867095506999931, 36.507554429000109], + [-75.880848761999857, 36.542547919000029], + [-75.880116339999915, 36.547919012000179], + [-75.880645311999899, 36.549261786000088], + [-75.885731574999909, 36.562445380000113], + [-75.883900519999941, 36.574042059000035], + [-75.88023841099988, 36.584702867000161], + [-75.880116339999915, 36.596340236000074], + [-75.884022589999915, 36.604478257], + [-75.895619269999941, 36.616766669000143], + [-75.900624152999882, 36.624253648000106], + [-75.917668238999852, 36.679663950000091], + [-75.92788652299987, 36.706203518000152], + [-75.935170050999972, 36.712103583], + [-75.946888800999972, 36.718451239000117], + [-75.957834438999924, 36.719427802], + [-75.962717251999891, 36.709295966000056], + [-75.975697394999912, 36.606268622000172], + [-75.968251105999911, 36.551662502000013], + [-75.966908331999917, 36.549790757000054], + [-75.961984829999977, 36.542954820000134], + [-75.949818488999881, 36.543361721000124], + [-75.942982550999972, 36.549627997000087], + [-75.942209438999953, 36.550360419000029], + [-75.949045376999948, 36.561590887000122], + [-75.932240363999938, 36.570379950000088], + [-75.91429602799991, 36.575873114000117], + [-75.908965623999848, 36.549424546000054], + [-75.908802863999881, 36.548651434000121], + [-75.908070441999939, 36.521226304000052], + [-75.905344204999977, 36.51190827000012], + [-75.901112433999856, 36.502875067], + [-75.901112433999856, 36.49603913], + [-75.911203579999921, 36.493312893000123], + [-75.952137824999852, 36.493312893000123], + [-75.972889777999853, 36.499701239000146], + [-75.976673956999974, 36.513820705000072], + [-75.978423631999874, 36.527899481000119], + [-76.006581183999856, 36.541815497000087], + [-76.013254360999895, 36.550156968000167], + [-76.044585740999963, 36.589504299000154], + [-76.043934699999909, 36.575751044000143], + [-76.039906378999945, 36.567328192], + [-76.034820115999906, 36.559556382], + [-76.031727667999917, 36.550279039000046], + [-76.030913865999906, 36.547919012000179], + [-76.030913865999906, 36.535874742000161], + [-76.036936001999919, 36.516750393], + [-76.037180141999869, 36.500799872000087], + [-76.029042120999861, 36.480292059000035], + [-76.011708136999857, 36.460598049000097], + [-75.989898240999906, 36.443793036000088], + [-75.968251105999911, 36.432521877000099], + [-75.985829230999855, 36.425279039000159], + [-75.973703579999949, 36.401068427000084], + [-75.94871985599994, 36.375189520000063], + [-75.92788652299987, 36.363592841000141], + [-75.93687903599988, 36.372219143000152], + [-75.943104620999947, 36.379584052000141], + [-75.946888800999972, 36.387518622000115], + [-75.949045376999948, 36.39769114800005], + [-75.945383266999926, 36.396958726000108], + [-75.939076300999972, 36.408677476000108], + [-75.931304490999878, 36.428697007000082], + [-75.91856848899991, 36.429348049000126], + [-75.916371222999913, 36.402655341000113], + [-75.921742316999882, 36.356756903000033], + [-75.912831183999856, 36.341294664000102], + [-75.880441860999952, 36.30068594], + [-75.873361782999979, 36.284735419000086], + [-75.869943813999953, 36.272202867000189], + [-75.816151495999918, 36.15615469000015], + [-75.811879035999908, 36.140773830000015], + [-75.804025844999927, 36.121323960000112], + [-75.790353969999899, 36.099269924000012], + [-75.785511847999913, 36.081610419000086], + [-75.804432745999918, 36.075588283000101], + [-75.821156378999945, 36.08266836100016], + [-75.837961391999869, 36.097805080000157], + [-75.863392706999889, 36.127101955000072], + [-75.868397589999915, 36.136664130000057], + [-75.866444464999887, 36.145453192000119], + [-75.862049933999913, 36.153713283000016], + [-75.85968990799995, 36.161566473], + [-75.862212693999965, 36.171779690000122], + [-75.868072068999908, 36.18301015800013], + [-75.880116339999915, 36.19912344], + [-75.90257727799991, 36.214300848000093], + [-75.908070441999939, 36.219631252000156], + [-75.910308397999927, 36.226141669000143], + [-75.911040818999965, 36.240383205000157], + [-75.91429602799991, 36.246893622000144], + [-75.928456183999941, 36.255275783000016], + [-75.942982550999972, 36.260443427000112], + [-75.948231574999852, 36.269110419000114], + [-75.934722459999875, 36.287827867000161], + [-75.961740688999924, 36.306952216000141], + [-75.976551886999914, 36.314032294000114], + [-75.996205206999946, 36.315171617000047], + [-75.987172003999945, 36.299872137000179], + [-75.976144985999895, 36.293036200000174], + [-75.966664191999882, 36.284369208000086], + [-75.958363410999908, 36.246771552000084], + [-75.951079881999902, 36.227606512000122], + [-75.949696417999917, 36.212062893], + [-75.962717251999891, 36.205959377000042], + [-75.937163865999906, 36.185044664000159], + [-75.923003709999904, 36.17682526200015], + [-75.908070441999939, 36.171820380000113], + [-75.908070441999939, 36.164984442], + [-75.97887122299997, 36.183172919000086], + [-75.999623175999943, 36.185451565000065], + [-76.020415818999936, 36.191473700000174], + [-76.037464972999913, 36.205796617000075], + [-76.061675584999904, 36.23631419500002], + [-76.06965084499987, 36.24152252800009], + [-76.087798631999959, 36.245591539000046], + [-76.096099412999934, 36.250637111000074], + [-76.113596157999979, 36.267320054000109], + [-76.13341223899991, 36.281683661], + [-76.149484829999977, 36.28896719], + [-76.202259894999969, 36.301499742000104], + [-76.193430141999897, 36.305812893], + [-76.18614661399991, 36.312933661000059], + [-76.186105923999918, 36.319647528000118], + [-76.198841925999943, 36.322658596000011], + [-76.208566860999895, 36.317124742000189], + [-76.217396613999966, 36.305243231000063], + [-76.222157355999855, 36.293280341000113], + [-76.21934973899991, 36.287827867000161], + [-76.19676673099994, 36.283392645], + [-76.174387173999918, 36.272650458], + [-76.154855923999946, 36.259182033000016], + [-76.140858527999882, 36.246893622000144], + [-76.124745245999918, 36.223130601000051], + [-76.114409959999904, 36.21112702000012], + [-76.090158657999922, 36.200588283000158], + [-76.080230272999898, 36.177150783000101], + [-76.068511522999927, 36.171820380000113], + [-76.057362433999913, 36.16876862200003], + [-76.06346594999988, 36.162014065000093], + [-76.085560675999972, 36.150702216000113], + [-76.0970759759999, 36.147284247000087], + [-76.13341223899991, 36.144476630000057], + [-76.13341223899991, 36.13703034100017], + [-76.126576300999886, 36.13703034100017], + [-76.126576300999886, 36.130804755000113], + [-76.158070441999882, 36.129828192000147], + [-76.16812089799987, 36.130804755000113], + [-76.177967902999882, 36.134019273000078], + [-76.209380662999905, 36.149725653000033], + [-76.226185675999915, 36.172756252000013], + [-76.232655402999939, 36.177964585], + [-76.241769985999923, 36.18097565300009], + [-76.269886847999913, 36.19912344], + [-76.285267706999946, 36.21181875200007], + [-76.291981574999909, 36.212713934000149], + [-76.291656053999873, 36.19912344], + [-76.287220831999917, 36.190375067000119], + [-76.279123501999976, 36.181463934000092], + [-76.269276495999861, 36.174546617000189], + [-76.25999915299991, 36.171820380000113], + [-76.248646613999938, 36.163397528000175], + [-76.21385657499988, 36.123236395000063], + [-76.195423956999946, 36.109767971000096], + [-76.195423956999946, 36.103501695000134], + [-76.220122850999928, 36.09951406500015], + [-76.244496222999885, 36.103949286000116], + [-76.349436001999919, 36.141994533000044], + [-76.377430792999917, 36.156236070000134], + [-76.394032355999883, 36.177964585], + [-76.41038977799991, 36.174302476000051], + [-76.427723761999886, 36.18301015800013], + [-76.445423956999889, 36.19619375200007], + [-76.463002081999917, 36.205959377000042], + [-76.449940558999856, 36.18260325700011], + [-76.442372199999909, 36.172308661000031], + [-76.435047980999883, 36.164984442], + [-76.399159308999913, 36.148627020000092], + [-76.394032355999883, 36.140773830000015], + [-76.383127407999922, 36.130113023000078], + [-76.357899542999945, 36.11737702000012], + [-76.330148891999869, 36.107001044000029], + [-76.31151282499988, 36.103501695000134], + [-76.31151282499988, 36.096096096000153], + [-76.411732550999886, 36.08295319200009], + [-76.428212042999888, 36.075588283000101], + [-76.428212042999888, 36.068101304000109], + [-76.424916144999941, 36.067775783000101], + [-76.414540167999945, 36.068101304000109], + [-76.435943162999877, 36.048163153000033], + [-76.467640753999945, 36.030910549000126], + [-76.500314907999893, 36.018622137000179], + [-76.524403449999909, 36.013495184000149], + [-76.558705206999974, 36.011419989000146], + [-76.577259894999884, 36.012396552000112], + [-76.5892634759999, 36.017238674000097], + [-76.617543097999942, 36.053697007000054], + [-76.626820441999911, 36.06195709800015], + [-76.643666144999912, 36.03839752800009], + [-76.666656053999901, 36.03839752800009], + [-76.687001105999883, 36.056097723], + [-76.701039191999939, 36.110541083], + [-76.724517381999902, 36.155340887000037], + [-76.729847785999965, 36.181708075000031], + [-76.716175910999937, 36.226385809000092], + [-76.710804816999882, 36.236761786], + [-76.696522589999887, 36.250433661000116], + [-76.688872850999957, 36.259914455000128], + [-76.679554816999911, 36.287543036000145], + [-76.688343878999973, 36.305161851000079], + [-76.707590298999918, 36.315863348000093], + [-76.729847785999965, 36.322658596000011], + [-76.723703579999892, 36.311102606000091], + [-76.705677863999966, 36.294134833000115], + [-76.701975063999924, 36.284735419000086], + [-76.704213019999912, 36.27155182500006], + [-76.710072394999941, 36.263373114000117], + [-76.726144985999923, 36.250637111000074], + [-76.742909308999856, 36.231634833000086], + [-76.75230872299997, 36.214016018000152], + [-76.756418423999918, 36.193304755000057], + [-76.757191535999937, 36.127101955000072], + [-76.753977016999897, 36.116115627000013], + [-76.739898240999935, 36.093329169000086], + [-76.733550584999904, 36.065090236000017], + [-76.726063605999855, 36.056219794000171], + [-76.717111782999922, 36.049139716000113], + [-76.709339972999913, 36.040838934000035], + [-76.706654425999943, 36.028794664000131], + [-76.70738684799997, 36.017157294000114], + [-76.703968878999945, 36.008856512000037], + [-76.688872850999957, 36.006659247000144], + [-76.694976365999935, 35.992499091000028], + [-76.729847785999965, 35.952704169000029], + [-76.729847785999965, 35.945257880000057], + [-76.591623501999948, 35.944728908000073], + [-76.565337693999936, 35.938421942000119], + [-76.55793209499987, 35.938421942000119], + [-76.525624152999939, 35.955145575000145], + [-76.473011847999913, 35.972357489000089], + [-76.420236782999922, 35.98126862200003], + [-76.387277798999946, 35.973130601000108], + [-76.383168097999913, 35.963120835000112], + [-76.384429490999906, 35.953070380000142], + [-76.387033657999893, 35.94440338700015], + [-76.387277798999946, 35.938421942000119], + [-76.380197719999899, 35.932033596000011], + [-76.373036261999943, 35.93496328300013], + [-76.364369269999941, 35.941351630000057], + [-76.353138800999943, 35.945257880000057], + [-76.331654425999915, 35.941839911000145], + [-76.289214647999927, 35.925848700000145], + [-76.263742641999841, 35.924750067], + [-76.276966925999972, 35.937486070000048], + [-76.297922329999921, 35.947211005], + [-76.30679277299987, 35.957831122000144], + [-76.284169074999909, 35.973130601000108], + [-76.195423956999946, 35.993638414000074], + [-76.099842902999882, 35.99990469], + [-76.075917120999918, 35.995021877000127], + [-76.048329230999883, 35.983710028000147], + [-76.029367641999869, 35.968695380000113], + [-76.030913865999906, 35.952704169000029], + [-76.053089972999885, 35.962632554000137], + [-76.064035610999952, 35.9532738300001], + [-76.071929490999935, 35.918524481000034], + [-76.037668423999946, 35.929103908000101], + [-76.023548956999917, 35.931586005000113], + [-76.032460089999859, 35.909654039000188], + [-76.045887824999852, 35.888617255000057], + [-76.063588019999941, 35.873683986000017], + [-76.085560675999972, 35.870103257000054], + [-76.085560675999972, 35.863267320000134], + [-76.063140428999958, 35.848049221000153], + [-76.051136847999942, 35.819240627000013], + [-76.056304490999935, 35.793402411], + [-76.085560675999972, 35.786932684000092], + [-76.112456834999932, 35.794582424000126], + [-76.124175584999932, 35.794582424000126], + [-76.1166072259999, 35.783880927], + [-76.104969855999883, 35.777167059000149], + [-76.089222785999937, 35.771795966000084], + [-76.07262122299997, 35.768377997000087], + [-76.058257615999906, 35.76776764500012], + [-76.065093553999901, 35.76776764500012], + [-76.056752081999946, 35.761542059000149], + [-76.047271287999934, 35.749457098000065], + [-76.042469855999855, 35.737697658000101], + [-76.048003709999961, 35.732367255000113], + [-76.058257615999906, 35.726467190000093], + [-76.053537563999981, 35.713812567000119], + [-76.04328365799995, 35.702053127000127], + [-76.037180141999869, 35.698797919000086], + [-76.054269985999923, 35.683905341000056], + [-76.084543423999918, 35.688910223000093], + [-76.117054816999882, 35.698879299000069], + [-76.140858527999882, 35.698797919000086], + [-76.123605923999975, 35.673529364000146], + [-76.099964972999942, 35.665187893000066], + [-76.072743292999945, 35.666734117000104], + [-76.044585740999963, 35.671535549000012], + [-76.04539954299986, 35.668280341000141], + [-76.04450436099998, 35.66396719000015], + [-76.041818813999896, 35.658351955000157], + [-76.037180141999869, 35.651027736000131], + [-76.030913865999906, 35.651027736000131], + [-75.994862433999856, 35.730292059000092], + [-75.98997962099989, 35.763983466000113], + [-75.98997962099989, 35.886908270000063], + [-75.982411261999943, 35.89581940300009], + [-75.949208136999914, 35.914374091000113], + [-75.941558397999898, 35.921616929000109], + [-75.934925910999937, 35.92487213700015], + [-75.920399542999888, 35.912746486000074], + [-75.900624152999882, 35.89004140800013], + [-75.876291469999899, 35.879136460000055], + [-75.870228644999912, 35.877590236000017], + [-75.861439581999946, 35.880682684000092], + [-75.859242316999939, 35.887518622000115], + [-75.862456834999904, 35.894354559000035], + [-75.882557745999861, 35.901800848], + [-75.893788214999859, 35.912502346000124], + [-75.902658657999893, 35.925848700000145], + [-75.908070441999939, 35.938421942000119], + [-75.887277798999946, 35.934027411000059], + [-75.866037563999981, 35.926499742000189], + [-75.844960089999859, 35.92324453300013], + [-75.824859178999901, 35.931586005000113], + [-75.834055141999869, 35.938625393000095], + [-75.84406490799995, 35.942938544000086], + [-75.85496985599994, 35.945054429000024], + [-75.867095506999931, 35.945257880000057], + [-75.8607478509999, 35.952785549000012], + [-75.856312628999916, 35.961004950000117], + [-75.853667772999927, 35.970119533000101], + [-75.852853969999927, 35.979966539000131], + [-75.818918423999975, 35.960516669000029], + [-75.790516730999855, 35.932521877000013], + [-75.742990688999953, 35.870103257000054], + [-75.742990688999953, 35.856878973], + [-75.726144985999952, 35.836086330000015], + [-75.721831834999932, 35.829169012000122], + [-75.722035285999908, 35.810736395000092], + [-75.729562954999949, 35.79629140800013], + [-75.738433397999898, 35.782863674000126], + [-75.742990688999953, 35.76776764500012], + [-75.740101691999911, 35.758286851000108], + [-75.726226365999935, 35.740383205000072], + [-75.721831834999932, 35.726141669000143], + [-75.72085527299987, 35.705023505000057], + [-75.724924282999922, 35.69822825700011], + [-75.749826626999976, 35.698797919000086], + [-75.773426886999914, 35.696926174000126], + [-75.77358964799987, 35.689764716000084], + [-75.763417120999918, 35.671535549000012], + [-75.740956183999913, 35.643011786], + [-75.739613410999937, 35.632635809000092], + [-75.753814256999931, 35.611802476000108], + [-75.758290167999917, 35.607245184000178], + [-75.764393683999913, 35.603908596000153], + [-75.773345506999931, 35.60260651200015], + [-75.782338019999941, 35.599188544000143], + [-75.783355272999898, 35.591131903000118], + [-75.782053188999924, 35.582220770000063], + [-75.783924933999884, 35.575913804000137], + [-75.795033331999917, 35.570949611000074], + [-75.808338995999918, 35.568833726000079], + [-75.839182094999899, 35.568508205000128], + [-75.839182094999899, 35.575913804000137], + [-75.825917120999861, 35.580877997000172], + [-75.818674282999922, 35.582098700000088], + [-75.819569464999915, 35.586127020000063], + [-75.82091223899991, 35.589544989000089], + [-75.822621222999913, 35.592678127000156], + [-75.824859178999901, 35.595770575000031], + [-75.849476691999911, 35.587062893000152], + [-75.866444464999887, 35.595648505000057], + [-75.878041144999912, 35.614732164000046], + [-75.886341925999972, 35.637355861000017], + [-75.894398566999911, 35.622015692000062], + [-75.895334438999896, 35.604559637000094], + [-75.894520636999886, 35.588934637000122], + [-75.897206183999856, 35.579046942], + [-75.954457160999908, 35.530340887000179], + [-75.959339972999885, 35.52822500200007], + [-75.97789466099988, 35.525213934000149], + [-75.979400193999936, 35.51972077000012], + [-75.976551886999914, 35.512925523000106], + [-75.975697394999912, 35.507025458000086], + [-75.97280839799987, 35.502142645], + [-75.973215298999975, 35.49713776200015], + [-75.979156053999901, 35.489691473000093], + [-75.985422329999949, 35.486151434000092], + [-76.010568813999924, 35.479071356000034], + [-76.0033259759999, 35.465033270000092], + [-76.008859829999921, 35.456040757000082], + [-76.018422003999916, 35.449164130000057], + [-76.023548956999917, 35.441229559000092], + [-76.024647589999887, 35.427313544000029], + [-76.028228318999936, 35.419338283000158], + [-76.034779425999915, 35.41815827000012], + [-76.044585740999963, 35.424505927000084], + [-76.037180141999869, 35.431341864000089], + [-76.056141730999883, 35.44147370000006], + [-76.071034308999941, 35.427232164000046], + [-76.075998501999891, 35.404852606000119], + [-76.065093553999901, 35.390326239000089], + [-76.065093553999901, 35.384182033000101], + [-76.079741990999906, 35.382961330000072], + [-76.118275519999912, 35.372788804000137], + [-76.129994269999884, 35.366156317000062], + [-76.142445441999911, 35.352484442000119], + [-76.150380011999886, 35.347154039000159], + [-76.218129035999908, 35.348863023000078], + [-76.235747850999928, 35.353216864000061], + [-76.246449347999942, 35.372015692000119], + [-76.253488735999923, 35.373724677000112], + [-76.260487433999884, 35.37002187700007], + [-76.263742641999841, 35.359320380000057], + [-76.268706834999904, 35.348374742000189], + [-76.280181443999936, 35.350734768000123], + [-76.310658331999974, 35.367661851000108], + [-76.324330206999917, 35.393744208], + [-76.33263098899991, 35.403998114000117], + [-76.355336066999939, 35.413478908000016], + [-76.363514777999853, 35.405218817000119], + [-76.363758917999888, 35.39142487200003], + [-76.363026495999861, 35.384182033000101], + [-76.35562089799987, 35.377671617000104], + [-76.352406378999916, 35.36359284100017], + [-76.357167120999918, 35.349514065000122], + [-76.373605923999918, 35.343166408000101], + [-76.379628058999913, 35.353257554000052], + [-76.394032355999883, 35.362453518000123], + [-76.40294348899991, 35.365179755], + [-76.410267706999917, 35.364325262000094], + [-76.41616777299987, 35.366034247000087], + [-76.420765753999888, 35.376695054000137], + [-76.379750128999888, 35.376695054000137], + [-76.379750128999888, 35.384182033000101], + [-76.388498501999948, 35.392320054000109], + [-76.392689581999889, 35.409002997000144], + [-76.394032355999883, 35.441229559000092], + [-76.402333136999857, 35.459621486000131], + [-76.41832434799997, 35.464504299000012], + [-76.428863084999932, 35.457017320000048], + [-76.420765753999888, 35.438177802000027], + [-76.442494269999969, 35.403998114000117], + [-76.454009568999908, 35.41014232], + [-76.465565558999941, 35.411281643000123], + [-76.475819464999859, 35.40729401200015], + [-76.483469204999892, 35.397772528000147], + [-76.476429816999911, 35.394435940000122], + [-76.470692511999943, 35.389797268], + [-76.46617591099988, 35.383856512000179], + [-76.463002081999917, 35.376695054000137], + [-76.49836178299995, 35.391343492000047], + [-76.511830206999917, 35.401027736000103], + [-76.524403449999909, 35.417669989000146], + [-76.515451626999891, 35.419094143000123], + [-76.510650193999908, 35.421291408000016], + [-76.507679816999882, 35.42503489800005], + [-76.503895636999857, 35.431341864000089], + [-76.546050584999904, 35.445217190000065], + [-76.560129360999952, 35.455877997000115], + [-76.544911261999886, 35.46605052300005], + [-76.544911261999886, 35.472235419000029], + [-76.564442511999857, 35.483872789000131], + [-76.57518469999988, 35.497463283000073], + [-76.570668097999913, 35.508612372000115], + [-76.544911261999886, 35.513251044000029], + [-76.494699673999889, 35.506781317000119], + [-76.47789466099988, 35.513861395000092], + [-76.463002081999917, 35.541164455000072], + [-76.48892167899993, 35.536810614000089], + [-76.511708136999857, 35.537665106000176], + [-76.55793209499987, 35.548041083000086], + [-76.584950324999909, 35.549709377000099], + [-76.605946417999945, 35.542466539000159], + [-76.647328253999973, 35.52069733300003], + [-76.631988084999904, 35.51748281500015], + [-76.620757615999906, 35.510809637000094], + [-76.612619594999899, 35.502142645], + [-76.606312628999945, 35.492743231000176], + [-76.616322394999941, 35.471136786000088], + [-76.619984503999888, 35.46605052300005], + [-76.605783657999979, 35.45246002800009], + [-76.599191860999895, 35.447739976], + [-76.592681443999908, 35.444322007], + [-76.592681443999908, 35.438177802000027], + [-76.59825598899991, 35.435492255000113], + [-76.601063605999883, 35.432359117000047], + [-76.603016730999911, 35.428656317], + [-76.606312628999945, 35.424505927000084], + [-76.596302863999881, 35.42112864800005], + [-76.588449673999889, 35.416896877000127], + [-76.58267167899993, 35.411281643000123], + [-76.579009568999879, 35.403998114000117], + [-76.59976152299987, 35.395086981000176], + [-76.628773566999968, 35.399969794000143], + [-76.650013800999943, 35.41535065300009], + [-76.647328253999973, 35.438177802000027], + [-76.656605597999913, 35.436672268000152], + [-76.664214647999955, 35.434230861000017], + [-76.670399542999917, 35.430365302000112], + [-76.675200975999928, 35.424505927000084], + [-76.704335089999887, 35.430365302000112], + [-76.758412238999966, 35.41885000200007], + [-76.781076626999919, 35.4278832050001], + [-76.801991339999887, 35.444891669000143], + [-76.82184811099998, 35.453029690000065], + [-76.873199022999898, 35.458644924000069], + [-76.901275193999908, 35.465521552000084], + [-76.948963995999861, 35.487982489000089], + [-76.994048631999931, 35.497056382000082], + [-77.014149542999888, 35.50775788], + [-77.051991339999915, 35.534369208000143], + [-77.035796678999873, 35.503851630000028], + [-77.025502081999946, 35.491522528000147], + [-77.014149542999888, 35.486558335000112], + [-76.994496222999913, 35.481594143000152], + [-76.98501542899993, 35.469224351000108], + [-76.976307745999918, 35.438177802000027], + [-76.945139126999948, 35.45246002800009], + [-76.903920050999886, 35.443915106000176], + [-76.862904425999972, 35.424017645000092], + [-76.832264777999882, 35.403998114000117], + [-76.817046678999901, 35.396307684000092], + [-76.757191535999937, 35.384182033000101], + [-76.694081183999856, 35.353664455000157], + [-76.611643032999922, 35.337713934000149], + [-76.520985480999911, 35.313137111000131], + [-76.497059699999852, 35.31150950700011], + [-76.494252081999889, 35.300970770000063], + [-76.487619594999927, 35.291489976000051], + [-76.472645636999886, 35.277411200000117], + [-76.470366990999906, 35.270575262000094], + [-76.480458136999886, 35.253322658000073], + [-76.483469204999892, 35.242905992000189], + [-76.49282792899993, 35.230169989000146], + [-76.515288865999935, 35.23037344], + [-76.565337693999936, 35.239488023], + [-76.565337693999936, 35.233303127000013], + [-76.54165605399993, 35.224351304], + [-76.529611782999922, 35.217678127000127], + [-76.524403449999909, 35.208482164000159], + [-76.530262824999852, 35.199937242000047], + [-76.544056769999969, 35.201849677], + [-76.571603969999899, 35.211615302000141], + [-76.588286912999934, 35.209133205000015], + [-76.600412563999924, 35.201890367000189], + [-76.609364386999857, 35.194525458], + [-76.61656653599988, 35.191107489000089], + [-76.631988084999904, 35.190252997000172], + [-76.64858964799987, 35.187160549000097], + [-76.663929816999911, 35.18089427300005], + [-76.675200975999928, 35.170599677000112], + [-76.661854620999918, 35.166815497000115], + [-76.619984503999888, 35.164455471000153], + [-76.608021613999966, 35.159084377000099], + [-76.598296678999901, 35.152329820000048], + [-76.587310350999957, 35.149725653000147], + [-76.571603969999899, 35.156968492000161], + [-76.576527472999942, 35.158880927000141], + [-76.581206834999875, 35.162258205000157], + [-76.585845506999902, 35.164455471000153], + [-76.585845506999902, 35.170599677000112], + [-76.571603969999899, 35.178045966000113], + [-76.55483964799987, 35.149725653000147], + [-76.560536261999857, 35.124416408000016], + [-76.582102016999869, 35.105454820000105], + [-76.613148566999882, 35.096136786000059], + [-76.607980923999975, 35.079820054000137], + [-76.643299933999913, 35.058050848000065], + [-76.687611456999946, 35.0372582050001], + [-76.709339972999913, 35.023504950000174], + [-76.72594153599988, 35.000555731000176], + [-76.764475063999953, 34.989203192], + [-76.807769334999932, 34.987250067000062], + [-76.839100714999887, 34.992499091000141], + [-76.873646613999881, 35.008693752000099], + [-76.901193813999924, 35.02724844], + [-76.94627844999988, 35.06858958500014], + [-76.959543423999918, 35.075018622000144], + [-76.996245897999927, 35.087632554000137], + [-77.043365037999905, 35.14362213700015], + [-77.079335089999887, 35.156968492000161], + [-77.036732550999943, 35.099310614000117], + [-77.03490149599989, 35.088690497000087], + [-77.01537024599989, 35.080877997000087], + [-76.999379035999908, 35.062160549000126], + [-76.976307745999918, 35.01976146000014], + [-76.940256313999981, 34.979803778000175], + [-76.899159308999884, 34.964056708000115], + [-76.854074673999918, 34.957424221000068], + [-76.805572068999936, 34.944728908000101], + [-76.770822719999899, 34.924221096000153], + [-76.766102667999888, 34.917222398000078], + [-76.761952277999939, 34.91242096600017], + [-76.757191535999937, 34.909898179000052], + [-76.749989386999914, 34.911566473000065], + [-76.739979620999918, 34.92177969], + [-76.713368292999888, 34.92987702000012], + [-76.695708787999877, 34.943345445000105], + [-76.678944464999859, 34.959377346000011], + [-76.661529100999871, 34.972601630000057], + [-76.642445441999911, 34.98383209800015], + [-76.631825324999852, 34.987046617000104], + [-76.619984503999888, 34.986273505], + [-76.610585089999887, 34.980454820000134], + [-76.602609829999921, 34.971014716000028], + [-76.597401495999918, 34.962225653000147], + [-76.596099412999934, 34.958319403000147], + [-76.578480597999913, 34.950425523], + [-76.555327928999958, 34.936712958000058], + [-76.539865688999924, 34.932074286000116], + [-76.544911261999886, 34.951483466000056], + [-76.566477016999869, 34.979193427000112], + [-76.568592902999882, 34.993231512000179], + [-76.5482478509999, 34.999335028000147], + [-76.533599412999877, 34.99941640800013], + [-76.518299933999913, 34.997300523000135], + [-76.503244594999899, 34.989569403000033], + [-76.489613410999965, 34.972601630000057], + [-76.483631964999859, 34.987127997000087], + [-76.482899542999917, 35.001654364000117], + [-76.483998175999972, 35.015285549000069], + [-76.483469204999892, 35.02724844], + [-76.476958787999905, 35.041083075000088], + [-76.465158657999922, 35.059800523000078], + [-76.453765428999958, 35.073391018000123], + [-76.44871985599994, 35.071600653000033], + [-76.446522589999944, 35.067206122000144], + [-76.437163865999906, 35.05491771], + [-76.435047980999883, 35.051174221000068], + [-76.43618730399993, 35.041449286000116], + [-76.441314256999931, 35.025620835000083], + [-76.442494269999969, 35.01666901200015], + [-76.42446855399993, 34.995917059000149], + [-76.418853318999936, 34.98651764500012], + [-76.424143032999922, 34.980861721000124], + [-76.450306769999969, 34.969549872000144], + [-76.457834438999924, 34.970160223000036], + [-76.464344855999911, 34.968451239000032], + [-76.469146287999905, 34.958319403000147], + [-76.469553188999896, 34.949937242000189], + [-76.466664191999882, 34.944281317], + [-76.461822068999908, 34.940578518000066], + [-76.456125454999921, 34.937892971000096], + [-76.439768032999893, 34.938666083], + [-76.396107550999915, 34.950140692000147], + [-76.387277798999946, 34.94806549700003], + [-76.37755286399991, 34.96580638200011], + [-76.356271938999924, 34.97199127800009], + [-76.334868943999879, 34.973089911000145], + [-76.325184699999909, 34.975734768000123], + [-76.328236456999917, 34.991156317000062], + [-76.345041469999927, 35.012274481000148], + [-76.353138800999943, 35.02724844], + [-76.322173631999902, 35.019924221000011], + [-76.306630011999914, 35.003119208], + [-76.293527798999946, 34.984808661000116], + [-76.269886847999913, 34.972601630000057], + [-76.269886847999913, 34.96515534100017], + [-76.279408331999917, 34.959662177000141], + [-76.293527798999946, 34.943793036000116], + [-76.304676886999857, 34.937892971000096], + [-76.320464647999898, 34.93748607], + [-76.332020636999943, 34.941148179000137], + [-76.340402798999889, 34.939683335000083], + [-76.346262173999946, 34.924221096000153], + [-76.344105597999942, 34.914048570000105], + [-76.337757941999911, 34.907782294000143], + [-76.33568274599989, 34.89948151200015], + [-76.346262173999946, 34.883246161000116], + [-76.354847785999937, 34.877427476000079], + [-76.394032355999883, 34.862738348000065], + [-76.395904100999957, 34.86815013200011], + [-76.400257941999939, 34.877590236000131], + [-76.401478644999969, 34.883246161000116], + [-76.407785610999895, 34.883246161000116], + [-76.411203579999921, 34.875677802000084], + [-76.411732550999886, 34.858710028000118], + [-76.414540167999945, 34.849066473000121], + [-76.420643683999913, 34.839544989000146], + [-76.426584438999953, 34.833726304], + [-76.442494269999969, 34.821763414000074], + [-76.475982225999928, 34.787054755], + [-76.483021613999881, 34.782619533000016], + [-76.490142381999931, 34.779242255], + [-76.497181769999912, 34.774603583000086], + [-76.503895636999857, 34.766546942000119], + [-76.503895636999857, 34.761175848000093], + [-76.500640428999901, 34.755113023], + [-76.499094204999977, 34.748114325000088], + [-76.503895636999857, 34.739813544000029], + [-76.512766079999921, 34.73436107], + [-76.522775844999899, 34.731919664000046], + [-76.544911261999886, 34.732407945000134], + [-76.566232876999919, 34.738511460000112], + [-76.583566860999923, 34.751288153000147], + [-76.588246222999942, 34.76658763200011], + [-76.571603969999899, 34.780829169000029], + [-76.593332485999952, 34.796779690000122], + [-76.607533331999974, 34.813910223000065], + [-76.615956183999913, 34.816066799000069], + [-76.622181769999884, 34.731024481000148], + [-76.632964647999898, 34.709173895000035], + [-76.658192511999857, 34.721869208000086], + [-76.665109829999949, 34.741522528000033], + [-76.666981574999909, 34.767767645000148], + [-76.671213344999842, 34.790838934000121], + [-76.685210740999906, 34.800726630000113], + [-76.709787563999924, 34.796576239000089], + [-76.734608527999882, 34.785874742000161], + [-76.756174282999979, 34.770819403000147], + [-76.770822719999899, 34.753485419000143], + [-76.754790818999908, 34.754136460000112], + [-76.745716925999886, 34.756577867000047], + [-76.737416144999912, 34.760687567], + [-76.729847785999965, 34.766546942000119], + [-76.708078579999921, 34.73826732], + [-76.701975063999924, 34.72557200700011], + [-76.896107550999886, 34.739203192000062], + [-76.928537563999981, 34.721869208000086], + [-77.072865363999881, 34.686265367000104], + [-77.082427537999877, 34.680853583000058], + [-77.093251105999883, 34.676988023000078], + [-77.102650519999884, 34.683254299000012], + [-77.102691209999875, 34.694322007000054], + [-77.085519985999952, 34.705145575000145], + [-77.107248501999919, 34.732407945000134], + [-77.11359615799995, 34.755764065000122], + [-77.113433397999898, 34.759711005000113], + [-77.131703253999973, 34.762396552], + [-77.131988084999904, 34.747626044000114], + [-77.12474524599989, 34.73037344], + [-77.120269334999904, 34.72557200700011], + [-77.121896938999924, 34.708319403000118], + [-77.127756313999981, 34.693304755], + [-77.13687089799987, 34.682359117000104], + [-77.148264126999948, 34.677191473000036], + [-77.154774542999917, 34.67991771], + [-77.160267706999946, 34.68695709800015], + [-77.166411912999934, 34.692572333000058], + [-77.174916144999969, 34.691473700000117], + [-77.175770636999886, 34.684963283000016], + [-77.166981574999909, 34.667141018000123], + [-77.171498175999943, 34.663519598000093], + [-77.201527472999913, 34.650702216000141], + [-77.253570115999963, 34.594387111000074], + [-77.281361456999946, 34.581529039000046], + [-77.293446417999945, 34.57843659100017], + [-77.318023240999935, 34.564276434000064], + [-77.336537238999966, 34.561102606000176], + [-77.356841600999871, 34.57709381700009], + [-77.360463019999941, 34.578192450000031], + [-77.365712042999917, 34.582017320000048], + [-77.401478644999941, 34.589056708000115], + [-77.386870897999927, 34.603501695000077], + [-77.343129035999937, 34.631293036000145], + [-77.333159959999932, 34.64984772300015], + [-77.340443488999966, 34.660956122000172], + [-77.378407355999883, 34.701320705000128], + [-77.394602016999841, 34.711900132], + [-77.394602016999841, 34.71816640800013], + [-77.378041144999969, 34.718654690000122], + [-77.375111456999946, 34.724310614000032], + [-77.381906704999949, 34.73232656500015], + [-77.394602016999841, 34.739813544000029], + [-77.403472459999875, 34.740057684000149], + [-77.413726365999906, 34.737860419000171], + [-77.424672003999973, 34.74013906500015], + [-77.435617641999841, 34.753485419000143], + [-77.428456183999884, 34.701239325000145], + [-77.421986456999889, 34.68455638200011], + [-77.409169074999852, 34.690904039000046], + [-77.396799282999922, 34.683783270000092], + [-77.386789516999841, 34.670111395000148], + [-77.380970831999889, 34.656683661000059], + [-77.382435675999943, 34.632025458000058], + [-77.397043423999946, 34.620021877000127], + [-77.413889126999948, 34.616929429000052], + [-77.421986456999889, 34.619126695000048], + [-77.426136847999942, 34.623236395], + [-77.435454881999874, 34.622503973000065], + [-77.444976365999878, 34.617580471000011], + [-77.449818488999938, 34.608872789000131], + [-77.446197068999879, 34.600816148], + [-77.437082485999895, 34.589422919000029], + [-77.426503058999856, 34.579169012000094], + [-77.418568488999881, 34.574774481000119], + [-77.400624152999939, 34.571112372000144], + [-77.383208787999962, 34.562241929000109], + [-77.375599738999938, 34.551092841000084], + [-77.387196417999945, 34.540676174000012], + [-77.387196417999945, 34.533840236000103], + [-77.38182532499988, 34.530503648000078], + [-77.378895636999857, 34.527167059000035], + [-77.387928839999887, 34.522650458000086], + [-77.404042120999947, 34.517645575000031], + [-77.455637173999918, 34.505316473000093], + [-77.535878058999941, 34.468573309000092], + [-77.668324347999885, 34.376166083000086], + [-77.730458136999914, 34.315863348000121], + [-77.785023566999882, 34.246405341000113], + [-77.81655839799987, 34.222357489000089], + [-77.832671678999958, 34.207017320000134], + [-77.844471808999913, 34.174994208000143], + [-77.867095506999874, 34.138413804000024], + [-77.8744197259999, 34.122259833000143], + [-77.893137173999946, 34.012030341000141], + [-77.911122199999909, 33.958156643000038], + [-77.94204667899993, 33.93048737200003], + [-77.933745897999955, 33.948919989000061], + [-77.932281053999901, 33.957749742000104], + [-77.93586178299995, 33.965236721000068], + [-77.93586178299995, 33.971421617000047], + [-77.921254035999937, 34.001044012000094], + [-77.929554816999939, 34.079820054000052], + [-77.921620245999861, 34.108587958], + [-77.940663214999859, 34.147650458000058], + [-77.956288214999944, 34.191148179], + [-77.962554490999906, 34.191148179], + [-77.962880011999914, 34.163153387000179], + [-77.952300584999961, 34.091742255], + [-77.94204667899993, 34.067613023], + [-77.948557094999842, 34.05369700700011], + [-77.95051021999987, 34.037176825000031], + [-77.94945227799991, 34.002752997000087], + [-77.953195766999869, 33.989488023000078], + [-77.972157355999883, 33.952622789000188], + [-78.008941209999961, 33.904689846000096], + [-78.01781165299991, 33.896307684000035], + [-78.032338019999941, 33.892279364000061], + [-78.049305792999917, 33.89386627800009], + [-78.139556443999936, 33.915187893000066], + [-78.158680792999917, 33.916815497000087], + [-78.213978644999912, 33.915472723], + [-78.226918097999913, 33.920599677000112], + [-78.252512173999889, 33.925116278000147], + [-78.333485480999855, 33.910101630000142], + [-78.367258266999841, 33.916815497000087], + [-78.362375454999949, 33.924221096000068], + [-78.361724412999905, 33.932359117000189], + [-78.367258266999841, 33.950913804], + [-78.374663865999906, 33.950913804], + [-78.384917772999955, 33.922593492000047], + [-78.408273891999841, 33.910549221000124], + [-78.470855272999955, 33.896307684000035], + [-78.558990037999962, 33.869045315000122], + [-78.550119594999927, 33.879787502000156], + [-78.545399542999917, 33.883286851000051], + [-78.545399542999917, 33.889553127000099], + [-78.600005662999877, 33.875881252000156], + [-78.600005662999877, 33.869045315000122], + [-78.590443488999881, 33.867621161000059], + [-78.582875128999945, 33.863714911000088], + [-78.577219204999949, 33.857163804], + [-78.573312954999949, 33.847967841000028], + [-78.615061001999891, 33.845770575000031], + [-78.656971808999884, 33.831935940000122], + [-78.763335740999878, 33.778550523], + [-78.86750240799995, 33.704535223], + [-78.93797766799986, 33.642075914000159], + [-79.03148352799991, 33.533596096000068], + [-79.133127407999893, 33.41742584800015], + [-79.156117316999968, 33.375555731000063], + [-79.14867102799991, 33.368801174000012], + [-79.156117316999968, 33.357814846000153], + [-79.182606574999852, 33.241278387000122], + [-79.183461066999939, 33.217922268000123], + [-79.189605272999927, 33.217922268000123], + [-79.197377081999917, 33.232326565000093], + [-79.198638475999928, 33.268459377000127], + [-79.203277147999955, 33.286810614000089], + [-79.213693813999953, 33.300685940000065], + [-79.226877407999893, 33.306301174000069], + [-79.268462693999879, 33.306708075000174], + [-79.272043423999946, 33.317287502000127], + [-79.263172980999911, 33.340277411000031], + [-79.237172003999916, 33.386542059000092], + [-79.200998501999891, 33.422105210000083], + [-79.189605272999927, 33.430853583000143], + [-79.189605272999927, 33.436997789000131], + [-79.212025519999941, 33.428371486000017], + [-79.232289191999939, 33.412095445], + [-79.27708899599989, 33.359116929000052], + [-79.288238084999904, 33.33926015800013], + [-79.296376105999911, 33.317775783000016], + [-79.299468553999901, 33.296779690000065], + [-79.291411912999962, 33.277736721000096], + [-79.272043423999946, 33.261460679000052], + [-79.248280402999853, 33.250148830000072], + [-79.214019334999875, 33.242499091000056], + [-79.211333787999905, 33.233954169000114], + [-79.212391730999855, 33.222723700000117], + [-79.210113084999875, 33.21112702], + [-79.202951626999919, 33.192938544000114], + [-79.197255011999857, 33.187892971000068], + [-79.183461066999939, 33.18378327000012], + [-79.195912238999966, 33.175197658000016], + [-79.210194464999859, 33.167792059000035], + [-79.22288977799991, 33.157945054000109], + [-79.230580206999946, 33.142238674000126], + [-79.239328579999921, 33.149725653000118], + [-79.247222459999904, 33.166815497000144], + [-79.255116339999859, 33.170152085000083], + [-79.268910285999965, 33.166083075000031], + [-79.270008917999917, 33.156561591000028], + [-79.262806769999884, 33.145249742000047], + [-79.251698370999861, 33.135972398], + [-79.256337042999888, 33.130601304000137], + [-79.260894334999932, 33.126695054000137], + [-79.265980597999942, 33.124090887000037], + [-79.272206183999913, 33.12230052300005], + [-79.279204881999902, 33.139349677000112], + [-79.297271287999905, 33.149115302000055], + [-79.319894985999952, 33.153876044000143], + [-79.34044348899991, 33.155829169000086], + [-79.32982337099989, 33.142482815000093], + [-79.307606574999909, 33.13751862200003], + [-79.289865688999924, 33.130031643000066], + [-79.292632615999878, 33.10871002800009], + [-79.307687954999892, 33.095404364000089], + [-79.351796027999882, 33.078843492000104], + [-79.371490037999934, 33.064032294000057], + [-79.378732876999948, 33.046332098000121], + [-79.379790818999908, 33.029730536000088], + [-79.387033657999922, 33.017320054000052], + [-79.412464972999942, 33.012437242000161], + [-79.435373501999948, 33.010972398000106], + [-79.45763098899991, 33.006740627000099], + [-79.477040167999917, 33.00006745000006], + [-79.491322394999912, 32.991400458000143], + [-79.495716925999886, 33.001898505000113], + [-79.509022589999915, 33.021673895000148], + [-79.511830206999946, 33.029242255], + [-79.52000891799986, 33.04120514500012], + [-79.538644985999952, 33.036281643000066], + [-79.570139126999948, 33.019273179], + [-79.584828253999945, 33.013820705000157], + [-79.597157355999911, 33.000474351000051], + [-79.622914191999939, 32.955308335], + [-79.624501105999883, 32.943833726000051], + [-79.61945553299995, 32.932196356000148], + [-79.607411261999943, 32.91624583500014], + [-79.602162238999938, 32.924139716000113], + [-79.594471808999913, 32.930121161000116], + [-79.584868943999936, 32.934393622000059], + [-79.573841925999915, 32.936753648], + [-79.581410285999937, 32.921698309000178], + [-79.588734503999945, 32.914129950000031], + [-79.637806769999912, 32.890692450000145], + [-79.645253058999884, 32.888902085000083], + [-79.653716600999928, 32.885809637000179], + [-79.658192511999886, 32.878729559000121], + [-79.6615291009999, 32.871649481000148], + [-79.666371222999885, 32.86847565300009], + [-79.693023240999906, 32.860093492000132], + [-79.71222896999987, 32.840399481000091], + [-79.727935350999928, 32.817531643000095], + [-79.744536912999905, 32.79962799700003], + [-79.798654751999976, 32.773098049000069], + [-79.82872473899991, 32.76276276200015], + [-79.850982225999871, 32.75861237200003], + [-79.862131313999896, 32.764064846000153], + [-79.870838995999861, 32.776027736000103], + [-79.881662563999868, 32.787990627000042], + [-79.89907792899993, 32.793402411000059], + [-79.906239386999886, 32.800441799000126], + [-79.897450324999909, 32.816148179000109], + [-79.874867316999939, 32.841213283000016], + [-79.89232337099989, 32.854803778000147], + [-79.899159308999913, 32.851752020000063], + [-79.903431769999912, 32.844916083000143], + [-79.904693162999934, 32.837958075000145], + [-79.90282141799986, 32.834377346000096], + [-79.93809973899991, 32.854071356000034], + [-79.943755662999905, 32.851467190000122], + [-79.941639777999882, 32.837551174000154], + [-79.932240363999966, 32.812201239000117], + [-79.930083787999962, 32.796454169000143], + [-79.934071417999945, 32.783433335000083], + [-79.943959113999938, 32.782375393000123], + [-79.957427537999934, 32.78904857], + [-79.971669074999937, 32.79962799700003], + [-79.967640753999973, 32.785223700000145], + [-79.957427537999934, 32.772040106000119], + [-79.943104620999947, 32.76235586100016], + [-79.907785610999923, 32.755519924000126], + [-79.899159308999913, 32.748032945000077], + [-79.893055792999917, 32.739081122000059], + [-79.878977016999897, 32.731390692000119], + [-79.87596594999988, 32.732245184000121], + [-79.874867316999939, 32.738104559000149], + [-79.868031378999916, 32.738104559000149], + [-79.871408657999922, 32.708319403000147], + [-79.887318488999938, 32.688137111000131], + [-79.945708787999934, 32.653265692], + [-79.955922003999973, 32.649359442], + [-79.981312628999916, 32.648749091000141], + [-80.005970831999889, 32.65314362200003], + [-80.016672329999921, 32.653713283000101], + [-80.025705532999922, 32.648749091000141], + [-80.025705532999922, 32.642523505], + [-80.002797003999916, 32.629461981000119], + [-79.995472785999937, 32.619045315000122], + [-80.005116339999887, 32.611558335000055], + [-80.05793209499987, 32.603989976000108], + [-80.104237433999856, 32.590806382000054], + [-80.125640428999901, 32.587958075000117], + [-80.149077928999873, 32.581447658000016], + [-80.163075324999937, 32.570257880000113], + [-80.17711341099988, 32.56704336100016], + [-80.200754360999923, 32.584214585000083], + [-80.232329881999902, 32.612982489000117], + [-80.251291469999927, 32.623765367000132], + [-80.265939907999922, 32.62140534100017], + [-80.253977016999897, 32.608547268000152], + [-80.207427537999877, 32.57322825700011], + [-80.201771613999881, 32.571519273000106], + [-80.200754360999923, 32.569403387000094], + [-80.204457160999965, 32.56061432500006], + [-80.211293097999885, 32.552069403000118], + [-80.220936652999853, 32.546820380000142], + [-80.231556769999884, 32.54242584800015], + [-80.303456183999856, 32.49795156500015], + [-80.315663214999915, 32.494452216000141], + [-80.32323157499988, 32.488430080000128], + [-80.331206834999932, 32.486395575000117], + [-80.344471808999856, 32.494818427000084], + [-80.349964972999885, 32.505194403000147], + [-80.351389126999948, 32.516669012000122], + [-80.355376756999931, 32.526922919000057], + [-80.368967251999891, 32.533351955000157], + [-80.366037563999868, 32.516913153000147], + [-80.369252081999917, 32.498765367000047], + [-80.378163214999859, 32.484116929000052], + [-80.392567511999914, 32.478094794000057], + [-80.409331834999932, 32.481105861000131], + [-80.418812628999945, 32.48826732], + [-80.427845831999946, 32.497259833], + [-80.443430141999869, 32.505357164000131], + [-80.462269660999908, 32.509222723000121], + [-80.475738084999875, 32.509751695000105], + [-80.48786373599998, 32.512355861000017], + [-80.525013800999972, 32.540187893000066], + [-80.532582160999937, 32.547837632], + [-80.539662238999881, 32.56061432500006], + [-80.547108527999882, 32.56061432500006], + [-80.547271287999934, 32.548895575000145], + [-80.544178839999944, 32.537909247000087], + [-80.538929816999939, 32.527899481000119], + [-80.532826300999972, 32.519029039000159], + [-80.557972785999937, 32.516343492000189], + [-80.629017706999917, 32.525864976], + [-80.660064256999931, 32.525864976], + [-80.669789191999968, 32.521144924000069], + [-80.677967902999882, 32.511460679000109], + [-80.67747962099989, 32.49795156500015], + [-80.659413214999887, 32.506008205000072], + [-80.57095292899993, 32.491685289000188], + [-80.559193488999966, 32.492661851000079], + [-80.540842251999919, 32.49697500200007], + [-80.529408331999946, 32.49795156500015], + [-80.516102667999945, 32.495428778000033], + [-80.491851365999935, 32.482977606000119], + [-80.478179490999906, 32.478094794000057], + [-80.478179490999906, 32.470648505000057], + [-80.505279100999928, 32.472357489000061], + [-80.53490149599989, 32.470770575000031], + [-80.563547329999949, 32.46564362200003], + [-80.587473110999923, 32.456935940000122], + [-80.495228644999969, 32.450751044000171], + [-80.469838019999941, 32.442124742000161], + [-80.458363410999908, 32.423163153000147], + [-80.46349036399991, 32.404120184000149], + [-80.506743943999908, 32.388739325000117], + [-80.530384894999941, 32.373521226000136], + [-80.547678188999839, 32.357123114000117], + [-80.547108527999882, 32.34711334800015], + [-80.528309699999909, 32.348944403000033], + [-80.501535610999923, 32.358832098000121], + [-80.476918097999913, 32.371527411], + [-80.464507615999878, 32.381903387000094], + [-80.449370897999898, 32.393988348], + [-80.441639777999882, 32.401271877000013], + [-80.43724524599989, 32.409816799000126], + [-80.429798956999917, 32.409816799000126], + [-80.433664516999926, 32.390204169000171], + [-80.441070115999906, 32.366115627000156], + [-80.45164954299986, 32.350043036000088], + [-80.464507615999878, 32.354559637000037], + [-80.470773891999841, 32.354559637000037], + [-80.470285610999952, 32.349310614000146], + [-80.472035285999937, 32.348089911000116], + [-80.475005662999934, 32.348293361000074], + [-80.478179490999906, 32.34711334800015], + [-80.459868943999936, 32.337307033000016], + [-80.470773891999841, 32.322739976], + [-80.553293423999918, 32.278794664000159], + [-80.564198370999918, 32.277167059000035], + [-80.580189581999917, 32.279120184000178], + [-80.587473110999923, 32.278794664000159], + [-80.626047329999892, 32.262600002000013], + [-80.636830206999889, 32.266791083000143], + [-80.642689581999946, 32.293117580000128], + [-80.642201300999943, 32.319240627000013], + [-80.629017706999917, 32.381903387000094], + [-80.664418097999913, 32.36823151200015], + [-80.669992641999926, 32.373602606000119], + [-80.651193813999868, 32.445542710000083], + [-80.657297329999949, 32.462713934000092], + [-80.683664516999869, 32.464422919000114], + [-80.680978969999899, 32.456488348000121], + [-80.679351365999963, 32.454575914000159], + [-80.676503058999913, 32.455755927000112], + [-80.669992641999926, 32.456935940000122], + [-80.668853318999879, 32.453802802000055], + [-80.663156704999921, 32.450751044000171], + [-80.67284094999988, 32.439113674000154], + [-80.676909959999932, 32.425685940000065], + [-80.67747962099989, 32.357652085000112], + [-80.675200975999928, 32.349920966000113], + [-80.66539466099988, 32.333970445], + [-80.663156704999921, 32.32355377800009], + [-80.667469855999911, 32.305365302000112], + [-80.678293423999918, 32.302720445000134], + [-80.691761847999885, 32.309637762000122], + [-80.759348110999952, 32.360785223000093], + [-80.784413214999944, 32.416245835000055], + [-80.796009894999969, 32.453273830000072], + [-80.796945766999841, 32.474351304000109], + [-80.783029751999948, 32.491685289000188], + [-80.785552537999877, 32.496730861000046], + [-80.798085089999887, 32.4981957050001], + [-80.814035610999895, 32.505357164000131], + [-80.822499152999939, 32.518133856000176], + [-80.82750403599988, 32.531398830000015], + [-80.835926886999914, 32.540106512000179], + [-80.854969855999911, 32.539496161000116], + [-80.854969855999911, 32.533351955000157], + [-80.842762824999852, 32.524237372000144], + [-80.82843990799995, 32.495672919000171], + [-80.820790167999917, 32.484849351000079], + [-80.820790167999917, 32.478094794000057], + [-80.828928188999839, 32.45526764500012], + [-80.81578528599988, 32.419256903000147], + [-80.796945766999841, 32.382554429000052], + [-80.787342902999882, 32.357652085000112], + [-80.798573370999861, 32.333644924000069], + [-80.798939581999889, 32.319728908000101], + [-80.783558722999942, 32.313625393], + [-80.775786912999934, 32.305731512000037], + [-80.745106574999852, 32.258978583000143], + [-80.727040167999917, 32.265936591000056], + [-80.712147589999887, 32.263006903000118], + [-80.700184699999937, 32.254461981000091], + [-80.691070115999935, 32.244696356000148], + [-80.677316860999923, 32.225327867000132], + [-80.677845831999917, 32.214748440000093], + [-80.704701300999886, 32.19065989800005], + [-80.737131313999896, 32.152085679], + [-80.820790167999917, 32.108140367000047], + [-80.811594204999949, 32.1446800800001], + [-80.777211066999911, 32.207261460000112], + [-80.779855923999889, 32.244696356000148], + [-80.787993943999908, 32.235825914000102], + [-80.790598110999923, 32.224310614000061], + [-80.791127081999889, 32.211004950000145], + [-80.793527798999946, 32.196926174000012], + [-80.800770636999857, 32.186224677], + [-80.823475714999915, 32.165757554000109], + [-80.828236456999917, 32.15908437700007], + [-80.832142706999889, 32.134344794000086], + [-80.841908331999946, 32.115952867000047], + [-80.887562628999973, 32.069403387000122], + [-80.894520636999857, 32.058823960000083], + [-80.895985480999911, 32.046698309000178], + [-80.890288865999935, 32.032660223000121], + [-80.889393683999856, 32.030422268000123], + [-80.879017706999946, 32.026516018000152], + [-80.865223761999943, 32.026516018000152], + [-80.848133917999888, 32.022162177000055], + [-80.83568274599989, 32.00291575700011], + [-80.853911912999962, 31.982163804000109], + [-80.903391079999921, 31.950506903000033], + [-80.912668423999946, 31.955877997000087], + [-80.91950436099998, 31.965236721000124], + [-80.923451300999972, 31.974025783000101], + [-80.923817511999886, 31.977769273000135], + [-80.937367316999939, 31.976467190000122], + [-80.944325324999937, 31.969183661000116], + [-80.948638475999928, 31.961127020000092], + [-80.954660610999952, 31.957342841000141], + [-80.964751756999902, 31.948797919000029], + [-80.963124152999882, 31.930650132000139], + [-80.949533657999922, 31.913723049000154], + [-80.923817511999886, 31.908880927000084], + [-80.958159959999932, 31.879339911], + [-80.980458136999886, 31.865383205000128], + [-80.995228644999941, 31.86448802300005], + [-81.012603318999936, 31.874457098000121], + [-81.057687954999892, 31.881903387000122], + [-81.07469641799986, 31.888413804000109], + [-81.080677863999881, 31.896633205000015], + [-81.086822068999965, 31.90766022300015], + [-81.095326300999886, 31.916001695000105], + [-81.108225063999896, 31.916327216000141], + [-81.118234829999892, 31.90766022300015], + [-81.111805792999888, 31.898016669000086], + [-81.091420050999886, 31.884995835], + [-81.09032141799986, 31.875718492000047], + [-81.130197719999927, 31.866766669000114], + [-81.142974412999962, 31.85492584800015], + [-81.087717251999948, 31.847479559000178], + [-81.081898566999911, 31.84398021], + [-81.061024542999917, 31.82697174700003], + [-81.04515540299991, 31.827826239000117], + [-81.039906378999916, 31.82697174700003], + [-81.049549933999884, 31.813544012000037], + [-81.060902472999942, 31.788153387000094], + [-81.091379360999895, 31.754339911000116], + [-81.105539516999841, 31.742661851000136], + [-81.119048631999902, 31.73761627800009], + [-81.171376105999883, 31.736639716000028], + [-81.204579230999911, 31.741441148000106], + [-81.228627081999946, 31.754950262000094], + [-81.238636847999913, 31.763088283000016], + [-81.253163214999859, 31.770249742000047], + [-81.266590949999852, 31.772406317000147], + [-81.273304816999911, 31.76552969000015], + [-81.269195115999963, 31.751695054000052], + [-81.256214972999942, 31.744777736000131], + [-81.225493943999965, 31.73761627800009], + [-81.196278449999937, 31.71759674700003], + [-81.198963995999918, 31.69944896000014], + [-81.239125128999916, 31.663072007000054], + [-81.251938655999879, 31.647172896000043], + [-81.258865060999938, 31.632098470000059], + [-81.300933397999898, 31.570786851000108], + [-81.318269957999945, 31.565552930000038], + [-81.331091363999946, 31.552431020000128], + [-81.333365813999933, 31.54439652700016], + [-81.320196419999917, 31.522446919000103], + [-81.328237185999853, 31.502342330000189], + [-81.327021733999942, 31.498342383000178], + [-81.326973157999902, 31.493331351000066], + [-81.326905228999891, 31.486315816000015], + [-81.331432518999918, 31.467234350000027], + [-81.365276672999869, 31.437886972000015], + [-81.363899323999959, 31.415830010000136], + [-81.348369366999918, 31.388867310000151], + [-81.335230204999903, 31.36690560600006], + [-81.325657267999929, 31.34892851400015], + [-81.33618268099994, 31.342820021000122], + [-81.428863084999904, 31.352850653000147], + [-81.450795050999915, 31.361476955000157], + [-81.470936652999882, 31.372870184000121], + [-81.479969855999883, 31.374212958], + [-81.49242102799991, 31.367661851000108], + [-81.467030402999882, 31.347805080000015], + [-81.426503058999856, 31.332953192000147], + [-81.381988084999961, 31.323675848], + [-81.34471594999988, 31.32050202000012], + [-81.328277147999898, 31.315252997000144], + [-81.285064256999874, 31.287665106000034], + [-81.269886847999885, 31.274847723], + [-81.267689581999917, 31.258734442000119], + [-81.274647589999887, 31.235541083], + [-81.288563605999883, 31.220933335000083], + [-81.307484503999888, 31.230454820000077], + [-81.343169725999928, 31.180650132], + [-81.367543097999885, 31.153550523000078], + [-81.385975714999915, 31.141750393], + [-81.409250454999949, 31.143255927000055], + [-81.417958136999914, 31.148993231000034], + [-81.418568488999881, 31.160589911000145], + [-81.415516730999883, 31.207220770000148], + [-81.423003709999961, 31.21963125200007], + [-81.44465084499987, 31.216782945000134], + [-81.45482337099989, 31.206000067000119], + [-81.456532355999911, 31.190415757000139], + [-81.448638475999928, 31.150946356000176], + [-81.446929490999935, 31.130845445000134], + [-81.451730923999918, 31.11709219], + [-81.48729407499988, 31.133612372000087], + [-81.495838995999918, 31.126206773000021], + [-81.492583787999962, 31.113674221000011], + [-81.464019334999875, 31.10260651200015], + [-81.440988735999895, 31.081366278000175], + [-81.430287238999881, 31.073431708000115], + [-81.430897589999944, 31.093207098000121], + [-81.424916144999912, 31.104722398000078], + [-81.403675910999937, 31.12128327000012], + [-81.405384894999941, 31.09479401200015], + [-81.424143032999893, 31.025051174000012], + [-81.430287238999881, 31.025051174000012], + [-81.443023240999935, 31.044745184000149], + [-81.463449673999889, 31.067328192000119], + [-81.488107876999891, 31.085842190000122], + [-81.513539191999911, 31.093329169000114], + [-81.49937903599988, 31.074611721000124], + [-81.459136522999898, 31.038641669000143], + [-81.450795050999915, 31.021918036000116], + [-81.456776495999947, 31.001654364000117], + [-81.472482876999919, 30.991888739000089], + [-81.519683397999898, 30.984076239], + [-81.519683397999898, 30.976629950000117], + [-81.499256964999915, 30.968207098000065], + [-81.464100714999859, 30.968451239], + [-81.450795050999915, 30.963568427000141], + [-81.462310350999871, 30.948675848000093], + [-81.492990688999868, 30.918524481000148], + [-81.499256964999915, 30.905585028000147], + [-81.500355597999942, 30.900051174000126], + [-81.505116339999859, 30.88617584800015], + [-81.506011522999955, 30.881659247000087], + [-81.502797003999888, 30.871975002000127], + [-81.497547980999911, 30.86615631700009], + [-81.493153449999937, 30.859442450000031], + [-81.49242102799991, 30.846869208000143], + [-81.501576300999972, 30.850775458000143], + [-81.511708136999943, 30.853338934000064], + [-81.522328253999973, 30.854437567], + [-81.533355272999927, 30.853705145000063], + [-81.533355272999927, 30.846869208000143], + [-81.51903235599994, 30.841782945000105], + [-81.514881964999887, 30.83201732], + [-81.515044725999957, 30.819484768000095], + [-81.513539191999911, 30.805975653000118], + [-81.508656378999945, 30.796779690000122], + [-81.496734178999901, 30.783351955000128], + [-81.49242102799991, 30.771795966000028], + [-81.494781053999958, 30.749212958000143], + [-81.501291469999842, 30.724351304], + [-81.500030076999934, 30.712184963000098], + [-81.499256964999915, 30.704331773000135], + [-81.475656704999977, 30.696030992000047], + [-81.469349738999938, 30.697170315000093], + [-81.455637173999918, 30.701808986000017], + [-81.447743292999945, 30.702866929000081], + [-81.440256313999868, 30.700751044000143], + [-81.438221808999941, 30.696030992000047], + [-81.437611456999974, 30.691351630000142], + [-81.434071417999888, 30.689195054000137], + [-81.428578253999973, 30.681708075000145], + [-81.430531378999916, 30.664740302], + [-81.437814907999922, 30.637762762000037], + [-81.441517706999974, 30.553045966000141], + [-81.437814907999922, 30.524115302000141], + [-81.453846808999913, 30.534491278000033], + [-81.461903449999852, 30.548529364000089], + [-81.464711066999911, 30.566839911000145], + [-81.46507727799991, 30.589911200000117], + [-81.466949022999898, 30.600002346000068], + [-81.472035285999908, 30.610052802000055], + [-81.479644334999961, 30.617865302000141], + [-81.489003058999884, 30.620998440000037], + [-81.497954881999902, 30.617661851], + [-81.499989386999943, 30.609361070000105], + [-81.499256964999915, 30.586818752000127], + [-81.50153561099998, 30.56928131700009], + [-81.50031490799995, 30.551255601000051], + [-81.492583787999962, 30.5372582050001], + [-81.475656704999977, 30.531561591000113], + [-81.47492428299995, 30.527655341000028], + [-81.447743292999945, 30.508002020000063], + [-81.441639777999853, 30.500148830000072], + [-81.435129360999952, 30.484849351000108], + [-81.430287238999881, 30.476996161000145], + [-81.42446855399993, 30.471584377000099], + [-81.419545050999943, 30.469305731000119], + [-81.414947068999936, 30.465725002000156], + [-81.409820115999906, 30.456488348000093], + [-81.406361456999917, 30.443589585000083], + [-81.409820115999906, 30.411444403000118], + [-81.406605597999942, 30.405829169000114], + [-81.399566209999875, 30.400539455000128], + [-81.392567511999914, 30.393866278000175], + [-81.389393683999941, 30.384222723], + [-81.396148240999878, 30.33978913], + [-81.394927537999962, 30.298570054000137], + [-81.362660285999937, 30.188950914000102], + [-81.353993292999917, 30.170803127000013], + [-81.328286301999924, 30.052830108000038], + [-81.287668423999975, 29.926174221000011], + [-81.293812628999945, 29.894110419000029], + [-81.287993943999908, 29.893011786], + [-81.279385368999868, 29.89954946200011], + [-81.273761001999901, 29.889873650000041], + [-81.271852206999881, 29.876151150000098], + [-81.266468878999888, 29.853216864], + [-81.261626756999902, 29.839016018000095], + [-81.255848761999943, 29.789455471000153], + [-81.250130113999916, 29.769591599000179], + [-81.2388792, 29.737301167000098], + [-81.225493943999965, 29.709784247000087], + [-81.209966568999874, 29.666519134000126], + [-81.189076300999886, 29.624172268], + [-81.184641079999921, 29.60374583500014], + [-81.178293423999889, 29.585516669000143], + [-81.137960962999927, 29.50508321100007], + [-81.071914374999892, 29.363031525000039], + [-81.00628734299994, 29.23526970800016], + [-80.962667580999948, 29.152056322000121], + [-80.932122595999971, 29.101178684], + [-80.914549851999936, 29.087450487000112], + [-80.922108527999882, 29.068304755000142], + [-80.909331834999932, 29.05695221600017], + [-80.891753709999904, 29.045558986000017], + [-80.882883266999869, 29.027655341000141], + [-80.877674933999856, 29.008490302], + [-80.743225017999862, 28.80690990300009], + [-80.680043097999913, 28.71702708500014], + [-80.627064581999946, 28.650864976000051], + [-80.567616339999915, 28.557806708], + [-80.543080206999889, 28.492499091000113], + [-80.528228318999936, 28.472601630000028], + [-80.5404353509999, 28.451605536000059], + [-80.558420376999948, 28.433335679], + [-80.567616339999915, 28.431830145000148], + [-80.569691535999937, 28.426418361000103], + [-80.575266079999949, 28.417954820000048], + [-80.582753058999913, 28.410305080000043], + [-80.590891079999921, 28.406927802000027], + [-80.594064907999893, 28.401597398000135], + [-80.594715949999852, 28.303859768000152], + [-80.601714647999927, 28.29092031500015], + [-80.594309048999946, 28.284084377000127], + [-80.596831834999961, 28.262640692], + [-80.592193162999934, 28.207912502000156], + [-80.571115688999896, 28.106146552000112], + [-80.556630011999857, 28.07754140800013], + [-80.553293423999918, 28.061590887000122], + [-80.532338019999884, 28.018784898000135], + [-80.451893683999913, 27.90940989800005], + [-80.450917120999918, 27.866359768], + [-80.475005662999934, 27.907904364], + [-80.478179490999906, 27.917222398000135], + [-80.482329881999959, 27.924261786], + [-80.51231848899991, 27.955145575000145], + [-80.521595831999974, 27.990179755000057], + [-80.580637173999918, 28.085435289000102], + [-80.61066646999987, 28.164943752000013], + [-80.619943813999896, 28.206976630000085], + [-80.617909308999884, 28.379339911], + [-80.587880011999914, 28.505764065000122], + [-80.587066209999904, 28.545355536000059], + [-80.594309048999946, 28.585109768000066], + [-80.600412563999839, 28.600287177000055], + [-80.609445766999841, 28.610174872000172], + [-80.623036261999886, 28.614569403000147], + [-80.642689581999946, 28.613023179000109], + [-80.646066860999952, 28.614406643000095], + [-80.65086829299986, 28.617865302], + [-80.656646287999905, 28.620754299000041], + [-80.663156704999921, 28.620510158000073], + [-80.663807745999861, 28.616848049000126], + [-80.662505662999962, 28.602362372000172], + [-80.663156704999921, 28.598781643], + [-80.675038214999859, 28.595607815000122], + [-80.683949347999885, 28.595200914000131], + [-80.747792120999918, 28.604925848000093], + [-80.765939907999922, 28.612290757000082], + [-80.779855923999889, 28.626654364000061], + [-80.784250454999977, 28.641669012000179], + [-80.784250454999977, 28.661281643000123], + [-80.780384894999884, 28.680731512000037], + [-80.77301998599998, 28.694973049000126], + [-80.765614386999886, 28.688706773], + [-80.75715084499987, 28.703802802], + [-80.749256964999887, 28.724107164000102], + [-80.752349412999962, 28.741929429000081], + [-80.795277472999942, 28.755601304000109], + [-80.828928188999839, 28.783026434000149], + [-80.848133917999888, 28.790594794000114], + [-80.831939256999931, 28.699367580000128], + [-80.820790167999917, 28.675116278000033], + [-80.820790167999917, 28.667669989000061], + [-80.828236456999917, 28.66144440300009], + [-80.79747473899991, 28.608303127000013], + [-80.793527798999946, 28.588853257000025], + [-80.789662238999938, 28.547837632], + [-80.766102667999888, 28.451076565000093], + [-80.756825324999937, 28.430853583000058], + [-80.738270636999914, 28.373480536000145], + [-80.708811001999948, 28.320461330000015], + [-80.701242641999897, 28.296616929000137], + [-80.54110673699995, 27.981350002000099], + [-80.380970831999917, 27.666083075000145], + [-80.345366990999935, 27.514593817000033], + [-80.197824673999889, 27.195990302000141], + [-80.19701087099989, 27.18048737200003], + [-80.205799933999856, 27.200344143000123], + [-80.217152472999913, 27.209418036000145], + [-80.257232225999957, 27.218573309000121], + [-80.27961178299995, 27.228908596000124], + [-80.28648841099988, 27.233791408000101], + [-80.292713995999947, 27.239488023], + [-80.30101477799991, 27.243353583000086], + [-80.314320441999939, 27.242580471000068], + [-80.308420376999891, 27.234320380000085], + [-80.283029751999976, 27.207831122000115], + [-80.275949673999918, 27.205877997000144], + [-80.260161912999877, 27.196966864000117], + [-80.251616990999935, 27.194159247000172], + [-80.228993292999888, 27.200384833000115], + [-80.221262173999975, 27.201605536000145], + [-80.183338995999947, 27.163763739], + [-80.176991339999915, 27.150702216000028], + [-80.148793097999942, 27.138251044000114], + [-80.142404751999919, 27.122137762000037], + [-80.139271613999938, 27.107652085], + [-80.115101691999939, 27.063788153000033], + [-80.094593878999888, 27.009751695000048], + [-80.075550910999908, 26.973211981000091], + [-80.074126756999931, 26.961371161000145], + [-80.081288214999859, 26.950425523000078], + [-80.09154212099989, 26.947251695000105], + [-80.103382941999939, 26.946030992000189], + [-80.115101691999939, 26.940904039000159], + [-80.115101691999939, 26.934719143], + [-80.102406378999973, 26.929510809000121], + [-80.080311652999882, 26.923570054], + [-80.070708787999905, 26.91697825700011], + [-80.064320441999882, 26.906683661], + [-80.038238084999932, 26.811183986000103], + [-80.038400844999899, 26.784247137000037], + [-80.053618943999965, 26.769598700000031], + [-80.053618943999965, 26.762152411000145], + [-80.040516730999911, 26.746405341000084], + [-80.03453528599988, 26.715318101], + [-80.032378709999875, 26.587347723], + [-80.03807532499988, 26.558539130000057], + [-80.053618943999965, 26.556708075000088], + [-80.062082485999923, 26.42088450700011], + [-80.071888800999943, 26.390448309000149], + [-80.074126756999931, 26.375474351000136], + [-80.073150193999936, 26.341009833], + [-80.075062628999916, 26.32420482000019], + [-80.080922003999945, 26.30963776200015], + [-80.077707485999895, 26.287583726000079], + [-80.102650519999912, 26.139960028000033], + [-80.112131313999839, 26.11017487200003], + [-80.128773566999882, 26.098618882], + [-80.128773566999882, 26.091213283000016], + [-80.112782355999883, 26.068833726], + [-80.128773566999882, 25.775295315000122], + [-80.135568813999896, 25.775295315000122], + [-80.135568813999896, 25.816839911000031], + [-80.128773566999882, 25.86212799700003], + [-80.12926184799997, 25.887884833000058], + [-80.132435675999915, 25.90127187700007], + [-80.140614386999943, 25.900824286000088], + [-80.176584438999924, 25.858384507], + [-80.182728644999884, 25.822088934000092], + [-80.195464647999927, 25.795843817000062], + [-80.196197068999879, 25.75381094], + [-80.210682745999918, 25.734930731000148], + [-80.221262173999975, 25.731105861000131], + [-80.230946417999917, 25.731187242000132], + [-80.240712042999888, 25.729559637000094], + [-80.251616990999935, 25.720607815000093], + [-80.255197719999927, 25.711086330000072], + [-80.256906704999921, 25.68683502800009], + [-80.277577277999939, 25.644232489000061], + [-80.306874152999853, 25.61823151200015], + [-80.310414191999939, 25.598944403000033], + [-80.311350063999924, 25.54979075700011], + [-80.317453579999921, 25.532904364000117], + [-80.333973761999886, 25.511908270000092], + [-80.34243730399993, 25.493638414000102], + [-80.344309048999889, 25.47524648600016], + [-80.341053839999859, 25.453762111000131], + [-80.336496548999918, 25.44822825700011], + [-80.329457160999937, 25.444037177], + [-80.325672980999911, 25.438666083000115], + [-80.333729620999947, 25.424790757000139], + [-80.341053839999859, 25.405951239], + [-80.332915818999936, 25.398016669000029], + [-80.320423956999917, 25.391546942000119], + [-80.31309973899991, 25.383490302], + [-80.314320441999939, 25.371161200000145], + [-80.350738084999904, 25.342230536000145], + [-80.395863410999965, 25.295396226], + [-80.400624152999882, 25.28790924700003], + [-80.402495897999927, 25.279364325000088], + [-80.405913865999935, 25.270168361000017], + [-80.423003709999875, 25.252386786000145], + [-80.424183722999913, 25.241441148000078], + [-80.426909959999875, 25.221747137000037], + [-80.414784308999884, 25.206854559000178], + [-80.401966925999943, 25.19554271], + [-80.402495897999927, 25.186224677000055], + [-80.417551235999952, 25.197414455000157], + [-80.437123175999915, 25.223374742000047], + [-80.450917120999918, 25.227769273000135], + [-80.450795050999943, 25.242987372000115], + [-80.466420050999943, 25.241766669000086], + [-80.486195441999968, 25.233343817000147], + [-80.498646613999881, 25.220363674000154], + [-80.476918097999913, 25.218573309000149], + [-80.458729620999918, 25.20917389500012], + [-80.446644660999908, 25.193589585000055], + [-80.443430141999869, 25.173163153000175], + [-80.450917120999918, 25.173163153000175], + [-80.454009568999908, 25.195257880000057], + [-80.469146287999905, 25.208075262000094], + [-80.48892167899993, 25.210353908000073], + [-80.506174282999922, 25.200506903000061], + [-80.509266730999911, 25.20722077], + [-80.513661261999914, 25.212836005], + [-80.519195115999935, 25.217189846000096], + [-80.525990363999938, 25.220363674000154], + [-80.522368943999879, 25.226792710000055], + [-80.519602016999841, 25.230780341000056], + [-80.515004035999908, 25.233058986000017], + [-80.506174282999922, 25.234605210000055], + [-80.507150844999899, 25.23891836100016], + [-80.508371548999918, 25.241766669000086], + [-80.51231848899991, 25.248277085], + [-80.525257941999911, 25.246527411], + [-80.565500454999921, 25.245998440000037], + [-80.580637173999918, 25.241441148000078], + [-80.590443488999938, 25.225327867000104], + [-80.597482876999919, 25.20343659100017], + [-80.606516079999921, 25.188666083], + [-80.622222459999875, 25.193670966000028], + [-80.619048631999902, 25.195746161000145], + [-80.61754309799997, 25.19554271], + [-80.616525844999899, 25.196030992000161], + [-80.614735480999911, 25.200506903000061], + [-80.651356574999937, 25.193060614000061], + [-80.656971808999941, 25.189927476], + [-80.654937303999901, 25.180568752000156], + [-80.651600714999887, 25.174017645000063], + [-80.65099036399991, 25.16787344], + [-80.656971808999941, 25.159491278000033], + [-80.663156704999921, 25.159491278000033], + [-80.678130662999934, 25.16787344], + [-80.691151495999918, 25.162746486000074], + [-80.710926886999857, 25.145249742000132], + [-80.723052537999934, 25.143133856000034], + [-80.739816860999952, 25.143784898000078], + [-80.755848761999857, 25.148749091000028], + [-80.765614386999886, 25.159491278000033], + [-80.767811652999882, 25.155462958000058], + [-80.769927537999905, 25.152777411], + [-80.771717902999882, 25.149847723000065], + [-80.77301998599998, 25.145249742000132], + [-80.777821417999888, 25.148260809000035], + [-80.78294837099989, 25.150620835], + [-80.788238084999961, 25.153957424000012], + [-80.793527798999946, 25.159491278000033], + [-80.797027147999927, 25.151312567000119], + [-80.800282355999883, 25.148382880000028], + [-80.805246548999918, 25.149115302000141], + [-80.814035610999895, 25.152085679000052], + [-80.814035610999895, 25.159491278000033], + [-80.810536261999914, 25.167792059000121], + [-80.840240037999934, 25.173407294000029], + [-80.854969855999911, 25.186224677000055], + [-80.882883266999869, 25.169501044000029], + [-80.88719641799986, 25.168361721000096], + [-80.910227016999841, 25.145249742000132], + [-80.928781704999921, 25.142157294000143], + [-80.967152472999942, 25.141546942], + [-80.999582485999952, 25.135077216000084], + [-81.039906378999916, 25.131577867000189], + [-81.086537238999938, 25.121405341000141], + [-81.101958787999962, 25.124741929], + [-81.149159308999941, 25.165716864], + [-81.165516730999855, 25.19725169500019], + [-81.177113410999965, 25.227769273000135], + [-81.175770636999886, 25.259019273000106], + [-81.164865688999896, 25.298081773000078], + [-81.148345506999931, 25.331203518], + [-81.129953579999977, 25.344468492000132], + [-81.136097785999965, 25.330226955000043], + [-81.124012824999852, 25.327948309000149], + [-81.112131313999896, 25.320746161000116], + [-81.10191809799997, 25.31171295800003], + [-81.095122850999928, 25.303534247000087], + [-81.077870245999918, 25.272853908000016], + [-81.07469641799986, 25.272447007], + [-81.061756964999859, 25.264227606000091], + [-80.985259568999965, 25.234605210000055], + [-80.985259568999965, 25.227769273000135], + [-80.990834113999881, 25.226141669000114], + [-81.000111456999917, 25.222072658000158], + [-81.005767381999931, 25.220363674000154], + [-81.005767381999931, 25.214178778000175], + [-80.988026495999918, 25.207505601000108], + [-80.966297980999855, 25.206854559000178], + [-80.94465084499987, 25.212307033000016], + [-80.927235480999883, 25.224066473], + [-80.917225714999915, 25.245754299000069], + [-80.924143032999922, 25.26357656500015], + [-80.980783657999893, 25.318304755], + [-80.999134894999941, 25.327053127000156], + [-81.034291144999912, 25.332464911], + [-81.051665818999908, 25.342230536000145], + [-81.057281053999901, 25.344468492000132], + [-81.095122850999928, 25.351304429000052], + [-81.141346808999941, 25.384751695000105], + [-81.149159308999941, 25.395412502000127], + [-81.150380011999857, 25.405951239], + [-81.155425584999875, 25.42658112200003], + [-81.156605597999913, 25.436346747000144], + [-81.170887824999909, 25.474839585000055], + [-81.203439907999979, 25.508002020000092], + [-81.214670376999976, 25.527573960000055], + [-81.195952928999901, 25.538885809000035], + [-81.189930792999888, 25.545355536000145], + [-81.186105923999889, 25.553168036000116], + [-81.187652147999927, 25.560207424000012], + [-81.197255011999914, 25.564276434000149], + [-81.220041469999842, 25.559271552000112], + [-81.231678839999944, 25.563625393], + [-81.235422329999977, 25.573146877000013], + [-81.245961066999939, 25.61823151200015], + [-81.266713019999941, 25.652818101000079], + [-81.266468878999888, 25.666652736000074], + [-81.27472896999987, 25.674709377000013], + [-81.278431769999912, 25.685980536], + [-81.279530402999882, 25.704169012000179], + [-81.313140428999901, 25.706203518], + [-81.3216853509999, 25.707586981000091], + [-81.328358527999882, 25.716050523000135], + [-81.340240037999905, 25.742865302000112], + [-81.34471594999988, 25.748521226000108], + [-81.357248501999976, 25.753485419000171], + [-81.347971157999922, 25.764634507], + [-81.3216853509999, 25.782700914000102], + [-81.329335089999944, 25.790472723], + [-81.348459438999924, 25.816839911000031], + [-81.372141079999921, 25.836127020000148], + [-81.396148240999878, 25.851629950000145], + [-81.409047003999888, 25.85635000200007], + [-81.438343878999916, 25.861314195000105], + [-81.450795050999915, 25.86587148600016], + [-81.462147589999915, 25.874497789000159], + [-81.475209113999881, 25.891017971000124], + [-81.485585089999887, 25.899400132000025], + [-81.498768683999913, 25.886704820000048], + [-81.509510870999947, 25.89081452], + [-81.521066860999952, 25.901068427000112], + [-81.541574673999918, 25.908921617000104], + [-81.555287238999938, 25.918361721000011], + [-81.564076300999915, 25.920477606000034], + [-81.568226691999939, 25.918646552000055], + [-81.579904751999948, 25.909857489000089], + [-81.588002081999974, 25.906887111000074], + [-81.583811001999948, 25.914374091000056], + [-81.583973761999914, 25.917303778000147], + [-81.58617102799991, 25.919826565000065], + [-81.588002081999974, 25.926092841000028], + [-81.596424933999913, 25.923773505000057], + [-81.607411261999886, 25.927394924000126], + [-81.617421027999882, 25.935532945000048], + [-81.622710740999935, 25.94717031500015], + [-81.632801886999914, 25.940008856000091], + [-81.640370245999861, 25.926255601], + [-81.650054490999906, 25.920477606000034], + [-81.66242428299995, 25.918198960000055], + [-81.674305792999917, 25.919907945000048], + [-81.684315558999884, 25.925116278000147], + [-81.691029425999943, 25.93353913], + [-81.694447394999941, 25.927923895], + [-81.697865363999938, 25.920477606000034], + [-81.700306769999884, 25.918443101], + [-81.705799933999913, 25.913763739000089], + [-81.705311652999939, 25.906887111000074], + [-81.711496548999889, 25.906887111000074], + [-81.71849524599989, 25.908107815000093], + [-81.722238735999923, 25.910060940000122], + [-81.732004360999952, 25.920477606000034], + [-81.735829230999883, 25.928371486000103], + [-81.742543097999913, 25.957464911000059], + [-81.728586391999841, 25.962713934000149], + [-81.716664191999911, 25.955959377000013], + [-81.705677863999938, 25.945705471000096], + [-81.694447394999941, 25.940375067000119], + [-81.685047980999911, 25.945013739000146], + [-81.675404425999943, 25.956244208000058], + [-81.667795376999919, 25.969712632000139], + [-81.664377407999893, 25.981350002000127], + [-81.679188605999883, 25.981838283000044], + [-81.701975063999896, 25.979234117000132], + [-81.711496548999889, 25.981350002000127], + [-81.722482876999948, 25.989081122000144], + [-81.731678839999915, 26.000637111000074], + [-81.734364386999914, 26.01276276200015], + [-81.725738084999904, 26.022284247000144], + [-81.754383917999888, 26.042059637000094], + [-81.770090298999946, 26.06777578300013], + [-81.787220831999974, 26.139593817000119], + [-81.791493292999888, 26.13019440300009], + [-81.793690558999884, 26.120184637000094], + [-81.794178839999859, 26.109605210000055], + [-81.793446417999917, 26.098618882], + [-81.800892706999917, 26.098618882], + [-81.81899980399993, 26.170314846000011], + [-81.827544725999928, 26.24884674700003], + [-81.821359829999977, 26.282945054000052], + [-81.821400519999969, 26.289618231000091], + [-81.822132941999882, 26.29287344000015], + [-81.851796027999939, 26.341986395000092], + [-81.855539516999869, 26.358710028000118], + [-81.848703579999949, 26.358710028000118], + [-81.848703579999949, 26.351874091000084], + [-81.841867641999926, 26.351874091000084], + [-81.843861456999946, 26.414211330000072], + [-81.848703579999949, 26.43378327000012], + [-81.85594641799986, 26.448879299000126], + [-81.875843878999945, 26.480292059000149], + [-81.882801886999857, 26.495835679000081], + [-81.882435675999943, 26.481187242000161], + [-81.878488735999952, 26.456244208000143], + [-81.882801886999857, 26.447455145000063], + [-81.88731848899991, 26.444769598], + [-81.894032355999855, 26.447495835000055], + [-81.898671027999882, 26.452093817], + [-81.903309699999909, 26.454901434000064], + [-81.923736131999874, 26.454901434000064], + [-81.978382941999939, 26.482163804000137], + [-81.99156653599988, 26.476019598000065], + [-81.994699673999946, 26.477240302000084], + [-82.000111456999917, 26.482163804000137], + [-82.00633704299986, 26.474798895000148], + [-82.008656378999916, 26.4845238300001], + [-82.008859829999977, 26.499335028000147], + [-82.006174282999893, 26.514064846000153], + [-82.000111456999917, 26.523179429000052], + [-81.995961066999968, 26.522772528000033], + [-81.989247199999909, 26.511704820000105], + [-81.982085740999878, 26.508937893000123], + [-81.974476691999939, 26.510443427], + [-81.97004146999987, 26.514146226000136], + [-81.965728318999965, 26.518866278000061], + [-81.93846594999988, 26.535467841000113], + [-81.911773240999935, 26.558661200000031], + [-81.893055792999888, 26.586127020000092], + [-81.897084113999938, 26.611273505000057], + [-81.885568813999924, 26.624172268000066], + [-81.841867641999926, 26.66315338700015], + [-81.838124152999882, 26.672430731000091], + [-81.829172329999949, 26.681382554000137], + [-81.817982550999943, 26.685451565], + [-81.807728644999912, 26.680243231000091], + [-81.797678188999868, 26.686753648], + [-81.790109829999892, 26.694077867000189], + [-81.784535285999908, 26.703070380000113], + [-81.780384894999941, 26.714992580000157], + [-81.795318162999905, 26.709702867000161], + [-81.819203253999973, 26.697007554000109], + [-81.838124152999882, 26.694525458], + [-81.854603644999884, 26.688421942], + [-81.873890753999916, 26.674058335000112], + [-81.906727667999917, 26.642645575000088], + [-81.917591925999915, 26.626654364], + [-81.947743292999917, 26.548895575000088], + [-81.951730923999889, 26.543646552000112], + [-81.959787563999839, 26.539862372000087], + [-81.983225063999924, 26.533758856000091], + [-81.992665167999917, 26.529364325000117], + [-81.992665167999917, 26.543646552000112], + [-82.012766079999977, 26.535956122000087], + [-82.02668209499987, 26.528021552000112], + [-82.039051886999886, 26.527899481000148], + [-82.054758266999869, 26.543646552000112], + [-82.063099738999938, 26.560980536], + [-82.061268683999856, 26.573431708000115], + [-82.05614173099994, 26.587876695000162], + [-82.054758266999869, 26.611273505000057], + [-82.059681769999912, 26.629461981000148], + [-82.077259894999941, 26.664984442000119], + [-82.082102016999841, 26.680243231000091], + [-82.081288214999915, 26.702704169000086], + [-82.056874152999882, 26.818915106000091], + [-82.054758266999869, 26.841253973000121], + [-82.057036912999934, 26.865790106000148], + [-82.064564581999889, 26.874945380000142], + [-82.078114386999857, 26.881089585000112], + [-82.098500128999945, 26.896551825000031], + [-82.096994594999899, 26.909369208000086], + [-82.077504035999908, 26.922919012000037], + [-82.027577277999853, 26.949693101000051], + [-82.005726691999911, 26.953802802], + [-81.99640865799995, 26.958238023000078], + [-81.990834113999938, 26.965562242000161], + [-81.978382941999939, 26.996161200000088], + [-81.99510657499988, 26.991522528000147], + [-82.016835089999944, 26.972967841000141], + [-82.057443813999839, 26.965318101000108], + [-82.07457434799997, 26.958929755], + [-82.092681443999879, 26.955633856000148], + [-82.115589972999885, 26.961371161000145], + [-82.119943813999868, 26.945461330000015], + [-82.131988084999875, 26.941839911000059], + [-82.144520636999886, 26.940415757], + [-82.150298631999931, 26.930975653000175], + [-82.155181443999908, 26.92763906500015], + [-82.166086391999897, 26.936183986000074], + [-82.184437628999945, 26.955145575000174], + [-82.180734829999892, 26.972357489], + [-82.190988735999923, 26.969387111000074], + [-82.207386847999942, 26.961818752000127], + [-82.222320115999878, 26.965155341000141], + [-82.242014126999919, 26.99551015800013], + [-82.253285285999908, 27.00682200700011], + [-82.273833787999962, 27.016017971000096], + [-82.270904100999928, 27.00771719], + [-82.259144660999965, 26.989243882], + [-82.230213995999861, 26.956854559000178], + [-82.219227667999888, 26.947739976], + [-82.211781378999916, 26.955145575000174], + [-82.201283331999946, 26.94415924700003], + [-82.187326626999976, 26.913153387000094], + [-82.181019660999937, 26.906805731000148], + [-82.175689256999874, 26.89923737200003], + [-82.159901495999918, 26.86225006700009], + [-82.150949673999889, 26.818019924000012], + [-82.150257941999939, 26.803168036000059], + [-82.156564907999893, 26.790025132], + [-82.165598110999895, 26.785793361000074], + [-82.169016079999921, 26.814113674000012], + [-82.177642381999931, 26.824855861000131], + [-82.178578253999916, 26.821275132000054], + [-82.184315558999884, 26.814276434000178], + [-82.191883917999917, 26.807074286000145], + [-82.198109503999888, 26.803127346000068], + [-82.201079881999902, 26.804999091000028], + [-82.210764126999948, 26.815090236000103], + [-82.215484178999958, 26.817368882000054], + [-82.218617316999939, 26.81631094], + [-82.220448370999918, 26.813950914000046], + [-82.223215298999975, 26.811672268000095], + [-82.229156053999901, 26.810532945000048], + [-82.23607337099989, 26.812079169000086], + [-82.2455134759999, 26.82050202000012], + [-82.253407355999883, 26.824855861000131], + [-82.267648891999897, 26.829575914000046], + [-82.274566209999904, 26.830715236000074], + [-82.283802863999938, 26.831000067], + [-82.313832160999908, 26.849351304000052], + [-82.342925584999875, 26.934881903000147], + [-82.370025193999908, 26.961371161000145], + [-82.366932745999918, 26.945624091000084], + [-82.353627081999889, 26.922105210000112], + [-82.34894771999987, 26.906805731000148], + [-82.360991990999878, 26.913275458000058], + [-82.365956183999941, 26.916815497000144], + [-82.370025193999908, 26.920396226000108], + [-82.376616990999878, 26.940334377000013], + [-82.467152472999913, 27.102036851], + [-82.477202928999901, 27.137518622000172], + [-82.500884568999908, 27.179022528000175], + [-82.506581183999884, 27.201605536000145], + [-82.501820441999911, 27.190334377000156], + [-82.498199022999927, 27.185248114000117], + [-82.492990688999839, 27.18048737200003], + [-82.492990688999839, 27.197211005000057], + [-82.496327277999882, 27.211493231000148], + [-82.503163214999887, 27.222357489000146], + [-82.513417120999918, 27.228908596000124], + [-82.513417120999918, 27.215277411000088], + [-82.52086341099988, 27.215277411000088], + [-82.532622850999871, 27.236883856000176], + [-82.549183722999942, 27.256577867000132], + [-82.561838344999899, 27.27627187700007], + [-82.561879035999908, 27.29779694200009], + [-82.55760657499988, 27.294378973000065], + [-82.554066535999908, 27.292425848000121], + [-82.550892706999946, 27.289496161], + [-82.547596808999913, 27.283514716000084], + [-82.54076087099989, 27.283514716000084], + [-82.541900193999908, 27.30853913], + [-82.56273352799991, 27.346828518000123], + [-82.573638475999871, 27.395086981000148], + [-82.587880011999886, 27.408189195000134], + [-82.606760219999899, 27.417059637000179], + [-82.645415818999965, 27.442938544000086], + [-82.682728644999941, 27.448716539000074], + [-82.698394334999904, 27.454820054000052], + [-82.709828253999945, 27.469387111000074], + [-82.729156053999901, 27.514715887000179], + [-82.732533331999917, 27.530585028000118], + [-82.725697394999884, 27.530585028000118], + [-82.710519985999895, 27.497503973000065], + [-82.705230272999927, 27.48956940300009], + [-82.69481360599994, 27.482896226000051], + [-82.668365037999962, 27.471625067000062], + [-82.657460089999887, 27.461655992000161], + [-82.65013587099989, 27.46865469000015], + [-82.645497199999852, 27.476629950000088], + [-82.643666144999969, 27.485744533000101], + [-82.644398566999911, 27.495835679000052], + [-82.650624152999853, 27.495835679000052], + [-82.657704230999911, 27.491522528000147], + [-82.664906378999945, 27.49241771000014], + [-82.671783006999959, 27.496893622000115], + [-82.677886522999955, 27.503241278000033], + [-82.66075598899991, 27.520331122000087], + [-82.63630123599998, 27.513902085000083], + [-82.610503709999932, 27.502101955000015], + [-82.58918209499987, 27.503241278000033], + [-82.599476691999911, 27.511175848], + [-82.610422329999949, 27.517157294000029], + [-82.622547980999855, 27.521307684000149], + [-82.63695227799991, 27.523749091000084], + [-82.621408657999922, 27.531195380000085], + [-82.59203040299991, 27.538478908000073], + [-82.578602667999917, 27.547308661000145], + [-82.572417772999955, 27.559515692000119], + [-82.588205532999893, 27.557196356000148], + [-82.600982225999957, 27.552394924000069], + [-82.604196743999893, 27.55109284100017], + [-82.622670050999915, 27.544175523000078], + [-82.617787238999966, 27.552557684000035], + [-82.615142381999874, 27.555812893000066], + [-82.611317511999857, 27.5548363300001], + [-82.605702277999853, 27.552883205000157], + [-82.603423631999874, 27.552923895000148], + [-82.601185675999915, 27.553900458000115], + [-82.58918209499987, 27.564683335000112], + [-82.591867641999869, 27.568345445000162], + [-82.596018032999893, 27.577704169000114], + [-82.574574347999942, 27.590725002000099], + [-82.56460527299987, 27.608954169000171], + [-82.557443813999924, 27.629624742000189], + [-82.544178839999887, 27.650051174000069], + [-82.516672329999949, 27.669907945000162], + [-82.513417120999918, 27.677679755000085], + [-82.51012122299997, 27.689398505000057], + [-82.50218665299991, 27.694403387000094], + [-82.493072068999908, 27.697088934000178], + [-82.486154751999919, 27.701239325000117], + [-82.470366990999878, 27.72931549700003], + [-82.465646938999868, 27.736029364000061], + [-82.437733527999939, 27.75336334800015], + [-82.430490688999896, 27.763739325000145], + [-82.39818274599989, 27.796047268000066], + [-82.389963344999899, 27.811102606000091], + [-82.392689581999946, 27.834051825000174], + [-82.41246497299997, 27.875718492000047], + [-82.421742316999939, 27.917181708000143], + [-82.433745897999955, 27.929144598000065], + [-82.451161261999914, 27.930731512000094], + [-82.471831834999932, 27.920355536000031], + [-82.480702277999882, 27.908433335000083], + [-82.484852667999917, 27.892564195000048], + [-82.486154751999919, 27.855780341000141], + [-82.479807094999899, 27.841498114000061], + [-82.47809811099998, 27.831284898000106], + [-82.482736782999922, 27.821356512000122], + [-82.518299933999884, 27.822658596000039], + [-82.527088995999947, 27.824774481000034], + [-82.539621548999946, 27.84398021], + [-82.540923631999931, 27.868801174000126], + [-82.534535285999937, 27.917222398000135], + [-82.541127081999889, 27.942775783000016], + [-82.55882727799991, 27.955796617000104], + [-82.584950324999852, 27.960638739000089], + [-82.616444464999887, 27.961330471000124], + [-82.616444464999887, 27.968736070000105], + [-82.596018032999893, 27.975572007000139], + [-82.596018032999893, 27.983058986000103], + [-82.623524542999917, 27.996527411000088], + [-82.636219855999883, 28.005804755000142], + [-82.644398566999911, 28.016546942000147], + [-82.650624152999853, 28.016546942000147], + [-82.650949673999889, 28.013251044000114], + [-82.650624152999853, 28.002915757000025], + [-82.690988735999923, 28.037665106000148], + [-82.688343878999916, 28.028998114000061], + [-82.679798956999917, 28.013251044000114], + [-82.677886522999955, 28.006293036000116], + [-82.679107225999871, 27.998439846000124], + [-82.684152798999889, 27.98729075700011], + [-82.684722459999875, 27.983058986000103], + [-82.690541144999912, 27.975531317000147], + [-82.690337693999965, 27.970851955000043], + [-82.681304490999963, 27.968736070000105], + [-82.644398566999911, 27.968736070000105], + [-82.65684973899991, 27.956244208], + [-82.702748175999886, 27.944728908000073], + [-82.718861456999974, 27.927801825000088], + [-82.680246548999918, 27.914129950000145], + [-82.643218553999873, 27.89476146000014], + [-82.604725714999887, 27.881496486000103], + [-82.561879035999908, 27.886175848000121], + [-82.570790167999945, 27.87982819200009], + [-82.602853969999927, 27.862982489000089], + [-82.60130774599989, 27.851141669000029], + [-82.595814581999946, 27.829982815000122], + [-82.596018032999893, 27.817938544000114], + [-82.600168423999946, 27.807928778000033], + [-82.613636847999913, 27.792710679000052], + [-82.616444464999887, 27.787502346000153], + [-82.617909308999941, 27.780991929000052], + [-82.630116339999915, 27.750311591000141], + [-82.623117641999926, 27.734035549000126], + [-82.626576300999915, 27.715806382000054], + [-82.637766079999921, 27.701117255000142], + [-82.654042120999861, 27.695054429000052], + [-82.67247473899991, 27.695054429000052], + [-82.679269985999923, 27.696844794000029], + [-82.684722459999875, 27.701239325000117], + [-82.687082485999923, 27.709865627000042], + [-82.68602454299986, 27.731634833000086], + [-82.687855597999942, 27.736029364000061], + [-82.70921790299991, 27.738430080000015], + [-82.721506313999868, 27.745103257000082], + [-82.739369269999912, 27.769517320000105], + [-82.757191535999908, 27.787665106000119], + [-82.795969204999921, 27.815334377000013], + [-82.815093553999901, 27.83222077], + [-82.818837042999917, 27.818182684000149], + [-82.810699022999927, 27.804429429000137], + [-82.751332160999937, 27.746568101000136], + [-82.739369269999912, 27.728583075000088], + [-82.724680141999926, 27.694077867000161], + [-82.718006964999859, 27.672064520000063], + [-82.718861456999974, 27.659654039000046], + [-82.731312628999888, 27.662054755], + [-82.742543097999885, 27.679754950000088], + [-82.750559048999918, 27.702093817000119], + [-82.753651495999918, 27.718654690000093], + [-82.767486131999902, 27.751532294000171], + [-82.828521287999905, 27.804999091000113], + [-82.842396613999881, 27.828517971000068], + [-82.844553188999896, 27.841864325000174], + [-82.853911912999905, 27.870347398], + [-82.85606848899991, 27.889960028000061], + [-82.852284308999884, 27.908189195000134], + [-82.8431697259999, 27.925441799000126], + [-82.832020636999886, 27.939398505], + [-82.821888800999915, 27.948309637000037], + [-82.831369594999842, 27.935126044000086], + [-82.838490363999881, 27.918198960000112], + [-82.840728318999965, 27.900702216000141], + [-82.835560675999943, 27.886175848000121], + [-82.802235480999883, 27.966620184000092], + [-82.780344204999949, 28.058172919000114], + [-82.779042120999947, 28.084702867000161], + [-82.776234503999888, 28.096828518000066], + [-82.767323370999861, 28.105902411000059], + [-82.776682094999899, 28.120306708000143], + [-82.782460089999859, 28.135443427000141], + [-82.78774980399993, 28.160549221000124], + [-82.788482225999957, 28.174017645], + [-82.78734290299991, 28.193752346000124], + [-82.782826300999972, 28.207017320000162], + [-82.773508266999926, 28.201564846000124], + [-82.75991777299987, 28.214667059000092], + [-82.753814256999874, 28.227972723000121], + [-82.746205206999946, 28.256170966000084], + [-82.72492428299995, 28.28416575700011], + [-82.716786261999857, 28.298325914000046], + [-82.718861456999974, 28.311428127000013], + [-82.722645636999886, 28.308254299000126], + [-82.725493943999936, 28.306708075000088], + [-82.732533331999917, 28.304592190000093], + [-82.6966853509999, 28.388861395000092], + [-82.684722459999875, 28.400783596000124], + [-82.684722459999875, 28.406927802000027], + [-82.685902472999885, 28.41429271], + [-82.664214647999927, 28.447943427000112], + [-82.66307532499988, 28.501898505000113], + [-82.660796678999901, 28.513739325000088], + [-82.650502081999889, 28.543646552000055], + [-82.647124803999873, 28.629584052000084], + [-82.63695227799991, 28.647162177000112], + [-82.640777147999927, 28.653794664000159], + [-82.643788214999944, 28.662502346000153], + [-82.644357876999919, 28.671332098000036], + [-82.640695766999869, 28.678534247000144], + [-82.632435675999972, 28.688421942000062], + [-82.631947394999884, 28.695298570000162], + [-82.634999152999882, 28.702134507], + [-82.63695227799991, 28.712062893000095], + [-82.63695227799991, 28.746486721000124], + [-82.640207485999952, 28.75495026200015], + [-82.647206183999856, 28.756415106000034], + [-82.654204881999931, 28.756252346000068], + [-82.657460089999887, 28.760158596000153], + [-82.662220831999974, 28.773260809000035], + [-82.682036912999905, 28.795843817], + [-82.684722459999875, 28.804836330000015], + [-82.671009894999941, 28.820217190000065], + [-82.655018683999941, 28.811957098000065], + [-82.630116339999915, 28.784369208000058], + [-82.637521938999896, 28.814154364000061], + [-82.638539191999939, 28.824693101000108], + [-82.631092902999882, 28.872992255000142], + [-82.633615688999896, 28.887640692000062], + [-82.644398566999911, 28.900376695000105], + [-82.651234503999916, 28.902980861000017], + [-82.670277472999913, 28.905422268000123], + [-82.677886522999955, 28.907904364000061], + [-82.685170050999972, 28.913072007000082], + [-82.727162238999938, 28.959173895], + [-82.732289191999968, 28.97646719], + [-82.725697394999884, 28.996649481000034], + [-82.737782355999883, 28.997626044000114], + [-82.749338344999927, 29.002264716000028], + [-82.755116339999887, 29.010158596000011], + [-82.749908006999874, 29.02049388200011], + [-82.747181769999912, 29.030422268], + [-82.747059699999852, 29.060614325000031], + [-82.746205206999946, 29.064886786000145], + [-82.783355272999927, 29.090969143], + [-82.794748501999919, 29.108058986000131], + [-82.773508266999926, 29.119533596000096], + [-82.790516730999883, 29.127427476000079], + [-82.798491990999935, 29.139064846000068], + [-82.800852016999897, 29.154689846000153], + [-82.800852016999897, 29.174750067000033], + [-82.820708787999905, 29.16592031500015], + [-82.828724738999938, 29.161118882000082], + [-82.833363410999965, 29.166652736000074], + [-82.844634568999965, 29.176499742000104], + [-82.849232550999886, 29.182196356000091], + [-82.868885870999947, 29.169623114], + [-82.891957160999908, 29.170355536000116], + [-82.914296027999939, 29.178656317], + [-82.931752081999889, 29.188421942000147], + [-82.94351152299987, 29.185126044000114], + [-82.971831834999932, 29.184515692000147], + [-82.986398891999869, 29.182196356000091], + [-83.004221157999922, 29.176174221000096], + [-83.011138475999928, 29.17503489800005], + [-83.023915167999888, 29.174750067000033], + [-83.040679490999906, 29.180121161000059], + [-83.045277472999913, 29.191839911000059], + [-83.046050584999932, 29.203558661000145], + [-83.051584438999868, 29.208929755], + [-83.065825975999871, 29.211574611000103], + [-83.073719855999855, 29.218247789000046], + [-83.072987433999913, 29.22736237200003], + [-83.06151282499988, 29.236802476000051], + [-83.068959113999938, 29.245754299000069], + [-83.075672980999883, 29.259507554], + [-83.084787563999896, 29.272202867000075], + [-83.0990291009999, 29.277777411000059], + [-83.114409959999932, 29.280503648000135], + [-83.132313605999883, 29.287258205000072], + [-83.148264126999891, 29.296087958000115], + [-83.157704230999911, 29.305121161000145], + [-83.161244269999884, 29.311590887000037], + [-83.163563605999855, 29.321682033000016], + [-83.165150519999884, 29.342678127000156], + [-83.167876756999959, 29.344305731000176], + [-83.185047980999883, 29.373968817], + [-83.215687628999888, 29.410589911000116], + [-83.232818162999934, 29.427069403000118], + [-83.25328528599988, 29.442287502000099], + [-83.278187628999916, 29.43854401200015], + [-83.305734829999949, 29.457953192000062], + [-83.356312628999945, 29.510565497000087], + [-83.366607225999871, 29.509263414000188], + [-83.379505988999881, 29.51508209800015], + [-83.404774542999917, 29.531683661000031], + [-83.399891730999855, 29.540920315000065], + [-83.40099036399991, 29.555121161000088], + [-83.405629035999937, 29.569525458000058], + [-83.411529100999871, 29.57949453300013], + [-83.401112433999884, 29.590562242000161], + [-83.394642706999974, 29.610541083000058], + [-83.392974412999962, 29.633734442], + [-83.397287563999868, 29.654527085000083], + [-83.408924933999884, 29.667303778000033], + [-83.425933397999927, 29.672023830000128], + [-83.44591223899991, 29.674750067], + [-83.466175910999908, 29.681830145000063], + [-83.47484290299991, 29.687567450000031], + [-83.486643032999979, 29.697699286], + [-83.493519660999908, 29.702337958000115], + [-83.527658657999893, 29.716009833000058], + [-83.543812628999945, 29.728094794000143], + [-83.562001105999855, 29.745754299000069], + [-83.576771613999938, 29.764960028000033], + [-83.582875128999916, 29.781805731000034], + [-83.583851691999882, 29.791978257000082], + [-83.589100714999887, 29.815904039000131], + [-83.593373175999886, 29.826157945000077], + [-83.602772589999915, 29.832505601], + [-83.612131313999839, 29.837307033000073], + [-83.616363084999961, 29.842596747000144], + [-83.624908006999902, 29.864325262000037], + [-83.662464972999885, 29.898667710000083], + [-83.671009894999912, 29.911566473], + [-83.680572068999908, 29.92129140800013], + [-83.724476691999939, 29.950140692000062], + [-83.736805792999888, 29.956203518000066], + [-83.754139777999882, 29.959865627000013], + [-83.766468878999916, 29.968817450000145], + [-83.78770911399991, 29.989691473000036], + [-83.811594204999977, 29.98533763200011], + [-83.856434699999909, 30.002386786000088], + [-83.950591600999928, 30.054429429000137], + [-84.02403723899991, 30.106594143000066], + [-84.04356848899991, 30.105169989], + [-84.075754360999952, 30.093329169000029], + [-84.147613084999932, 30.087876695], + [-84.168202277999853, 30.076361395000063], + [-84.17833411399991, 30.072821356000176], + [-84.183664516999869, 30.081610419000143], + [-84.18814042899993, 30.093573309000178], + [-84.195790167999888, 30.099554755], + [-84.19880123599998, 30.10077545800003], + [-84.200428839999887, 30.103338934000121], + [-84.203195766999869, 30.105902411000116], + [-84.209136522999898, 30.107082424000154], + [-84.215565558999884, 30.104966539000046], + [-84.221262173999975, 30.095770575000145], + [-84.22716223899991, 30.093329169000029], + [-84.247670050999972, 30.093329169000029], + [-84.247222459999875, 30.094916083000058], + [-84.250396287999934, 30.097601630000142], + [-84.255360480999883, 30.099676825000145], + [-84.260650193999965, 30.099554755], + [-84.269642706999974, 30.09267812700007], + [-84.277943488999966, 30.081284898000106], + [-84.283680792999917, 30.070746161000059], + [-84.285227016999869, 30.066066799000126], + [-84.316883917999945, 30.067816473000121], + [-84.328521287999962, 30.065985419000143], + [-84.364369269999941, 30.048529364], + [-84.370716925999886, 30.040472723000065], + [-84.370513475999928, 30.02448151200015], + [-84.377064581999917, 30.027289130000113], + [-84.379790818999879, 30.028957424000126], + [-84.383615688999896, 30.031927802000141], + [-84.391021287999905, 30.02448151200015], + [-84.387277798999946, 30.01642487200003], + [-84.386708136999886, 30.014146226000051], + [-84.388254360999923, 30.011908270000063], + [-84.391021287999905, 30.0040550800001], + [-84.387847459999932, 29.99892812700007], + [-84.383615688999896, 29.989691473000036], + [-84.380726691999968, 29.993597723], + [-84.373605923999918, 30.000392971000124], + [-84.370513475999928, 30.0040550800001], + [-84.364125128999916, 29.99502187700007], + [-84.343861456999917, 29.97402578300013], + [-84.346302863999938, 29.969875393], + [-84.360218878999916, 29.971991278000118], + [-84.385121222999942, 29.981390692000119], + [-84.419056769999912, 29.989976304000052], + [-84.438303188999868, 30.00120677300005], + [-84.453521287999934, 30.005194403000033], + [-84.466135219999899, 29.989691473000036], + [-84.449940558999856, 29.988836981000119], + [-84.446441209999961, 29.979315497000115], + [-84.445179816999939, 29.968329169000143], + [-84.435699022999955, 29.963039455000072], + [-84.373931443999936, 29.956203518000066], + [-84.343006964999915, 29.946763414000046], + [-84.336089647999898, 29.925360419000114], + [-84.348988410999908, 29.902044989], + [-84.377349412999962, 29.887355861000103], + [-84.367827928999958, 29.898098049000012], + [-84.363677537999905, 29.901556708000115], + [-84.363677537999905, 29.907782294000171], + [-84.401356574999909, 29.91860586100016], + [-84.442534959999875, 29.922064520000063], + [-84.462066209999932, 29.918646552000055], + [-84.481068488999938, 29.912909247000087], + [-84.497181769999912, 29.911810614000146], + [-84.508371548999918, 29.922064520000063], + [-84.562977667999888, 29.894110419000029], + [-84.604359503999916, 29.86469147300015], + [-84.653187628999916, 29.852769273000106], + [-84.683216925999972, 29.833929755000057], + [-84.733631964999915, 29.791693427000141], + [-84.746164516999897, 29.785834052], + [-84.772938605999911, 29.782782294000086], + [-84.788238084999961, 29.77871328300013], + [-84.8119197259999, 29.762762762000037], + [-84.82787024599989, 29.754380601000079], + [-84.847238735999923, 29.750799872000087], + [-84.860991990999935, 29.744289455000015], + [-84.875355597999913, 29.733221747000172], + [-84.886626756999902, 29.730047919000114], + [-84.89126542899993, 29.74738190300009], + [-84.88695227799991, 29.755601304], + [-84.857167120999918, 29.797919012000094], + [-84.873280402999882, 29.804632880000142], + [-84.886463995999918, 29.799139716000113], + [-84.899403449999937, 29.789780992000161], + [-84.914865688999868, 29.784898179000109], + [-84.928130662999905, 29.778469143], + [-84.945790167999917, 29.752834377000127], + [-84.970936652999882, 29.749579169000086], + [-84.991078253999916, 29.722845770000063], + [-85.00426184799997, 29.716009833000058], + [-85.083648240999906, 29.72345612200003], + [-85.124256964999915, 29.721828518], + [-85.24071204299986, 29.688706773000078], + [-85.262318488999938, 29.689357815000122], + [-85.28563391799986, 29.692816473000121], + [-85.307850714999915, 29.693426825000174], + [-85.346099412999962, 29.67837148600016], + [-85.36583411399991, 29.686346747000115], + [-85.382150844999927, 29.701564846000096], + [-85.391590949999937, 29.716009833000058], + [-85.410633917999917, 29.80011627800009], + [-85.413482225999871, 29.851385809000121], + [-85.398426886999857, 29.873602606000176], + [-85.395741339999887, 29.863714911000059], + [-85.398426886999857, 29.794826565], + [-85.395863410999937, 29.771877346000124], + [-85.388783331999889, 29.749212958000058], + [-85.377797003999916, 29.728176174000126], + [-85.351470506999931, 29.693426825000174], + [-85.343983527999853, 29.689113674000069], + [-85.330148891999869, 29.688706773000078], + [-85.320546027999882, 29.693304755000028], + [-85.308949347999942, 29.702704169000029], + [-85.301869269999912, 29.711859442000033], + [-85.305572068999936, 29.716009833000058], + [-85.306548631999902, 29.727728583000143], + [-85.302154100999928, 29.797919012000094], + [-85.311675584999932, 29.819525458], + [-85.343617316999939, 29.855780341000113], + [-85.350575324999937, 29.87018463700015], + [-85.356516079999949, 29.888739325000174], + [-85.370838995999947, 29.906968492000075], + [-85.388742641999897, 29.923244533000101], + [-85.405181443999879, 29.935126044000143], + [-85.519764777999882, 29.981756903000147], + [-85.54918372299997, 30.0040550800001], + [-85.55426998599998, 30.010199286000059], + [-85.557850714999859, 30.015936591000141], + [-85.560536261999943, 30.022691148], + [-85.562855597999913, 30.031927802000141], + [-85.555490688999896, 30.031927802000141], + [-85.544016079999949, 30.015326239000089], + [-85.523426886999914, 29.996893622000144], + [-85.500152147999898, 29.983832098000065], + [-85.480336066999911, 29.983547268000123], + [-85.607899542999888, 30.07444896], + [-85.621205206999889, 30.079738674000069], + [-85.670887824999909, 30.122951565000065], + [-85.679554816999882, 30.134344794000057], + [-85.671538865999935, 30.136379299000069], + [-85.610666469999842, 30.126898505000057], + [-85.611439581999946, 30.108465887000037], + [-85.546009894999912, 30.091009833000058], + [-85.5287166009999, 30.076361395000063], + [-85.512684699999909, 30.055324611000046], + [-85.477528449999852, 30.032863674000126], + [-85.44237219999988, 30.02016836100016], + [-85.426340298999889, 30.028225002000099], + [-85.418324347999942, 30.035793361000131], + [-85.402251756999874, 30.039699611000131], + [-85.390492316999882, 30.044745184000178], + [-85.395008917999945, 30.05556875200007], + [-85.402007615999935, 30.05878327000012], + [-85.418365037999934, 30.05784739800005], + [-85.426340298999889, 30.058661200000145], + [-85.430531378999916, 30.063055731000034], + [-85.43000240799995, 30.068264065000122], + [-85.430978969999927, 30.070502020000035], + [-85.440012173999918, 30.066066799000126], + [-85.451975063999868, 30.043605861000131], + [-85.462066209999932, 30.034898179000052], + [-85.476918097999885, 30.041571356000119], + [-85.485910610999895, 30.058172919000171], + [-85.483876105999883, 30.092108466000113], + [-85.487782355999883, 30.107082424000154], + [-85.505604620999947, 30.099269924000154], + [-85.512684699999909, 30.108343817000062], + [-85.508941209999875, 30.123602606000034], + [-85.494618292999888, 30.134344794000057], + [-85.494618292999888, 30.14057038], + [-85.513498501999919, 30.139349677000084], + [-85.528879360999952, 30.132391669000086], + [-85.544260219999899, 30.128078518000095], + [-85.562855597999913, 30.134344794000057], + [-85.563303188999896, 30.127590236000103], + [-85.565174933999856, 30.123032945000048], + [-85.567616339999887, 30.119086005000085], + [-85.569691535999908, 30.11391836100016], + [-85.58332271999987, 30.124212958000086], + [-85.60521399599989, 30.136867580000157], + [-85.628285285999965, 30.144598700000145], + [-85.645415818999908, 30.14057038], + [-85.653065558999913, 30.152167059000121], + [-85.662587042999917, 30.158758856000091], + [-85.697377081999974, 30.173651434000035], + [-85.705433722999913, 30.17902252800009], + [-85.712717251999919, 30.185939846000011], + [-85.720529751999919, 30.195786851000108], + [-85.699208136999943, 30.206529039000131], + [-85.657297329999949, 30.2521019550001], + [-85.6419978509999, 30.254136460000112], + [-85.618072068999908, 30.245835679000137], + [-85.579213019999912, 30.28611888200011], + [-85.555490688999896, 30.285142320000048], + [-85.567941860999923, 30.30939362200003], + [-85.576975063999839, 30.321193752000099], + [-85.586781378999945, 30.326117255000057], + [-85.596506313999924, 30.318264065000065], + [-85.620757615999906, 30.282049872000144], + [-85.638579881999874, 30.271470445000105], + [-85.643381313999868, 30.285101630000057], + [-85.65489661399991, 30.283596096000011], + [-85.66942298099994, 30.276068427000141], + [-85.683257615999935, 30.271470445000105], + [-85.694732225999871, 30.266017971000068], + [-85.701730923999946, 30.255031643], + [-85.708648240999963, 30.247015692000062], + [-85.720529751999919, 30.250433661000088], + [-85.720326300999943, 30.267564195000105], + [-85.729400193999965, 30.282416083000086], + [-85.742543097999913, 30.298407294000171], + [-85.754709438999896, 30.319281317000147], + [-85.765980597999885, 30.30158112200003], + [-85.77757727799991, 30.294419664000188], + [-85.809234178999873, 30.291408596000096], + [-85.825550910999908, 30.287176825000174], + [-85.843902147999955, 30.278225002000127], + [-85.854359503999945, 30.264837958000143], + [-85.847157355999911, 30.247300523000021], + [-85.831776495999861, 30.235907294000029], + [-85.820464647999898, 30.236029364], + [-85.807199673999946, 30.241115627000127], + [-85.785715298999918, 30.244208075000117], + [-85.767241990999906, 30.240545966000141], + [-85.755970831999917, 30.231594143000123], + [-85.746693488999938, 30.220282294000143], + [-85.734201626999948, 30.209418036000059], + [-85.749134894999884, 30.190497137000037], + [-85.741363084999904, 30.178371486000131], + [-85.723011847999942, 30.168158270000035], + [-85.706288214999915, 30.154852606000091], + [-85.713734503999888, 30.14057038], + [-85.726389126999948, 30.152167059000121], + [-85.734445766999897, 30.150213934000149], + [-85.728342251999891, 30.143866278000033], + [-85.720529751999919, 30.134344794000057], + [-85.744252081999917, 30.139471747000144], + [-85.864491339999887, 30.216253973000093], + [-85.950062628999888, 30.253078518000066], + [-86.065988735999952, 30.306057033000101], + [-86.192860480999911, 30.33978913], + [-86.364816860999895, 30.380764065], + [-86.48497473899991, 30.39276764500012], + [-86.510894334999904, 30.407619533000101], + [-86.509755011999857, 30.409125067000147], + [-86.509877081999946, 30.411810614000117], + [-86.50877844999988, 30.414943752000013], + [-86.493031378999945, 30.410467841000056], + [-86.412668423999918, 30.408107815000093], + [-86.347157355999883, 30.395005601000108], + [-86.334828253999945, 30.400091864000146], + [-86.327219204999921, 30.412014065000093], + [-86.321888800999943, 30.425604559000035], + [-86.316395636999914, 30.435980536000116], + [-86.311675584999904, 30.436468817000119], + [-86.310414191999911, 30.434963283000073], + [-86.309559699999909, 30.435980536000116], + [-86.305490688999839, 30.424465236000103], + [-86.298166469999842, 30.413234768], + [-86.287180141999869, 30.404689846000068], + [-86.241932745999947, 30.395005601000108], + [-86.235747850999871, 30.398993231000091], + [-86.229237433999884, 30.405707098000121], + [-86.226307745999861, 30.412054755000085], + [-86.231068488999966, 30.414943752000013], + [-86.246490037999905, 30.417303778000147], + [-86.25845292899993, 30.423041083000115], + [-86.260894334999961, 30.429999091000028], + [-86.248158331999917, 30.435980536000116], + [-86.234445766999869, 30.43447500200007], + [-86.220082160999908, 30.426743882000082], + [-86.192860480999911, 30.408107815000093], + [-86.14517167899993, 30.396063544000171], + [-86.13512122299997, 30.391302802000084], + [-86.117421027999853, 30.379339911000145], + [-86.107777472999885, 30.386704820000134], + [-86.106597459999961, 30.40058014500012], + [-86.114369269999969, 30.408107815000093], + [-86.115305141999869, 30.413316148], + [-86.145659959999932, 30.442206122000087], + [-86.151478644999884, 30.457261460000112], + [-86.146311001999976, 30.461737372000172], + [-86.13898678299995, 30.466742255000113], + [-86.138254360999923, 30.483140367000104], + [-86.164418097999885, 30.472072658000073], + [-86.182036912999905, 30.468817450000031], + [-86.194935675999915, 30.478216864000061], + [-86.207142706999889, 30.504868882], + [-86.223255988999966, 30.492254950000117], + [-86.243316209999932, 30.490952867000104], + [-86.286000128999945, 30.497463283000016], + [-86.305287238999881, 30.495184637000037], + [-86.348540818999879, 30.485419012000094], + [-86.367909308999884, 30.483140367000104], + [-86.38219153599988, 30.478420315], + [-86.394683397999898, 30.468817450000031], + [-86.408355272999927, 30.461411851000051], + [-86.426258917999888, 30.463324286], + [-86.439808722999942, 30.476141669000057], + [-86.435210740999906, 30.490912177000112], + [-86.412668423999918, 30.517971096000153], + [-86.436634894999884, 30.518255927], + [-86.446400519999912, 30.516343492000132], + [-86.45360266799986, 30.51113515800013], + [-86.460438605999883, 30.500230210000055], + [-86.469838019999912, 30.501695054000109], + [-86.479807094999899, 30.51113515800013], + [-86.488352016999926, 30.524115302000141], + [-86.487619594999899, 30.51235586100016], + [-86.482533331999946, 30.487494208000115], + [-86.484608527999882, 30.480047919000029], + [-86.494984503999888, 30.473089911000145], + [-86.506906704999921, 30.467759507000082], + [-86.519764777999853, 30.464504299000126], + [-86.532704230999855, 30.463324286], + [-86.541656053999873, 30.46002838700015], + [-86.554066535999908, 30.44550202000012], + [-86.566517706999917, 30.442206122000087], + [-86.589914516999926, 30.44521719], + [-86.591175910999908, 30.440822658000016], + [-86.590728318999936, 30.425482489000061], + [-86.602284308999856, 30.418280341000028], + [-86.680083787999934, 30.422308661], + [-86.761382615999935, 30.414740302000055], + [-86.782541469999842, 30.422308661], + [-86.804595506999931, 30.412543036000059], + [-86.832915818999879, 30.408514716000084], + [-86.888986782999893, 30.408107815000093], + [-87.044504360999923, 30.389593817000062], + [-87.1439509759999, 30.365708726], + [-87.194081183999913, 30.360296942000147], + [-87.190052863999938, 30.37132396], + [-87.183583136999914, 30.375718492000161], + [-87.175445115999906, 30.377427476], + [-87.138091600999957, 30.392645575000145], + [-87.077748175999915, 30.40688711100016], + [-87.023101365999963, 30.407375393000152], + [-87.005238410999908, 30.410223700000088], + [-86.940174933999856, 30.456488348000093], + [-86.926991339999915, 30.451727606000091], + [-86.908355272999927, 30.442775783000158], + [-86.893788214999887, 30.43891022300015], + [-86.892404751999919, 30.449652411000059], + [-86.90453040299991, 30.461615302], + [-86.925200975999928, 30.470160223000121], + [-86.94758053299995, 30.475246486000131], + [-86.964426235999952, 30.476996161000145], + [-86.973378058999884, 30.481350002000127], + [-86.98680579299986, 30.500555731000091], + [-86.991363084999904, 30.504868882], + [-87.001210089999915, 30.505031643000152], + [-87.008697068999908, 30.506577867000189], + [-87.013539191999882, 30.511297919000114], + [-87.015288865999878, 30.521063544000143], + [-87.009348110999952, 30.535386460000112], + [-86.994740363999938, 30.54612864800005], + [-86.960682745999918, 30.559515692000147], + [-86.961496548999918, 30.564154364000061], + [-86.962717251999948, 30.567043361000103], + [-86.96812903599988, 30.57318756700009], + [-86.987212693999965, 30.562567450000031], + [-86.997547980999883, 30.575873114000061], + [-87.008452928999958, 30.596421617000104], + [-87.02961178299995, 30.607326565000093], + [-87.020130988999938, 30.589667059000149], + [-87.02122962099989, 30.579657294000086], + [-87.026437954999892, 30.572455145000148], + [-87.047840949999937, 30.518133856000119], + [-87.060454881999931, 30.494859117000104], + [-87.067534959999875, 30.460598049000126], + [-87.077381964999915, 30.449652411000059], + [-87.092925584999904, 30.448919989000146], + [-87.098378058999941, 30.460516669000143], + [-87.096750454999921, 30.47687409100017], + [-87.090972459999961, 30.490627346000096], + [-87.097727016999897, 30.503892320000105], + [-87.101185675999886, 30.521714585], + [-87.109608527999853, 30.535956122000087], + [-87.131337042999917, 30.538397528000033], + [-87.129505988999938, 30.543198960000112], + [-87.127023891999926, 30.554754950000145], + [-87.125111456999946, 30.559515692000147], + [-87.142241990999906, 30.561835028000118], + [-87.149281378999945, 30.57054271], + [-87.154408331999974, 30.580552476000079], + [-87.166127081999974, 30.586818752000127], + [-87.180572068999936, 30.584662177000112], + [-87.184193488999881, 30.574123440000065], + [-87.180409308999856, 30.542141018000066], + [-87.176136847999942, 30.529933986000103], + [-87.157338019999912, 30.504584052000055], + [-87.153065558999884, 30.486883856000148], + [-87.156809048999918, 30.474514065000037], + [-87.180409308999856, 30.435980536000116], + [-87.186634894999912, 30.435980536000116], + [-87.188791469999927, 30.438421942000062], + [-87.189849412999877, 30.43935781500015], + [-87.194081183999913, 30.442206122000087], + [-87.202381964999887, 30.418931382000082], + [-87.221547003999945, 30.412787177], + [-87.244130011999914, 30.411078192], + [-87.262928839999859, 30.40127187700007], + [-87.26537024599989, 30.39158763200011], + [-87.262359178999901, 30.367010809000092], + [-87.266021287999934, 30.357163804000081], + [-87.274769660999937, 30.353013414000131], + [-87.299916144999912, 30.349676825000117], + [-87.310129360999952, 30.346625067000033], + [-87.306548631999874, 30.328558661], + [-87.328846808999913, 30.31972890800013], + [-87.471058722999913, 30.293687242000161], + [-87.488270636999914, 30.285142320000048], + [-87.496408657999922, 30.287502346000096], + [-87.518462693999936, 30.282171942000119], + [-87.529204881999931, 30.277736721000153], + [-87.529204881999931, 30.285142320000048], + [-87.517648891999926, 30.2892113300001], + [-87.510731574999909, 30.294501044000171], + [-87.504750128999916, 30.30023834800015], + [-87.495716925999886, 30.305650132], + [-87.484242316999939, 30.308661200000088], + [-87.447336391999897, 30.31313711100016], + [-87.464426235999923, 30.320868231000176], + [-87.482045050999943, 30.326117255000057], + [-87.469838019999884, 30.330226955000015], + [-87.445057745999918, 30.329738674000041], + [-87.4330134759999, 30.332342841000028], + [-87.42145748599998, 30.34003327000012], + [-87.413929816999911, 30.350165106000091], + [-87.414540167999888, 30.360256252000156], + [-87.426828579999921, 30.367743231000034], + [-87.426828579999921, 30.374579169000143], + [-87.397368943999936, 30.405340887000122], + [-87.378773566999939, 30.417466539000102], + [-87.354847785999908, 30.422308661], + [-87.345611131999931, 30.427679755000057], + [-87.344838019999912, 30.439886786000116], + [-87.350087042999888, 30.453599351000051], + [-87.358509894999941, 30.463324286], + [-87.367095506999959, 30.465277411000059], + [-87.387074347999942, 30.463283596000011], + [-87.395741339999915, 30.466376044000086], + [-87.402699347999913, 30.471340236000131], + [-87.426828579999921, 30.483140367000104], + [-87.426828579999921, 30.476996161000145], + [-87.419585740999906, 30.46808502800009], + [-87.411936001999976, 30.461086330000043], + [-87.402943488999966, 30.455064195000105], + [-87.392079230999883, 30.449652411000059], + [-87.399525519999941, 30.449652411000059], + [-87.401112433999884, 30.440130927000084], + [-87.443918423999975, 30.404689846000068], + [-87.45441646999987, 30.388373114000146], + [-87.461577928999901, 30.371975002000127], + [-87.473703579999977, 30.359198309000092], + [-87.498850063999868, 30.354071356000091], + [-87.513579881999959, 30.348211981000063], + [-87.522531704999977, 30.335638739000061], + [-87.534087693999908, 30.323553778000147], + [-87.557199673999946, 30.319281317000147], + [-87.572865363999938, 30.321519273000106], + [-87.577259894999912, 30.325425523000106], + [-87.578236456999889, 30.331447658000044], + [-87.583851691999911, 30.33978913], + [-87.601226365999878, 30.353705145000063], + [-87.605580206999974, 30.360296942000147], + [-87.611805792999917, 30.360296942000147], + [-87.609974738999938, 30.343573309000121], + [-87.603260870999918, 30.332831122000115], + [-87.599273240999935, 30.322211005000057], + [-87.605580206999974, 30.305650132], + [-87.594471808999941, 30.304877020000063], + [-87.583607550999943, 30.305975653000118], + [-87.573597785999965, 30.308783270000063], + [-87.564564581999946, 30.31313711100016], + [-87.590158657999922, 30.275376695000105], + [-87.654530402999939, 30.2521019550001], + [-87.786488410999908, 30.236761786000145], + [-87.910308397999955, 30.236761786000145], + [-87.998402472999942, 30.223618882000082], + [-88.030140753999916, 30.223781643000123], + [-88.018177863999881, 30.233832098000036], + [-87.995757615999963, 30.242336330000128], + [-87.957508917999917, 30.250433661000088], + [-87.948841925999915, 30.254706122000087], + [-87.942941860999895, 30.262152411000059], + [-87.935780402999853, 30.264593817], + [-87.91454016799986, 30.247870184000149], + [-87.875070766999897, 30.241522528000033], + [-87.838205532999922, 30.252183335000083], + [-87.792347785999937, 30.262884833], + [-87.764230923999946, 30.27952708500014], + [-87.776234503999973, 30.31313711100016], + [-87.823475714999944, 30.351792710000112], + [-87.830881313999924, 30.363999742000189], + [-87.82835852799991, 30.374945380000057], + [-87.819569464999944, 30.397040106000063], + [-87.821278449999852, 30.404689846000068], + [-87.83039303299995, 30.412543036000059], + [-87.834462042999888, 30.412502346000068], + [-87.837880011999914, 30.407660223000093], + [-87.851144985999923, 30.393500067000062], + [-87.849598761999886, 30.388657945], + [-87.850738084999932, 30.386704820000134], + [-87.865630662999877, 30.387600002000127], + [-87.877105272999927, 30.389593817000062], + [-87.887033657999922, 30.393255927000112], + [-87.895741339999915, 30.398382880000142], + [-87.903472459999932, 30.404689846000068], + [-87.911366339999915, 30.413560289000131], + [-87.916574673999889, 30.423325914000159], + [-87.919341600999957, 30.434068101000079], + [-87.920277472999942, 30.445949611000046], + [-87.92332923099994, 30.458197333], + [-87.930083787999962, 30.468817450000031], + [-87.937123175999943, 30.477280992000161], + [-87.940744594999899, 30.483140367000104], + [-87.938832160999937, 30.499823309000149], + [-87.930653449999937, 30.519110419000086], + [-87.919992641999897, 30.536851304], + [-87.910308397999955, 30.548976955000072], + [-87.90689042899993, 30.563666083000086], + [-87.912464972999942, 30.583726304000137], + [-87.942534959999904, 30.659735419000143], + [-87.953846808999884, 30.672430731000119], + [-87.975493943999965, 30.682440497000087], + [-87.988189256999931, 30.684312242000161], + [-87.998890753999945, 30.684515692000119], + [-88.006255662999934, 30.687811591000141], + [-88.009022589999915, 30.699530341000141], + [-88.008697068999879, 30.71385325700011], + [-88.009877081999917, 30.726629950000174], + [-88.015980597999885, 30.735337632000054], + [-88.030140753999916, 30.737697658000016], + [-88.022816535999908, 30.72357819200009], + [-88.023019985999952, 30.709377346000068], + [-88.030140753999916, 30.697211005000085], + [-88.043812628999945, 30.689195054000137], + [-88.037668423999975, 30.675197658000073], + [-88.043283657999979, 30.665187893000095], + [-88.052561001999919, 30.654364325000088], + [-88.057443813999896, 30.637762762000037], + [-88.058745897999898, 30.617824611000131], + [-88.062896287999934, 30.604478257000139], + [-88.070301886999914, 30.594142971000124], + [-88.081044074999937, 30.583156643000066], + [-88.08458411399991, 30.576157945], + [-88.085560675999886, 30.567084052], + [-88.084787563999868, 30.548976955000072], + [-88.086822068999908, 30.540961005000142], + [-88.09630286399991, 30.529730536000145], + [-88.098378058999913, 30.521063544000143], + [-88.100493943999936, 30.504787502000013], + [-88.109934048999946, 30.470892645000148], + [-88.112049933999856, 30.453070380000085], + [-88.110218878999973, 30.41120026200015], + [-88.120106574999909, 30.338324286000116], + [-88.126332160999937, 30.326117255000057], + [-88.137684699999937, 30.319769598000121], + [-88.142241990999963, 30.32257721600017], + [-88.14391028599988, 30.328802802000141], + [-88.146148240999963, 30.332342841000028], + [-88.166859503999973, 30.332831122000115], + [-88.16730709499987, 30.332342841000028], + [-88.184071417999888, 30.333970445000048], + [-88.194081183999884, 30.337103583000115], + [-88.195668097999913, 30.346625067000033], + [-88.187123175999886, 30.367743231000034], + [-88.21629798099994, 30.377264716000028], + [-88.277943488999966, 30.389064846000096], + [-88.303822394999969, 30.40127187700007], + [-88.30532792899993, 30.393622137000037], + [-88.307118292999917, 30.389593817000062], + [-88.308990037999877, 30.386216539000046], + [-88.311268683999856, 30.380764065], + [-88.317494269999912, 30.380764065], + [-88.335438605999855, 30.403876044000143], + [-88.355336066999939, 30.403753973000093], + [-88.377756313999868, 30.393866278000175], + [-88.403146938999896, 30.387600002000127], + [-88.407338019999912, 30.382391669000029], + [-88.406564907999893, 30.370835679000109], + [-88.40754146999987, 30.359320380000085], + [-88.4173884759999, 30.354071356000091], + [-88.430531378999945, 30.351996161000059], + [-88.436756964999915, 30.346625067000033], + [-88.440907355999855, 30.339585679000137], + [-88.447824673999946, 30.332342841000028], + [-88.470570441999882, 30.323879299000069], + [-88.487700975999928, 30.329982815000065], + [-88.506255662999934, 30.340806382000054], + [-88.533192511999886, 30.346625067000033], + [-88.546131964999915, 30.346747137000179], + [-88.558461066999939, 30.348456122000087], + [-88.567738410999908, 30.353583075000088], + [-88.574289516999897, 30.374660549000126], + [-88.587554490999906, 30.383612372000144], + [-88.591216600999871, 30.395005601000108], + [-88.598703579999921, 30.395005601000108], + [-88.616932745999918, 30.370347398000106], + [-88.662220831999946, 30.354559637000179], + [-88.711659308999884, 30.350287177000055], + [-88.742054816999968, 30.354071356000091], + [-88.845855272999927, 30.422593492000132], + [-88.927642381999902, 30.442206122000087], + [-88.951893683999913, 30.432359117000161], + [-88.966053839999915, 30.428900458000086], + [-88.982289191999968, 30.428534247000144], + [-88.982289191999968, 30.422308661], + [-88.859364386999914, 30.408107815000093], + [-88.876088019999941, 30.395209052000084], + [-88.907134568999965, 30.392808335000112], + [-88.968617316999939, 30.395005601000108], + [-88.982329881999959, 30.390936591000141], + [-89.013417120999861, 30.377427476], + [-89.026966925999915, 30.374579169000143], + [-89.043568488999881, 30.372748114000061], + [-89.114735480999911, 30.352362372000087], + [-89.177886522999898, 30.33722565300009], + [-89.240223761999886, 30.320746161], + [-89.253488735999895, 30.319281317000147], + [-89.270985480999855, 30.322821356000119], + [-89.273345506999902, 30.330796617000161], + [-89.264881964999859, 30.339992580000128], + [-89.249745245999861, 30.346625067000033], + [-89.267974412999934, 30.355210679000109], + [-89.300160285999908, 30.376532294000086], + [-89.321766730999911, 30.380764065], + [-89.331939256999931, 30.377142645000148], + [-89.344960089999944, 30.368638414000102], + [-89.35480709499987, 30.358587958000143], + [-89.355580206999974, 30.350327867000047], + [-89.347279425999886, 30.347479559000121], + [-89.32359778599988, 30.346421617000075], + [-89.318674282999922, 30.343207098], + [-89.318348761999886, 30.323960679000052], + [-89.320546027999882, 30.312079169000114], + [-89.330230272999927, 30.302883205000128], + [-89.421050584999932, 30.257798570000077], + [-89.41380774599989, 30.244696356000091], + [-89.418080206999917, 30.234116929000052], + [-89.434722459999961, 30.216253973000093], + [-89.43781490799995, 30.205755927000112], + [-89.438588019999969, 30.197333075000145], + [-89.442534959999961, 30.189764716000113], + [-89.455189581999917, 30.181545315000037], + [-89.462025519999941, 30.188950914000102], + [-89.456776495999861, 30.194647528000175], + [-89.459543423999918, 30.197170315], + [-89.468251105999911, 30.2032738300001], + [-89.476877407999893, 30.193345445], + [-89.491078253999916, 30.188666083000058], + [-89.505930141999897, 30.189439195], + [-89.516672329999892, 30.195786851000108], + [-89.523508266999926, 30.195786851000108], + [-89.525990363999938, 30.192775783000016], + [-89.536366339999944, 30.180324611000103], + [-89.565500454999892, 30.163478908000101], + [-89.595936652999853, 30.155910549000154], + [-89.612904425999915, 30.168524481000034], + [-89.603179490999878, 30.168646552], + [-89.596913214999915, 30.170396226], + [-89.585560675999943, 30.175279039000159], + [-89.596018032999922, 30.186997789000046], + [-89.609771287999934, 30.185736395000148], + [-89.625843878999916, 30.179185289000159], + [-89.643299933999884, 30.175279039000159], + [-89.676380988999938, 30.180609442000119], + [-89.692250128999945, 30.181301174000069], + [-89.708404100999928, 30.175279039000159], + [-89.71544348899991, 30.179429429000109], + [-89.736073370999918, 30.184963283000044], + [-89.743234829999949, 30.188950914000102], + [-89.748158331999917, 30.197211005], + [-89.747547980999883, 30.203680731000091], + [-89.744862433999884, 30.210516669000114], + [-89.743234829999949, 30.220038153000118], + [-89.751454230999855, 30.237372137000094], + [-89.770334438999896, 30.239691473000065], + [-89.804676886999943, 30.229925848000121], + [-89.826242641999869, 30.231594143000123], + [-89.862049933999884, 30.25800202000012], + [-89.883778449999937, 30.26471588700015], + [-89.89476477799991, 30.263576565000122], + [-89.91356360599994, 30.258978583], + [-89.924427863999938, 30.257798570000077], + [-89.969146287999877, 30.26471588700015], + [-89.978505011999914, 30.275376695000105], + [-89.999826626999976, 30.313055731000176], + [-90.003895636999943, 30.322699286000145], + [-90.012684699999909, 30.326239325000031], + [-90.058501756999902, 30.360296942000147], + [-90.096018032999922, 30.373724677000141], + [-90.143462693999936, 30.385077216000113], + [-90.189442511999914, 30.390814520000092], + [-90.22240149599989, 30.387600002000127], + [-90.222405442450878, 30.387597628561437], + [-90.245472785999937, 30.373724677000141], + [-90.268422003999916, 30.352687893], + [-90.305572068999936, 30.305650132], + [-90.331166144999912, 30.276027736000131], + [-90.405018683999913, 30.220160223000093], + [-90.428456183999884, 30.188950914000102], + [-90.432972785999937, 30.143296617000161], + [-90.414051886999914, 30.106594143000066], + [-90.379994269999912, 30.080389716000028], + [-90.339100714999859, 30.066066799000126], + [-90.266224738999938, 30.060126044000114], + [-90.231027798999975, 30.039740302000141], + [-90.168365037999877, 30.02448151200015], + [-90.14517167899993, 30.023830471000011], + [-90.10448157499988, 30.035060940000037], + [-90.036976691999882, 30.040269273000106], + [-90.016265428999873, 30.044582424000012], + [-89.99644934799997, 30.052435614], + [-89.927316860999952, 30.095526434000121], + [-89.899525519999884, 30.122748114000117], + [-89.880441860999923, 30.154852606000091], + [-89.857289191999968, 30.151190497000059], + [-89.849273240999935, 30.145331122000087], + [-89.846262173999918, 30.130601304000109], + [-89.840728318999908, 30.120266018], + [-89.82762610599994, 30.111070054000109], + [-89.811675584999932, 30.103908596000096], + [-89.797840949999937, 30.099554755], + [-89.788807745999918, 30.09886302300005], + [-89.786244269999912, 30.103094794000171], + [-89.78351803299995, 30.111558335000112], + [-89.761586066999911, 30.136542059000035], + [-89.752837693999936, 30.149115302000112], + [-89.746937628999916, 30.161851304000081], + [-89.743234829999949, 30.175279039000159], + [-89.736398891999841, 30.175279039000159], + [-89.728911912999877, 30.161688544000114], + [-89.73924719999988, 30.14931875200007], + [-89.750355597999913, 30.123358466000084], + [-89.756906704999892, 30.11391836100016], + [-89.754139777999939, 30.111395575000145], + [-89.750314907999922, 30.108872789000131], + [-89.746408657999922, 30.105292059000149], + [-89.743234829999949, 30.099554755], + [-89.729562954999921, 30.123480536000059], + [-89.728911912999877, 30.126898505000057], + [-89.722808397999898, 30.127508856000119], + [-89.707671678999901, 30.125433661], + [-89.702259894999941, 30.126898505000057], + [-89.688465949999937, 30.135239976000136], + [-89.683420376999919, 30.140041408000016], + [-89.68114173099994, 30.148016669000171], + [-89.683583136999886, 30.154242255000142], + [-89.689116990999878, 30.155585028000033], + [-89.694162563999924, 30.153143622000087], + [-89.694813605999883, 30.148016669000171], + [-89.698557094999899, 30.147894598], + [-89.706450975999871, 30.150213934000149], + [-89.711984829999892, 30.154771226000108], + [-89.708404100999928, 30.161688544000114], + [-89.68114173099994, 30.168524481000034], + [-89.667388475999928, 30.164007880000085], + [-89.650013800999943, 30.146429755000142], + [-89.639556443999965, 30.14057038], + [-89.652943488999966, 30.123480536000059], + [-89.666493292999917, 30.113592841000141], + [-89.676909959999904, 30.101223049000012], + [-89.68114173099994, 30.076361395000063], + [-89.710519985999923, 30.067531643], + [-89.718983527999882, 30.062323309000092], + [-89.72199459499987, 30.051825262000037], + [-89.718617316999968, 30.04222239800005], + [-89.717925584999932, 30.033270575000031], + [-89.728911912999877, 30.02448151200015], + [-89.747670050999943, 30.041001695000048], + [-89.773589647999927, 30.050482489000146], + [-89.800445115999935, 30.051214911000088], + [-89.822092251999919, 30.041571356000119], + [-89.835113084999904, 30.026312567000147], + [-89.840402798999975, 30.011419989000089], + [-89.838937954999921, 29.995347398000106], + [-89.831939256999931, 29.976711330000015], + [-89.821929490999935, 29.957342841000113], + [-89.811146613999938, 29.94717031500015], + [-89.794341600999928, 29.943264065000065], + [-89.766835089999915, 29.942572333000115], + [-89.751210089999915, 29.946844794000029], + [-89.716623501999919, 29.960516669000171], + [-89.708404100999928, 29.956203518000066], + [-89.710926886999943, 29.949937242000104], + [-89.72524980399993, 29.933417059000035], + [-89.728911912999877, 29.922064520000063], + [-89.705311652999939, 29.897894598000065], + [-89.68651282499988, 29.882554429000109], + [-89.664540167999888, 29.875474351000051], + [-89.64159094999988, 29.875148830000043], + [-89.619699673999946, 29.879868882000139], + [-89.602406378999945, 29.890773830000015], + [-89.586903449999937, 29.909125067000062], + [-89.575591600999957, 29.931057033000073], + [-89.571278449999852, 29.952460028000033], + [-89.571197068999879, 29.98847077], + [-89.565581834999875, 30.000921942000119], + [-89.551421678999958, 30.011419989000089], + [-89.54161536399991, 30.014878648], + [-89.521148240999963, 30.019354559000149], + [-89.510487433999913, 30.02448151200015], + [-89.503081834999932, 30.030747789000102], + [-89.498890753999916, 30.037095445000048], + [-89.495432094999899, 30.044134833000115], + [-89.48997962099989, 30.052435614], + [-89.488270636999886, 30.057806708000058], + [-89.489328579999921, 30.070542710000026], + [-89.486236131999931, 30.076361395000063], + [-89.479074673999889, 30.079982815000122], + [-89.473622199999852, 30.07831452], + [-89.468251105999911, 30.07290273600016], + [-89.457183397999955, 30.071112372000172], + [-89.434722459999961, 30.062567450000145], + [-89.42731686099998, 30.058661200000145], + [-89.42731686099998, 30.052435614], + [-89.434722459999961, 30.052435614], + [-89.434722459999961, 30.044989325000117], + [-89.431223110999952, 30.042792059000035], + [-89.430083787999934, 30.042710679000052], + [-89.429351365999906, 30.042059637000094], + [-89.42731686099998, 30.03807200700011], + [-89.421050584999932, 30.03807200700011], + [-89.415028449999909, 30.043646552000112], + [-89.393706834999961, 30.05654531500015], + [-89.386341925999943, 30.058661200000145], + [-89.372547980999855, 30.05467357], + [-89.366037563999868, 30.048651434000149], + [-89.36815344999988, 30.040838934000178], + [-89.380116339999887, 30.031927802000141], + [-89.393706834999961, 30.029120184000092], + [-89.421945766999926, 30.031236070000105], + [-89.434722459999961, 30.02448151200015], + [-89.440581834999904, 30.014227606000034], + [-89.438832160999908, 30.006089585000112], + [-89.4349666009999, 29.998439846000096], + [-89.434722459999961, 29.989691473000036], + [-89.442209438999924, 29.983058986000131], + [-89.451893683999884, 29.979641018000123], + [-89.454701300999943, 29.976385809000092], + [-89.44155839799987, 29.969875393], + [-89.428944464999887, 29.968695380000085], + [-89.400746222999913, 29.973049221000068], + [-89.386341925999943, 29.969875393], + [-89.370228644999884, 29.950751044000029], + [-89.381743943999908, 29.935532945000048], + [-89.400786912999905, 29.932114976000136], + [-89.407460089999887, 29.948797919000171], + [-89.434722459999961, 29.935126044000143], + [-89.434722459999961, 29.928900458000086], + [-89.420480923999946, 29.912014065000093], + [-89.413644985999923, 29.907782294000171], + [-89.415028449999909, 29.907131252000042], + [-89.413319464999915, 29.90615469000015], + [-89.413644985999923, 29.901556708000115], + [-89.407460089999887, 29.901556708000115], + [-89.401682094999899, 29.909125067000062], + [-89.390451626999919, 29.916449286000059], + [-89.378244594999927, 29.920558986000017], + [-89.369536912999934, 29.918646552000055], + [-89.366688605999911, 29.908026434000121], + [-89.374256964999859, 29.899074611000074], + [-89.393788214999944, 29.887355861000103], + [-89.393788214999944, 29.879868882000139], + [-89.378773566999911, 29.88377513200011], + [-89.372873501999976, 29.887396552], + [-89.366444464999859, 29.894110419000029], + [-89.359852667999888, 29.890082098000065], + [-89.331695115999906, 29.879868882000139], + [-89.352447068999908, 29.869289455000072], + [-89.358998175999886, 29.866848049000126], + [-89.353016730999883, 29.863714911000059], + [-89.350331183999884, 29.86078522300015], + [-89.34862219999988, 29.857407945000134], + [-89.345326300999943, 29.853216864], + [-89.357899542999945, 29.851874091000113], + [-89.367543097999913, 29.846828518000066], + [-89.374745245999947, 29.839992580000157], + [-89.380116339999887, 29.83331940300009], + [-89.372181769999941, 29.821844794000143], + [-89.366200324999909, 29.809719143000066], + [-89.358509894999912, 29.798976955000157], + [-89.345326300999943, 29.791693427000141], + [-89.35562089799987, 29.792425848000065], + [-89.378895636999886, 29.79783763200011], + [-89.386341925999943, 29.797919012000094], + [-89.394642706999946, 29.790838934000035], + [-89.404286261999914, 29.771307684000149], + [-89.413644985999923, 29.764390367000047], + [-89.411732550999972, 29.771144924000097], + [-89.409738735999952, 29.785101630000057], + [-89.407460089999887, 29.791693427000141], + [-89.420033331999946, 29.791978257000082], + [-89.427235480999883, 29.798041083000058], + [-89.438140428999873, 29.815904039000131], + [-89.446400519999941, 29.823187567000147], + [-89.456776495999861, 29.829250393000152], + [-89.469064907999922, 29.832912502000099], + [-89.482533331999889, 29.83331940300009], + [-89.478098110999923, 29.815659898], + [-89.487172003999916, 29.80292389500012], + [-89.502430792999888, 29.791693427000141], + [-89.516672329999892, 29.77871328300013], + [-89.527251756999931, 29.760728257000025], + [-89.532541469999927, 29.755845445000134], + [-89.544585740999935, 29.750799872000087], + [-89.554310675999886, 29.749823309000035], + [-89.576283331999889, 29.752590236000074], + [-89.585560675999943, 29.750799872000087], + [-89.601470506999874, 29.734849351], + [-89.603830532999922, 29.716253973], + [-89.596994594999899, 29.69940827], + [-89.585560675999943, 29.688706773000078], + [-89.565663214999859, 29.685939846000011], + [-89.542551235999895, 29.688218492000161], + [-89.52212480399993, 29.687323309000092], + [-89.510487433999913, 29.675034898000135], + [-89.517241990999963, 29.676336981000034], + [-89.52212480399993, 29.676011460000112], + [-89.526275193999965, 29.675197658000101], + [-89.530913865999906, 29.675034898000135], + [-89.516021287999934, 29.667303778000033], + [-89.482533331999889, 29.64085521000014], + [-89.482533331999889, 29.634100653000118], + [-89.499908006999874, 29.635484117000189], + [-89.513824022999955, 29.643988348000121], + [-89.525746222999885, 29.654364325000117], + [-89.537180141999869, 29.661363023000021], + [-89.568186001999976, 29.66722239800005], + [-89.595814581999974, 29.66885000200007], + [-89.623768683999913, 29.67462799700003], + [-89.67251542899993, 29.701483466000113], + [-89.702259894999941, 29.709784247000087], + [-89.69351152299987, 29.698797919000029], + [-89.667225714999859, 29.685003973000121], + [-89.653879360999952, 29.675034898000135], + [-89.65794837099989, 29.673732815000122], + [-89.667469855999911, 29.66885000200007], + [-89.647043423999918, 29.661363023000021], + [-89.646595831999917, 29.656561591000113], + [-89.647043423999918, 29.654527085000083], + [-89.645415818999908, 29.650091864], + [-89.619699673999946, 29.627264716000084], + [-89.639068162999962, 29.620266018], + [-89.722238735999923, 29.639878648000078], + [-89.756906704999892, 29.634100653000118], + [-89.73265540299991, 29.628119208], + [-89.722767706999889, 29.623195705000128], + [-89.715931769999884, 29.613592841000141], + [-89.725738084999904, 29.613959052000084], + [-89.728911912999877, 29.613592841000141], + [-89.723255988999881, 29.601629950000031], + [-89.694813605999883, 29.572007554000081], + [-89.68960527299987, 29.560288804], + [-89.683745897999927, 29.537990627000156], + [-89.67804928299995, 29.527899481000176], + [-89.668365037999905, 29.521795966000084], + [-89.640980597999913, 29.513657945000162], + [-89.617543097999942, 29.500555731000119], + [-89.592437303999958, 29.50287506700009], + [-89.578114386999886, 29.497503973000121], + [-89.582630988999938, 29.494452216000028], + [-89.583241339999887, 29.493353583000086], + [-89.585560675999943, 29.490057684000035], + [-89.569162563999868, 29.484605210000026], + [-89.541574673999918, 29.4708519550001], + [-89.523508266999926, 29.46963125200007], + [-89.523508266999926, 29.46279531500015], + [-89.53368079299986, 29.449123440000037], + [-89.537424282999893, 29.435003973000093], + [-89.532460089999944, 29.427801825000145], + [-89.516672329999892, 29.434800523000135], + [-89.518950975999871, 29.418158270000092], + [-89.528797980999883, 29.411566473], + [-89.539621548999975, 29.409979559000178], + [-89.544585740999935, 29.408148505], + [-89.539865688999924, 29.39777252800009], + [-89.529164191999911, 29.39321523600016], + [-89.515777147999898, 29.392523505000113], + [-89.456125454999921, 29.403509833000086], + [-89.433949347999942, 29.403469143000095], + [-89.413644985999923, 29.39386627800009], + [-89.410633917999945, 29.390773830000015], + [-89.400990363999966, 29.392482815000122], + [-89.39273027299987, 29.391791083000086], + [-89.386341925999943, 29.387640692000147], + [-89.380116339999887, 29.387640692000147], + [-89.372141079999949, 29.392645575000088], + [-89.361643032999979, 29.394354559000092], + [-89.350168423999918, 29.392645575000088], + [-89.336781378999916, 29.390570380000057], + [-89.337025519999969, 29.385239976000022], + [-89.343576626999948, 29.381293036000116], + [-89.351796027999853, 29.380194403000147], + [-89.362700975999928, 29.380194403000147], + [-89.373524542999917, 29.377020575000088], + [-89.379790818999965, 29.370021877000042], + [-89.380930141999897, 29.362941799000154], + [-89.376372850999957, 29.359767971000096], + [-89.367746548999946, 29.357611395], + [-89.353179490999935, 29.348211981000148], + [-89.34227454299986, 29.346096096000153], + [-89.334095831999946, 29.347154039000102], + [-89.319203253999888, 29.35179271000014], + [-89.298247850999928, 29.35447825700011], + [-89.290028449999852, 29.357123114], + [-89.281361456999946, 29.357611395], + [-89.270253058999913, 29.352932033000073], + [-89.264068162999962, 29.345282294000143], + [-89.26105709499987, 29.326320705000128], + [-89.257191535999937, 29.318793036000088], + [-89.244455532999893, 29.315985419000029], + [-89.227121548999918, 29.322211005], + [-89.211048956999917, 29.335272528000147], + [-89.201975063999924, 29.352932033000073], + [-89.197092251999948, 29.353461005000057], + [-89.195668097999885, 29.352036851], + [-89.19554602799991, 29.349351304000109], + [-89.194488084999961, 29.346096096000153], + [-89.189930792999917, 29.346380927], + [-89.18773352799991, 29.340399481000176], + [-89.187367316999911, 29.330389716000084], + [-89.188343878999973, 29.318793036000088], + [-89.17804928299995, 29.322984117000104], + [-89.174061652999882, 29.325628973], + [-89.168771938999896, 29.316229559000149], + [-89.162180141999841, 29.310126044000086], + [-89.156361456999974, 29.30296458500014], + [-89.153553839999915, 29.290838934000064], + [-89.143625454999921, 29.29584381700009], + [-89.139881964999887, 29.298285223000121], + [-89.13044186099998, 29.287502346000039], + [-89.126942511999886, 29.276516018000066], + [-89.123158331999946, 29.267889716000141], + [-89.112619594999899, 29.264146226000108], + [-89.118560350999928, 29.255438544000057], + [-89.12653561099998, 29.249701239000061], + [-89.136138475999957, 29.245917059000035], + [-89.147368943999965, 29.243068752000013], + [-89.147368943999965, 29.236802476000051], + [-89.105783657999979, 29.226263739], + [-89.100249803999958, 29.214585679], + [-89.087147589999887, 29.206935940000065], + [-89.071359829999949, 29.202826239000117], + [-89.057972785999937, 29.20209381700009], + [-89.060943162999962, 29.20612213700015], + [-89.06480872299997, 29.216376044000171], + [-89.046986456999889, 29.218451239], + [-89.032460089999859, 29.216620184000121], + [-89.020415818999936, 29.209458726], + [-89.010161912999905, 29.195868231000034], + [-89.03062903599988, 29.195868231000034], + [-89.03062903599988, 29.188421942000147], + [-89.021473761999886, 29.186835028000118], + [-89.017404751999948, 29.184515692000147], + [-89.010161912999905, 29.174750067000033], + [-89.031890428999901, 29.180080471000068], + [-89.038929816999939, 29.177923895000092], + [-89.043690558999856, 29.16791413], + [-89.051136847999942, 29.16791413], + [-89.051014777999853, 29.174709377000042], + [-89.052072719999927, 29.182562567], + [-89.051136847999942, 29.188421942000147], + [-89.065256313999868, 29.18496328300013], + [-89.083119269999941, 29.173651434000149], + [-89.096994594999927, 29.159613348000036], + [-89.09894771999987, 29.147406317000147], + [-89.0892634759999, 29.148627020000063], + [-89.02318274599989, 29.147406317000147], + [-89.051584438999924, 29.097357489000117], + [-89.06480872299997, 29.086004950000145], + [-89.065541144999912, 29.101141669000143], + [-89.071522589999915, 29.112494208000115], + [-89.082630988999938, 29.119045315], + [-89.09894771999987, 29.119533596000096], + [-89.092762824999909, 29.110907294000086], + [-89.087513800999915, 29.101060289000159], + [-89.084380662999934, 29.090155341000084], + [-89.084624803999873, 29.078558661000088], + [-89.096302863999881, 29.086859442000147], + [-89.101307745999918, 29.091864325000088], + [-89.105783657999979, 29.099676825000088], + [-89.111073370999861, 29.08612702000012], + [-89.123605923999946, 29.072088934000149], + [-89.150502081999946, 29.048163153000118], + [-89.153431769999941, 29.029933986000046], + [-89.133656378999945, 28.996242580000043], + [-89.147368943999965, 28.990423895000063], + [-89.157785610999952, 28.99746328300013], + [-89.18814042899993, 29.030462958], + [-89.194488084999961, 29.041327216000084], + [-89.199859178999901, 29.053127346000153], + [-89.224761522999955, 29.091457424000097], + [-89.232411261999886, 29.099676825000088], + [-89.242787238999881, 29.106105861000103], + [-89.247670050999943, 29.105902411000145], + [-89.249745245999861, 29.095933335000055], + [-89.248036261999857, 29.086371161000059], + [-89.245228644999912, 29.079169012000037], + [-89.24461829299986, 29.072699286000116], + [-89.249745245999861, 29.064886786000145], + [-89.265533006999902, 29.059393622000115], + [-89.288685675999943, 29.056463934000178], + [-89.309559699999937, 29.05019765800013], + [-89.318674282999922, 29.034409898], + [-89.321034308999884, 29.021551825000145], + [-89.327056443999879, 29.008449611000103], + [-89.374012824999909, 28.947455145000035], + [-89.391672329999921, 28.933986721000124], + [-89.413644985999923, 28.928371486000131], + [-89.410145636999943, 28.960109768000095], + [-89.407460089999887, 28.969305731000148], + [-89.4017634759999, 28.974920966000141], + [-89.383900519999912, 28.987616278000118], + [-89.377186652999882, 28.997626044000114], + [-89.355580206999974, 29.02049388200011], + [-89.350575324999937, 29.03070709800015], + [-89.350697394999912, 29.042181708], + [-89.352365688999924, 29.052150783000073], + [-89.352162238999966, 29.058050848000121], + [-89.343332485999923, 29.064357815000065], + [-89.32091223899991, 29.068426825000117], + [-89.311838344999899, 29.072333075000117], + [-89.29442298099994, 29.106512762000094], + [-89.287220831999889, 29.117580471000124], + [-89.278065558999913, 29.140448309000149], + [-89.276193813999868, 29.16010163], + [-89.290679490999906, 29.161118882000082], + [-89.292713995999918, 29.153957424000126], + [-89.293080206999946, 29.141180731000176], + [-89.295765753999916, 29.129828192], + [-89.304351365999935, 29.126939195000162], + [-89.310943162999905, 29.133978583000143], + [-89.312896287999962, 29.146673895], + [-89.311838344999899, 29.171332098], + [-89.314930792999888, 29.181341864000089], + [-89.321766730999911, 29.181952216000141], + [-89.328602667999917, 29.175482489000146], + [-89.331695115999906, 29.164496161000088], + [-89.330148891999869, 29.152777411], + [-89.324452277999882, 29.131537177000112], + [-89.324859178999901, 29.119533596000096], + [-89.337513800999943, 29.103461005000113], + [-89.360991990999935, 29.091701565000122], + [-89.383656378999973, 29.087836005000113], + [-89.393788214999944, 29.095933335000055], + [-89.404896613999966, 29.122870184000121], + [-89.403960740999878, 29.130357164000188], + [-89.398508266999841, 29.141913153000118], + [-89.406239386999857, 29.148138739000061], + [-89.42731686099998, 29.154933986000103], + [-89.482533331999889, 29.243068752000013], + [-89.473866339999915, 29.243353583000143], + [-89.455189581999917, 29.250474351], + [-89.474476691999968, 29.259182033000073], + [-89.49510657499988, 29.259507554], + [-89.506092902999939, 29.250148830000157], + [-89.496205206999917, 29.22939687700007], + [-89.555002407999922, 29.248439846000153], + [-89.581857876999919, 29.250474351], + [-89.608225063999896, 29.256048895], + [-89.617014126999976, 29.269354559000121], + [-89.622670050999972, 29.285142320000162], + [-89.635607016999927, 29.29323713100014], + [-89.662004150999934, 29.300930209000043], + [-89.669017202999839, 29.294730067000117], + [-89.686687299999846, 29.296306510000093], + [-89.732349125999889, 29.306103064000112], + [-89.794997990999974, 29.312683680000063], + [-89.818145920999882, 29.316159960000093], + [-89.793531412999954, 29.328088121000079], + [-89.774627241999895, 29.332415119000174], + [-89.757705104999872, 29.343163106000034], + [-89.74978699299993, 29.355809356000023], + [-89.743805579999929, 29.369842817000134], + [-89.745219227999911, 29.384948827000173], + [-89.75009984499988, 29.392195228000119], + [-89.76305091099988, 29.39386627800009], + [-89.768299933999856, 29.389105536], + [-89.771717902999882, 29.387152411000059], + [-89.774403449999852, 29.384995835000055], + [-89.777333136999886, 29.380194403000147], + [-89.781809048999946, 29.391669012000122], + [-89.778879360999923, 29.398871161000145], + [-89.773426886999886, 29.404689846000011], + [-89.770578579999921, 29.411566473], + [-89.775502081999889, 29.42080312700007], + [-89.786976691999939, 29.418524481000091], + [-89.808420376999976, 29.408148505], + [-89.814523891999869, 29.410834052000084], + [-89.81981360599994, 29.417059637000037], + [-89.823801235999923, 29.423976955000128], + [-89.825795050999943, 29.428615627000156], + [-89.827381964999887, 29.43048737200003], + [-89.829823370999918, 29.432440497000172], + [-89.831857876999948, 29.435858466000084], + [-89.831939256999931, 29.442287502000099], + [-89.8294978509999, 29.447333075000031], + [-89.824859178999873, 29.452785549000069], + [-89.820301886999914, 29.456366278000033], + [-89.818267381999902, 29.455959377000127], + [-89.813872850999928, 29.468166408000016], + [-89.816314256999959, 29.474351304000081], + [-89.839914516999897, 29.479437567], + [-89.847401495999861, 29.482407945000105], + [-89.851714647999955, 29.480047919000143], + [-89.853098110999923, 29.466213283000158], + [-89.860259568999879, 29.443752346000153], + [-89.876942511999914, 29.448919989000061], + [-89.907704230999911, 29.477036851000051], + [-89.941639777999853, 29.464422919000171], + [-89.971180792999917, 29.473374742000104], + [-90.080393032999922, 29.537258205000015], + [-90.099476691999911, 29.544663804000109], + [-90.116200324999852, 29.547023830000157], + [-90.129709438999924, 29.544663804000109], + [-90.133168097999913, 29.539129950000088], + [-90.119984503999973, 29.531683661000031], + [-90.127430792999945, 29.52423737200003], + [-90.143625454999892, 29.537420966000084], + [-90.166859503999916, 29.567694403000175], + [-90.182036912999905, 29.57949453300013], + [-90.18785559799997, 29.569281317], + [-90.202992316999968, 29.552313544000029], + [-90.209339972999885, 29.53847890800013], + [-90.18879146999987, 29.537827867000189], + [-90.182036912999905, 29.53847890800013], + [-90.182036912999905, 29.531683661000031], + [-90.197824673999946, 29.525783596000068], + [-90.205922003999888, 29.524115302000055], + [-90.215565558999856, 29.52423737200003], + [-90.21027584499987, 29.515122789000046], + [-90.206044074999852, 29.511419989], + [-90.201568162999905, 29.512437242000161], + [-90.195708787999934, 29.518011786000088], + [-90.186105923999975, 29.5118675800001], + [-90.143462693999936, 29.476792710000112], + [-90.133452928999958, 29.471625067], + [-90.12368730399993, 29.46963125200007], + [-90.094960089999859, 29.467271226000108], + [-90.069813605999883, 29.460028387000094], + [-90.046620245999947, 29.447251695000048], + [-90.02375240799995, 29.428615627000156], + [-90.039173956999974, 29.422756252000013], + [-90.047352667999888, 29.416815497000087], + [-90.050526495999947, 29.407294012000094], + [-90.051096157999922, 29.390773830000015], + [-90.045155402999882, 29.38556549700003], + [-90.040598110999952, 29.380438544000114], + [-90.037424282999979, 29.373968817], + [-90.036284959999932, 29.365871486000074], + [-90.037424282999979, 29.33926015800013], + [-90.040516730999883, 29.346869208000086], + [-90.044545050999943, 29.353094794000057], + [-90.050282355999911, 29.357489325000031], + [-90.058501756999902, 29.359767971000096], + [-90.05638587099989, 29.341131903000118], + [-90.04751542899993, 29.32501862200003], + [-90.034006313999868, 29.312689520000092], + [-90.017567511999886, 29.305121161000145], + [-90.017567511999886, 29.298285223000121], + [-90.037424282999979, 29.290838934000064], + [-90.050892706999946, 29.30756256700009], + [-90.067453579999921, 29.310126044000086], + [-90.075795050999915, 29.301459052], + [-90.06476803299995, 29.284613348000093], + [-90.095041469999842, 29.28384023600016], + [-90.099964972999913, 29.253851630000028], + [-90.083851691999939, 29.225409247000087], + [-90.051096157999922, 29.22939687700007], + [-90.057443813999868, 29.213446356000148], + [-90.08023027299987, 29.174709377000042], + [-90.085845506999874, 29.16791413], + [-90.100209113999938, 29.157945054000024], + [-90.113880988999881, 29.144191799000097], + [-90.130767381999874, 29.132025458], + [-90.147287563999868, 29.126939195000162], + [-90.198475714999915, 29.098293361000017], + [-90.229237433999884, 29.086655992000189], + [-90.244048631999959, 29.091498114000089], + [-90.237700975999928, 29.096828518000152], + [-90.235951300999943, 29.106594143000095], + [-90.23668372299997, 29.119533596000096], + [-90.239735480999855, 29.131822007000054], + [-90.246001756999902, 29.140366929000081], + [-90.267404751999948, 29.158026434000178], + [-90.271311001999948, 29.167425848], + [-90.267160610999923, 29.17763906500015], + [-90.260568813999839, 29.188299872000172], + [-90.257150844999927, 29.198919989000117], + [-90.256214972999942, 29.210760809000178], + [-90.25169837099989, 29.22479889500012], + [-90.250355597999913, 29.236802476000051], + [-90.251088019999941, 29.24738190300009], + [-90.254465298999946, 29.259914455000015], + [-90.260812954999977, 29.26947663], + [-90.27082271999987, 29.270982164000046], + [-90.272084113999966, 29.26357656500015], + [-90.279286261999914, 29.247300523000106], + [-90.287464972999913, 29.23517487200003], + [-90.291249152999939, 29.239935614000117], + [-90.300689256999959, 29.257554429000052], + [-90.337513800999943, 29.293605861000017], + [-90.339100714999859, 29.305121161000145], + [-90.339100714999859, 29.311265367000104], + [-90.351429816999911, 29.308539130000057], + [-90.35985266799986, 29.303371486000131], + [-90.364816860999923, 29.294623114000061], + [-90.366363084999961, 29.281195380000085], + [-90.369943813999924, 29.270900783000158], + [-90.393706834999932, 29.243068752000013], + [-90.393706834999932, 29.298285223000121], + [-90.399566209999875, 29.311590887000037], + [-90.419545050999943, 29.340562242000047], + [-90.425038214999887, 29.346096096000153], + [-90.425892706999974, 29.350409247000144], + [-90.434437628999916, 29.357245184000178], + [-90.444243943999936, 29.357652085], + [-90.448963995999947, 29.342678127000156], + [-90.452015753999945, 29.327134507000054], + [-90.459950324999909, 29.314113674000154], + [-90.483062303999958, 29.290838934000064], + [-90.496449347999942, 29.306138414000102], + [-90.506255662999877, 29.304510809000178], + [-90.515614386999914, 29.29596588700015], + [-90.527455206999974, 29.290838934000064], + [-90.562001105999883, 29.300726630000057], + [-90.571848110999895, 29.305121161000145], + [-90.558216925999943, 29.311265367000104], + [-90.558216925999943, 29.318793036000088], + [-90.56932532499988, 29.320705471000124], + [-90.578114386999857, 29.31952545800003], + [-90.583648240999963, 29.314520575000145], + [-90.585519985999923, 29.305121161000145], + [-90.594960089999859, 29.308335679], + [-90.602772589999944, 29.30756256700009], + [-90.607411261999886, 29.301988023000078], + [-90.607248501999919, 29.290838934000064], + [-90.602447068999908, 29.287827867000047], + [-90.579253709999904, 29.284613348000093], + [-90.581288214999915, 29.266302802000112], + [-90.592193162999905, 29.254787502000099], + [-90.598215298999889, 29.244330145], + [-90.585519985999923, 29.22939687700007], + [-90.59528561099998, 29.218573309000149], + [-90.603098110999952, 29.222316799000012], + [-90.610829230999883, 29.232977606000034], + [-90.620228644999912, 29.243068752000013], + [-90.627023891999841, 29.235744533000101], + [-90.63239498599998, 29.225287177000112], + [-90.640736456999946, 29.20209381700009], + [-90.636057094999842, 29.197821356000176], + [-90.633900519999941, 29.195868231000034], + [-90.640858527999939, 29.157416083000115], + [-90.640736456999946, 29.140611070000105], + [-90.647043423999889, 29.153713283000073], + [-90.652414516999869, 29.162298895], + [-90.663685675999943, 29.164618231000148], + [-90.674875454999949, 29.161118882000082], + [-90.676869269999912, 29.154771226000136], + [-90.675445115999935, 29.145697333000143], + [-90.67638098899991, 29.137396552000055], + [-90.690297003999888, 29.131537177000112], + [-90.693592902999939, 29.126654364000146], + [-90.697865363999938, 29.121771552000084], + [-90.705922003999973, 29.119533596000096], + [-90.711537238999966, 29.123724677000112], + [-90.727121548999975, 29.130357164000188], + [-90.743234829999949, 29.130845445000162], + [-90.750599738999938, 29.116400458000115], + [-90.757964647999927, 29.115912177000112], + [-90.793080206999917, 29.12620677300005], + [-90.805246548999889, 29.126939195000162], + [-90.796945766999897, 29.138820705000128], + [-90.780751105999855, 29.142767645000035], + [-90.769846157999979, 29.149115302000141], + [-90.777251756999959, 29.16791413], + [-90.795318162999877, 29.160630601], + [-90.812082485999895, 29.166245835000083], + [-90.828602667999888, 29.176336981000063], + [-90.846180792999917, 29.182196356000091], + [-90.839914516999869, 29.166245835000083], + [-90.844146287999877, 29.15729401200015], + [-90.866688605999883, 29.147406317000147], + [-90.869862433999941, 29.143703518], + [-90.870594855999883, 29.139146226000051], + [-90.873646613999966, 29.135402736000017], + [-90.884022589999859, 29.133775132], + [-90.929921027999939, 29.171291408000016], + [-90.955189581999889, 29.185736395000063], + [-90.982329881999902, 29.191555080000043], + [-91.010650193999936, 29.182196356000091], + [-91.011219855999911, 29.193304755000113], + [-91.007883266999897, 29.201564846000011], + [-91.000803188999839, 29.206773179000024], + [-90.990142381999902, 29.208929755], + [-90.999256964999887, 29.218085028000175], + [-91.015492316999939, 29.223537502000042], + [-91.030995245999947, 29.224310614000146], + [-91.037953253999945, 29.219794012000179], + [-91.041249152999882, 29.204657294000086], + [-91.050119594999927, 29.197007554000052], + [-91.063343878999945, 29.194810289000159], + [-91.079579230999911, 29.195868231000034], + [-91.089019334999904, 29.200669664000102], + [-91.112294074999937, 29.219061591000141], + [-91.123931443999936, 29.223211981000091], + [-91.228586391999926, 29.238592841000056], + [-91.285145636999914, 29.260891018000066], + [-91.327992316999911, 29.294867255000113], + [-91.339670376999919, 29.33926015800013], + [-91.329497850999957, 29.323919989], + [-91.312123175999886, 29.319322007000054], + [-91.293120897999898, 29.323228257000054], + [-91.278187628999945, 29.33307526200015], + [-91.266590949999909, 29.350816148000078], + [-91.258615688999868, 29.36709219], + [-91.24657141799986, 29.378119208000143], + [-91.222971157999922, 29.380194403000147], + [-91.227162238999938, 29.363511460000112], + [-91.214914516999897, 29.343329169000086], + [-91.191314256999931, 29.33144765800013], + [-91.161488410999937, 29.33926015800013], + [-91.162180141999897, 29.305812893000095], + [-91.166167772999955, 29.290920315000122], + [-91.175770636999943, 29.277777411000059], + [-91.165272589999887, 29.274969794000029], + [-91.157704230999911, 29.269761460000112], + [-91.153675910999937, 29.26170482000019], + [-91.154042120999861, 29.250474351], + [-91.132394985999895, 29.257391669000086], + [-91.122222459999932, 29.26300690300009], + [-91.113107876999948, 29.270982164000046], + [-91.117990688999924, 29.275783596000124], + [-91.122547980999855, 29.282131252000156], + [-91.127349412999934, 29.284613348000093], + [-91.127349412999934, 29.290838934000064], + [-91.109852667999888, 29.3165550800001], + [-91.121571417999888, 29.338120835000026], + [-91.177113410999937, 29.379339911000059], + [-91.208607550999943, 29.395697333000086], + [-91.219838019999941, 29.404445705000157], + [-91.222401495999947, 29.411607164000188], + [-91.221058722999942, 29.428290106000034], + [-91.222971157999922, 29.434800523000135], + [-91.228016730999855, 29.438381252000013], + [-91.241118943999908, 29.441717841000028], + [-91.247425910999965, 29.445705471000011], + [-91.262562628999945, 29.469061591000113], + [-91.267486131999902, 29.495794989000117], + [-91.263295050999886, 29.522284247000087], + [-91.250843878999973, 29.544663804000109], + [-91.240467902999882, 29.55304596600017], + [-91.22911536399991, 29.559881903000175], + [-91.22008216099988, 29.569403387000179], + [-91.216704881999959, 29.585638739000117], + [-91.220041469999899, 29.598863023000078], + [-91.228382941999968, 29.608058986000131], + [-91.241200324999909, 29.612982489], + [-91.257679816999882, 29.613592841000141], + [-91.24779212099989, 29.590521552], + [-91.253163214999915, 29.576320705000072], + [-91.281890428999873, 29.55556875200007], + [-91.286122199999909, 29.546047268000095], + [-91.28449459499987, 29.535467841000028], + [-91.280506964999915, 29.527085679000081], + [-91.278187628999945, 29.52423737200003], + [-91.282378709999961, 29.513820705000128], + [-91.294422980999883, 29.494330145000148], + [-91.298654751999891, 29.483832098000093], + [-91.320912238999938, 29.496649481000119], + [-91.363514777999882, 29.512111721000124], + [-91.387440558999856, 29.518011786000088], + [-91.411854620999918, 29.518947658000158], + [-91.423898891999926, 29.521185614000146], + [-91.429025844999927, 29.527899481000176], + [-91.424387173999918, 29.538397528000147], + [-91.416737433999884, 29.54791901200015], + [-91.415150519999941, 29.556830145000092], + [-91.429025844999927, 29.565822658000016], + [-91.452504035999908, 29.551581122000115], + [-91.493234829999977, 29.539618231000176], + [-91.534331834999961, 29.534002997000172], + [-91.559315558999884, 29.53847890800013], + [-91.545399542999888, 29.548814195000048], + [-91.541249152999853, 29.569037177000055], + [-91.545155402999853, 29.591864325000174], + [-91.555653449999937, 29.609849351000108], + [-91.558827277999882, 29.619208075000145], + [-91.558990037999962, 29.631659247000172], + [-91.560780402999939, 29.642482815000065], + [-91.568959113999938, 29.647121486000103], + [-91.579701300999943, 29.645209052000141], + [-91.601796027999853, 29.636623440000122], + [-91.613352016999869, 29.634100653000118], + [-91.639719204999977, 29.635484117000189], + [-91.644154425999943, 29.645168361000131], + [-91.638295050999915, 29.662095445000134], + [-91.633859829999921, 29.685288804000052], + [-91.630441860999923, 29.728827216000084], + [-91.637928839999887, 29.742092190000037], + [-91.661732550999972, 29.750799872000087], + [-91.684681769999969, 29.753119208000058], + [-91.778431769999969, 29.748480536000145], + [-91.795725063999868, 29.742377020000148], + [-91.833078579999921, 29.72345612200003], + [-91.858469204999949, 29.719061591000141], + [-91.86668860599994, 29.729396877000156], + [-91.86750240799995, 29.743638414000074], + [-91.87059485599994, 29.750799872000087], + [-91.877919074999852, 29.759344794000029], + [-91.874419725999957, 29.778143622000172], + [-91.864654100999928, 29.796942450000031], + [-91.853586391999869, 29.805365302000084], + [-91.846058722999913, 29.798773505], + [-91.837066209999904, 29.787665106000148], + [-91.829457160999965, 29.784409898000106], + [-91.826283331999889, 29.801703192000119], + [-91.828684048999946, 29.81533437700007], + [-91.835804816999882, 29.82526276200015], + [-91.847523566999882, 29.831244208000086], + [-91.893950975999928, 29.837632554000109], + [-91.906727667999888, 29.837103583000115], + [-91.933501756999874, 29.819403387000122], + [-91.945139126999891, 29.821844794000143], + [-91.955555792999888, 29.82916901200015], + [-91.966867641999869, 29.83331940300009], + [-91.984445766999897, 29.831976630000113], + [-91.986317511999857, 29.827378648], + [-91.984486456999974, 29.818793036000059], + [-91.990712042999945, 29.805365302000084], + [-92.000477667999888, 29.798895575000174], + [-92.086415167999888, 29.771470445000105], + [-92.099964972999942, 29.764390367000047], + [-92.122466600999957, 29.743882554000024], + [-92.134632941999939, 29.736151434000092], + [-92.148996548999918, 29.736476955000015], + [-92.136463995999918, 29.745306708000086], + [-92.134144660999937, 29.75682200700011], + [-92.141468878999945, 29.766913153000175], + [-92.158314581999946, 29.771226304000081], + [-92.161976691999911, 29.768296617000047], + [-92.170236782999893, 29.754624742000104], + [-92.175689256999931, 29.750799872000087], + [-92.180897589999915, 29.751939195000134], + [-92.202381964999859, 29.764390367000047], + [-92.198801235999895, 29.746730861000131], + [-92.191029425999886, 29.723781643000152], + [-92.181507941999882, 29.704006252000127], + [-92.172271287999934, 29.69550202], + [-92.164662238999881, 29.697739976], + [-92.150217251999919, 29.707505601000108], + [-92.126535610999923, 29.711371161000116], + [-92.117176886999886, 29.713934637000037], + [-92.108794725999928, 29.714422919000029], + [-92.099964972999942, 29.709784247000087], + [-92.12926184799997, 29.692613023000078], + [-92.141509568999936, 29.688706773000078], + [-92.113596157999893, 29.63764069200009], + [-92.107411261999943, 29.620428778000175], + [-92.099964972999942, 29.620428778000175], + [-92.084462042999945, 29.630316473000093], + [-92.060170050999972, 29.636948960000055], + [-92.037017381999931, 29.637030341000028], + [-92.02489173099994, 29.627264716000084], + [-92.05528723899991, 29.621527411000116], + [-92.067372199999909, 29.616156317000062], + [-92.073312954999921, 29.606146552000084], + [-92.052805141999869, 29.599920966000028], + [-92.06590735599994, 29.587836005000113], + [-92.093373175999886, 29.587144273000078], + [-92.136865015999973, 29.58686246000012], + [-92.173865834999873, 29.576188691000183], + [-92.241160982999901, 29.545530647000149], + [-92.27649313299986, 29.533836437000062], + [-92.314307326999938, 29.534368574000112], + [-92.465072621999923, 29.560103938000069], + [-92.489761759999908, 29.562993557000155], + [-92.514399866999923, 29.566359096000085], + [-92.546213344999899, 29.571682033000158], + [-92.683057945999877, 29.604132864000078], + [-92.795338378999929, 29.644241026000074], + [-92.852660586999917, 29.66741492400017], + [-92.915670895999881, 29.692979464000089], + [-93.026844855999855, 29.732855536000059], + [-93.094450357999904, 29.751526132000052], + [-93.199592949999925, 29.772811188000119], + [-93.25353181299991, 29.776355247000154], + [-93.308514496999862, 29.769151067000152], + [-93.34549494599986, 29.76204483400015], + [-93.385427650999901, 29.767576766], + [-93.420810218999947, 29.768261434000166], + [-93.453396357999878, 29.770424944000027], + [-93.497425910999937, 29.769191799000126], + [-93.558513092999874, 29.763120991], + [-93.64081646, 29.750313051000049], + [-93.701185458999959, 29.742633382000051], + [-93.739379842999938, 29.737247514], + [-93.766957744999928, 29.726333316000151], + [-93.792936488999942, 29.717555222000115], + [-93.821375855999889, 29.709450505000106], + [-93.831027826999929, 29.700134882000086], + [-93.850972209999895, 29.723283778000066], + [-93.87915518399987, 29.749883544000127], + [-93.893697093999947, 29.79081447300014], + [-93.888238390999931, 29.807175275000176], + [-93.857355005999892, 29.818852076000056], + [-93.820667818999908, 29.824213748000048], + [-93.78194133199986, 29.856514911000133], + [-93.772084113999881, 29.904689846000096], + [-93.759952353999921, 29.960576139000111], + [-93.769366039999881, 29.978315924000086], + [-93.788900959999893, 29.985065849000094], + [-93.818646052999895, 29.9867553670001], + [-93.834597684999892, 29.98362132900003], + [-93.854074673999918, 29.98655833500014], + [-93.85802161399991, 29.968247789000159], + [-93.867543097999913, 29.950018622000087], + [-93.924398587999917, 29.865621589000099], + [-93.938111949999922, 29.805902690000138], + [-93.932711711999843, 29.776194375000088], + [-93.875843878999973, 29.723374742000047], + [-93.859934048999946, 29.692572333000086], + [-93.875803188999896, 29.675034898000135], + [-93.88731848899991, 29.674546617000047], + [-93.916737433999913, 29.681830145000063], + [-94.037587042999945, 29.684027411000059], + [-94.060129360999838, 29.681830145000063], + [-94.101958787999934, 29.670599677000055], + [-94.13145911399991, 29.658880927000084], + [-94.215972459999961, 29.617499091000141], + [-94.33527584499987, 29.578192450000145], + [-94.654286261999914, 29.451890367000161], + [-94.690744594999899, 29.428615627000156], + [-94.742421027999939, 29.374660549000154], + [-94.762766079999921, 29.366522528000033], + [-94.786203579999892, 29.370306708000058], + [-94.790638800999972, 29.380031643], + [-94.782053188999868, 29.393377997000115], + [-94.700998501999919, 29.46279531500015], + [-94.675160285999908, 29.474798895000063], + [-94.651600714999944, 29.478257554000081], + [-94.640126105999911, 29.481431382000139], + [-94.630034959999932, 29.485663153000147], + [-94.622425910999908, 29.490057684000035], + [-94.592600063999896, 29.517564195000162], + [-94.580881313999924, 29.52423737200003], + [-94.572132941999939, 29.526434637000122], + [-94.521880662999962, 29.523993231000091], + [-94.504465298999889, 29.526027736000017], + [-94.491810675999915, 29.534125067000147], + [-94.485259568999936, 29.552150783000073], + [-94.485951300999886, 29.566107489000146], + [-94.494943813999896, 29.55878327000012], + [-94.510121222999885, 29.549017645], + [-94.52965247299997, 29.55556875200007], + [-94.54552161399991, 29.568426825000117], + [-94.561431443999908, 29.574611721000068], + [-94.605448177999904, 29.552650016000158], + [-94.695232459999971, 29.538958957000048], + [-94.736819334999893, 29.528477289000122], + [-94.755235444999897, 29.524271247000101], + [-94.779050171999899, 29.529876915], + [-94.787429412999899, 29.54071392800013], + [-94.785080435999873, 29.546933688000152], + [-94.773754470999876, 29.541801409000144], + [-94.761274074999932, 29.543918331000057], + [-94.749457597999935, 29.56103790300007], + [-94.735778778999958, 29.579235245000078], + [-94.716138389999912, 29.611408156000138], + [-94.703110390999939, 29.650437504000095], + [-94.692740893999968, 29.696340139000156], + [-94.695470327999914, 29.718122638000168], + [-94.702143978999914, 29.73530648500018], + [-94.703531807999923, 29.75136155200012], + [-94.710175682999932, 29.760517824000189], + [-94.719493652999887, 29.77655053800008], + [-94.734054998999881, 29.782240880000145], + [-94.744626804999911, 29.782205729000097], + [-94.760457555999949, 29.776416445000066], + [-94.773654627999889, 29.772927863000078], + [-94.794792360999907, 29.771705170000175], + [-94.806743235999932, 29.78198929600002], + [-94.826490230999894, 29.768144031000034], + [-94.826385918999875, 29.749786788000122], + [-94.848660794999944, 29.717577818000123], + [-94.862984139999867, 29.683106243000125], + [-94.876076243999904, 29.665842342000175], + [-94.906409530999866, 29.657682431000026], + [-94.919596500999944, 29.655327353000033], + [-94.931555765999917, 29.66674091], + [-94.938316759999879, 29.689652621000093], + [-94.948914997999879, 29.694190100000085], + [-94.966172105999902, 29.704433957000063], + [-94.999175584999904, 29.716009833000058], + [-95.015502401999868, 29.720300111000128], + [-95.0267449319999, 29.736093650000029], + [-95.033992771999891, 29.748461307000142], + [-95.052280231999902, 29.749748170000132], + [-95.064076300999886, 29.712876695000162], + [-95.050328483999891, 29.707025646000105], + [-95.036812351999856, 29.70434292], + [-95.028824080999897, 29.697496674000107], + [-95.018488186999917, 29.695483536000083], + [-95.008946785999882, 29.693465439000178], + [-94.998579619999902, 29.686629898], + [-94.985801383999899, 29.674985390000032], + [-95.008696001999908, 29.659713857000057], + [-95.015723264999849, 29.644522457000065], + [-95.010031173999892, 29.625952994], + [-94.984518507999894, 29.606120190000027], + [-94.98919473299992, 29.594386967000091], + [-95.005441860999866, 29.578599351000051], + [-95.015980597999913, 29.568915106000091], + [-95.023915167999888, 29.542181708000086], + [-94.983911111999902, 29.513819470000115], + [-94.907798281999931, 29.4963099940001], + [-94.914873307999926, 29.488005564000062], + [-94.923506217999943, 29.475557837000068], + [-94.936390753999945, 29.480047919000143], + [-94.950591600999957, 29.473781643], + [-94.96507727799991, 29.46963125200007], + [-94.96507727799991, 29.46279531500015], + [-94.948231574999909, 29.451971747000144], + [-94.947092251999948, 29.435370184000092], + [-94.942941860999923, 29.4220238300001], + [-94.91730709499987, 29.421128648], + [-94.91730709499987, 29.428615627000156], + [-94.921498175999886, 29.432114976000051], + [-94.921986456999974, 29.433986721000039], + [-94.921783006999931, 29.436509507000139], + [-94.919585740999935, 29.436509507000139], + [-94.918324347999913, 29.436997789000131], + [-94.918202277999853, 29.440090236000017], + [-94.91730709499987, 29.442287502000099], + [-94.889556443999879, 29.400824286], + [-94.878773566999968, 29.39386627800009], + [-94.865793423999975, 29.391750393000095], + [-94.821115688999924, 29.373968817], + [-94.824940558999941, 29.372788804], + [-94.828277147999955, 29.372259833], + [-94.831288214999859, 29.370754299000154], + [-94.834095831999917, 29.366522528000033], + [-94.849436001999948, 29.375962632000054], + [-94.870350714999915, 29.380845445000105], + [-94.888824022999955, 29.375962632000054], + [-94.896799282999893, 29.356350002000099], + [-94.901356574999852, 29.334621486000017], + [-94.912912563999868, 29.315578518000123], + [-94.928212042999945, 29.30756256700009], + [-94.943959113999881, 29.318793036000088], + [-94.950795050999915, 29.318793036000088], + [-94.955148891999897, 29.306341864000061], + [-94.964466925999943, 29.297796942000119], + [-94.984934048999918, 29.284613348000093], + [-94.987863735999838, 29.283880927000055], + [-94.996205206999889, 29.285223700000145], + [-94.999175584999904, 29.284613348000093], + [-94.999867316999939, 29.281968492000189], + [-94.998646613999938, 29.273749091000113], + [-94.999175584999904, 29.270982164000046], + [-95.065174933999941, 29.204169012000094], + [-95.088368292999888, 29.188625393], + [-95.115874803999901, 29.174750067000033], + [-95.124256964999859, 29.193548895000063], + [-95.137196417999888, 29.198919989000117], + [-95.153146938999896, 29.200873114000061], + [-95.170521613999966, 29.208929755], + [-95.162912563999924, 29.200628973000121], + [-95.150013800999915, 29.174750067000033], + [-95.15916907499988, 29.152411200000174], + [-95.158111131999931, 29.130926825000145], + [-95.150013800999915, 29.089097398000135], + [-95.149647589999887, 29.07217031500015], + [-95.151234503999916, 29.058498440000037], + [-95.158924933999941, 29.045721747000172], + [-95.231516079999949, 28.995510158000101], + [-95.259999152999853, 28.981756903000175], + [-95.3138728509999, 28.928371486000131], + [-95.367746548999918, 28.887152411000059], + [-95.379383917999917, 28.880560614], + [-95.401722785999937, 28.878363348], + [-95.419178839999915, 28.872300523000106], + [-95.487172003999973, 28.829657294000171], + [-95.601918097999913, 28.763861395], + [-95.64488684799997, 28.745917059000149], + [-95.6888728509999, 28.736314195000162], + [-95.733957485999866, 28.73358795800003], + [-95.780018683999913, 28.735907294000171], + [-95.81737219999988, 28.732489325000145], + [-95.951975063999924, 28.688706773], + [-95.945790167999945, 28.676459052000112], + [-95.947132941999939, 28.666245835], + [-95.950998501999948, 28.656968492000047], + [-95.952381964999915, 28.640326239], + [-95.954945441999911, 28.636379299000012], + [-95.955922003999888, 28.632635809000149], + [-95.951975063999924, 28.626654364000061], + [-95.947255011999914, 28.62531159100017], + [-95.940174933999941, 28.625718492000161], + [-95.933705206999946, 28.627590236000131], + [-95.930816209999904, 28.630072333000058], + [-95.793446417999888, 28.699448960000112], + [-95.754953579999921, 28.712469794000086], + [-95.719227667999888, 28.715480861000103], + [-95.837147589999887, 28.646470445000162], + [-95.902414516999897, 28.617865302], + [-96.005116339999915, 28.59650299700003], + [-96.066273566999968, 28.553859768], + [-96.123687303999873, 28.536810614000146], + [-96.188221808999941, 28.501654364000089], + [-96.218861456999946, 28.489488023000021], + [-96.194569464999887, 28.515570380000057], + [-96.160878058999884, 28.537258205000128], + [-96.017241990999906, 28.602240302000027], + [-95.996001756999931, 28.606187242000189], + [-95.984934048999889, 28.613104559000092], + [-95.981353318999908, 28.628607489], + [-95.987782355999911, 28.644842841000141], + [-96.006581183999884, 28.653998114000117], + [-96.026437954999977, 28.651027736000017], + [-96.064768032999922, 28.631333726000079], + [-96.077951626999948, 28.626654364000061], + [-96.098378058999941, 28.62327708500014], + [-96.157378709999875, 28.598781643], + [-96.204904751999976, 28.586655992000104], + [-96.226470506999902, 28.587144273000021], + [-96.222279425999943, 28.602484442000147], + [-96.204741990999906, 28.610581773000078], + [-96.158924933999913, 28.615139065000122], + [-96.143137173999975, 28.626654364000061], + [-96.136870897999927, 28.626654364000061], + [-96.136870897999927, 28.633530992000161], + [-96.153920050999972, 28.635199286000088], + [-96.16828365799995, 28.632554429], + [-96.181385870999918, 28.628648179], + [-96.194935675999886, 28.626654364000061], + [-96.215443488999938, 28.629380601000108], + [-96.22044837099989, 28.6368675800001], + [-96.215443488999938, 28.647894598000121], + [-96.192250128999916, 28.680894273000106], + [-96.188059048999975, 28.690863348], + [-96.195057745999861, 28.694484768000152], + [-96.215443488999938, 28.694973049000126], + [-96.230824347999885, 28.69281647300015], + [-96.244536912999905, 28.687567450000145], + [-96.266672329999977, 28.675116278000033], + [-96.26040605399993, 28.688706773], + [-96.28140214799987, 28.679754950000145], + [-96.308094855999911, 28.651068427000027], + [-96.32872473899991, 28.639715887000037], + [-96.345773891999869, 28.635321356000148], + [-96.349842902999939, 28.637396552000084], + [-96.350209113999938, 28.644110419000114], + [-96.356027798999918, 28.653998114000117], + [-96.385161912999962, 28.679348049000154], + [-96.390207485999895, 28.688706773], + [-96.380034959999932, 28.700262762000122], + [-96.377593553999901, 28.714911200000031], + [-96.383290167999888, 28.730047919000029], + [-96.397613084999875, 28.743394273000135], + [-96.403716600999871, 28.738755601000108], + [-96.413075324999909, 28.73383209800015], + [-96.416859503999916, 28.729722398000106], + [-96.435047980999911, 28.755682684000092], + [-96.438588019999912, 28.763861395], + [-96.444813605999855, 28.763861395], + [-96.443959113999938, 28.749253648], + [-96.438384568999936, 28.731756903000033], + [-96.43097896999987, 28.716498114000061], + [-96.424305792999917, 28.708644924000069], + [-96.417103644999969, 28.710679429000109], + [-96.408273891999926, 28.716945705000157], + [-96.400786912999934, 28.719875393000095], + [-96.397613084999875, 28.712062893000095], + [-96.400298631999959, 28.702582098000093], + [-96.406483527999939, 28.696763414000131], + [-96.412993943999908, 28.69281647300015], + [-96.416859503999916, 28.688706773], + [-96.416371222999942, 28.680975653000175], + [-96.412709113999881, 28.673773505000057], + [-96.410308397999927, 28.66632721600017], + [-96.413726365999935, 28.657700914000159], + [-96.416818813999839, 28.643703518], + [-96.403431769999941, 28.635565497000087], + [-96.369699673999946, 28.626654364000061], + [-96.427642381999931, 28.595404364000089], + [-96.462513800999943, 28.583197333000115], + [-96.493234829999949, 28.578924872000087], + [-96.477894660999908, 28.591620184000149], + [-96.459828253999888, 28.593329169000171], + [-96.444813605999855, 28.597357489000117], + [-96.438588019999912, 28.616766669000143], + [-96.447132941999911, 28.63564687700007], + [-96.484689907999922, 28.61261627800009], + [-96.493234829999949, 28.63662344000015], + [-96.497385219999899, 28.644761460000055], + [-96.507476365999963, 28.64345937700007], + [-96.51976477799991, 28.640448309000149], + [-96.530425584999932, 28.64345937700007], + [-96.536284959999904, 28.646063544000143], + [-96.549875454999949, 28.645493882], + [-96.554676886999943, 28.647162177000112], + [-96.559478318999908, 28.654282945000077], + [-96.560292120999918, 28.660711981000176], + [-96.5599666009999, 28.667222398000078], + [-96.561512824999852, 28.675116278000033], + [-96.565785285999965, 28.68891022300015], + [-96.567250128999916, 28.696519273], + [-96.570179816999939, 28.702622789000159], + [-96.578521287999905, 28.712062893000095], + [-96.590443488999938, 28.720363674000069], + [-96.60383053299995, 28.723700262000094], + [-96.617502407999893, 28.722072658000073], + [-96.630360480999911, 28.715480861000103], + [-96.634510870999861, 28.720851955000157], + [-96.639149542999888, 28.724188544000086], + [-96.650868292999888, 28.729722398000106], + [-96.649810350999928, 28.704820054000081], + [-96.645659959999875, 28.687079169000171], + [-96.637196417999945, 28.671616929000052], + [-96.6087947259999, 28.637762762000179], + [-96.6048884759999, 28.630560614000146], + [-96.602447068999879, 28.620510158000073], + [-96.603098110999838, 28.610174872000172], + [-96.608509894999969, 28.586167710000112], + [-96.608631964999944, 28.578924872000087], + [-96.599842902999882, 28.568345445000048], + [-96.591908331999917, 28.569647528000147], + [-96.581939256999931, 28.578924872000087], + [-96.570179816999939, 28.575384833000115], + [-96.541005011999886, 28.557806708], + [-96.520375128999973, 28.549221096000068], + [-96.513661261999914, 28.544134833000058], + [-96.506581183999856, 28.536851304000137], + [-96.501291469999899, 28.529120184000035], + [-96.493234829999949, 28.510646877000013], + [-96.545521613999938, 28.487738348], + [-96.554676886999943, 28.486070054], + [-96.547596808999884, 28.469305731000148], + [-96.531564907999979, 28.469468492000132], + [-96.514230923999889, 28.477972723000065], + [-96.503488735999895, 28.486070054], + [-96.473500128999916, 28.493557033000158], + [-96.435658331999974, 28.48135000200007], + [-96.406809048999946, 28.458726304000109], + [-96.403797980999855, 28.434881903000033], + [-96.475819464999887, 28.400783596000124], + [-96.495106574999909, 28.396470445000134], + [-96.529164191999939, 28.377752997000144], + [-96.544748501999919, 28.373480536000145], + [-96.6537166009999, 28.319484768000123], + [-96.671376105999911, 28.331854559000178], + [-96.687733527999939, 28.327378648000106], + [-96.698312954999892, 28.335882880000142], + [-96.703846808999913, 28.351792710000055], + [-96.705922003999916, 28.388495184000149], + [-96.709217902999882, 28.39984772300015], + [-96.718495245999918, 28.405462958000143], + [-96.736480272999955, 28.406927802000027], + [-96.741769985999838, 28.410589911000059], + [-96.743560350999928, 28.419094143000095], + [-96.744374152999939, 28.428452867000132], + [-96.746449347999942, 28.434881903000033], + [-96.751291469999842, 28.438666083000058], + [-96.762277798999889, 28.444322007000054], + [-96.766957160999908, 28.447943427000112], + [-96.784657355999911, 28.472601630000028], + [-96.793324347999913, 28.47972239800005], + [-96.801665818999879, 28.475246486000103], + [-96.810129360999923, 28.467840887000094], + [-96.813303188999896, 28.457993882], + [-96.810658331999889, 28.451849677000112], + [-96.801665818999879, 28.455389716000084], + [-96.777455206999974, 28.43740469000015], + [-96.769764777999853, 28.426214911000145], + [-96.766957160999908, 28.410711981000034], + [-96.775135870999918, 28.400458075000088], + [-96.793853318999879, 28.408189195000105], + [-96.814523891999897, 28.421698309000178], + [-96.82835852799991, 28.428697007000082], + [-96.844471808999884, 28.415594794000086], + [-96.825103318999936, 28.387925523000106], + [-96.795562303999901, 28.35651276200015], + [-96.781158006999931, 28.331854559000178], + [-96.787464972999942, 28.314276434000064], + [-96.797108527999939, 28.296942450000145], + [-96.80125891799986, 28.279120184000178], + [-96.782338019999941, 28.241603908000158], + [-96.792388475999928, 28.228664455000157], + [-96.82835852799991, 28.208970445000105], + [-96.845122850999928, 28.19326406500015], + [-96.88023841099988, 28.150620835000112], + [-96.895904100999871, 28.140814520000092], + [-96.928212042999888, 28.133246161000145], + [-96.94505774599989, 28.126450914000102], + [-96.933461066999968, 28.162909247000172], + [-96.924549933999941, 28.179185289000102], + [-96.910308397999927, 28.19525788], + [-96.924712693999908, 28.214097398000135], + [-96.918934699999937, 28.232123114000061], + [-96.908802863999881, 28.248765367000104], + [-96.910308397999927, 28.263617255000085], + [-96.921945766999841, 28.263332424000126], + [-96.935780402999939, 28.248277085000112], + [-96.959339972999885, 28.215765692000147], + [-96.946115688999839, 28.205145575000088], + [-96.943430141999869, 28.19135163], + [-96.94871985599994, 28.174221096000153], + [-96.959339972999885, 28.153753973], + [-96.973011847999913, 28.133937893000095], + [-96.984364386999886, 28.129543361000103], + [-97.020171678999901, 28.140082098000065], + [-97.016265428999901, 28.142279364000146], + [-97.012928839999887, 28.144964911000116], + [-97.009755011999914, 28.148667710000083], + [-97.006499803999873, 28.153753973], + [-97.013050910999937, 28.164007880000113], + [-97.007435675999943, 28.194525458000058], + [-97.013986782999922, 28.208970445000105], + [-97.020171678999901, 28.208970445000105], + [-97.036203579999892, 28.187648830000157], + [-97.071359829999949, 28.168117580000072], + [-97.110218878999973, 28.153631903000033], + [-97.137521938999868, 28.147528387000037], + [-97.130848761999886, 28.157782294000143], + [-97.138579881999902, 28.165594794000143], + [-97.15265865799995, 28.169256903000118], + [-97.164784308999941, 28.16738515800013], + [-97.173247850999871, 28.159002997000172], + [-97.177316860999838, 28.148016669000029], + [-97.17320716099988, 28.138373114000061], + [-97.157338019999969, 28.133856512000094], + [-97.198597785999908, 28.096828518000066], + [-97.217518683999941, 28.074774481000176], + [-97.208851691999939, 28.065008856000034], + [-97.186675584999875, 28.062486070000105], + [-97.168446417999888, 28.055609442], + [-97.154286261999886, 28.044623114000146], + [-97.14427649599989, 28.03021881700009], + [-97.144398566999939, 28.019761460000026], + [-97.148671027999882, 28.010199286000116], + [-97.149077928999873, 28.005519924000012], + [-97.137521938999868, 28.009711005000113], + [-97.129872199999909, 28.016750393], + [-97.123117641999897, 28.02830638200011], + [-97.118234829999921, 28.041734117000104], + [-97.116363084999932, 28.054388739], + [-97.10610917899993, 28.07094961100016], + [-97.057443813999896, 28.088812567000119], + [-97.041249152999939, 28.105902411000059], + [-97.044911261999886, 28.110419012000122], + [-97.046457485999923, 28.113714911000059], + [-97.04539954299986, 28.114813544000114], + [-97.04165605399993, 28.116603908000101], + [-97.034413214999915, 28.119574286], + [-97.024077928999901, 28.111802476000108], + [-97.021066860999895, 28.100327867000075], + [-97.027658657999979, 28.061590887000122], + [-97.026275193999908, 28.047674872000144], + [-97.024973110999895, 28.041449286000088], + [-97.027495897999898, 28.036688544000086], + [-97.037912563999896, 28.027085679000109], + [-97.044585740999963, 28.019110419000143], + [-97.06114661399991, 27.989243882000082], + [-97.066070115999878, 27.988674221000011], + [-97.067453579999949, 27.990139065000065], + [-97.067534959999932, 27.992824611000131], + [-97.06859290299991, 27.99603913], + [-97.105336066999911, 27.936997789000074], + [-97.184071417999888, 27.836615302], + [-97.206288214999944, 27.821722723000121], + [-97.232492641999869, 27.824774481000034], + [-97.232492641999869, 27.83222077], + [-97.211984829999921, 27.83222077], + [-97.22325598899991, 27.849066473], + [-97.235910610999895, 27.863836981000091], + [-97.25031490799995, 27.874579169000114], + [-97.267201300999943, 27.879380601], + [-97.290842251999948, 27.876654364000117], + [-97.331369594999899, 27.861070054000137], + [-97.355946417999888, 27.859564520000092], + [-97.348988410999908, 27.864935614000117], + [-97.346506313999896, 27.868719794000143], + [-97.345326300999943, 27.872748114000117], + [-97.34227454299986, 27.879380601], + [-97.36815344999988, 27.873236395000035], + [-97.424387173999946, 27.875189520000063], + [-97.452137824999937, 27.873195705000043], + [-97.457590298999975, 27.869818427000027], + [-97.460194464999887, 27.860663153000033], + [-97.46580969999988, 27.859564520000092], + [-97.473378058999913, 27.861029364000146], + [-97.481190558999913, 27.864569403000118], + [-97.486927863999881, 27.866359768], + [-97.488270636999886, 27.868638414000159], + [-97.489125128999973, 27.872951565000093], + [-97.492298956999946, 27.877183335], + [-97.50059973899991, 27.879380601], + [-97.504546678999901, 27.878851630000113], + [-97.521066860999895, 27.873195705000043], + [-97.504872199999937, 27.849025783000016], + [-97.487049933999856, 27.83527252800009], + [-97.463978644999912, 27.831732489000117], + [-97.431711391999869, 27.838446356000148], + [-97.42218990799995, 27.832709052], + [-97.409820115999935, 27.83234284100017], + [-97.398182745999918, 27.83690013200011], + [-97.390736456999946, 27.845892645000148], + [-97.385609503999945, 27.830064195000105], + [-97.394032355999883, 27.801703192000062], + [-97.390736456999946, 27.791245835], + [-97.371815558999913, 27.755316473], + [-97.356068488999966, 27.741766669000057], + [-97.267201300999943, 27.708075262000037], + [-97.259592251999891, 27.695054429000052], + [-97.262806769999941, 27.679266669000114], + [-97.272531704999892, 27.663397528000175], + [-97.284291144999884, 27.650051174000069], + [-97.28929602799991, 27.64199453300013], + [-97.292591925999943, 27.630926825000088], + [-97.295155402999882, 27.608791408000016], + [-97.298817511999914, 27.60057200700011], + [-97.329335089999859, 27.549627997000115], + [-97.346424933999913, 27.50576406500015], + [-97.349761522999927, 27.485825914000159], + [-97.3529353509999, 27.475734768], + [-97.367054816999939, 27.460760809000149], + [-97.408314581999974, 27.357367255], + [-97.411203579999921, 27.33502838700015], + [-97.422352667999917, 27.327785549000126], + [-97.486927863999881, 27.304022528000061], + [-97.50841223899991, 27.282416083000143], + [-97.522572394999941, 27.278509833000143], + [-97.541574673999946, 27.290350653000118], + [-97.505279100999928, 27.30760325700011], + [-97.493153449999852, 27.317694403000175], + [-97.498687303999873, 27.320786851000079], + [-97.50129146999987, 27.323919989000146], + [-97.503244594999899, 27.327378648000135], + [-97.506743943999908, 27.331284898000135], + [-97.486805792999917, 27.330226955000072], + [-97.476389126999919, 27.331488348000093], + [-97.469227667999888, 27.33502838700015], + [-97.461293097999913, 27.343654690000065], + [-97.460926886999914, 27.345770575000174], + [-97.465484178999958, 27.34674713700015], + [-97.472645636999886, 27.35175202], + [-97.474191860999838, 27.348374742000161], + [-97.481353318999879, 27.347072658000073], + [-97.489369269999912, 27.35065338700015], + [-97.493153449999852, 27.362046617000104], + [-97.491200324999909, 27.381496486000017], + [-97.486927863999881, 27.400213934000178], + [-97.506174282999922, 27.392523505000057], + [-97.529204881999902, 27.372137762000179], + [-97.541574673999946, 27.365464585000112], + [-97.534087693999879, 27.35175202], + [-97.544911261999886, 27.348089911000145], + [-97.55308997299997, 27.343817450000031], + [-97.568837042999917, 27.331284898000135], + [-97.575103318999879, 27.345648505000113], + [-97.584706183999856, 27.341782945000105], + [-97.603016730999911, 27.317694403000175], + [-97.599720831999889, 27.310939846000124], + [-97.600656704999949, 27.304510809000035], + [-97.606190558999884, 27.299709377000127], + [-97.61693274599989, 27.29779694200009], + [-97.630238410999908, 27.300238348000121], + [-97.634103969999927, 27.306545315000065], + [-97.634510870999918, 27.315130927000084], + [-97.637766079999977, 27.324448960000112], + [-97.717640753999888, 27.427435614000089], + [-97.742909308999856, 27.449693101000136], + [-97.774281378999888, 27.468491929], + [-97.77049719999988, 27.444566148000106], + [-97.736439581999946, 27.414129950000145], + [-97.725900844999899, 27.393377997000144], + [-97.740142381999902, 27.393377997000144], + [-97.703765428999901, 27.361070054000137], + [-97.691761847999885, 27.340480861000017], + [-97.712228969999842, 27.331284898000135], + [-97.710560675999943, 27.324164130000085], + [-97.709095831999974, 27.321356512000037], + [-97.706654425999943, 27.317694403000175], + [-97.687082485999866, 27.325140692000062], + [-97.672230597999913, 27.321356512000037], + [-97.667632615999963, 27.310858466000141], + [-97.678700324999909, 27.29779694200009], + [-97.700698032999952, 27.285942942000091], + [-97.7247244859999, 27.287669315000031], + [-97.749989386999914, 27.297308661], + [-97.774281378999888, 27.29779694200009], + [-97.760568813999868, 27.279120184000092], + [-97.715199869999907, 27.267359579000029], + [-97.678708221999841, 27.274019982000183], + [-97.658885318999893, 27.27412188900017], + [-97.642153348999898, 27.266802172], + [-97.629522356999928, 27.244660935000169], + [-97.598236218999887, 27.242959479000078], + [-97.559661022999904, 27.234805008000123], + [-97.521127373999917, 27.232190847000183], + [-97.501398366999922, 27.243362016000063], + [-97.476475518999877, 27.256395665000142], + [-97.440117637999975, 27.272232046000127], + [-97.42609615799995, 27.263657945000162], + [-97.427154100999928, 27.249986070000048], + [-97.434071417999917, 27.239243882000139], + [-97.445952928999873, 27.235093492000189], + [-97.44383704299986, 27.224188544000029], + [-97.443470831999946, 27.205715236000103], + [-97.44505774599989, 27.188218492000047], + [-97.449086066999939, 27.18048737200003], + [-97.458363410999908, 27.174790757000054], + [-97.45543372299997, 27.161322333000058], + [-97.448597785999965, 27.145493882000139], + [-97.445952928999873, 27.132717190000093], + [-97.453114386999914, 27.120754299000154], + [-97.46580969999988, 27.112372137000094], + [-97.481312628999888, 27.107570705000015], + [-97.496896938999896, 27.106024481000148], + [-97.49819902299987, 27.100734768000095], + [-97.488189256999902, 27.088324286000059], + [-97.481556769999941, 27.074286200000117], + [-97.493153449999852, 27.063788153000033], + [-97.480946417999888, 27.038723049000126], + [-97.480702277999939, 27.021958726000108], + [-97.494496222999942, 27.012640692000062], + [-97.550200975999928, 27.009182033000073], + [-97.560943162999962, 27.004868882000082], + [-97.562814907999922, 26.993719794000143], + [-97.5599666009999, 26.950751044000086], + [-97.554310675999886, 26.933050848], + [-97.545521613999938, 26.918646552000112], + [-97.534087693999879, 26.906805731000148], + [-97.494536912999934, 26.890529690000122], + [-97.481312628999888, 26.877630927000112], + [-97.493153449999852, 26.85834381700009], + [-97.537709113999938, 26.89557526200015], + [-97.548410610999866, 26.899888414000159], + [-97.555246548999975, 26.890204169000114], + [-97.560047980999883, 26.871405341000141], + [-97.562489386999914, 26.851385809000092], + [-97.562001105999911, 26.837876695000105], + [-97.554758266999897, 26.825140692000062], + [-97.543690558999856, 26.822211005000142], + [-97.529652472999913, 26.822007554], + [-97.513661261999914, 26.817368882000054], + [-97.50129146999987, 26.806626695000048], + [-97.493031378999973, 26.791734117000189], + [-97.488392706999946, 26.775091864000146], + [-97.481516079999949, 26.73135000200007], + [-97.457630988999966, 26.667222398000106], + [-97.447255011999886, 26.601304429000081], + [-97.424916144999941, 26.534898179000137], + [-97.418609178999901, 26.50202057500006], + [-97.422271287999934, 26.508978583000115], + [-97.428863084999932, 26.517726955000015], + [-97.431711391999869, 26.523179429000052], + [-97.43683834499987, 26.509914455000015], + [-97.446034308999856, 26.502875067000147], + [-97.472645636999886, 26.495835679000081], + [-97.438547329999977, 26.485296942000033], + [-97.43968665299991, 26.476467190000065], + [-97.44481360599994, 26.461371161000059], + [-97.447987433999913, 26.433335679000137], + [-97.450428839999944, 26.423895575000031], + [-97.447865363999938, 26.420152085], + [-97.435129360999866, 26.419501044000057], + [-97.417062954999949, 26.415187893000123], + [-97.411936001999948, 26.404527085000026], + [-97.410796678999901, 26.391180731000091], + [-97.405018683999941, 26.378566799000012], + [-97.398060675999943, 26.376288153000033], + [-97.376372850999871, 26.374416408000073], + [-97.370228644999884, 26.372300523000078], + [-97.369862433999884, 26.364081122000144], + [-97.378814256999902, 26.343980210000112], + [-97.377064581999917, 26.337591864], + [-97.370106574999909, 26.33681875200007], + [-97.363270636999914, 26.340155341000113], + [-97.358062303999901, 26.344956773], + [-97.355946417999888, 26.348456122000087], + [-97.351918097999942, 26.353827216000056], + [-97.344390428999873, 26.349351304000081], + [-97.340199347999942, 26.341620184000149], + [-97.346058722999885, 26.337591864], + [-97.355295376999948, 26.327948309000035], + [-97.361073370999918, 26.306870835000026], + [-97.361073370999918, 26.285793361000074], + [-97.352894660999908, 26.276109117000132], + [-97.343739386999914, 26.277980861000103], + [-97.336537238999881, 26.281154690000065], + [-97.329823370999947, 26.281724351000108], + [-97.321848110999895, 26.276109117000132], + [-97.315785285999908, 26.264878648000106], + [-97.319162563999924, 26.257147528000118], + [-97.325672980999911, 26.250392971000068], + [-97.329253709999875, 26.242010809000121], + [-97.327626105999855, 26.23041413], + [-97.32290605399993, 26.221502997000144], + [-97.308745897999927, 26.201076565000093], + [-97.313954230999911, 26.180121161000145], + [-97.315256313999924, 26.150132554], + [-97.310536261999914, 26.123277085], + [-97.298247850999957, 26.111639716000084], + [-97.292713995999918, 26.109605210000055], + [-97.285633917999888, 26.105169989000089], + [-97.276234503999945, 26.100653387000037], + [-97.263783331999917, 26.098618882], + [-97.236439581999946, 26.098089911000116], + [-97.223866339999859, 26.09589264500012], + [-97.211984829999921, 26.091213283000016], + [-97.215402798999918, 26.076320705000157], + [-97.222157355999855, 26.067084052], + [-97.232533331999946, 26.064764716000028], + [-97.246693488999881, 26.070705471000068], + [-97.248036261999886, 26.053168036000116], + [-97.259836391999841, 26.029120184000178], + [-97.26036536399991, 26.015448309000064], + [-97.255604620999918, 25.99892812700007], + [-97.252023891999869, 25.992987372000144], + [-97.246693488999881, 25.988755601000108], + [-97.236236131999902, 25.984198309000178], + [-97.233225063999896, 25.985541083000058], + [-97.231760219999842, 25.989976304000052], + [-97.226226365999906, 25.99502187700007], + [-97.201730923999889, 26.005072333000058], + [-97.192616339999887, 26.011542059000149], + [-97.18529212099989, 26.022284247000144], + [-97.181467251999976, 26.038031317000119], + [-97.179554816999911, 26.05605703300013], + [-97.175363735999895, 26.070868231000034], + [-97.164784308999941, 26.076890367000132], + [-97.15184485599994, 26.075018622000144], + [-97.143177863999938, 26.04775625200007], + [-97.140736456999917, 26.019191799000069], + [-97.137521938999868, 25.974514065000122], + [-97.139267462366405, 25.965827043004154], + [-97.204940551999897, 25.960638733000124], + [-97.253051309999961, 25.963480937], + [-97.266357991999882, 25.960638733000124], + [-97.269200194999939, 25.944360657000018], + [-97.287648681999968, 25.928651021000135], + [-97.31098059099989, 25.922088114000147], + [-97.328447224999934, 25.933301900000018], + [-97.351107340999818, 25.918419088000164], + [-97.355112263999899, 25.91278635700003], + [-97.352270060999928, 25.894492899000156], + [-97.345164550999897, 25.871703593000163], + [-97.345732991999853, 25.852221578000169], + [-97.365990152999956, 25.843901673000019], + [-97.376015381999878, 25.846743877000094], + [-97.380123657999974, 25.853203431000125], + [-97.383120890999891, 25.860541484000052], + [-97.389890503999851, 25.865657451000018], + [-97.397822835999904, 25.865812480000059], + [-97.399476481999955, 25.861161601], + [-97.399889892999965, 25.855115459000061], + [-97.404179036999835, 25.851394756000147], + [-97.425418050999809, 25.854857076000187], + [-97.435727499, 25.869274801000117], + [-97.441308553999903, 25.884932760000154], + [-97.448259033, 25.892322490000154], + [-97.469420532999948, 25.892942607000137], + [-97.486318725999951, 25.895733134000082], + [-97.502209228999874, 25.90188263000006], + [-97.520270141999873, 25.91278635700003], + [-97.565176961999867, 25.954747620000134], + [-97.594322468999877, 25.966374818000091], + [-97.604786946999923, 25.979965719000077], + [-97.613055176999978, 25.995985413000042], + [-97.622641154999968, 26.009059550000089], + [-97.641451374999889, 26.022495423000137], + [-97.65987402399989, 26.030660299000047], + [-97.679614420999968, 26.034639385000119], + [-97.766947590999905, 26.03965199800011], + [-97.78030594899991, 26.043217672000154], + [-97.782321329999974, 26.058617249000136], + [-97.802010050999911, 26.063733215000141], + [-97.878181111999908, 26.063733215000141], + [-97.941665609999944, 26.056808574000158], + [-97.99923315399991, 26.064301656000012], + [-98.013056599999942, 26.063681539000029], + [-98.044165812999921, 26.048798726000186], + [-98.065456502999979, 26.042184143], + [-98.075145833999841, 26.046628317000099], + [-98.083310710999939, 26.070916240000187], + [-98.10310278399993, 26.074947001000098], + [-98.150231689999941, 26.063681539000029], + [-98.185061604999902, 26.065231832000151], + [-98.222656209999911, 26.075412089000011], + [-98.300429240999932, 26.111430562000109], + [-98.309808512999894, 26.121094056000047], + [-98.333037069, 26.153030090000115], + [-98.339264078999889, 26.159851380000148], + [-98.365774088999899, 26.160161438000145], + [-98.37727209499991, 26.163572083000147], + [-98.37727209499991, 26.173648987000107], + [-98.369339762999971, 26.194009502000043], + [-98.397193359999932, 26.201140849000083], + [-98.428845174999935, 26.21772898400009], + [-98.456543741999866, 26.225945536000111], + [-98.472382568999961, 26.207652079000141], + [-98.492949788999937, 26.230596415], + [-98.521526855999923, 26.240931702000083], + [-98.552791096999897, 26.248321431000093], + [-98.581626545999853, 26.262274068000082], + [-98.640563517999965, 26.241810201000035], + [-98.653663492999925, 26.244290670000012], + [-98.664696411999927, 26.250646871000029], + [-98.685289469999901, 26.268475240000086], + [-98.693325154999883, 26.270542298000052], + [-98.702239338999902, 26.271627503000119], + [-98.70425472099987, 26.276640117000099], + [-98.691464803999878, 26.29023101900016], + [-98.701412517, 26.299119365000095], + [-98.71316890499989, 26.303356833000137], + [-98.726217203999937, 26.304390360000028], + [-98.739911458999956, 26.303253479000105], + [-98.735932372999883, 26.320048320000083], + [-98.746396850999901, 26.332140605000077], + [-98.780839192999878, 26.35167429600007], + [-98.795851196999934, 26.368314108], + [-98.801328898999941, 26.372138163000145], + [-98.810294759999962, 26.372448222000017], + [-98.817322753999889, 26.368520813000046], + [-98.825022542999974, 26.366453756000098], + [-98.836081298999972, 26.372138163000145], + [-98.842334147999878, 26.36583363900003], + [-98.850834920999986, 26.364076640000135], + [-98.860524251999919, 26.366298727000142], + [-98.870213581999948, 26.372138163000145], + [-98.893028727999948, 26.367849020000065], + [-98.929899861999871, 26.392240295000093], + [-98.945376953999968, 26.378287659000094], + [-98.954136108999947, 26.39394561800016], + [-98.962843587999927, 26.399526673000182], + [-98.986950643999961, 26.400095114000052], + [-99.004055541999918, 26.393842265000117], + [-99.010515095999963, 26.392602031000095], + [-99.016432047999885, 26.394462383000089], + [-99.022994954999959, 26.403350729000024], + [-99.027878377999897, 26.406244609000012], + [-99.04764461299996, 26.406968079000094], + [-99.066351480999941, 26.404745993000105], + [-99.0854976, 26.407639872000075], + [-99.106426554999928, 26.423039450000161], + [-99.108907023999905, 26.434253235000099], + [-99.102524983999885, 26.446965637000076], + [-99.093739990999978, 26.459781393000142], + [-99.089373332999898, 26.47115020800014], + [-99.091492065999972, 26.484017639000129], + [-99.102990071999898, 26.512077942000147], + [-99.115108195, 26.525617167000135], + [-99.140946410999916, 26.5314049280001], + [-99.1648726, 26.540448303000076], + [-99.171280476999954, 26.563961080000141], + [-99.178385986999885, 26.613673808000058], + [-99.181124837999931, 26.62990020800008], + [-99.221354939999955, 26.73573354100013], + [-99.234093179999917, 26.783637594000041], + [-99.24827836199988, 26.827097473000052], + [-99.26279943899992, 26.844047343000156], + [-99.27967179399991, 26.859653625000092], + [-99.293960327999898, 26.876293437000029], + [-99.325973877999886, 26.911536763000086], + [-99.336980956999966, 26.92476593], + [-99.37684932499991, 26.953756409000064], + [-99.386176920999944, 26.962231344000159], + [-99.390362711999884, 26.973135071000129], + [-99.390156005999927, 26.993598938], + [-99.392791504999934, 27.004761048000134], + [-99.39932857299992, 27.012667542000159], + [-99.407312581999889, 27.014527893], + [-99.416045898999954, 27.014889628000091], + [-99.424650025, 27.017886862000083], + [-99.43986873399993, 27.028945618000094], + [-99.443744466999973, 27.034578349000029], + [-99.461727864999972, 27.056954244000011], + [-99.442039143999921, 27.089613749000179], + [-99.439403645999903, 27.098347067000148], + [-99.441419026999952, 27.107493795000138], + [-99.445734008999921, 27.114728496000012], + [-99.450178182999935, 27.120464579000057], + [-99.452451945999954, 27.125012106], + [-99.450333211999876, 27.145165914000174], + [-99.435786295999918, 27.188419088000117], + [-99.43198807799989, 27.20759104400004], + [-99.434029297999942, 27.226969706000105], + [-99.440902262999913, 27.244798075000134], + [-99.451831827999882, 27.261179504], + [-99.466120361999955, 27.276527405000152], + [-99.468962565999931, 27.278232727000116], + [-99.48040889499994, 27.283297018000113], + [-99.482941039999929, 27.28670766300003], + [-99.484878906999953, 27.294820862000122], + [-99.486584228999931, 27.297611389000011], + [-99.493198811999918, 27.301280416000097], + [-99.521362467999964, 27.311253967000098], + [-99.51479956099989, 27.321795960000159], + [-99.497591308999915, 27.338797506000091], + [-99.494025634999943, 27.348202617000041], + [-99.492888753999935, 27.358847961000137], + [-99.487721110999928, 27.371870422000157], + [-99.484620523999894, 27.39176584900018], + [-99.475706339999959, 27.414761862000134], + [-99.472915812999915, 27.426647441000156], + [-99.473639281999908, 27.463802796000053], + [-99.472915812999915, 27.468298645000075], + [-99.476429809999871, 27.482509664000034], + [-99.48040889499994, 27.490777893000185], + [-99.488289551999898, 27.49465362600013], + [-99.503689128999881, 27.495583802000098], + [-99.509502726999955, 27.50002797400019], + [-99.510071166999907, 27.510518291000054], + [-99.50707393499998, 27.533436788000174], + [-99.507203124999933, 27.57377024400013], + [-99.515006265999943, 27.588601380000156], + [-99.535030883999895, 27.604827779000075], + [-99.555029662999928, 27.613509420000028], + [-99.572263754, 27.618470358000181], + [-99.578232381999925, 27.622811178000163], + [-99.59024715199989, 27.642060649000186], + [-99.600169026999978, 27.646427307000167], + [-99.612442178999927, 27.643636780000023], + [-99.633526163999946, 27.633068950000151], + [-99.64486914099993, 27.632733052000148], + [-99.64864151999987, 27.636918843], + [-99.658692585999887, 27.654023743000138], + [-99.664738729999925, 27.659398092000103], + [-99.700369629999912, 27.659191386000046], + [-99.70569230199996, 27.663170471000043], + [-99.710673654999908, 27.670116197000155], + [-99.723055582999876, 27.687380880000106], + [-99.730652018999933, 27.691825053000017], + [-99.734036824999961, 27.702031148000074], + [-99.736310587999967, 27.713606669000129], + [-99.740444702999909, 27.722159119000068], + [-99.747343505999964, 27.726009013000109], + [-99.765197713999925, 27.731176657], + [-99.774576985999971, 27.73582753500007], + [-99.78685013899991, 27.748488261000105], + [-99.795428426999933, 27.761924134000154], + [-99.806962776999953, 27.771423010000049], + [-99.808166666999909, 27.77241444900001], + [-99.832919677999925, 27.776755269], + [-99.832971354999941, 27.782181295000058], + [-99.844779418999948, 27.793575949000157], + [-99.858241129999911, 27.803523662000075], + [-99.863357097, 27.804660543000168], + [-99.864726522999959, 27.814324036000087], + [-99.861858479999896, 27.836079814000115], + [-99.863357097, 27.845665792000105], + [-99.870927693999946, 27.8544766240001], + [-99.880203613999967, 27.859230856000082], + [-99.888006754999893, 27.864811910000114], + [-99.891288208999896, 27.876025696000156], + [-99.882684082999944, 27.891580302000179], + [-99.8788083499999, 27.901838074000167], + [-99.881340495999979, 27.906463115000022], + [-99.896765909999971, 27.912922669000082], + [-99.914335896999944, 27.928244731000134], + [-99.929916341999885, 27.946331482000161], + [-99.939683187999933, 27.961085104000162], + [-99.928288533999932, 27.975761210000073], + [-99.940716715999912, 27.983254293000087], + [-99.961852376999872, 27.98749176000014], + [-99.976605997999869, 27.992452698000093], + [-99.991127075999913, 28.007800599000163], + [-100.000583862999889, 28.020409648000097], + [-100.007456827999945, 28.033561300000159], + [-100.014123087999863, 28.050459493000133], + [-100.013502970999895, 28.056970724000124], + [-100.010505737999978, 28.06361114500011], + [-100.010195678999892, 28.068882141000145], + [-100.017585408999906, 28.070949199000111], + [-100.031538045999895, 28.081801250000169], + [-100.045077270999883, 28.09528879900013], + [-100.048022826999883, 28.1025234990001], + [-100.048901326999911, 28.115959371000045], + [-100.056497761999964, 28.137921855000016], + [-100.074894572999966, 28.154406637000093], + [-100.172873087999903, 28.198538310000075], + [-100.189202839999936, 28.201328838000151], + [-100.197626098999919, 28.20716827400004], + [-100.201191772999977, 28.220345764000015], + [-100.202948771999871, 28.234427592000046], + [-100.205946004999973, 28.242876689000028], + [-100.212818969999944, 28.245072938000035], + [-100.240724243999935, 28.249697978000185], + [-100.257932494999906, 28.26052419100013], + [-100.275089071999872, 28.277241516000075], + [-100.284339152999891, 28.296516825000097], + [-100.277931274999943, 28.314887797], + [-100.278551391999912, 28.331088359000105], + [-100.293899291999978, 28.353412577000157], + [-100.322631388999895, 28.38689890600007], + [-100.331674764999946, 28.422013041000113], + [-100.336325643999913, 28.45857411700014], + [-100.340201375999953, 28.464258525000091], + [-100.348314575999964, 28.47025299100001], + [-100.355549275999934, 28.478185323000062], + [-100.35678951099996, 28.489321595], + [-100.351621867999953, 28.496711325000106], + [-100.322631388999895, 28.510405579000022], + [-100.364024210999929, 28.524797465000134], + [-100.38422969599992, 28.537173971000087], + [-100.397768920999908, 28.557586162000135], + [-100.398750773999964, 28.568644918000146], + [-100.397097127999913, 28.592726135000092], + [-100.401437947999895, 28.602260437000083], + [-100.411463175999927, 28.609314270000098], + [-100.434820922999876, 28.619132793000162], + [-100.446189738999948, 28.626496684000145], + [-100.444897826999906, 28.64378245000016], + [-100.481381388999921, 28.68605377300004], + [-100.493938761999928, 28.70837799100012], + [-100.519053507999857, 28.804961243000051], + [-100.524996297999877, 28.814831441000038], + [-100.529285441999932, 28.819947408000033], + [-100.534453084999939, 28.830231018000021], + [-100.538638875999965, 28.835631205000183], + [-100.545150105999937, 28.838990174000102], + [-100.559671183999896, 28.839377747000114], + [-100.566234090999885, 28.842504171000073], + [-100.56969641099991, 28.849609681000075], + [-100.563340210999897, 28.862089539000081], + [-100.566234090999885, 28.869789327000078], + [-100.571763468999876, 28.873199972000108], + [-100.586542927999901, 28.879788717000096], + [-100.589540161999906, 28.883457743000079], + [-100.594966186999883, 28.899322408], + [-100.606955119999938, 28.91012278200013], + [-100.618840698999961, 28.917925924000045], + [-100.6243184, 28.924721375], + [-100.624783487999977, 28.937769674000137], + [-100.626695515999899, 28.948337504], + [-100.630777954999914, 28.95668324800009], + [-100.63790930199994, 28.962884420000151], + [-100.628917602999906, 28.984330140000097], + [-100.63279333499996, 29.005155742000156], + [-100.652223673999941, 29.044817404000028], + [-100.660853637999978, 29.102669169000038], + [-100.668966837999889, 29.116208394000026], + [-100.678165242999896, 29.119412334000103], + [-100.690825968999931, 29.121014303000138], + [-100.702039754999973, 29.123649800000138], + [-100.706845662999882, 29.130186870000117], + [-100.70973954299987, 29.135561218000177], + [-100.76250118099999, 29.173775940000056], + [-100.770097616999962, 29.187289327000045], + [-100.762087768999976, 29.208657532000061], + [-100.783171753999923, 29.243074036000095], + [-100.796142537999941, 29.257672628000151], + [-100.816089640999863, 29.270772604000015], + [-100.863890340999944, 29.290616353000118], + [-100.871796834999984, 29.296455791000099], + [-100.891227172999976, 29.318547465], + [-100.91473994999987, 29.337047628000121], + [-100.98739701399991, 29.366322327], + [-100.998300740999966, 29.372471822000151], + [-101.008067585999925, 29.380585023000052], + [-101.016232462999938, 29.390067648000027], + [-101.022175252999958, 29.400480449000057], + [-101.025947631999969, 29.414355571000115], + [-101.02961665899997, 29.442984315000032], + [-101.037781535999898, 29.460063375000132], + [-101.06796057199999, 29.469494324000109], + [-101.13477819799995, 29.487658590000066], + [-101.163561971999883, 29.501301168000154], + [-101.182708088999874, 29.522359314000155], + [-101.19141556799994, 29.528147075000149], + [-101.201776692999957, 29.53065338200004], + [-101.212861287999957, 29.531583558000179], + [-101.22278316299996, 29.540781962], + [-101.22647802799996, 29.554450378000084], + [-101.217770548999908, 29.584190165000066], + [-101.219010782999931, 29.610286764000151], + [-101.233919433999887, 29.622663269000114], + [-101.258775797999945, 29.620156962000138], + [-101.283580484999888, 29.607806295], + [-101.300969604999906, 29.594137878000183], + [-101.312157551999945, 29.597858581000182], + [-101.310865641999897, 29.612767233000127], + [-101.302726603999972, 29.633851217000156], + [-101.301072957999935, 29.649509176000109], + [-101.309780435999897, 29.654547628], + [-101.336238769999895, 29.654315084000032], + [-101.349028686999958, 29.660102845000026], + [-101.357684489999912, 29.667440898], + [-101.364350749999929, 29.676665141000015], + [-101.376623901999963, 29.700643005000117], + [-101.383367675999892, 29.718497213000077], + [-101.399619914999917, 29.740718079000104], + [-101.406544555999901, 29.752887879000113], + [-101.409309244999946, 29.765781149000119], + [-101.405097615999907, 29.778441874000137], + [-101.414011799999926, 29.774411113000056], + [-101.424217895999902, 29.771413880000139], + [-101.435095784999945, 29.770121969000101], + [-101.446102864999943, 29.771052144000137], + [-101.455688843999937, 29.775909729000077], + [-101.462432617999966, 29.788932190000097], + [-101.47090755299989, 29.791516012000031], + [-101.490286214999941, 29.785547384], + [-101.505763306999953, 29.773894348000042], + [-101.521808838999917, 29.76593617800016], + [-101.542892822999931, 29.771052144000137], + [-101.539688883999958, 29.779191182000076], + [-101.530516317999883, 29.796476949000137], + [-101.528604289999947, 29.801437887000091], + [-101.531911580999946, 29.811101380000039], + [-101.539172119999932, 29.817974345], + [-101.546458496999904, 29.820144755000101], + [-101.549765787999902, 29.815700582000161], + [-101.553977416999942, 29.796683655000109], + [-101.564906982999915, 29.786477560000137], + [-101.580280720999895, 29.781568298000096], + [-101.632215535999904, 29.775651347000107], + [-101.794531209999917, 29.795856832000183], + [-101.80298030599991, 29.801437887000091], + [-101.805977539999915, 29.811928203000051], + [-101.812695474999941, 29.812031556000179], + [-101.824090128999941, 29.805184428000032], + [-101.85760229499995, 29.805184428000032], + [-101.877523559999958, 29.810842997000165], + [-101.887419596999948, 29.812289938000148], + [-101.895455281999929, 29.808620911000062], + [-101.902379923999916, 29.803246562000098], + [-101.910880696999925, 29.799887594], + [-101.920156616999947, 29.79818227100013], + [-101.929613403999909, 29.797717183000188], + [-101.942661702999956, 29.803608297], + [-101.957053588999969, 29.814046936000025], + [-101.972246460999983, 29.818181051000138], + [-101.98793025699986, 29.805184428000032], + [-102.014595295999911, 29.810998027000025], + [-102.10934403499995, 29.80210968100009], + [-102.145646728999907, 29.815700582000161], + [-102.157248087999875, 29.824537252000184], + [-102.203679362999978, 29.846138001000057], + [-102.239775349999974, 29.849135234000144], + [-102.253443765999904, 29.855284729000132], + [-102.258275513999919, 29.873474833000088], + [-102.276181396999888, 29.869547425000022], + [-102.289022990999868, 29.878125712000141], + [-102.30217464199994, 29.889391174000096], + [-102.321010701999953, 29.893938700000135], + [-102.330234944999958, 29.888926087000172], + [-102.33976924699995, 29.870632629000013], + [-102.351060547999921, 29.866601868000103], + [-102.363230346999927, 29.864276429000157], + [-102.370723429999956, 29.857765198000109], + [-102.374547485999912, 29.848101705000161], + [-102.376588704999861, 29.821488342000137], + [-102.380051025999904, 29.8113856], + [-102.404132242999935, 29.780793152000101], + [-102.406095947999887, 29.777279155000045], + [-102.515288248999937, 29.784720561000157], + [-102.523065551999949, 29.78231760700011], + [-102.531127075999947, 29.769915263000044], + [-102.541539876999977, 29.762473857000103], + [-102.543348551999969, 29.760122579000083], + [-102.546578328999942, 29.757874654000162], + [-102.553141235999931, 29.756737773000154], + [-102.558308879999927, 29.7590890500001], + [-102.562882242999976, 29.769346822000088], + [-102.566757975999934, 29.771052144000137], + [-102.585309814999874, 29.76469594400011], + [-102.62122493499993, 29.747280986000092], + [-102.638743245999976, 29.74371531200002], + [-102.676053629999927, 29.744490458000129], + [-102.683469197999941, 29.74371531200002], + [-102.691039794999895, 29.736816508000132], + [-102.69362361799999, 29.729400940000133], + [-102.694708821999981, 29.720615947000127], + [-102.697757731999928, 29.709557190000126], + [-102.726748209999897, 29.664495341000091], + [-102.731269897999923, 29.650594381000118], + [-102.735507364999975, 29.649509176000109], + [-102.751656249999968, 29.622456564000075], + [-102.751759602999897, 29.620156962000138], + [-102.761345580999986, 29.603413798000091], + [-102.767598429999907, 29.597290141000045], + [-102.779664876999888, 29.592303366000081], + [-102.774083821999952, 29.579616801000142], + [-102.776460937999914, 29.575947774000142], + [-102.785891886999963, 29.571813660000103], + [-102.780750081999969, 29.558248597000116], + [-102.786512003999931, 29.550497131000114], + [-102.795477864999881, 29.544270122000128], + [-102.827310547999929, 29.470502014000189], + [-102.833950968999929, 29.461355286000114], + [-102.839066935999924, 29.45195017500005], + [-102.841133992999886, 29.438307597000133], + [-102.838705200999925, 29.42693878200005], + [-102.834984497999912, 29.41569915800001], + [-102.835191202999866, 29.403839417000157], + [-102.844544636999913, 29.390532736000139], + [-102.845578165999981, 29.38471913700009], + [-102.838033406999941, 29.370533956000131], + [-102.837671671999942, 29.366322327], + [-102.846560018999952, 29.361748963000039], + [-102.853872233999937, 29.360999655000128], + [-102.859866699999969, 29.361154683000066], + [-102.864956827999947, 29.359526876000032], + [-102.876971598999916, 29.350871073000079], + [-102.883069417999963, 29.343765564000151], + [-102.885188151999941, 29.333378601000121], + [-102.885498209999938, 29.314800924000096], + [-102.89939917, 29.276095276000078], + [-102.899709228999981, 29.263899638000154], + [-102.892138630999938, 29.254391175000151], + [-102.867954060999963, 29.240386862000079], + [-102.858781493999885, 29.229147237000021], + [-102.869866088999885, 29.224780579000125], + [-102.896892862999934, 29.220284730000103], + [-102.942264770999955, 29.190209046000049], + [-102.947535766999891, 29.182018331], + [-102.969756632999932, 29.192844543000049], + [-102.988385986999887, 29.177134908000156], + [-103.015826171999947, 29.126776225000086], + [-103.024275268999943, 29.116156718000113], + [-103.032621012999911, 29.110213928000107], + [-103.072541055999949, 29.091403707], + [-103.080757609999893, 29.085202536000011], + [-103.0855893559999, 29.075719910000132], + [-103.091532144999917, 29.057865702000171], + [-103.095356201999948, 29.060294495000122], + [-103.104683797999982, 29.057865702000171], + [-103.109205484999919, 29.023371684], + [-103.12277054899991, 28.996474101], + [-103.147988647999952, 28.985105286000092], + [-103.187107706999981, 28.990221253000087], + [-103.241755534999925, 29.00350209600019], + [-103.301545166999887, 29.002365214000079], + [-103.316247111999971, 29.010065002000161], + [-103.3115144759999, 29.026042538000112], + [-103.309994262999879, 29.031174825000122], + [-103.324799560999892, 29.026808167000027], + [-103.330483968999943, 29.02373341900001], + [-103.342602091999936, 29.041225892000156], + [-103.351671305999901, 29.039417217000064], + [-103.360533813999908, 29.029831238000057], + [-103.372083496999934, 29.02373341900001], + [-103.386630411999903, 29.028797710000063], + [-103.414639037999905, 29.052413839000096], + [-103.423604899999944, 29.057865702000171], + [-103.435697184999924, 29.061121318000161], + [-103.478536946999867, 29.082050273000149], + [-103.52974829199988, 29.126776225000086], + [-103.535587727999967, 29.135121969000167], + [-103.538223226999975, 29.14240834500005], + [-103.541711385999932, 29.148816224000186], + [-103.55023799699994, 29.154655660000074], + [-103.558015299999951, 29.156205953], + [-103.584990396999899, 29.154655660000074], + [-103.673124552999937, 29.173569235000016], + [-103.702476766999908, 29.187857768000086], + [-103.749476481999892, 29.222971904000033], + [-103.759062459999981, 29.226847637000091], + [-103.770767171999964, 29.229844869000189], + [-103.77771765199995, 29.235296733000084], + [-103.769423584999899, 29.257543437000109], + [-103.774229492999908, 29.267516989000129], + [-103.78366044199997, 29.274803365000125], + [-103.794176595999929, 29.277593893000173], + [-103.864120646999936, 29.281366272000085], + [-103.928121907999923, 29.293019308000069], + [-104.019149943999949, 29.320330303000091], + [-104.057312988999925, 29.339037171000157], + [-104.105423746999904, 29.385675150000125], + [-104.139788573999937, 29.400583802000185], + [-104.161647705999968, 29.416758525], + [-104.194513916, 29.44892710400002], + [-104.212290608999936, 29.484661357000121], + [-104.218698486999969, 29.489829000000142], + [-104.22714758399988, 29.493032939000031], + [-104.251022094999954, 29.508587545000054], + [-104.267170979999946, 29.526570943000124], + [-104.292750813999902, 29.532823792000116], + [-104.320604411999952, 29.53225535100016], + [-104.338484456999922, 29.524012960000121], + [-104.349026448999894, 29.537578024000098], + [-104.430442667999912, 29.582794902], + [-104.437832397999912, 29.585430399000117], + [-104.444007731999889, 29.589202779000132], + [-104.448555257999928, 29.597677714000142], + [-104.452069254999884, 29.607108664000108], + [-104.455221517999931, 29.61338735000011], + [-104.469380859999973, 29.625402120000089], + [-104.51663895799993, 29.654315084000032], + [-104.530824137999886, 29.667905986000122], + [-104.535035766999925, 29.677802022000108], + [-104.535190795999966, 29.687853088000125], + [-104.537102824999891, 29.702115784000014], + [-104.54366573199988, 29.716430156000015], + [-104.561390747999894, 29.745420634000183], + [-104.570279093999986, 29.78751108900012], + [-104.583585774999918, 29.802574768000014], + [-104.601207437999904, 29.814770407000125], + [-104.619681762999917, 29.83306386400001], + [-104.623764200999929, 29.841487122000089], + [-104.63758764699989, 29.887995911000033], + [-104.656346191999972, 29.908201396000109], + [-104.660635335999942, 29.918433330000184], + [-104.663477539999917, 29.923084208000049], + [-104.676525838999879, 29.93683014], + [-104.680479085999934, 29.942307841000073], + [-104.682468628999885, 29.952126363000147], + [-104.680117349999946, 29.967784322000014], + [-104.680479085999934, 29.976465963000166], + [-104.6991084389999, 30.031449687000091], + [-104.701588907999877, 30.055324199], + [-104.69859167499996, 30.075271301000029], + [-104.684639037999972, 30.111134746000133], + [-104.680479085999934, 30.134130758000097], + [-104.678670410999942, 30.170355937000139], + [-104.68156429099993, 30.192938538000178], + [-104.695852823999914, 30.2084414670001], + [-104.715231486999883, 30.243994853000132], + [-104.724584920999931, 30.252211406000086], + [-104.742154907999904, 30.259859518000056], + [-104.749389608999962, 30.264458721000111], + [-104.76168859899991, 30.284199117000171], + [-104.774142619999893, 30.311587627000037], + [-104.788767048999958, 30.335927226000038], + [-104.807732300999916, 30.346417541000093], + [-104.812899943999923, 30.350706686000038], + [-104.814967000999886, 30.360576884000025], + [-104.816000528999865, 30.371997376000039], + [-104.818274291999884, 30.380523987000132], + [-104.824268757999917, 30.387190247000049], + [-104.837549601999925, 30.39406321200012], + [-104.844939330999921, 30.401039530000119], + [-104.853259236999889, 30.412149964000136], + [-104.855016235999955, 30.417472636000085], + [-104.853620972999892, 30.423983866000142], + [-104.852432413999864, 30.4388666790001], + [-104.854654500999956, 30.448736877000087], + [-104.864473022999931, 30.462017721000095], + [-104.866695109999938, 30.473024800000175], + [-104.865248169999944, 30.479897767000139], + [-104.85961543899991, 30.491111552000106], + [-104.859253703999912, 30.497261048000055], + [-104.863026082999937, 30.50237701500005], + [-104.879717570999887, 30.510851949000156], + [-104.882146362999933, 30.520928854000189], + [-104.884006714999941, 30.541857809000177], + [-104.886590535999943, 30.55188303700011], + [-104.898166056999898, 30.569401347000067], + [-104.928241739999962, 30.599528707000147], + [-104.934339559999913, 30.610535787000131], + [-104.941057495999942, 30.614049785000091], + [-104.972735148999945, 30.618028870000089], + [-104.982760375999973, 30.620716044000019], + [-104.989116577999908, 30.629552714000013], + [-104.991648722999898, 30.640301412000113], + [-104.992940633999936, 30.651463522000157], + [-104.995782837999911, 30.661747132000144], + [-105.008495239999959, 30.676991679000096], + [-105.027977254999954, 30.690117493000159], + [-105.049474650999898, 30.699264221000149], + [-105.06812984299988, 30.702674866000066], + [-105.087043416999904, 30.709806214000125], + [-105.13360388299995, 30.757916972000189], + [-105.140425170999919, 30.750475566000077], + [-105.153240926999899, 30.763187969000015], + [-105.157788452999924, 30.765720113000029], + [-105.160889037999965, 30.764118144000165], + [-105.162697712999957, 30.774918518], + [-105.167296916999916, 30.781171367000113], + [-105.174789998999941, 30.783961894000143], + [-105.185125284999955, 30.784633688000142], + [-105.195305542999918, 30.787940980000045], + [-105.204917358999936, 30.802410381000172], + [-105.212100382999978, 30.805717672000171], + [-105.218249878999956, 30.806802877000067], + [-105.22925695899994, 30.810213522000097], + [-105.232874308999925, 30.809128316000013], + [-105.239850626999925, 30.801531881000031], + [-105.243984741999853, 30.799103089000155], + [-105.24904903299992, 30.798844706000111], + [-105.25948767099996, 30.802978821000025], + [-105.26584387299998, 30.808404847000091], + [-105.270753133999918, 30.814347636000107], + [-105.27700598199992, 30.819411926], + [-105.334315145, 30.843803202000018], + [-105.363770711999905, 30.850366109], + [-105.376173055999956, 30.859564514000013], + [-105.415550496999955, 30.90245595400016], + [-105.496682495999906, 30.956509501000042], + [-105.530788940999884, 30.991701152000118], + [-105.555955363999914, 31.00260487900006], + [-105.565722208999958, 31.016660868000187], + [-105.578641316999978, 31.052162577000118], + [-105.590940307999915, 31.071437887000073], + [-105.605874796999885, 31.081928203000032], + [-105.62349645999987, 31.090351461000111], + [-105.64380529799989, 31.103683980000042], + [-105.668041544999966, 31.127868551000105], + [-105.675224568999923, 31.131950989000117], + [-105.692277791999956, 31.137635396000164], + [-105.768190470999883, 31.180010071000154], + [-105.777853963999902, 31.192722474000121], + [-105.784830281999902, 31.211015930000187], + [-105.861983194999965, 31.288375550000026], + [-105.880147461999897, 31.300881246000117], + [-105.896993978999973, 31.305997213000111], + [-105.897149007999914, 31.309511211000157], + [-105.908802042999895, 31.317004293000096], + [-105.928051513999918, 31.326461080000158], + [-105.934562743999976, 31.335504456000123], + [-105.941771606999936, 31.3523509730001], + [-105.948515381999968, 31.361239319000035], + [-105.961201945999917, 31.371006165000082], + [-106.004739338999954, 31.396947734000108], + [-106.021146606999906, 31.402167053000042], + [-106.046261352999935, 31.404647522000019], + [-106.065304118999904, 31.410952047000123], + [-106.099384724999965, 31.428883769], + [-106.141113444999903, 31.439167379000182], + [-106.16431616299991, 31.447797343000119], + [-106.17447058199987, 31.460251363000012], + [-106.209248819999914, 31.47730458600013], + [-106.215424154999894, 31.48391917000005], + [-106.21743953499994, 31.488725077000069], + [-106.218731444999989, 31.494616191000048], + [-106.22289139899992, 31.504589742000164], + [-106.232658243999978, 31.519937643000119], + [-106.274748698999915, 31.562622376000135], + [-106.286298380999952, 31.580140687], + [-106.312291626999922, 31.648611959], + [-106.331308553999889, 31.6821499630001], + [-106.358490356999965, 31.71754832000012], + [-106.391769979999907, 31.745918681000134], + [-106.428951172999916, 31.758476054000042], + [-106.473134521999924, 31.755065409000039], + [-106.492797404999962, 31.759044495000111], + [-106.501425247999904, 31.766343684000063], + [-106.506052409999953, 31.770258281000153], + [-106.517188679999975, 31.773823954000122], + [-106.55896907599994, 31.773875631000024], + [-106.584858968999967, 31.773927307000136], + [-106.610697184999893, 31.773978984000152], + [-106.63658707699993, 31.774082337], + [-106.662476969999958, 31.774134014000097], + [-106.688315185999883, 31.774237366000037], + [-106.714205077999921, 31.774237366000037], + [-106.740094970999948, 31.774289042000035], + [-106.765933187999877, 31.774392395000163], + [-106.791823079999915, 31.774444072000094], + [-106.817712972999942, 31.774495748], + [-106.843602864999966, 31.774547425000108], + [-106.869441080999906, 31.774599101000135], + [-106.895330973999933, 31.774702453000046], + [-106.921220865999956, 31.774702453000046], + [-106.947110758999898, 31.774754130000147], + [-106.973000651999939, 31.774857483000105], + [-106.998890543999963, 31.77490916], + [-107.02478043699999, 31.774960836000119], + [-107.050670328999942, 31.775012513000135], + [-107.076508544999953, 31.775064189000048], + [-107.102398437999895, 31.775167541000158], + [-107.128288329999933, 31.775167541000158], + [-107.154126546999947, 31.775219218000089], + [-107.180016439999889, 31.775374248000119], + [-107.205906331999913, 31.775374248000119], + [-107.231796224999954, 31.775425924000146], + [-107.257634440999965, 31.775477601000077], + [-107.283524332999903, 31.77552927700016], + [-107.309414225999944, 31.7756326290001], + [-107.33525244199987, 31.775684306000031], + [-107.361142333999894, 31.77578765900013], + [-107.387032226999935, 31.77578765900013], + [-107.412896281999949, 31.775839335000157], + [-107.438786173999901, 31.775942689000189], + [-107.464676065999925, 31.775994365000102], + [-107.490565958999952, 31.776097717000042], + [-107.516404175999881, 31.776149394000143], + [-107.542294067999919, 31.776201070000141], + [-107.568183960999946, 31.776252747000072], + [-107.594073852999983, 31.776304423000099], + [-107.619963745999925, 31.776407776000113], + [-107.645853638999952, 31.776459453000129], + [-107.671743530999976, 31.776459453000129], + [-107.697633423999918, 31.776562805000154], + [-107.723471639999943, 31.77661448200017], + [-107.749361531999881, 31.776666158000083], + [-107.775251424999908, 31.776717835000014], + [-107.801141316999946, 31.776769511000012], + [-107.826979532999957, 31.77687286400014], + [-107.852869425999899, 31.776924541000156], + [-107.878759317999936, 31.776924541000156], + [-107.904597534999951, 31.777027893000181], + [-107.930487427999978, 31.777079569000094], + [-107.95637732, 31.777131246000025], + [-107.982215535999941, 31.777182923000126], + [-108.008105428999883, 31.777234599000124], + [-108.033995320999921, 31.777337952000082], + [-108.059885213999948, 31.777389629000183], + [-108.08572342899997, 31.777389629000183], + [-108.111613321999911, 31.777544657000035], + [-108.137503214999938, 31.777544657000035], + [-108.163341430999949, 31.777648010000135], + [-108.18928, 31.777699687000066], + [-108.215121216999933, 31.777751364], + [-108.215121216999933, 31.770723369000066], + [-108.215121216999933, 31.763695374000164], + [-108.215121216999933, 31.756667379000149], + [-108.215121216999933, 31.749639384000048], + [-108.215121216999933, 31.742559713000119], + [-108.215121216999933, 31.73558339500012], + [-108.215121216999933, 31.728555400000019], + [-108.215121216999933, 31.721475728000186], + [-108.215121216999933, 31.714396057000059], + [-108.215121216999933, 31.707419739000088], + [-108.215121216999933, 31.700391744000157], + [-108.215121216999933, 31.693312073000058], + [-108.215121216999933, 31.686284079000032], + [-108.215121216999933, 31.67925608400013], + [-108.215121216999933, 31.672176412000098], + [-108.215069539999917, 31.665148418000101], + [-108.215017863999989, 31.658172099000083], + [-108.215017863999989, 31.651092428000155], + [-108.215017863999989, 31.644064433000054], + [-108.215017863999989, 31.637036438000152], + [-108.215017863999989, 31.630008443000136], + [-108.215017863999989, 31.622980449000025], + [-108.215017863999989, 31.615952454000123], + [-108.215017863999989, 31.608872782], + [-108.215017863999989, 31.601844788000093], + [-108.215017863999989, 31.594816793000078], + [-108.215017863999989, 31.587788798000147], + [-108.215017863999989, 31.580760803000075], + [-108.215017863999989, 31.573732808000145], + [-108.215017863999989, 31.56665313800012], + [-108.215017863999989, 31.559625143000019], + [-108.214966186999888, 31.552597148000117], + [-108.214966186999888, 31.545569153000187], + [-108.214966186999888, 31.538489482000088], + [-108.214966186999888, 31.531461487000158], + [-108.214966186999888, 31.524485169000073], + [-108.214966186999888, 31.517405498000144], + [-108.214966186999888, 31.510377503000043], + [-108.214966186999888, 31.50340118400014], + [-108.214966186999888, 31.496321513000012], + [-108.214966186999888, 31.489241842000084], + [-108.214966186999888, 31.482213847000182], + [-108.214966186999888, 31.475237529000182], + [-108.214966186999888, 31.468157857000065], + [-108.214966186999888, 31.461129862000135], + [-108.214966186999888, 31.454101868000137], + [-108.214966186999888, 31.447073873000036], + [-108.214914510999876, 31.440045878000134], + [-108.214862833999959, 31.432966208000025], + [-108.214862833999959, 31.425938213000094], + [-108.214862833999959, 31.418910218000079], + [-108.214862833999959, 31.411882223000177], + [-108.214862833999959, 31.404802552000049], + [-108.214862833999959, 31.39782623300006], + [-108.214862833999959, 31.390798239000148], + [-108.214862833999959, 31.383718567000031], + [-108.214862833999959, 31.376638896000188], + [-108.214862833999959, 31.369662578000103], + [-108.214862833999959, 31.362634583], + [-108.214862833999959, 31.355554911000169], + [-108.214862833999959, 31.348526917000143], + [-108.214862833999959, 31.341550598000154], + [-108.214862833999959, 31.33447092700014], + [-108.214811157999947, 31.327442932000125], + [-108.257573404999874, 31.327391256000013], + [-108.300335652999976, 31.327391256000013], + [-108.343020385999878, 31.327391256000013], + [-108.385730957999883, 31.327391256000013], + [-108.428441528999983, 31.327391256000013], + [-108.471152099999898, 31.327391256000013], + [-108.5138368329999, 31.327391256000013], + [-108.5565474039999, 31.327391256000013], + [-108.599309651999917, 31.327391256000013], + [-108.642020222999918, 31.327391256000013], + [-108.684756632999935, 31.327391256000013], + [-108.727467203999936, 31.327391256000013], + [-108.77017777599994, 31.327391256000013], + [-108.812914185999944, 31.327391256000013], + [-108.855624756999958, 31.327391256000013], + [-108.898335327999959, 31.327391256000013], + [-108.941045898999874, 31.327391256000013], + [-108.968281966999911, 31.327391256000013], + [-108.983730631999961, 31.327391256000013], + [-109.026492879999893, 31.327391256000013], + [-109.047430462999884, 31.327391256000013], + [-109.069203450999893, 31.327391256000013], + [-109.111914022999983, 31.327391256000013], + [-109.154598755999899, 31.327391256000013], + [-109.197361003999916, 31.327391256000013], + [-109.240071574999916, 31.327339580000015], + [-109.282782145999917, 31.327339580000015], + [-109.325518554999931, 31.327339580000015], + [-109.368229125999932, 31.327339580000015], + [-109.410913858999933, 31.327339580000015], + [-109.453650268999937, 31.327339580000015], + [-109.496386677999951, 31.327339580000015], + [-109.539071411999956, 31.327339580000015], + [-109.581807820999956, 31.327339580000015], + [-109.624492553999957, 31.327339580000015], + [-109.667177287999962, 31.327339580000015], + [-109.709965372999974, 31.327339580000015], + [-109.752650105999891, 31.327339580000015], + [-109.795334839999882, 31.327339580000015], + [-109.838122924999908, 31.327339580000015], + [-109.880807658999913, 31.327339580000015], + [-109.923595743999925, 31.327287903000084], + [-109.966280477999931, 31.327236227000171], + [-110.008965210999932, 31.327236227000171], + [-110.051701619999932, 31.327236227000171], + [-110.094386352999933, 31.327236227000171], + [-110.137071085999935, 31.327236227000171], + [-110.179807495999938, 31.327236227000171], + [-110.222543905999956, 31.327236227000171], + [-110.265228637999954, 31.327236227000171], + [-110.308016723999884, 31.327236227000171], + [-110.350753132999898, 31.327236227000171], + [-110.393489542999902, 31.327236227000171], + [-110.436174276999907, 31.327236227000171], + [-110.478859008999905, 31.327236227000171], + [-110.521595418999922, 31.327236227000171], + [-110.56428015199991, 31.327236227000171], + [-110.606964884999911, 31.327236227000171], + [-110.649727132999928, 31.327236227000171], + [-110.692437703999929, 31.327236227000171], + [-110.735199950999956, 31.327236227000171], + [-110.777884684999947, 31.327236227000171], + [-110.820595255999947, 31.327236227000171], + [-110.863357503999879, 31.327236227000171], + [-110.90606807499988, 31.327236227000171], + [-110.948752807999966, 31.327184550000155], + [-111.006268677999913, 31.327184550000155], + [-111.067117675999938, 31.333644104000101], + [-111.094454508999959, 31.342532451000025], + [-111.145924235999942, 31.359068909000129], + [-111.197445637999948, 31.375553690000103], + [-111.248863687999915, 31.392141826000014], + [-111.300333414999912, 31.408729960000116], + [-111.35180314199998, 31.425318095000122], + [-111.403298705999973, 31.441854554000102], + [-111.454768432999956, 31.458339335000105], + [-111.506238159999953, 31.474979147000013], + [-111.91546382699994, 31.601431376000065], + [-112.32471533199994, 31.727986959000148], + [-112.73396683799993, 31.854542542000146], + [-113.14321834299993, 31.981046448000129], + [-113.55244401099992, 32.107602031000013], + [-113.96169551699991, 32.234131775], + [-114.370921183999911, 32.360687358000163], + [-114.780146850999898, 32.487242940000058], + [-114.81678544199994, 32.49853424100003], + [-114.819373117999916, 32.499363302000162], + [-114.822108115, 32.500239563], + [-114.809447388999956, 32.511324158000022], + [-114.795546427999881, 32.552226054000116], + [-114.794202839999912, 32.574111024000061], + [-114.802677774999921, 32.594497375000103], + [-114.786813110999901, 32.621033224000101], + [-114.781542113999961, 32.628061218000127], + [-114.758804484999899, 32.644830221000078], + [-114.751156371999912, 32.652219951000077], + [-114.739477498999946, 32.669066468000054], + [-114.731209269999894, 32.686636454000123], + [-114.72387121699991, 32.711518657000099], + [-114.724284266999888, 32.712835255000144], + [-114.724284627999921, 32.712836405000147], + [-114.764540568999948, 32.709839173000134], + [-114.838076131999927, 32.704206442000029], + [-114.91161169499992, 32.698702902000107], + [-114.985198934999914, 32.693121847], + [-115.058734496999975, 32.687566630000092], + [-115.132270060999957, 32.68198557500007], + [-115.20580562399995, 32.676456197000064], + [-115.279289510999917, 32.67082346600013], + [-115.352850911999909, 32.665345765000055], + [-115.426386474999887, 32.659764710000118], + [-115.499922037999951, 32.654209493000124], + [-115.573535115999874, 32.648654277000034], + [-115.647019002999926, 32.643073222000098], + [-115.720528727999906, 32.637518006000093], + [-115.79406429099997, 32.63196278900007], + [-115.867599853999963, 32.626407573000066], + [-115.941212931999956, 32.620826518000158], + [-116.014748494999935, 32.615271302000124], + [-116.088232381999916, 32.609664408000029], + [-116.161742106999881, 32.604160869000125], + [-116.235329345999887, 32.598553975000087], + [-116.308890747999868, 32.59302459700011], + [-116.382426310999946, 32.587469381000076], + [-116.455961873999925, 32.581888326000168], + [-116.529471598999905, 32.576333110000164], + [-116.603007161999969, 32.570803732000158], + [-116.676542724999948, 32.565222677000136], + [-116.750104126999943, 32.559667460000028], + [-116.823639688999918, 32.554086406000025], + [-116.897201090999914, 32.548531189000116], + [-116.970736653999893, 32.542975973000111], + [-117.044220540999959, 32.537420756000088], + [-117.125121488972255, 32.531669490003665], + [-117.126128709999904, 32.539496161000116], + [-117.132191535999908, 32.568060614000117], + [-117.133948974999925, 32.592895686000091], + [-117.137006646999879, 32.615760699000035], + [-117.149810350999928, 32.646307684000121], + [-117.166371222999899, 32.669501044000143], + [-117.188384568999908, 32.682684637000094], + [-117.223974835999897, 32.684714441], + [-117.226186031999887, 32.697206661000124], + [-117.22002959199996, 32.706596241000128], + [-117.205813761999948, 32.71340310900014], + [-117.190956105999959, 32.713699247000037], + [-117.187859490999884, 32.70593556900009], + [-117.168058045999928, 32.698805086000121], + [-117.164173956999903, 32.68378327000012], + [-117.155853456999893, 32.672367021000028], + [-117.142796618999853, 32.653115941000138], + [-117.131277764999879, 32.630990883000138], + [-117.124085536999871, 32.606766157000109], + [-117.115089206999897, 32.600261543000087], + [-117.103384153999883, 32.606810452000147], + [-117.102311058999916, 32.620468257000155], + [-117.119891983999906, 32.652633962000053], + [-117.119016572999868, 32.670609972000065], + [-117.133208787999962, 32.689846096000124], + [-117.146325055999853, 32.694262023000121], + [-117.166574673999946, 32.706773179000109], + [-117.177343384999929, 32.715030606000155], + [-117.174638124999916, 32.726732120000136], + [-117.209857763999892, 32.725284143000138], + [-117.224243916999868, 32.718640552000139], + [-117.237833569999935, 32.707223084000034], + [-117.236561652999853, 32.669623114000117], + [-117.245279620999895, 32.67458421], + [-117.255279100999914, 32.69139232], + [-117.257476365999906, 32.701727606000176], + [-117.254727270999908, 32.746449669000171], + [-117.253877191999919, 32.76352008500011], + [-117.25755620799994, 32.784244680000157], + [-117.278793012999913, 32.822812478000131], + [-117.283597250999961, 32.837653985000131], + [-117.273789152999967, 32.851145690000081], + [-117.266038692999956, 32.847035410000089], + [-117.259873763999849, 32.854066839000112], + [-117.253640939999912, 32.88508136300014], + [-117.258065553999899, 32.908983319000086], + [-117.274769660999908, 32.993475653000147], + [-117.279564675999907, 33.007223916000115], + [-117.286040818999908, 33.023871161000116], + [-117.2980752389999, 33.035903980000072], + [-117.322161222999881, 33.108500616000086], + [-117.36191411699987, 33.165943481000014], + [-117.508844211999886, 33.335205337], + [-117.596302863999895, 33.390448309000092], + [-117.654367641999869, 33.441961981000176], + [-117.670725063999882, 33.452297268000095], + [-117.715199347999885, 33.474839585000083], + [-117.735218878999945, 33.484767971000068], + [-117.77651933499989, 33.529364325000145], + [-117.82457434799997, 33.561672268000066], + [-117.880251047999963, 33.592880177000112], + [-117.930220196999954, 33.607918492000138], + [-117.978505011999943, 33.635972398], + [-118.090536212999879, 33.73097720700018], + [-118.117387491999878, 33.743606546000095], + [-118.15258092499991, 33.758765400000144], + [-118.173639274999942, 33.763283160000114], + [-118.185533151999948, 33.757506898000102], + [-118.198966755999976, 33.764035657000122], + [-118.207209763999884, 33.763833569], + [-118.192498130999894, 33.752308925000179], + [-118.186618182999922, 33.741484335000095], + [-118.185188912999877, 33.732372421000051], + [-118.192862659999946, 33.731728564000079], + [-118.2024791649999, 33.739265809000031], + [-118.202745494999903, 33.746575200000152], + [-118.209734967999921, 33.742286855000046], + [-118.213827207999941, 33.749044833000099], + [-118.22150631399991, 33.770900783000158], + [-118.230702277999882, 33.769110419000171], + [-118.240335542999901, 33.767583137000187], + [-118.250091068999893, 33.763683542000123], + [-118.254551898999949, 33.765400526000164], + [-118.260365363999924, 33.760402736000074], + [-118.269514487999928, 33.753597021000175], + [-118.276770371999959, 33.756615928000102], + [-118.273791382999946, 33.750289208000041], + [-118.278316925999931, 33.738745878000188], + [-118.274471902999849, 33.723754604000035], + [-118.272206183999884, 33.715277411000116], + [-118.282441124999934, 33.716237389000142], + [-118.281725180999857, 33.711682553000131], + [-118.27608414699985, 33.70771156500011], + [-118.282689678999901, 33.707999821000058], + [-118.29130663299992, 33.7032082650001], + [-118.300881895999936, 33.709848763000096], + [-118.317518371999938, 33.713990356000025], + [-118.331460242999924, 33.720051438000056], + [-118.354816575999848, 33.726264817000086], + [-118.362286289999901, 33.735687043000141], + [-118.376078876999884, 33.737157499000105], + [-118.385001414999891, 33.740116127000036], + [-118.394188664999945, 33.736687222000015], + [-118.401357958999924, 33.735558976], + [-118.404808442999951, 33.740048560000147], + [-118.412040945999919, 33.741678190000144], + [-118.415216680999961, 33.754409512000066], + [-118.422782794999904, 33.763798883000064], + [-118.427568645999941, 33.773730759000088], + [-118.42181850199988, 33.783943880000109], + [-118.409302939999947, 33.791123914000181], + [-118.408635772999901, 33.798003189000141], + [-118.395715277999869, 33.805653987000156], + [-118.391799967999916, 33.817646759000084], + [-118.391388058999851, 33.835940991000129], + [-118.397211355999929, 33.844022862000102], + [-118.399673257999879, 33.851265028000071], + [-118.409916049999964, 33.873420343000092], + [-118.424945612999892, 33.905513410000097], + [-118.44465084499987, 33.949408270000148], + [-118.482655402999882, 33.999009507000054], + [-118.514068162999905, 34.022162177000027], + [-118.544056769999955, 34.038885809000035], + [-118.557303677999911, 34.037883194000031], + [-118.570624024999901, 34.041105571000017], + [-118.582627574999918, 34.036529339000097], + [-118.590738353999896, 34.039092740000015], + [-118.603400400999959, 34.038818418000162], + [-118.609265767999958, 34.035651389000023], + [-118.63694225699993, 34.036392435000053], + [-118.66658905099986, 34.038944518], + [-118.675664048999948, 34.038120742000061], + [-118.678199252999931, 34.03303037700006], + [-118.680136951999941, 34.030330386000131], + [-118.693160660999894, 34.031883725000128], + [-118.706780455999876, 34.029427262000112], + [-118.730526164999873, 34.032544976000125], + [-118.748392320999926, 34.03188851200018], + [-118.756144317999883, 34.025719679000119], + [-118.773018491999849, 34.023763951000106], + [-118.783398653999924, 34.021839237000123], + [-118.787929532999911, 34.019663922000078], + [-118.78920803199992, 34.014561763000174], + [-118.792751211999885, 34.011571329000091], + [-118.793703809999926, 34.007266866000109], + [-118.79661231999988, 34.006705704000026], + [-118.80276809, 34.004796187000053], + [-118.804060273999909, 34.001036196000157], + [-118.806969055999886, 33.999406269000033], + [-118.829814260999882, 34.020823634000109], + [-118.8526038279999, 34.033656929000031], + [-118.862662496999931, 34.03443339000016], + [-118.875719417999889, 34.037551203000092], + [-118.894220752999928, 34.038561363000113], + [-118.902671635999894, 34.040148941000027], + [-118.914693612999926, 34.040637403000019], + [-118.920903692999843, 34.044301679000156], + [-118.930006075999898, 34.045896262000113], + [-118.936807489999893, 34.043200309000056], + [-118.954036537999912, 34.047857995000143], + [-118.977503824999957, 34.059566000000146], + [-118.997366393999897, 34.065651406000043], + [-119.008079924999947, 34.066119549000163], + [-119.03825899899995, 34.083639885000096], + [-119.060904976999893, 34.08552960800013], + [-119.089698202999898, 34.10048386400014], + [-119.100158818999972, 34.102807020000071], + [-119.117051769999875, 34.106416041000088], + [-119.119778542999896, 34.106131528000063], + [-119.119594330999931, 34.103739206000014], + [-119.114328579999892, 34.101792710000083], + [-119.100651873999908, 34.098963103000173], + [-119.106481596999885, 34.094466109000152], + [-119.128652932999913, 34.100546906000105], + [-119.153757635999895, 34.116325435000093], + [-119.193701624999875, 34.141737849000052], + [-119.204379881999841, 34.144096672], + [-119.20575006999988, 34.145757407000119], + [-119.204198666999858, 34.148413816000172], + [-119.204664557999948, 34.149535727000099], + [-119.208322635999934, 34.152321691000125], + [-119.210135918999953, 34.152308076000153], + [-119.210994507999928, 34.147987264000122], + [-119.214822881999879, 34.145707164000115], + [-119.217087473999939, 34.145501819000103], + [-119.22079955199986, 34.153165538000124], + [-119.224697299999946, 34.157075251000052], + [-119.226080561999908, 34.159128338000116], + [-119.231160969999891, 34.167344259000075], + [-119.237164492999867, 34.17686509500011], + [-119.243967251999891, 34.190090236000131], + [-119.252674933999884, 34.203924872000059], + [-119.260194046999928, 34.217123971000134], + [-119.26336175, 34.226576832000134], + [-119.258858625999835, 34.233352932000074], + [-119.263905402999882, 34.235052802000141], + [-119.267160610999923, 34.244533596000124], + [-119.26929996199992, 34.254958566000099], + [-119.281158006999888, 34.268703518000152], + [-119.289915196999885, 34.274576033000116], + [-119.29602821499995, 34.274321504000014], + [-119.304416659999902, 34.272362253], + [-119.313392124999837, 34.277128270000091], + [-119.320690486999922, 34.282635808000137], + [-119.329118195999925, 34.285929556000085], + [-119.338595652999928, 34.290479935000079], + [-119.349488259999944, 34.304074965000055], + [-119.358768920999907, 34.310093898000062], + [-119.364698791999928, 34.315725688000114], + [-119.370858534999854, 34.319674523000074], + [-119.375191017999853, 34.320273405000151], + [-119.38206237599988, 34.319370141000107], + [-119.386887656999889, 34.318065223000147], + [-119.391482427999918, 34.31844489700002], + [-119.394106081999837, 34.322601149000107], + [-119.401077902999901, 34.330571524], + [-119.409823811999857, 34.336172815000012], + [-119.418316768999929, 34.342382299000164], + [-119.429952735999905, 34.353471507], + [-119.436617135999938, 34.355727688000101], + [-119.443236180999861, 34.354821571000073], + [-119.453033798999883, 34.368401221000127], + [-119.460229092999882, 34.374040410000148], + [-119.46623507699988, 34.375021825000161], + [-119.47020464699996, 34.375813771000153], + [-119.472972442999918, 34.37388862900012], + [-119.475242012999843, 34.372393252], + [-119.477797998999861, 34.372579345000148], + [-119.479622233999891, 34.374458883000145], + [-119.4835104389999, 34.378632981000081], + [-119.488167184999909, 34.38111570100007], + [-119.494862727999944, 34.383997103000084], + [-119.502514142999942, 34.384342201000052], + [-119.516806330999955, 34.386938072000149], + [-119.520691453999888, 34.390689084000101], + [-119.529428363999898, 34.394812854000165], + [-119.536839727999919, 34.395580416000158], + [-119.555694513999882, 34.410450530000119], + [-119.563175121999862, 34.414794513000103], + [-119.568009219999894, 34.413902574000119], + [-119.572854979999903, 34.412795620000097], + [-119.575893693999888, 34.411924226000011], + [-119.581791195999884, 34.412701418000111], + [-119.595855272999955, 34.418850002000013], + [-119.617159643999912, 34.420527172000149], + [-119.6211967509999, 34.418173190000132], + [-119.628860852999964, 34.418083970000126], + [-119.638511645999913, 34.415242456000115], + [-119.657928548999848, 34.416506244000161], + [-119.678060914999918, 34.41438500100007], + [-119.687699931999958, 34.410903108000085], + [-119.690207587999879, 34.408137910000093], + [-119.691693966999935, 34.405383909000037], + [-119.690897804999878, 34.40349819800015], + [-119.700804621999865, 34.400856304000158], + [-119.702036851999949, 34.398104939000135], + [-119.707879354999918, 34.395440856000064], + [-119.719895849999943, 34.395301310000079], + [-119.732947496999913, 34.397464126000145], + [-119.743215070999909, 34.402607612000011], + [-119.754504535999899, 34.404785920000123], + [-119.787648874999945, 34.417211163000118], + [-119.802964752999927, 34.418097903000145], + [-119.808548752999926, 34.416345410000176], + [-119.832035359999878, 34.416264303000119], + [-119.836407368999858, 34.414948130000099], + [-119.841011731999885, 34.412982916000047], + [-119.840942211999916, 34.410039772000161], + [-119.842389676999858, 34.406233080000149], + [-119.844384790999911, 34.403892494], + [-119.854720134999923, 34.408806865000102], + [-119.868241575999946, 34.409479315000155], + [-119.87435016099991, 34.408769703000146], + [-119.878635816999946, 34.40661306000014], + [-119.890366276999927, 34.419092434000092], + [-119.900601458999915, 34.42043595100013], + [-119.921527970999875, 34.433401349000164], + [-119.934840716999943, 34.435541072000021], + [-119.942755918999907, 34.43523731], + [-119.949897361999888, 34.434311362000059], + [-119.957072189999877, 34.43589230500011], + [-119.96224848499989, 34.43981498100014], + [-119.975932049999912, 34.447209800000124], + [-119.984667386999959, 34.450034968000111], + [-119.989527355999911, 34.449767523], + [-120.009967660999877, 34.461011957], + [-120.022136204999867, 34.457696147000107], + [-120.036598995999881, 34.463137087000163], + [-120.091420050999957, 34.458807684000149], + [-120.133412238999952, 34.472723700000031], + [-120.171871103999877, 34.469984758000081], + [-120.293206557999881, 34.468485563000016], + [-120.425200975999928, 34.4513207050001], + [-120.444342400999886, 34.451182132000085], + [-120.454107498999889, 34.442811833000022], + [-120.472681432999877, 34.450272972000093], + [-120.491607225999957, 34.491359768000123], + [-120.509985793999945, 34.521374539000121], + [-120.53636322699991, 34.535293291000144], + [-120.557835565999909, 34.541159594000035], + [-120.577931495999906, 34.553543183000059], + [-120.594568531999869, 34.554696821000121], + [-120.621616008999936, 34.552613560000069], + [-120.636626756999902, 34.562892971000068], + [-120.64443668999985, 34.574131281000106], + [-120.647834192999952, 34.585675589000132], + [-120.642109133999924, 34.601023237000092], + [-120.630566680999948, 34.628194386000175], + [-120.614135657999881, 34.659403305000026], + [-120.606054635999882, 34.679349989000102], + [-120.603053655999915, 34.704781950000083], + [-120.617014126999933, 34.725653387000094], + [-120.627593553999887, 34.743475653000175], + [-120.640248175999957, 34.758530992000189], + [-120.629917942999924, 34.781932656000137], + [-120.619212167999905, 34.819206217000144], + [-120.617412480999946, 34.843631567000145], + [-120.615573189999907, 34.858002598000027], + [-120.622188411999858, 34.867299625], + [-120.632557745999932, 34.87140534100017], + [-120.640248175999957, 34.879217841000141], + [-120.64461047199984, 34.895112857000086], + [-120.654973021999893, 34.901185974000057], + [-120.667646859999948, 34.898848112000067], + [-120.672839345999961, 34.90752128400014], + [-120.666195046999903, 34.931769275000121], + [-120.642375558999845, 35.000873310000159], + [-120.633697068999879, 35.03510163], + [-120.630726691999953, 35.073879299000012], + [-120.635731574999909, 35.108587958000086], + [-120.644886847999885, 35.139390367000047], + [-120.652943488999924, 35.144232489000117], + [-120.658554893999863, 35.15047967800011], + [-120.671159987999914, 35.150225857000137], + [-120.679025844999884, 35.153062242000189], + [-120.698068813999882, 35.169134833000058], + [-120.706369594999856, 35.174221096000096], + [-120.723849416999926, 35.175226033000015], + [-120.749669233999839, 35.177396791000135], + [-120.755608399999915, 35.171922497000153], + [-120.755346169999882, 35.163123925000107], + [-120.75944029599988, 35.159214627000111], + [-120.76553376899993, 35.160242155000148], + [-120.790842251999905, 35.179022528000175], + [-120.849792732999887, 35.202913231000153], + [-120.876682473999864, 35.223790356000123], + [-120.886097785999951, 35.233791408000016], + [-120.897654183999919, 35.249765515000107], + [-120.895590616999897, 35.273513581000103], + [-120.887067596999913, 35.285935479000031], + [-120.867831188999901, 35.33039216700017], + [-120.862243646999872, 35.361905041000128], + [-120.853814633999946, 35.347529367000121], + [-120.857391897999904, 35.326764807000146], + [-120.855580206999917, 35.321519273000106], + [-120.843242048999926, 35.324347749000097], + [-120.842059102999926, 35.331669812000101], + [-120.83140497299992, 35.336087589000144], + [-120.835834936999902, 35.342912953000095], + [-120.841558010999861, 35.345866813000058], + [-120.852074160999905, 35.367051064000023], + [-120.860263661999923, 35.373802556000086], + [-120.866749607999935, 35.370992622000117], + [-120.871096717999905, 35.405308394000159], + [-120.879081212999921, 35.420093047000179], + [-120.887318488999881, 35.432928778000118], + [-120.908184147999876, 35.448243818000137], + [-120.946192229999909, 35.446285131000153], + [-120.963465629999945, 35.456651356000137], + [-120.982768674999875, 35.45998789800008], + [-121.005362163999919, 35.460656967000105], + [-121.036976691999939, 35.489203192], + [-121.068311503999908, 35.517869279000152], + [-121.101811690999909, 35.549667202000151], + [-121.130870197999911, 35.600701175000054], + [-121.143275384999953, 35.605042829000112], + [-121.15910836899991, 35.627235283000104], + [-121.169401557999905, 35.636919404000068], + [-121.187366959999906, 35.641920587000143], + [-121.193066839999901, 35.639615762000133], + [-121.191525738999928, 35.633864719000186], + [-121.195030889999956, 35.632336335], + [-121.216496041999903, 35.647747645], + [-121.234003236999925, 35.652037747000136], + [-121.251990046999921, 35.657394463000159], + [-121.269145896999916, 35.664210591000128], + [-121.288312801999865, 35.664829516000097], + [-121.28847445, 35.681458255000067], + [-121.298414451999903, 35.69748896300014], + [-121.309015800999902, 35.707709393000144], + [-121.3145902239999, 35.713723753000139], + [-121.323068813999839, 35.76455312700007], + [-121.337232304999873, 35.786528670000152], + [-121.36800677199993, 35.810361061000108], + [-121.387116923999898, 35.821431931000134], + [-121.408930921999925, 35.844020730000167], + [-121.413349774999872, 35.854745748000184], + [-121.425536751999886, 35.858420443000014], + [-121.442025246999904, 35.869221839000133], + [-121.463200875999874, 35.886731338000075], + [-121.462717251999919, 35.903713283000073], + [-121.472247747999859, 35.913568528000056], + [-121.478381525999865, 35.931581610000094], + [-121.482226478999848, 35.948975515000157], + [-121.486903628999954, 35.965828066000128], + [-121.489979620999904, 35.982245184000092], + [-121.506677586999857, 36.003260042000178], + [-121.522569024999953, 36.010070734000138], + [-121.541083525999909, 36.01501304900016], + [-121.566738868999906, 36.020117263000074], + [-121.582243759999898, 36.036027173], + [-121.59266137299997, 36.050570011000062], + [-121.594522310999935, 36.064233426], + [-121.606444046999925, 36.071504863000186], + [-121.618221380999884, 36.084429003000153], + [-121.630155127999899, 36.113056839000151], + [-121.64265948699996, 36.123549889000074], + [-121.65775869499987, 36.142646683000081], + [-121.677920767999908, 36.162675352000107], + [-121.693576414999953, 36.171656473000056], + [-121.703879557999869, 36.182216730000121], + [-121.729139027999878, 36.198144643000106], + [-121.753953875999869, 36.211546510000105], + [-121.781441447999839, 36.226325732000092], + [-121.798857694999882, 36.234479655000186], + [-121.810366632999916, 36.232397340000105], + [-121.824859178999915, 36.239203192000119], + [-121.835601365999921, 36.249172268000123], + [-121.840077277999896, 36.259344794000171], + [-121.845418036999916, 36.272399878000144], + [-121.852202928999887, 36.279445705000015], + [-121.863189256999931, 36.283189195000048], + [-121.873605923999932, 36.290025132000082], + [-121.881011522999913, 36.299505927000084], + [-121.899660522999909, 36.304399527000143], + [-121.895628818999924, 36.313928729000068], + [-121.897125800999888, 36.327981200000139], + [-121.893723924999875, 36.332057557], + [-121.893586326999952, 36.338568490000128], + [-121.897856076999915, 36.343868345000075], + [-121.901072382999928, 36.352760124], + [-121.903645366999925, 36.362116214000181], + [-121.905844840999919, 36.37175179300003], + [-121.906126954999905, 36.377140376000099], + [-121.904168130999835, 36.384536730000107], + [-121.906123448999878, 36.388477716000139], + [-121.908274684999881, 36.396371347000112], + [-121.914431504999925, 36.40303590300006], + [-121.91767174799989, 36.415548510000107], + [-121.915329132999943, 36.423193583000099], + [-121.918351247999894, 36.430327327000057], + [-121.929012139999926, 36.44778604700015], + [-121.930224976999909, 36.454603356000135], + [-121.931506626999905, 36.463030718000098], + [-121.938040328999875, 36.46826458], + [-121.944699073999885, 36.486151827000114], + [-121.946309010999954, 36.491891436000103], + [-121.942480509999911, 36.49670503800003], + [-121.943207904999866, 36.502832352000112], + [-121.944237493999879, 36.505694754000089], + [-121.94226954099986, 36.511900845000028], + [-121.94957475199989, 36.51421753800004], + [-121.956929621999848, 36.517617502000078], + [-121.955362532999871, 36.522727685000021], + [-121.948204164999908, 36.523661799000038], + [-121.940064800999863, 36.522815646000126], + [-121.927533152999857, 36.523851999000058], + [-121.928299653999943, 36.531380319000093], + [-121.929944560999886, 36.537845670000181], + [-121.933123776999949, 36.538475389000141], + [-121.9356328289999, 36.544187772], + [-121.931268944999957, 36.547209922000135], + [-121.932527777999837, 36.555128979000145], + [-121.934616623999929, 36.561225309000164], + [-121.940335484999878, 36.558517432000102], + [-121.94279872199985, 36.563146222000015], + [-121.946476926999907, 36.564848380000072], + [-121.950890438999949, 36.562908855], + [-121.953891433999914, 36.559565391000135], + [-121.970075389999877, 36.56885441600015], + [-121.978002256999915, 36.57476745400011], + [-121.981115218999918, 36.583716876000111], + [-121.973934469999875, 36.584291224000125], + [-121.967219888999864, 36.58521270100006], + [-121.966635985999872, 36.59210137800001], + [-121.963867392999944, 36.600500741000147], + [-121.959862546999958, 36.611472799000083], + [-121.956379834999836, 36.614103583000158], + [-121.95033388599991, 36.609938392000132], + [-121.946644313999897, 36.618006564000055], + [-121.942521606999932, 36.626447756000019], + [-121.94153113299987, 36.634434026000108], + [-121.937694666999874, 36.639249335000088], + [-121.929526144999912, 36.638040214000128], + [-121.921210777999875, 36.633581243000052], + [-121.920548853999904, 36.628897996000077], + [-121.913135481999902, 36.624411953000063], + [-121.902154127999907, 36.620752134000114], + [-121.895936844999923, 36.612611487000081], + [-121.887421360999852, 36.601994493000021], + [-121.878836012999855, 36.602614043000031], + [-121.870003890999882, 36.607212149000176], + [-121.853874547999908, 36.619613892000089], + [-121.837928762999937, 36.635611954000026], + [-121.827060928999913, 36.656200019000053], + [-121.814258246999955, 36.683237837000135], + [-121.809925910999965, 36.718817450000031], + [-121.805359412999863, 36.737739027000103], + [-121.792423796999913, 36.730867810000021], + [-121.763742641999855, 36.722072658000073], + [-121.761274397999912, 36.730286095000125], + [-121.766442165999933, 36.735207993000031], + [-121.770214955999904, 36.739083170000029], + [-121.775111714999866, 36.737499773000039], + [-121.783707483999919, 36.73798364800011], + [-121.790190125999928, 36.741781238000087], + [-121.794901395999915, 36.746351552000036], + [-121.803204864999941, 36.750459474000124], + [-121.79816220299989, 36.779907161], + [-121.789811754999889, 36.806198967000071], + [-121.804245937999838, 36.836018241000048], + [-121.859934048999889, 36.927476304000052], + [-121.887115037999905, 36.954901434000092], + [-121.905601189999928, 36.969126309000146], + [-121.937243162999906, 36.978306980000085], + [-121.952767306999903, 36.971007662000105], + [-121.963566150999895, 36.95949017900007], + [-121.974235369999903, 36.955199274000151], + [-121.993967251999962, 36.959865627000156], + [-122.006701206999935, 36.962378329000117], + [-122.021210374999882, 36.962667850000102], + [-122.025156090999943, 36.959653313000061], + [-122.02407544499988, 36.95607035400009], + [-122.025189385999852, 36.950974006000038], + [-122.034823934999878, 36.95321256700008], + [-122.046794080999888, 36.948156804000078], + [-122.060867827999857, 36.948813136000027], + [-122.080901399999931, 36.951462594000063], + [-122.106004018999926, 36.955755369000045], + [-122.120842988999883, 36.963255874000154], + [-122.134990691999946, 36.965726027000088], + [-122.142237514999934, 36.975250521000149], + [-122.153643159999959, 36.977075436000163], + [-122.177586857999898, 36.995104660000109], + [-122.20791581899995, 37.019273179000024], + [-122.222117576999864, 37.024294942000111], + [-122.227945638999884, 37.040059559000028], + [-122.253802123999904, 37.059123309000043], + [-122.266041901999927, 37.076455525000156], + [-122.28102986099988, 37.096582914000166], + [-122.29006162899995, 37.104236081000025], + [-122.297658442999946, 37.111226697000134], + [-122.308354444999864, 37.116675008000087], + [-122.318730468999959, 37.115617245000166], + [-122.327655643999904, 37.112807727000032], + [-122.339290056999943, 37.118581815000042], + [-122.337853206999895, 37.134902402000122], + [-122.359527538999913, 37.150485414000102], + [-122.36103852899987, 37.162356196000033], + [-122.369353199999935, 37.174019993000016], + [-122.383412109999938, 37.182271109000155], + [-122.396109331999881, 37.181859916000136], + [-122.404456977999914, 37.194525975], + [-122.407867944999879, 37.216117025000145], + [-122.410703662999936, 37.226870680000147], + [-122.41649926599986, 37.233919856000043], + [-122.418363404999909, 37.252309719000081], + [-122.410150356999907, 37.268845184000085], + [-122.407412333999844, 37.294983806000076], + [-122.402522319999889, 37.340504117000037], + [-122.400337817999898, 37.359741136000096], + [-122.408736250999965, 37.364171592000119], + [-122.411569086999876, 37.374931261000157], + [-122.429193801999929, 37.407270842000131], + [-122.444446441999844, 37.437519345000013], + [-122.449160188999954, 37.476655219000023], + [-122.46324622299997, 37.496649481000034], + [-122.479267580999888, 37.502783450000052], + [-122.486096134999912, 37.502556444], + [-122.494211917999863, 37.500839443000146], + [-122.495284826999907, 37.495371003000045], + [-122.499263169999921, 37.493066185000103], + [-122.501074149999923, 37.501329036000143], + [-122.512025435999917, 37.510003086000111], + [-122.520471886999871, 37.53142146], + [-122.517565391999909, 37.545265769000181], + [-122.514759298999891, 37.560893426000021], + [-122.520027872999904, 37.574124813000125], + [-122.519040027999878, 37.589713519000114], + [-122.522424280999942, 37.593217442000039], + [-122.517468184999942, 37.594472564000071], + [-122.513089255999915, 37.597843855000022], + [-122.507597153999896, 37.597698121000136], + [-122.503232882999924, 37.601462648000151], + [-122.501698410999879, 37.606944275], + [-122.495946980999889, 37.627373970000079], + [-122.494740363999881, 37.665228583000115], + [-122.501874297999862, 37.703488398], + [-122.508493013999853, 37.724943829000111], + [-122.513610291999868, 37.752261117000117], + [-122.515171646999903, 37.781126118000131], + [-122.505873669999929, 37.786455717000123], + [-122.497669986999895, 37.787102375000146], + [-122.485930131999851, 37.790810532000094], + [-122.47644909199991, 37.810675016000019], + [-122.463358567999933, 37.805303535000021], + [-122.418757245999899, 37.811143484000141], + [-122.408636661999893, 37.810391705000129], + [-122.398195119999883, 37.803494794000031], + [-122.387928839999901, 37.790961005000113], + [-122.387103655999923, 37.778745268000037], + [-122.381532155999906, 37.773642615000156], + [-122.382857618999878, 37.763829250000086], + [-122.379244690999911, 37.755985983000031], + [-122.374316994999859, 37.749271105], + [-122.36649429099991, 37.739754832000173], + [-122.354543940999861, 37.730008295000019], + [-122.362459752999968, 37.714916086000173], + [-122.376290197999879, 37.716641098000153], + [-122.379471757999866, 37.707491557000125], + [-122.392454687999916, 37.710330339000066], + [-122.387973748999883, 37.677188425000153], + [-122.380157679999868, 37.676710271000118], + [-122.381033419999937, 37.666919106000094], + [-122.374911476999841, 37.655163302000162], + [-122.381360193999882, 37.647352848000153], + [-122.384388800999915, 37.636664130000113], + [-122.383729769999931, 37.631459923000122], + [-122.363722012999858, 37.627250748], + [-122.354141903999903, 37.613507428], + [-122.35933988599993, 37.608471446000166], + [-122.371165863999906, 37.612945368000126], + [-122.374108815999961, 37.604187046000149], + [-122.362286590999929, 37.599708043000092], + [-122.358519682999926, 37.592805084000034], + [-122.330392201999942, 37.589405158000105], + [-122.316769666999903, 37.58984531], + [-122.31579035599988, 37.583929682000118], + [-122.299068746999922, 37.576897860000045], + [-122.283268724999942, 37.574698647000091], + [-122.257923956999889, 37.571519273000021], + [-122.250965949999895, 37.568060614], + [-122.245347544999902, 37.553193097000175], + [-122.239576081999942, 37.546887253000037], + [-122.230539516999926, 37.544826565000065], + [-122.210292404999862, 37.539864207], + [-122.199298366999884, 37.534961906000106], + [-122.198894168999928, 37.526780707000071], + [-122.207346157999893, 37.517482815], + [-122.193000124999855, 37.51535717600008], + [-122.183071103999893, 37.50755389300015], + [-122.171285427999877, 37.503590445000114], + [-122.15868079299986, 37.503363348000065], + [-122.14793860599994, 37.496649481000034], + [-122.134144660999937, 37.497788804000052], + [-122.122670050999886, 37.484930731000034], + [-122.111927863999881, 37.467474677000084], + [-122.100168423999904, 37.455064195000048], + [-122.080881313999868, 37.448716539000102], + [-122.058908657999851, 37.447414455000015], + [-122.038644985999838, 37.451402085], + [-122.03213982099993, 37.46336413000013], + [-122.040760870999947, 37.467922268000066], + [-122.048329230999897, 37.46873607], + [-122.052235480999897, 37.471380927000084], + [-122.051869269999969, 37.47744375200007], + [-122.05052649599989, 37.484279690000093], + [-122.051747199999909, 37.489203192000147], + [-122.057769334999904, 37.497544664000102], + [-122.062367316999939, 37.501695054000052], + [-122.069081183999899, 37.503566799000126], + [-122.093332485999881, 37.503566799000126], + [-122.109038865999935, 37.517971096000096], + [-122.116550199999878, 37.542562043000103], + [-122.146309666999898, 37.57896842600006], + [-122.152218331999933, 37.616095750000127], + [-122.162778990999925, 37.664433826000064], + [-122.185242623999883, 37.69078357500014], + [-122.191863422999873, 37.700313007], + [-122.20672606699992, 37.710668767000087], + [-122.21436033499991, 37.699068410000123], + [-122.251766048999926, 37.722777463000014], + [-122.262350384999934, 37.743003384000119], + [-122.248933433999952, 37.748300638000089], + [-122.21245198, 37.743483524000126], + [-122.217292863999901, 37.758486264000155], + [-122.221849874999918, 37.759717068000114], + [-122.226318453999909, 37.755396800000042], + [-122.239336110999901, 37.755324872000145], + [-122.271550722999919, 37.762847091000097], + [-122.283512109999918, 37.763328930000071], + [-122.289854290999926, 37.767130969000064], + [-122.299881495999855, 37.772245866000063], + [-122.297371403999904, 37.779759191], + [-122.307556988999877, 37.780865450000036], + [-122.309851219999899, 37.776217955000092], + [-122.331508804999956, 37.78238805400018], + [-122.328616081999883, 37.796488617000151], + [-122.324700144999881, 37.801083119000069], + [-122.325008953999941, 37.803750772000072], + [-122.328422022999902, 37.804460378000087], + [-122.339093960999961, 37.803380526000083], + [-122.340656570999855, 37.807115783000043], + [-122.334727578999917, 37.811630501000039], + [-122.322361319999899, 37.81094243400004], + [-122.316571373999921, 37.817089584000186], + [-122.328359634999899, 37.821025574000046], + [-122.319691418999881, 37.825092641000126], + [-122.301385088999908, 37.826239299000136], + [-122.295502283999895, 37.831292182000155], + [-122.297888076999939, 37.839311075000083], + [-122.303863106999955, 37.862902251000079], + [-122.31602365899991, 37.860890743000184], + [-122.317747123999951, 37.867864906000179], + [-122.308306775999924, 37.870329380000058], + [-122.313902037999867, 37.885829354000109], + [-122.328759888999883, 37.908057592000134], + [-122.347832189999906, 37.906371521000054], + [-122.364829592999939, 37.903659221000098], + [-122.391087853999892, 37.907674614000044], + [-122.38762834099991, 37.920218397], + [-122.396259253999943, 37.928049189], + [-122.410173387999947, 37.931922281000098], + [-122.421315688999925, 37.948316087000094], + [-122.429698153999922, 37.964261981000092], + [-122.413807246999866, 37.962083423000038], + [-122.397725146999903, 37.956117270000121], + [-122.395031795999898, 37.970267004000092], + [-122.368795656999907, 37.980316416000065], + [-122.359565618999866, 37.987648655000115], + [-122.369976190999878, 38.003555794000178], + [-122.36630595799997, 38.012335587000095], + [-122.346302863999938, 38.00604889500012], + [-122.336008266999912, 38.00381094000015], + [-122.322499152999853, 38.005194403000033], + [-122.316769855999922, 38.010136438000032], + [-122.29904056399991, 38.011198076000127], + [-122.276972612999913, 38.024950739000175], + [-122.275570494999897, 38.039101116], + [-122.26423611299991, 38.045952152000112], + [-122.24974524599989, 38.055365302000112], + [-122.227040167999931, 38.058417059000121], + [-122.203629734999879, 38.05337843700012], + [-122.1861702489999, 38.047976275000096], + [-122.168553028999838, 38.028042939000144], + [-122.14793860599994, 38.023627020000063], + [-122.124379035999894, 38.029201565000093], + [-122.081836768999878, 38.047895644000064], + [-122.053255048999873, 38.053075459000112], + [-122.003989925999861, 38.05613559600009], + [-121.939008661999878, 38.04454375100012], + [-121.888004331999937, 38.041088916000078], + [-121.87810163599994, 38.034346317000043], + [-121.837122762999854, 38.023064037000111], + [-121.779133710999943, 38.015461194000167], + [-121.751082358999867, 38.019435757000124], + [-121.722971157999893, 38.011135158000158], + [-121.702056443999922, 38.009222723], + [-121.69004367999986, 38.009118724000118], + [-121.681442821999923, 38.017453104000126], + [-121.694824753999853, 38.0246783300001], + [-121.710547762999866, 38.022105755000055], + [-121.723080947999918, 38.025562990000125], + [-121.72060570099984, 38.032116780000152], + [-121.704905589999854, 38.035232029000056], + [-121.694894985999895, 38.043402411], + [-121.685536261999857, 38.044745184000178], + [-121.681507941999882, 38.048325914000046], + [-121.678374803999915, 38.056952216000141], + [-121.676340298999975, 38.067084052000112], + [-121.675607876999948, 38.075506903000147], + [-121.671131964999887, 38.083889065000122], + [-121.660552537999934, 38.086859442000119], + [-121.637684699999923, 38.086330471000153], + [-121.62451773699992, 38.089285933000085], + [-121.624057744999874, 38.094702176000126], + [-121.617095506999888, 38.09861888200011], + [-121.606678839999901, 38.099351304000052], + [-121.596262173999918, 38.094387111000103], + [-121.582054389999954, 38.092000484000053], + [-121.580326189999951, 38.083397639000125], + [-121.576518639999861, 38.074307486000023], + [-121.582468521999928, 38.068751220000124], + [-121.584966533999932, 38.062742692000185], + [-121.599232226999902, 38.059134431000146], + [-121.609607081999897, 38.061029046000144], + [-121.620622940999894, 38.061825336000126], + [-121.62771267899987, 38.050832725000177], + [-121.63223942599987, 38.04422942600003], + [-121.622988438999869, 38.036361805000112], + [-121.612760446999857, 38.021491498000117], + [-121.605064050999971, 38.017905994000117], + [-121.598367945999883, 38.021861896000033], + [-121.584243414999975, 38.028710186000112], + [-121.582477760999893, 38.035782157000099], + [-121.580205037999875, 38.047190906000125], + [-121.579258203999871, 38.057484298000034], + [-121.578086936999867, 38.062377989000098], + [-121.569305311999884, 38.065844333000129], + [-121.555922197999848, 38.057537194000147], + [-121.547581201999918, 38.055044979000073], + [-121.537800542999975, 38.050965938], + [-121.526405274999931, 38.040979472000075], + [-121.512641833999865, 38.040240119000103], + [-121.500884568999894, 38.031073309000064], + [-121.480338300999861, 38.02265105000005], + [-121.459013193999866, 38.004780726000021], + [-121.445301886999857, 37.99632396], + [-121.445383266999841, 38.003892320000134], + [-121.458729620999932, 38.020575262000179], + [-121.475738084999904, 38.037176825000031], + [-121.486561652999896, 38.044745184000178], + [-121.503895636999886, 38.049750067000119], + [-121.513235831999893, 38.054821675000184], + [-121.526271253999937, 38.054497328000153], + [-121.529257197999911, 38.060368420000103], + [-121.535607457999888, 38.064533381], + [-121.542424173999905, 38.063281536], + [-121.548642240999868, 38.064206155000122], + [-121.565124681999919, 38.081082783000099], + [-121.571277742999925, 38.097139452000093], + [-121.586496548999961, 38.102362372000144], + [-121.604074673999904, 38.105780341000141], + [-121.627186652999868, 38.1056175800001], + [-121.631906704999864, 38.103257554000137], + [-121.63947506399991, 38.094468492000161], + [-121.644520636999943, 38.092515367000132], + [-121.651966925999915, 38.094305731000119], + [-121.658558722999899, 38.097601630000057], + [-121.664947068999922, 38.099188544000086], + [-121.680281841999957, 38.092690639000139], + [-121.686105923999918, 38.082668361000017], + [-121.688588019999941, 38.075100002000156], + [-121.689279751999891, 38.061590887000179], + [-121.69933020699996, 38.050848700000174], + [-121.720589347999905, 38.040282003000115], + [-121.742063135999857, 38.029448816000112], + [-121.76747499, 38.030388394000127], + [-121.778708776999864, 38.036019105], + [-121.785222423999954, 38.043399355000119], + [-121.784246217999907, 38.052066680000124], + [-121.779849615999936, 38.061374991000079], + [-121.769174307999947, 38.068695426000133], + [-121.759025348999899, 38.072215007000111], + [-121.74681555899987, 38.075995184000149], + [-121.73643958199996, 38.078843492000189], + [-121.716667794999893, 38.092807082000107], + [-121.702992316999911, 38.1056175800001], + [-121.687787442999962, 38.123830708000085], + [-121.682601541999958, 38.14719259100012], + [-121.689484232999931, 38.14754736100015], + [-121.704884772999904, 38.122292821000102], + [-121.721446587999964, 38.108345944000163], + [-121.746978318999936, 38.087713934000035], + [-121.767445441999897, 38.078843492000189], + [-121.803080127999934, 38.0628834030001], + [-121.823968053999891, 38.068799208000186], + [-121.846118462999868, 38.072511231000092], + [-121.861836299999908, 38.070452619000108], + [-121.867339647999884, 38.064642645000092], + [-121.882527380999932, 38.056900412000132], + [-121.898170078999868, 38.053220639000031], + [-121.916724984999888, 38.052707385000119], + [-121.928822394999941, 38.058417059000121], + [-121.920969204999878, 38.06244538], + [-121.916086391999897, 38.066961981000034], + [-121.908314581999903, 38.078843492000189], + [-121.954984801999871, 38.079169842000098], + [-121.971269434999911, 38.074917644000081], + [-121.989478998999871, 38.082498151000053], + [-122.014955473999891, 38.098510611000123], + [-121.985992244999935, 38.110704479000091], + [-121.989419892999948, 38.125198017000159], + [-122.000296232999872, 38.137312445000092], + [-122.016207337999901, 38.13955023700008], + [-122.038064345999942, 38.136746606000187], + [-122.055165167999917, 38.13373444200009], + [-122.065419074999937, 38.127346096000068], + [-122.068955344999878, 38.121780414000071], + [-122.065797284999874, 38.113226666000131], + [-122.07548987699991, 38.100507714000074], + [-122.093250938999887, 38.084304174000081], + [-122.121083136999857, 38.059881903000175], + [-122.126597029999914, 38.05034334200009], + [-122.130290382999888, 38.042142433000109], + [-122.158478154999884, 38.043445424000097], + [-122.165931113999875, 38.054546831000081], + [-122.184301597999919, 38.064789216000051], + [-122.189628493999862, 38.061381840000095], + [-122.195142417999918, 38.061752044000102], + [-122.20493356299994, 38.065233034000173], + [-122.223570935999945, 38.065726736000059], + [-122.2452079789999, 38.072085631000149], + [-122.260887954999902, 38.069432829000121], + [-122.2714591659999, 38.074509308000032], + [-122.281674116999895, 38.086084697000061], + [-122.300677480999894, 38.108195570000149], + [-122.396519648999899, 38.153231178000155], + [-122.410629795999867, 38.133846197000096], + [-122.434130813999857, 38.123345321000059], + [-122.449307870999917, 38.124468515], + [-122.457880291999899, 38.117698999000154], + [-122.502317470999856, 38.113520866000144], + [-122.487421946999916, 38.104826882000125], + [-122.482488475999929, 38.076881029000063], + [-122.494091007999899, 38.050007846000042], + [-122.502724523999873, 38.031880216000118], + [-122.505684726999931, 38.023131408], + [-122.506049972999861, 38.017172177000148], + [-122.493456137999942, 38.012783035000083], + [-122.469746411999907, 38.005427059000013], + [-122.454241609999926, 37.997805286000087], + [-122.445335789999888, 37.985123056000035], + [-122.451239965999903, 37.980061808000144], + [-122.459541619999868, 37.981407048000065], + [-122.469221377999901, 37.982745656000148], + [-122.474355503999888, 37.976121863000017], + [-122.492543097999899, 37.969794012000037], + [-122.493560350999957, 37.958563544000029], + [-122.483713344999842, 37.948553778000061], + [-122.480345583999906, 37.941820138000153], + [-122.491667501999927, 37.935487565000031], + [-122.503592822999863, 37.940495312000124], + [-122.504221157999893, 37.934881903000118], + [-122.503439636999886, 37.924811732000094], + [-122.476231976999898, 37.915990882000173], + [-122.472552794999856, 37.911245787000112], + [-122.474290343999911, 37.90523823000008], + [-122.46006377899991, 37.89543694400011], + [-122.449003017999914, 37.893641492000157], + [-122.438800504999875, 37.882082590000053], + [-122.447949954999913, 37.873668560000127], + [-122.454733024999911, 37.872361174000147], + [-122.459462618999908, 37.871122781000068], + [-122.459009212999959, 37.862484926], + [-122.469520141999936, 37.867002837000157], + [-122.473341138999885, 37.874445071000153], + [-122.472259514999919, 37.879888759], + [-122.476052436999865, 37.886791545000122], + [-122.490135432999907, 37.893890372000143], + [-122.499028738999883, 37.893590149], + [-122.49648569599988, 37.884483468000113], + [-122.494742088999942, 37.877513015000076], + [-122.499279924999882, 37.872485288000107], + [-122.489308753999893, 37.864131370000067], + [-122.478052385999973, 37.859680785000151], + [-122.479767152999912, 37.853132619000164], + [-122.476490146999936, 37.84352103500008], + [-122.470391197999888, 37.831831620000017], + [-122.477564809999947, 37.82510439500011], + [-122.487840297999895, 37.825303128000044], + [-122.502640854999882, 37.820482206000051], + [-122.511796860999922, 37.824489631000134], + [-122.522586146999927, 37.821970017000027], + [-122.528425812999842, 37.816371593], + [-122.537954047999861, 37.82793964700015], + [-122.547903979999958, 37.834622633000109], + [-122.563690482999903, 37.848147881], + [-122.573698633999925, 37.855908338000134], + [-122.588341258999904, 37.860810405], + [-122.601304429999914, 37.873227615000147], + [-122.620730577999907, 37.877496484000133], + [-122.645198853999901, 37.8988159660001], + [-122.672391568999899, 37.906573792000088], + [-122.68597313699992, 37.903959004000015], + [-122.696670641999887, 37.899257335000115], + [-122.700383075999923, 37.892100954000128], + [-122.713182013999926, 37.900299208000078], + [-122.727738257999945, 37.903039615000168], + [-122.734204749999947, 37.920124324000128], + [-122.748640978999902, 37.932601282000135], + [-122.765348407999923, 37.937396405000143], + [-122.780243859999942, 37.948131095000164], + [-122.795998772999837, 37.975519631000012], + [-122.810550402999922, 37.985193801000136], + [-122.821432247999851, 37.997669778000059], + [-122.839397098999896, 38.006349484000125], + [-122.906843211999899, 38.031843985000037], + [-122.921111944999851, 38.034871294000155], + [-122.932695539999941, 38.049519338000138], + [-122.932122705999873, 38.058805503000102], + [-122.920142064999894, 38.065312404000068], + [-122.935414191999897, 38.070746161000059], + [-122.941558397999884, 38.064764716000141], + [-122.948475714999887, 38.060736395000092], + [-122.947099134999931, 38.054754507000112], + [-122.946888800999943, 38.045314846000153], + [-122.942494269999955, 38.041245835], + [-122.936085525999943, 38.030770371000031], + [-122.94937089799987, 38.029445705000043], + [-122.963376935999932, 38.02531491000012], + [-122.979069671999923, 38.014515591000176], + [-122.984027208999862, 38.003230867000028], + [-122.980330499999894, 37.99803906200016], + [-122.971765000999937, 37.996142070000062], + [-122.962504008999915, 37.992047822000032], + [-122.9742291069999, 37.990277222000188], + [-122.984480311999874, 37.992113214000128], + [-122.997547065999939, 37.993842171], + [-123.017815502999895, 37.993521681000132], + [-123.027453026999893, 37.994488745000027], + [-123.021621651999865, 38.000482830000024], + [-123.015998228999905, 38.00069532800002], + [-122.990726317999929, 38.048715678000164], + [-122.94964800599989, 38.143990916000135], + [-122.950285100999935, 38.16449325100011], + [-122.955510032999882, 38.176271984000081], + [-122.964945316999945, 38.182602293000102], + [-122.964788138999907, 38.198598197000123], + [-122.973839471999895, 38.208038310000134], + [-122.983050354999961, 38.220129478000118], + [-122.993230381999908, 38.229518661], + [-122.996296689999866, 38.242729824000108], + [-122.98525421899987, 38.237811760000156], + [-122.964816130999907, 38.217700385000128], + [-122.925570098999856, 38.175140664000182], + [-122.907277248999932, 38.152344259000031], + [-122.89150956899995, 38.130804755000057], + [-122.868763800999929, 38.110256252000042], + [-122.843373175999901, 38.091986395000148], + [-122.825672980999897, 38.072088934000149], + [-122.832264777999882, 38.095892645000148], + [-122.850431862999869, 38.110698133000184], + [-122.888417120999875, 38.154608466000141], + [-122.935536261999871, 38.215480861000074], + [-122.943998613999909, 38.219311254], + [-122.950655011999899, 38.217294762000151], + [-122.954336038999912, 38.231402197000151], + [-122.964571008999968, 38.232364285000088], + [-122.968815284999863, 38.237093637000058], + [-122.968517624999933, 38.250872761], + [-122.974535185999912, 38.266194223000085], + [-122.987116161999921, 38.277722996000179], + [-123.002280363999972, 38.294859195000143], + [-123.029521556999896, 38.312691558000054], + [-123.046460375999871, 38.312048445000144], + [-123.051696822999887, 38.30519213200013], + [-123.052886522999913, 38.298000393000066], + [-123.062439643999951, 38.295902748000159], + [-123.075967249999863, 38.322473087000091], + [-123.068387917999885, 38.346290233000119], + [-123.070932273999915, 38.359954194000025], + [-123.079044693999933, 38.372078026000153], + [-123.087030183999858, 38.391262379000025], + [-123.095810261999887, 38.395831515000069], + [-123.102057160999834, 38.412164286000078], + [-123.112759805999943, 38.420619134000034], + [-123.124578631999867, 38.437479288000148], + [-123.12872916099991, 38.449310265000108], + [-123.170924035999889, 38.479188398000176], + [-123.252657979999896, 38.510665624000112], + [-123.27255673499991, 38.528950711], + [-123.304547020999848, 38.549024209], + [-123.31531993099992, 38.557472947000136], + [-123.336979425999871, 38.567259471000128], + [-123.341667698999913, 38.586630594000027], + [-123.355994898999896, 38.59714943900012], + [-123.365886766999893, 38.600738471000156], + [-123.369487741999947, 38.612144403000016], + [-123.401095308999928, 38.642832421000108], + [-123.413981695999894, 38.666687392000185], + [-123.432460835999862, 38.67797137400008], + [-123.433606676999901, 38.686794669000122], + [-123.474096620999944, 38.721974557000081], + [-123.492457285999876, 38.736468673000118], + [-123.523292959999935, 38.746723986000077], + [-123.537643258999879, 38.772329148], + [-123.558845130999899, 38.782990569000091], + [-123.566232876999919, 38.795152085000112], + [-123.594170967999858, 38.805820716000184], + [-123.616472326999897, 38.827315014000035], + [-123.648306616999889, 38.849534971000182], + [-123.663059233999903, 38.872450691000054], + [-123.69756133299984, 38.900277721000137], + [-123.711672367999881, 38.914321002000079], + [-123.726242233999869, 38.918576086000158], + [-123.727301203999914, 38.933182959000121], + [-123.742606700999929, 38.955623911000046], + [-123.725241612999952, 38.960372251000095], + [-123.703928188999853, 38.990057684000121], + [-123.69608687399996, 39.007794611000136], + [-123.689076300999886, 39.027899481000148], + [-123.691314256999874, 39.038560289000188], + [-123.695150703999872, 39.059126676000105], + [-123.703840546999885, 39.083628436000126], + [-123.712882217999976, 39.106315400000156], + [-123.721648712999936, 39.133019342000139], + [-123.737795843999962, 39.14300494700008], + [-123.735550560999911, 39.159034120000015], + [-123.767850350999964, 39.19400673300008], + [-123.777898087999887, 39.222120515000157], + [-123.790543420999896, 39.269745849000131], + [-123.803263375999862, 39.278954003000038], + [-123.797474738999895, 39.29767487200003], + [-123.806385870999932, 39.304754950000088], + [-123.805997655999874, 39.324140097000154], + [-123.824924247999917, 39.347295592000151], + [-123.820568918999896, 39.405260096000077], + [-123.816509372999917, 39.443998058000105], + [-123.798638125999886, 39.490508910000031], + [-123.776356574999895, 39.529282945000134], + [-123.769768318999937, 39.544645807000094], + [-123.769444368999871, 39.563728211000139], + [-123.786827832999862, 39.596776979000182], + [-123.786479454999906, 39.655204622000056], + [-123.790376490999847, 39.666414820000071], + [-123.790581689999868, 39.677373737000082], + [-123.795967388999884, 39.691867604], + [-123.802934825999856, 39.702512754000153], + [-123.808573900999875, 39.711797943000036], + [-123.823816960999878, 39.717762103000055], + [-123.830019570999895, 39.726514178000073], + [-123.830555792999945, 39.741848049000126], + [-123.837555661999929, 39.761601771000031], + [-123.837275051999896, 39.782944200000045], + [-123.84473142599991, 39.808299108000043], + [-123.854018803999892, 39.833514269000105], + [-123.88017665999989, 39.844271305000021], + [-123.907720977999944, 39.865867204000139], + [-123.930696268999867, 39.908017810000061], + [-123.955554353999887, 39.924506245000188], + [-123.9789471939999, 39.962896153000187], + [-124.001239988999927, 39.978083140000152], + [-124.02270607499986, 40.002135431000042], + [-124.033457798999862, 40.01212592600011], + [-124.045149080999892, 40.018727169000059], + [-124.058520300999916, 40.023796388], + [-124.063327971999897, 40.022596871000147], + [-124.069370180999869, 40.021333145000128], + [-124.076052004999838, 40.027217164000078], + [-124.080406974999917, 40.035559707000132], + [-124.080480409999865, 40.059789185000099], + [-124.087441716999962, 40.077515373000111], + [-124.115793423999932, 40.107123114], + [-124.138251369999864, 40.11592565100004], + [-124.185317380999905, 40.12955148000016], + [-124.219996411999915, 40.165152204000137], + [-124.256422725999897, 40.184415136000112], + [-124.319377876999923, 40.224613110000163], + [-124.327154329999956, 40.237040215000135], + [-124.342581489999915, 40.24203732900007], + [-124.363509794999942, 40.261480937000059], + [-124.36013698099994, 40.281567164000066], + [-124.348283142999961, 40.318907378000162], + [-124.364777988999975, 40.344683457000187], + [-124.366205206999851, 40.3774507400001], + [-124.398109628999876, 40.415835728000062], + [-124.409201970999902, 40.443817665000083], + [-124.395959556999884, 40.465362732000145], + [-124.388028151999904, 40.483295], + [-124.38378271899991, 40.500100354000111], + [-124.385832023999924, 40.509515360000094], + [-124.369999712999928, 40.536889624000125], + [-124.357980923999889, 40.563055731000176], + [-124.349964972999942, 40.577785549000069], + [-124.322092251999891, 40.617377020000035], + [-124.31948808499989, 40.628648179000109], + [-124.317250128999916, 40.632066148000106], + [-124.314035610999866, 40.634588934000035], + [-124.310129360999866, 40.635484117000132], + [-124.305775519999955, 40.637396552000084], + [-124.307687954999835, 40.64158763200011], + [-124.311634894999912, 40.646226304000137], + [-124.307616336999857, 40.652825045000057], + [-124.292662957999937, 40.676822617000099], + [-124.273874767999885, 40.700047055000041], + [-124.252552863999881, 40.734767971000153], + [-124.239737672999951, 40.758709465000081], + [-124.230885396999895, 40.750081009000084], + [-124.247294416999921, 40.727912378], + [-124.258477221999883, 40.706882725000028], + [-124.259497744999948, 40.698410073000147], + [-124.248036261999928, 40.69326406500015], + [-124.234373419999926, 40.691899556000138], + [-124.225760097999938, 40.686123080000115], + [-124.22170290699988, 40.690110801000102], + [-124.224619919999924, 40.695202054000092], + [-124.22168811199991, 40.697713875], + [-124.213844690999935, 40.701402471], + [-124.213236033999934, 40.709511239], + [-124.221783291999969, 40.722431685000132], + [-124.217429072999849, 40.730717736000045], + [-124.220454935999925, 40.737238493000106], + [-124.213295901999913, 40.741851361000116], + [-124.20289856699992, 40.745185527000118], + [-124.198610158999927, 40.754424907000143], + [-124.201084020999886, 40.761927160000127], + [-124.198235360999902, 40.76904071700001], + [-124.191588435999904, 40.772838960000129], + [-124.188911896999869, 40.790574382000116], + [-124.182743320999904, 40.799903013000161], + [-124.175501801999914, 40.803561892000019], + [-124.163809657999906, 40.806466714000024], + [-124.145867579999873, 40.809648628000119], + [-124.136897028999897, 40.807191272000111], + [-124.121864672999919, 40.807383196], + [-124.109194910999932, 40.814151048000056], + [-124.087398312999923, 40.82515617000017], + [-124.082483318999863, 40.843501684], + [-124.084462042999888, 40.848374742000047], + [-124.093820766999912, 40.853989976000051], + [-124.101802063999926, 40.858443981000093], + [-124.108466857999915, 40.854807297], + [-124.118974668999897, 40.851947235000139], + [-124.126072932999946, 40.854001869000157], + [-124.131431722999949, 40.858039212000065], + [-124.137553855999883, 40.863946744000103], + [-124.151324414999905, 40.863321058000011], + [-124.154967697999908, 40.861727478000077], + [-124.156644445999902, 40.851181181000086], + [-124.166608250999914, 40.842159547000065], + [-124.170407395999931, 40.82675683300009], + [-124.183974688999925, 40.815662637000074], + [-124.193598484999939, 40.802370455000116], + [-124.199744790999915, 40.78485271000001], + [-124.223288141999959, 40.757096106000077], + [-124.232841118999886, 40.766642871000116], + [-124.216848530999869, 40.786421734000086], + [-124.176575122999893, 40.847754338000144], + [-124.133757617999933, 40.936398753000148], + [-124.120676392999911, 40.978954375000015], + [-124.11041334599993, 41.015252825000076], + [-124.111412218999888, 41.041660333000138], + [-124.11703013599994, 41.048247103000122], + [-124.127325767999949, 41.049531427], + [-124.13457304699989, 41.047949403000118], + [-124.142928561999881, 41.053127286000162], + [-124.146878394999931, 41.060165416000117], + [-124.149302378999849, 41.075956705000081], + [-124.155282821999961, 41.086811974000128], + [-124.16063391799986, 41.099351304000081], + [-124.160277542999864, 41.113563001], + [-124.164052832999857, 41.132220090000047], + [-124.162889787999902, 41.139080266000022], + [-124.15633162, 41.142351715000174], + [-124.1476906689999, 41.140948432000144], + [-124.143473806999864, 41.144991874000127], + [-124.124261811999929, 41.181808722000184], + [-124.113270636999914, 41.221177476], + [-124.090931769999884, 41.289455471000068], + [-124.082183397999913, 41.341782945000077], + [-124.067809317999959, 41.398920561000139], + [-124.062155357999941, 41.435875986000113], + [-124.076079881999917, 41.489976304000081], + [-124.082020636999857, 41.521470445], + [-124.068348761999914, 41.539252020000063], + [-124.078928188999868, 41.543361721000039], + [-124.08869381399991, 41.549139716000084], + [-124.096913214999901, 41.556830145], + [-124.103098110999881, 41.566555080000157], + [-124.103871222999899, 41.576117255000142], + [-124.102772589999944, 41.602606512000094], + [-124.106516079999878, 41.608099677000141], + [-124.114979620999918, 41.617865302000084], + [-124.126576300999929, 41.640082098000121], + [-124.139881964999859, 41.66429271000014], + [-124.138498501999877, 41.679754950000145], + [-124.145784942999867, 41.706381248000085], + [-124.15945881399989, 41.736674780000058], + [-124.177286450999958, 41.743599917], + [-124.187921386999889, 41.746991123], + [-124.196314233999942, 41.744033010000024], + [-124.201107462999872, 41.739305330000107], + [-124.232360841999949, 41.762362560000057], + [-124.262895183999944, 41.776427858000048], + [-124.26046399199987, 41.788783114000026], + [-124.247924115999879, 41.793873739000063], + [-124.233963339999931, 41.813205903], + [-124.218837133999912, 41.850006372000124], + [-124.210958501999869, 41.891009920000116], + [-124.202219204999835, 41.960394598], + [-124.203684048999889, 41.971177476000108], + [-124.207875128999916, 41.981512762000122], + [-124.216968317999914, 42.006177337000011], + [-124.236968295999873, 42.017502766000135], + [-124.260875230999972, 42.033797471000028], + [-124.274826146999899, 42.045386991000086], + [-124.293118568999972, 42.046473703000018], + [-124.335950542999896, 42.091502932000125], + [-124.350457994999957, 42.097958190000085], + [-124.359555776999898, 42.113002399000052], + [-124.354164346999937, 42.131903249000018], + [-124.366168682999842, 42.150060251000141], + [-124.36383788899991, 42.175162873000048], + [-124.376235288999908, 42.196647261000081], + [-124.379059048999878, 42.220278054000076], + [-124.395171678999887, 42.239447333000115], + [-124.41246497299997, 42.248928127000127], + [-124.410267706999889, 42.258856512000037], + [-124.409448772999895, 42.29624445600011], + [-124.423329230999869, 42.317816473], + [-124.427886522999913, 42.320013739000089], + [-124.432813586999899, 42.329310740000082], + [-124.430653449999866, 42.349554755000057], + [-124.426075443999892, 42.361843874000058], + [-124.426500488999892, 42.377280563000014], + [-124.427318630999906, 42.396577619000155], + [-124.424980115999858, 42.419888939000188], + [-124.439788396999859, 42.439191830000098], + [-124.423541867999873, 42.454090670000042], + [-124.422025016999868, 42.46703634100011], + [-124.420674997999896, 42.491004834000151], + [-124.406320766999897, 42.519517320000105], + [-124.402821417999903, 42.532904364000117], + [-124.394439256999945, 42.566555080000128], + [-124.39818109699992, 42.585520691000013], + [-124.403366446999883, 42.594945157000083], + [-124.399891262999944, 42.615729872000131], + [-124.408533742999865, 42.644964339000026], + [-124.414540167999903, 42.662420966000141], + [-124.426177537999905, 42.671535549000126], + [-124.440907355999897, 42.678045966000028], + [-124.45441646999987, 42.686916408000073], + [-124.4667862619999, 42.702541408000158], + [-124.472927172999874, 42.730308576000155], + [-124.491819768999861, 42.73775836099999], + [-124.505482550999943, 42.736517645], + [-124.515004035999937, 42.748724677000084], + [-124.532053188999896, 42.803941148], + [-124.538889126999919, 42.816229559000064], + [-124.549387173999889, 42.825588283000073], + [-124.566761847999956, 42.833970445000048], + [-124.547718878999973, 42.845445054], + [-124.492447269999914, 42.929836294000054], + [-124.463672069999902, 42.993043181000033], + [-124.454253709999904, 43.011297919000114], + [-124.444883423999897, 43.029999070000045], + [-124.437463643999891, 43.05612324800002], + [-124.434702855999902, 43.07494314000003], + [-124.424445186999918, 43.119290092000156], + [-124.416151450999905, 43.125484449000041], + [-124.418485244999914, 43.14215128400015], + [-124.386612238999902, 43.263099067000141], + [-124.395136740999916, 43.3000737710001], + [-124.401323790999896, 43.31009613200014], + [-124.385374903999931, 43.330158249000092], + [-124.37650426599987, 43.340228799000144], + [-124.359867444999921, 43.34227740900009], + [-124.342123057999913, 43.352103755000158], + [-124.329455151999895, 43.348814444000155], + [-124.325971677999888, 43.338664408000014], + [-124.326407535999891, 43.312252094000101], + [-124.316514217999867, 43.299832471000045], + [-124.312873162999864, 43.309006546000049], + [-124.308283600999914, 43.327877757000138], + [-124.311817510999916, 43.338662644000138], + [-124.308707548999905, 43.354911278000131], + [-124.300559924999902, 43.36366093200003], + [-124.287342902999924, 43.370591539000046], + [-124.27619381399991, 43.39394765800013], + [-124.252756313999839, 43.417466539000102], + [-124.232873571999917, 43.424081451000134], + [-124.222315015999911, 43.42519798900004], + [-124.217993791999859, 43.416376566000068], + [-124.218632955999894, 43.402150876000135], + [-124.218238788999969, 43.386041811000055], + [-124.212873321999851, 43.374680932000032], + [-124.200377952999901, 43.373951905000084], + [-124.177776550999923, 43.369160233000017], + [-124.151844855999897, 43.369452216000028], + [-124.140034925999913, 43.375348974000062], + [-124.16974219099987, 43.37983307399999], + [-124.186671728999869, 43.391327923000105], + [-124.190469718999879, 43.405345899000068], + [-124.194327773999888, 43.420008847000034], + [-124.208610915999955, 43.43095956100008], + [-124.207025758999904, 43.44325738900001], + [-124.197621222999899, 43.452460028000118], + [-124.208698239999904, 43.452189747000133], + [-124.233131949999887, 43.447236190000169], + [-124.240191894999867, 43.436624843000132], + [-124.262399065999929, 43.426615851000051], + [-124.277027482999884, 43.421454885000131], + [-124.283457824999914, 43.403115965000055], + [-124.325282615999896, 43.362537133000117], + [-124.335229283999908, 43.365316424000056], + [-124.298029297999861, 43.417925605000065], + [-124.237903173999953, 43.547115862000012], + [-124.223465990999927, 43.586431329000121], + [-124.215687628999916, 43.627386786000116], + [-124.209787755999898, 43.656630134000139], + [-124.202283232999903, 43.662761227000104], + [-124.174686291999933, 43.672995449000112], + [-124.161712840999954, 43.688384319000093], + [-124.154449022999884, 43.698472398], + [-124.149322068999879, 43.711900132000082], + [-124.141835089999901, 43.721625067000119], + [-124.139812165999857, 43.733105799000114], + [-124.132854216999874, 43.734687380000153], + [-124.126168108999906, 43.728526572000035], + [-124.116585106999892, 43.710934713000043], + [-124.109017972999951, 43.706116866000016], + [-124.072499152999853, 43.704738674000126], + [-124.070218166999865, 43.711661445000132], + [-124.085539362999853, 43.71292483800012], + [-124.101270952999954, 43.718667316000094], + [-124.115210799999957, 43.73542805600006], + [-124.128533274999938, 43.749085285000049], + [-124.148814088999941, 43.747587557000102], + [-124.160475241999876, 43.736747354000059], + [-124.16144771999987, 43.717718817000119], + [-124.171514853999895, 43.697602817000146], + [-124.190834642999874, 43.684523422000112], + [-124.202945415999892, 43.680772710000113], + [-124.191724034999922, 43.717362788000159], + [-124.176018417999842, 43.762476774000064], + [-124.151031053999887, 43.88174062700007], + [-124.144747337999902, 43.943211167000086], + [-124.139881964999859, 43.982001044000143], + [-124.137196417999888, 43.990423895], + [-124.124256964999873, 43.996242580000072], + [-124.119455532999893, 44.006496486000103], + [-124.13341874299995, 44.03201655800008], + [-124.133540939999946, 44.044255746000047], + [-124.126128709999932, 44.099554755000057], + [-124.113945796999914, 44.190582723], + [-124.114084438999839, 44.249009507000082], + [-124.107248501999905, 44.286322333000115], + [-124.108143683999899, 44.29238515800013], + [-124.113596157999851, 44.301459052000112], + [-124.114084438999839, 44.307359117000075], + [-124.111480272999927, 44.313299872000087], + [-124.103098110999881, 44.322333075000088], + [-124.100412563999896, 44.327297268000152], + [-124.088843906999884, 44.385444965000048], + [-124.084427140999935, 44.411664499], + [-124.071888800999901, 44.421820380000085], + [-124.065309793999916, 44.429489071000077], + [-124.053551799999866, 44.432975382000151], + [-124.04523922899989, 44.425275988000081], + [-124.034977091999892, 44.416174158], + [-124.017893032999893, 44.409816799000154], + [-124.027615818999848, 44.439216139000038], + [-124.039337129999865, 44.443445670000031], + [-124.049612483999894, 44.448695878000038], + [-124.0682391389999, 44.437885694000087], + [-124.076080504999879, 44.43334357200014], + [-124.083433705999894, 44.427752110000156], + [-124.082753058999884, 44.440863348000065], + [-124.081434107999911, 44.462361753000025], + [-124.084352013999933, 44.498066040000126], + [-124.063193965999901, 44.609519519000131], + [-124.052607261999881, 44.618212423000145], + [-124.045663028999869, 44.621499811], + [-124.031134927999872, 44.617959933000023], + [-124.023214752999948, 44.611366461], + [-124.020248710999937, 44.606894260000061], + [-124.012020071999885, 44.599835351000181], + [-124.009690771999885, 44.60994500700015], + [-124.004754946999881, 44.61629137000007], + [-124.006706659999892, 44.623814005000085], + [-124.018883439999854, 44.627120086000062], + [-124.023189319999886, 44.623125955], + [-124.02715573499988, 44.622424241000104], + [-124.035080395999913, 44.625724517000052], + [-124.048294225999882, 44.632554954000156], + [-124.055899729999894, 44.626682131000067], + [-124.068138344999909, 44.61775280300013], + [-124.070778498999871, 44.620576774000099], + [-124.067458316999961, 44.632099257], + [-124.062829990999901, 44.640552046000053], + [-124.059185536999891, 44.651588654000179], + [-124.057844017999912, 44.663580183000178], + [-124.062787567999948, 44.671820262000111], + [-124.074686724999935, 44.672797201000108], + [-124.077992039999856, 44.674916636000049], + [-124.072364547999911, 44.678909749000141], + [-124.067063010999846, 44.689451505000093], + [-124.058420376999905, 44.726141669000143], + [-124.059437628999973, 44.7462425800001], + [-124.065261040999872, 44.76370249300011], + [-124.073374301999877, 44.777653192000045], + [-124.066562111999872, 44.805527790000056], + [-124.065184793999961, 44.823311082000188], + [-124.053639608999859, 44.83869852100004], + [-124.046498175999957, 44.858384507000054], + [-124.034535285999937, 44.878404039000102], + [-124.032704230999869, 44.897365627000042], + [-124.031849738999952, 44.904852606000091], + [-124.024484829999864, 44.909735419000143], + [-124.017689581999932, 44.916571356000176], + [-124.018204259999891, 44.927495878000073], + [-124.025646594999898, 44.935661944000017], + [-124.024484829999864, 44.943833726000079], + [-124.015004035999951, 44.967718817000147], + [-124.011341925999901, 44.997707424000012], + [-124.004790818999922, 45.043524481000091], + [-124.015736456999889, 45.054429429000081], + [-124.01414954299986, 45.064276434000092], + [-124.004221157999865, 45.082586981000148], + [-123.984364386999857, 45.104925848000093], + [-123.97691809799997, 45.128851630000057], + [-123.971099412999919, 45.153713283000101], + [-123.970590484999903, 45.167292770000032], + [-123.969176529999885, 45.186056690000115], + [-123.969122348999932, 45.205299804000063], + [-123.976389126999891, 45.216620184000035], + [-123.968356325999878, 45.250513705000074], + [-123.965443488999924, 45.25844961100016], + [-123.962077922999896, 45.279364813000157], + [-123.9603572259999, 45.299994208000143], + [-123.97191321499993, 45.331447658000073], + [-123.987660285999894, 45.336371161000116], + [-124.001779751999919, 45.337632554000137], + [-124.001779751999919, 45.344468492000047], + [-123.981027798999918, 45.349595445000077], + [-123.972767706999932, 45.362005927], + [-123.970204230999926, 45.378607489000061], + [-123.967844204999878, 45.391791083], + [-123.964466925999943, 45.402533270000035], + [-123.96117102799991, 45.409165757], + [-123.957875128999973, 45.414984442000119], + [-123.953358527999924, 45.41339752800009], + [-123.955474412999934, 45.40924713700015], + [-123.960804816999897, 45.378607489000061], + [-123.944243943999936, 45.389349677000055], + [-123.931955532999879, 45.405422268000152], + [-123.918446417999903, 45.417669989000032], + [-123.954701300999915, 45.43280670800003], + [-123.971099412999919, 45.451971747000172], + [-123.970529751999948, 45.494452216000141], + [-123.958607550999915, 45.516058661000145], + [-123.954335089999901, 45.548407294000143], + [-123.948801235999881, 45.557196356000034], + [-123.945668097999899, 45.525702216000113], + [-123.939198370999904, 45.499823309000092], + [-123.921930040999925, 45.494906973000113], + [-123.912876477999916, 45.48333597400007], + [-123.890533006999959, 45.475490627000127], + [-123.894220266999866, 45.482310798000086], + [-123.891423713999941, 45.488073026000066], + [-123.886613417999925, 45.493355896000097], + [-123.883287068999863, 45.500090489000101], + [-123.885347309999887, 45.507305306000106], + [-123.889291088999869, 45.519814741000133], + [-123.897487316999914, 45.524637883000153], + [-123.900502081999946, 45.538478908000158], + [-123.896066860999881, 45.560288804000109], + [-123.925200975999942, 45.554266669000086], + [-123.94798743399987, 45.568752346000153], + [-123.957875128999973, 45.576157945000134], + [-123.952250697999915, 45.59106385500003], + [-123.944581272999955, 45.621341006000151], + [-123.941875791999919, 45.648504864000088], + [-123.920732285999946, 45.662663219000038], + [-123.921595457999871, 45.683725751000068], + [-123.918229469999901, 45.689566336000055], + [-123.910301481999852, 45.691279813000094], + [-123.901518057999908, 45.687109308000075], + [-123.893312852999927, 45.68362677100005], + [-123.887428465999861, 45.682923249000012], + [-123.879546678999901, 45.686509507], + [-123.871083136999871, 45.69790273600016], + [-123.877186652999853, 45.696112372000172], + [-123.88166256399991, 45.695461330000043], + [-123.885894334999932, 45.694037177000055], + [-123.897322716999881, 45.695764312000151], + [-123.903615831999929, 45.700988709000129], + [-123.908009918999966, 45.708268126000078], + [-123.917432518999945, 45.704483054000079], + [-123.921039154999846, 45.697195406000063], + [-123.930344156999865, 45.693442533000066], + [-123.932365676999893, 45.681688915000123], + [-123.932415244999902, 45.668548308000155], + [-123.937879725999863, 45.660603523000148], + [-123.939361131999959, 45.667669989000061], + [-123.937408006999917, 45.698960679000109], + [-123.941677188999918, 45.72695436100004], + [-123.947577910999911, 45.735955403000148], + [-123.963928901999935, 45.74386924900007], + [-123.969298909999893, 45.7529401500001], + [-123.967767236999904, 45.760931776000078], + [-123.972239220999896, 45.762629693000136], + [-123.981138639999941, 45.760293748000052], + [-123.982152080999953, 45.767769414000057], + [-123.968375836999897, 45.781578289000052], + [-123.966664191999939, 45.79596588700015], + [-123.959136522999884, 45.815659898000106], + [-123.956613735999881, 45.873236395000092], + [-123.959706183999856, 45.89728424700003], + [-123.969715949999937, 45.918605861000074], + [-123.990549282999922, 45.937933661000031], + [-123.982329881999917, 45.948065497000144], + [-123.97288977799991, 45.952704169000086], + [-123.964292691999916, 45.966935428000127], + [-123.951091371999922, 45.972263102000156], + [-123.933990037999905, 45.979681708000058], + [-123.928456183999884, 45.992580471000068], + [-123.923329230999883, 46.013983466000113], + [-123.928402351999878, 46.037246131000089], + [-123.936841735999863, 46.081831258000037], + [-123.950632813999903, 46.11999888000004], + [-123.990467902999939, 46.200506903000061], + [-124.022664426999881, 46.230841603000144], + [-124.017339970999871, 46.235432913000139], + [-124.002717579999882, 46.237717669000105], + [-123.988130878999925, 46.226665894000135], + [-123.994790473999913, 46.22024085000011], + [-123.984855898999939, 46.210117], + [-123.968916763999886, 46.210555304000039], + [-123.95100432, 46.205014584000153], + [-123.923835320999913, 46.190721390000149], + [-123.915910672999885, 46.180595906000079], + [-123.910595386999915, 46.181506366000107], + [-123.903962625999839, 46.180113614000064], + [-123.900694775999909, 46.168617977000153], + [-123.880803580999896, 46.163980793000164], + [-123.866932745999918, 46.159857489000061], + [-123.835029830999929, 46.16249077200014], + [-123.825116494999932, 46.15694823500003], + [-123.818543148999879, 46.147280542000104], + [-123.813303188999839, 46.127752997000087], + [-123.812489386999928, 46.114162502000127], + [-123.798736131999902, 46.102443752000127], + [-123.800282355999855, 46.115790106000148], + [-123.801443721999931, 46.130231826000013], + [-123.800647149999932, 46.143553333000014], + [-123.778309699999937, 46.137152411], + [-123.778309699999937, 46.143377997000144], + [-123.786936001999933, 46.149562893000123], + [-123.806996222999899, 46.167547919000171], + [-123.816151495999875, 46.171332098], + [-123.827015753999959, 46.17206452000012], + [-123.843584157999928, 46.17308541600012], + [-123.850194324999919, 46.177239581000109], + [-123.860798490999883, 46.180941651000083], + [-123.86541879699989, 46.186467798000095], + [-123.856105166999868, 46.189204857000064], + [-123.836169952999853, 46.190077064000135], + [-123.820891454999938, 46.189578636000093], + [-123.798085089999859, 46.193548895000063], + [-123.778739653999892, 46.201386179000153], + [-123.766770687999895, 46.204106413000076], + [-123.754877025999903, 46.195794868000078], + [-123.736683722999956, 46.178168036000116], + [-123.727188914999957, 46.170422303000137], + [-123.705953207999897, 46.170805465000129], + [-123.614084438999853, 46.186468817], + [-123.599476691999925, 46.191839911000059], + [-123.62011446699988, 46.196644268000014], + [-123.620594855999926, 46.204820054000052], + [-123.607411261999886, 46.209051825000145], + [-123.581513746999931, 46.206572937000047], + [-123.564929028999941, 46.216555456], + [-123.542075616999895, 46.226154037000143], + [-123.536591355999889, 46.233973263000095], + [-123.519273185999879, 46.23526921600002], + [-123.497141079999906, 46.232814846000068], + [-123.484934048999932, 46.230047919000114], + [-123.473143295999932, 46.217489289000085], + [-123.45285927399992, 46.207223568000146], + [-123.437154073999878, 46.198321919000094], + [-123.43198949, 46.187278527000117], + [-123.430141898999935, 46.176723919], + [-123.421050584999918, 46.169134833], + [-123.405911419999896, 46.158253584000036], + [-123.38552092199987, 46.146183099], + [-123.325961380999857, 46.138886428000049], + [-123.299379165999923, 46.140992194000106], + [-123.277640681999927, 46.133941233000158], + [-123.256438867999918, 46.133321197], + [-123.23330644399995, 46.137152411], + [-123.2210308249999, 46.147285974000042], + [-123.205540394999858, 46.164614052000061], + [-123.193427997999891, 46.172330970000147], + [-123.180094812999911, 46.179102095000033], + [-123.180732522999918, 46.180027920000086], + [-123.207517995999879, 46.178363375000018], + [-123.247501756999867, 46.162626751000047], + [-123.269446005999839, 46.150414766], + [-123.297938515999917, 46.151544598000143], + [-123.32886597299985, 46.165555505000057], + [-123.393361813999903, 46.204137166000024], + [-123.412388732999901, 46.22029463600002], + [-123.427441404999868, 46.239288553000122], + [-123.444488553999932, 46.257781878000131], + [-123.455676105999927, 46.267044338000105], + [-123.478911912999919, 46.275864976000108], + [-123.603179490999963, 46.260077216000141], + [-123.662668423999904, 46.270249742000104], + [-123.667347785999908, 46.276841539000159], + [-123.669992641999897, 46.285589911000059], + [-123.6752009759999, 46.294256903000147], + [-123.692967461999885, 46.305202251000182], + [-123.701925194999944, 46.303349998000144], + [-123.71598445799988, 46.301464791000015], + [-123.723861920999923, 46.300325281000156], + [-123.726189183999921, 46.290234704000156], + [-123.735196355999904, 46.287934032000024], + [-123.747532741999933, 46.291080304000118], + [-123.752087593999946, 46.286005474000078], + [-123.757743441999935, 46.277518513000061], + [-123.764512917999866, 46.27326731], + [-123.777984049999901, 46.274084521000034], + [-123.790861116999892, 46.282992720000109], + [-123.806582777999878, 46.28339623], + [-123.8150429169999, 46.275311884000175], + [-123.81844384399993, 46.268761542000064], + [-123.834163609999848, 46.26875901800004], + [-123.841499900999878, 46.261434281000092], + [-123.851041267999918, 46.25984635500005], + [-123.854452098999872, 46.252129641000082], + [-123.862322906999893, 46.248653170000026], + [-123.873033488999866, 46.240171721000124], + [-123.889855052999906, 46.242147971000023], + [-123.90779618299986, 46.246460680000084], + [-123.925174298999949, 46.251540584000011], + [-123.939730065999925, 46.264383621000135], + [-123.948696046999885, 46.269835381000107], + [-123.96714923299993, 46.294315797000039], + [-123.973332682999867, 46.299781951000128], + [-123.985091096999852, 46.309097120000118], + [-124.009303808999846, 46.313455506000039], + [-124.022801132999916, 46.314253055000123], + [-124.032936245999878, 46.306109120000158], + [-124.040251926999886, 46.304178006000157], + [-124.048695005999917, 46.296418351000014], + [-124.051511365999886, 46.285929945000035], + [-124.040301877999937, 46.280974500000085], + [-124.038063928999861, 46.276704709000128], + [-124.041438644999928, 46.272828002], + [-124.052102995999903, 46.273611769000112], + [-124.06164186799991, 46.276722254000063], + [-124.071192894999868, 46.271295533000128], + [-124.075835740999878, 46.268296617000047], + [-124.080174877999909, 46.271687954000086], + [-124.078358527999896, 46.282375393], + [-124.077341676999964, 46.294966302000134], + [-124.072836102999943, 46.306992604000172], + [-124.068885861999945, 46.322898341000112], + [-124.06605768999988, 46.338806523000173], + [-124.063790138999934, 46.356267144000142], + [-124.062068435999947, 46.38770537700016], + [-124.060857095999907, 46.439870820000138], + [-124.062611456999932, 46.59593333500014], + [-124.072499561999891, 46.642510042000097], + [-124.062876105999891, 46.654940829000012], + [-124.051007426999931, 46.645602075000127], + [-124.035760036999932, 46.630818343000115], + [-124.044097459999918, 46.623602606000034], + [-124.038319464999873, 46.60761139500012], + [-124.025624152999896, 46.590887762000094], + [-124.017893032999893, 46.568548895000063], + [-124.026234503999959, 46.492336330000015], + [-124.024728969999913, 46.465521552000112], + [-124.022050881999917, 46.41966609400005], + [-124.014251108999915, 46.385118637000076], + [-123.993445857999859, 46.380099189000092], + [-123.977701361999848, 46.382444289000048], + [-123.958119269999926, 46.378241278000118], + [-123.947880384999891, 46.403004590000094], + [-123.932024378999898, 46.415282599000179], + [-123.926863660999928, 46.440099665000091], + [-123.920678164999913, 46.439314680000152], + [-123.910602091999948, 46.428439955], + [-123.875890266999889, 46.419120292000102], + [-123.846547003999945, 46.396633205000157], + [-123.84064693899991, 46.415757554000137], + [-123.856760219999884, 46.426459052000055], + [-123.880686001999933, 46.433498440000122], + [-123.898060675999915, 46.44163646000014], + [-123.900217251999919, 46.446682033000073], + [-123.901682094999884, 46.457342841000113], + [-123.904896613999938, 46.459377346000124], + [-123.910511847999942, 46.460679429000137], + [-123.917713995999875, 46.464056708000058], + [-123.924387173999932, 46.468451239000117], + [-123.935825431999888, 46.472311290000121], + [-123.935741860999897, 46.480457471000094], + [-123.935170050999929, 46.494696356000148], + [-123.922111857999965, 46.502552018000173], + [-123.908029751999919, 46.508286851000108], + [-123.900705532999908, 46.513373114000146], + [-123.896351691999911, 46.521226304000109], + [-123.894927537999948, 46.531317450000088], + [-123.896351691999911, 46.544419664000046], + [-123.899810350999914, 46.551174221000096], + [-123.904204881999902, 46.555609442000062], + [-123.920318162999877, 46.58071523600016], + [-123.944732225999914, 46.605902411000116], + [-123.956410285999922, 46.62311432500006], + [-123.938547329999864, 46.619859117000019], + [-123.911040818999922, 46.605414130000142], + [-123.894927537999948, 46.602728583000058], + [-123.915882941999897, 46.628404039000102], + [-123.922515428999958, 46.657863674000012], + [-123.91100012899993, 46.682033596000011], + [-123.877268032999837, 46.692084052], + [-123.843413865999963, 46.696682033000016], + [-123.826486782999893, 46.69236888200011], + [-123.819203253999959, 46.674994208000143], + [-123.811879035999965, 46.662583726000108], + [-123.795074022999955, 46.660874742000104], + [-123.776478644999955, 46.667181708000143], + [-123.763986782999851, 46.678412177000055], + [-123.79572506399991, 46.681952216000028], + [-123.818348761999871, 46.697699286000088], + [-123.839751756999917, 46.717433986000017], + [-123.86766516799986, 46.733058986000103], + [-123.883615688999868, 46.737494208000086], + [-123.899996272999928, 46.747406449000081], + [-123.912232280999916, 46.741022853000104], + [-123.913002165999842, 46.727768694000147], + [-123.951785553999898, 46.724833801000059], + [-123.976128826999854, 46.741054508000147], + [-123.98195567199987, 46.720438247000075], + [-123.974817696999907, 46.711102134000058], + [-123.963346041999841, 46.707162427000142], + [-123.972697566999898, 46.701262049], + [-123.987760147999893, 46.705704115000103], + [-124.000680798999852, 46.705712031000033], + [-124.014322856999897, 46.71065279], + [-124.025089946999927, 46.712628140000035], + [-124.029855923999918, 46.720160223000093], + [-124.070325420999865, 46.734812839000185], + [-124.093378958999864, 46.743228390000141], + [-124.100599022999873, 46.761477808000123], + [-124.10130774599989, 46.808661200000088], + [-124.114084438999839, 46.849107164000046], + [-124.130482550999929, 46.885972398000106], + [-124.126820441999882, 46.898504950000117], + [-124.111781545999904, 46.912325889000115], + [-124.090878992999876, 46.900013011000013], + [-124.097564256999945, 46.87787506700009], + [-124.077381964999915, 46.858791408000016], + [-124.072499152999853, 46.842922268000066], + [-124.058094855999883, 46.844468492000104], + [-124.042062954999892, 46.83978913], + [-124.028391079999864, 46.833970445000048], + [-124.021311001999905, 46.832342841000028], + [-124.013824022999927, 46.842474677000084], + [-124.014719204999835, 46.851141669000171], + [-124.021392381999888, 46.859849351000051], + [-124.031564907999837, 46.870266018000152], + [-124.057045040999895, 46.862085883000091], + [-124.054870351999895, 46.875872612000038], + [-124.04692793, 46.891135833000035], + [-124.033225867999946, 46.898024456000044], + [-124.006703253999973, 46.899237372000059], + [-123.991932745999904, 46.903753973], + [-123.962635870999875, 46.918036200000088], + [-123.881692947999852, 46.941664439000036], + [-123.813059048999889, 46.958970445000105], + [-123.828109657999875, 46.965226545000021], + [-123.844708923999917, 46.960842987000049], + [-123.867909308999899, 46.969631252000156], + [-123.950101256999886, 46.968401732000117], + [-123.955865493999866, 46.97234962], + [-123.945031734999915, 46.972831167000052], + [-123.922271287999919, 46.980129299000041], + [-123.965218484999866, 46.98418469400012], + [-124.012883726999931, 46.983726117000103], + [-124.019364052999919, 46.994076730000032], + [-124.012835579999944, 47.009348397000011], + [-124.027699347999913, 47.028143622000115], + [-124.046758818999947, 47.03302514700006], + [-124.065546335999855, 47.037470540000086], + [-124.090120937999941, 47.040932334000061], + [-124.116869937999923, 47.042916937000044], + [-124.139277389999847, 47.035527027000128], + [-124.148182745999932, 47.024400132000082], + [-124.146107550999915, 47.017238674000126], + [-124.1367081369999, 47.001898505], + [-124.137069078999914, 46.987208957000135], + [-124.13850473999986, 46.977351428000034], + [-124.136599385999958, 46.96794288100007], + [-124.130811874999907, 46.956765767000135], + [-124.123582245999913, 46.946574410000139], + [-124.11105931599991, 46.947995956000071], + [-124.104797280999961, 46.944707092000087], + [-124.105760020999938, 46.933421287000115], + [-124.122133408999858, 46.941310025000021], + [-124.138029463999885, 46.944596455000081], + [-124.148142335999879, 46.942620579], + [-124.153436551999874, 46.93801598000006], + [-124.153427676999939, 46.930123993000066], + [-124.163056340999916, 46.927489121000107], + [-124.17846065799985, 46.925506828000138], + [-124.175588053999945, 46.935704037000093], + [-124.176421678999901, 46.942613023000106], + [-124.175648566999882, 46.953843492000104], + [-124.172286001999936, 46.981426811000105], + [-124.171892320999859, 47.041948537000124], + [-124.174336137999916, 47.066607596000111], + [-124.179269985999852, 47.106878973000093], + [-124.199834843999909, 47.187479798000041], + [-124.211707435999926, 47.226638046000048], + [-124.227544376999859, 47.263167618000026], + [-124.242932187999941, 47.290078656], + [-124.253693171999913, 47.301540153000118], + [-124.275983768999936, 47.30262840799999], + [-124.280547912999921, 47.312692828000152], + [-124.299256539999874, 47.348204633000151], + [-124.286852923999888, 47.347376462000014], + [-124.278321126999884, 47.341959149000147], + [-124.271717902999853, 47.34259674700003], + [-124.283091526999883, 47.351234052000066], + [-124.308364067999904, 47.352668881000127], + [-124.317807932999884, 47.357351183000119], + [-124.348696084999929, 47.499752570000069], + [-124.350819464999944, 47.546820380000085], + [-124.374887200999922, 47.607688120000049], + [-124.383606373999882, 47.636016697000073], + [-124.410781607999866, 47.688183549000101], + [-124.41583523199985, 47.725587044000022], + [-124.422759568999894, 47.741888739000117], + [-124.435414191999953, 47.744452216000056], + [-124.44676673099994, 47.750392971000068], + [-124.455881313999839, 47.761786200000031], + [-124.47656569, 47.778254609000086], + [-124.483469204999849, 47.812933661], + [-124.541612179999888, 47.834331149000107], + [-124.556264611999879, 47.853682102], + [-124.567982550999886, 47.869696356000148], + [-124.593132931999932, 47.876199526000065], + [-124.60950710599991, 47.874855198000049], + [-124.638130105999849, 47.907864261000086], + [-124.656158006999888, 47.954006252000127], + [-124.671986456999917, 47.990708726000051], + [-124.683216925999915, 48.027818101000051], + [-124.693846940999975, 48.074530328000051], + [-124.689442511999886, 48.100165106000119], + [-124.722971157999922, 48.150091864000061], + [-124.73460723799991, 48.170403604000157], + [-124.71923587799985, 48.176295765000148], + [-124.700066285999867, 48.191858653000153], + [-124.689442511999886, 48.213446356000091], + [-124.689768032999908, 48.218898830000128], + [-124.694935675999901, 48.225572007], + [-124.705516511999889, 48.245979080000055], + [-124.703627259999891, 48.249854586000097], + [-124.689133067999947, 48.25250801], + [-124.682478490999927, 48.263499821000053], + [-124.683216925999915, 48.284735419000114], + [-124.679839647999898, 48.293687242000132], + [-124.664906378999945, 48.309068101000079], + [-124.661488410999937, 48.319525458000058], + [-124.670536563999946, 48.32416871300002], + [-124.669677649999926, 48.33318756000007], + [-124.678419099999871, 48.335084342000172], + [-124.689108792999889, 48.337616058000108], + [-124.702815186999942, 48.347202089000135], + [-124.718251105999911, 48.357367255], + [-124.730255571999919, 48.371578287000048], + [-124.72752846799996, 48.387727740000102], + [-124.696517970999906, 48.391086445], + [-124.661576058999913, 48.38603691200008], + [-124.638159990999839, 48.383001168000177], + [-124.619554954999842, 48.36891544800001], + [-124.607974310999907, 48.36632591200005], + [-124.593366725999914, 48.374856146000027], + [-124.574893906999932, 48.370407625], + [-124.532072339999885, 48.349909919000183], + [-124.457997199999937, 48.316839911000088], + [-124.399213986999939, 48.293579925000031], + [-124.346831834999961, 48.281073309000149], + [-124.33763587099989, 48.277044989000089], + [-124.296342400999904, 48.261545235000156], + [-124.274006837999877, 48.257051258000118], + [-124.250846252999906, 48.262899088], + [-124.227650519999941, 48.258530992000075], + [-124.15980255, 48.232662017000095], + [-124.111414280999881, 48.215931080000175], + [-124.099840942999933, 48.200472681000022], + [-124.05018191899984, 48.177263026000062], + [-123.997077274999938, 48.172693967000114], + [-123.970991385999952, 48.16559843600011], + [-123.943948357999901, 48.165543337000159], + [-123.918833130999928, 48.162276740000081], + [-123.873425222999856, 48.161551778000145], + [-123.861883532999855, 48.15639424600009], + [-123.818339231999886, 48.160775417000124], + [-123.788889126999891, 48.153143622000144], + [-123.742020506999836, 48.159914921000151], + [-123.700343728999925, 48.164910696000149], + [-123.64169479499995, 48.15119169200004], + [-123.633872895999886, 48.141447099000132], + [-123.58459962099991, 48.135416810000081], + [-123.56703737599986, 48.146934193], + [-123.552393456999965, 48.151362185000025], + [-123.535028430999887, 48.145464750000102], + [-123.523616923999924, 48.135099750000123], + [-123.505482550999972, 48.132635809000092], + [-123.475606090999861, 48.133607361000102], + [-123.435895825999864, 48.142407182000071], + [-123.41850625299989, 48.142302973000156], + [-123.405021835999918, 48.138998371000028], + [-123.4263017439999, 48.137192149000057], + [-123.440835693999944, 48.134055426000046], + [-123.453428629999877, 48.131548650000028], + [-123.449660626999858, 48.125108759000014], + [-123.421734170999898, 48.117827898000044], + [-123.357998639999863, 48.117422337000065], + [-123.322326178999901, 48.11461325100008], + [-123.287461243999886, 48.118216558000043], + [-123.246926722999888, 48.11533374599999], + [-123.223622199999909, 48.122015692000062], + [-123.17060080399996, 48.164374279000171], + [-123.150033294999858, 48.177102253000086], + [-123.108250514999881, 48.183837639000117], + [-123.118024334999888, 48.17940744400012], + [-123.130721701999846, 48.173711893000061], + [-123.144471236999905, 48.163508263], + [-123.161284959999932, 48.151922919000057], + [-123.145713754999861, 48.151269930000112], + [-123.11180940699991, 48.149027503000113], + [-123.089182094999913, 48.128485419000143], + [-123.06302914799997, 48.117603385000123], + [-123.040454271999863, 48.085113287000027], + [-123.04527747299997, 48.059719143000066], + [-123.029693162999891, 48.045233466000028], + [-123.007883266999841, 48.038560289000159], + [-122.996815558999899, 48.038641669000143], + [-123.005726691999925, 48.078680731000091], + [-122.999134894999955, 48.091742255000057], + [-122.956939256999917, 48.097479559000035], + [-122.941070115999892, 48.097886460000055], + [-122.927479620999932, 48.095119533000073], + [-122.921742316999953, 48.086127020000063], + [-122.918771938999853, 48.07021719000015], + [-122.910796678999901, 48.066107489], + [-122.89972896999987, 48.066229559000149], + [-122.88695227799991, 48.062567450000031], + [-122.872547980999855, 48.04975006700009], + [-122.857289191999882, 48.029527085000055], + [-122.853382941999882, 48.010443427], + [-122.873280402999882, 48.001125393000123], + [-122.873280402999882, 47.993719794000143], + [-122.854359503999959, 47.995266018], + [-122.841379360999866, 48.005560614000032], + [-122.824859178999887, 48.035223700000145], + [-122.836903449999895, 48.04987213700015], + [-122.877064581999903, 48.079657294000143], + [-122.881662563999853, 48.091742255000057], + [-122.877756313999853, 48.106634833000115], + [-122.868316209999932, 48.1192894550001], + [-122.85627193899991, 48.124579169000171], + [-122.823841925999915, 48.131089585000055], + [-122.794911261999914, 48.141180731000034], + [-122.770171678999944, 48.141099351000051], + [-122.750396287999919, 48.11717357], + [-122.759877081999917, 48.112209377000127], + [-122.784535285999922, 48.102932033000073], + [-122.791371222999928, 48.096747137000094], + [-122.791981574999895, 48.082912502000013], + [-122.784494594999927, 48.073065497000087], + [-122.775380011999928, 48.065578518000123], + [-122.770904100999871, 48.059149481000119], + [-122.764637824999923, 48.044623114000061], + [-122.722482876999976, 47.993719794000143], + [-122.714344855999869, 47.987250067000147], + [-122.695383266999855, 47.978949286000059], + [-122.688343878999973, 47.973211981000091], + [-122.685658331999903, 47.965399481000091], + [-122.682525193999922, 47.944077867000047], + [-122.678089972999942, 47.935695705000072], + [-122.626210089999859, 47.889553127000156], + [-122.62010657499988, 47.877630927000112], + [-122.628244594999884, 47.873521226000079], + [-122.658070441999882, 47.872503973], + [-122.667836066999925, 47.870794989], + [-122.67642167899993, 47.862127997000115], + [-122.683908657999908, 47.843207098000093], + [-122.692046678999915, 47.832586981000034], + [-122.736398891999869, 47.794419664000159], + [-122.750396287999919, 47.774562893000066], + [-122.768666144999898, 47.737982489000117], + [-122.775217251999962, 47.718817450000174], + [-122.777699347999899, 47.70254140800013], + [-122.781076626999919, 47.692043361000074], + [-122.78929602799991, 47.684515692], + [-122.800363735999866, 47.679877020000092], + [-122.811879035999894, 47.678371486000131], + [-122.828480597999942, 47.683172919000029], + [-122.829213019999884, 47.694077867000019], + [-122.818023240999963, 47.713120835], + [-122.799794074999895, 47.777289130000142], + [-122.798939581999889, 47.806708075000031], + [-122.805653449999923, 47.843451239000117], + [-122.817290818999936, 47.830267645000092], + [-122.81847083199996, 47.81085846600017], + [-122.821603969999842, 47.792425848000121], + [-122.83918209499987, 47.78204987200003], + [-122.840402798999889, 47.802313544000143], + [-122.846791144999912, 47.82029857], + [-122.85643469999988, 47.82607656500015], + [-122.867095506999917, 47.809271552000141], + [-122.86636308499989, 47.793524481000176], + [-122.858265753999945, 47.775458075000145], + [-122.83918209499987, 47.746649481000034], + [-122.86192786399991, 47.733343817], + [-122.876210089999901, 47.710150458000086], + [-122.886626756999888, 47.688137111000074], + [-122.903960740999878, 47.673163153000033], + [-122.910023566999882, 47.650091864000089], + [-122.918039516999926, 47.644842841000084], + [-122.930327928999887, 47.64199453300013], + [-122.941761847999928, 47.6349144550001], + [-123.021066860999881, 47.565659898000106], + [-123.032948370999932, 47.549994208000143], + [-123.065093553999887, 47.49339427300005], + [-123.080555792999917, 47.478827216000113], + [-123.101307745999904, 47.465277411000145], + [-123.119374152999924, 47.449530341000084], + [-123.133371548999889, 47.412298895], + [-123.158436652999896, 47.37205638200011], + [-123.161284959999932, 47.35683828300013], + [-123.130238410999908, 47.340643622000087], + [-123.074126756999902, 47.34463125200007], + [-122.905140753999902, 47.394964911000116], + [-122.871571417999874, 47.409857489000061], + [-122.83918209499987, 47.431952216000141], + [-122.867746548999961, 47.436265367000075], + [-122.907053188999868, 47.423814195000048], + [-122.976307745999932, 47.391017971000124], + [-123.052235480999869, 47.367010809000092], + [-123.091867641999897, 47.36737702], + [-123.113514777999882, 47.391017971000124], + [-123.11050370999989, 47.405096747000172], + [-123.099354620999861, 47.419907945000048], + [-123.072580532999865, 47.445542710000112], + [-123.06330318899991, 47.456732489000117], + [-123.022613084999918, 47.522894598], + [-122.949045376999948, 47.59707265800013], + [-122.935454881999888, 47.602850653000118], + [-122.873280402999882, 47.631170966000141], + [-122.798207160999951, 47.651678778000118], + [-122.775380011999928, 47.660711981000119], + [-122.763539191999882, 47.669134833000058], + [-122.757069464999873, 47.682318427000112], + [-122.742787238999881, 47.726874091000113], + [-122.733754035999965, 47.742580471000068], + [-122.634877081999946, 47.839667059000092], + [-122.623646613999952, 47.847154039000159], + [-122.613189256999874, 47.850287177000055], + [-122.595692511999914, 47.847235419000143], + [-122.594146287999877, 47.839789130000085], + [-122.596994594999913, 47.830715236000074], + [-122.592152472999942, 47.822984117000075], + [-122.570952928999944, 47.819769598], + [-122.56651770699996, 47.834458726000108], + [-122.571441209999932, 47.857082424000069], + [-122.588286912999934, 47.904445705000015], + [-122.592152472999942, 47.911769924000012], + [-122.610991990999878, 47.935980536000116], + [-122.613189256999874, 47.945949611000017], + [-122.553374803999915, 47.920843817000119], + [-122.52806555899987, 47.905503648000078], + [-122.51768958199996, 47.88104889500012], + [-122.516468878999945, 47.866359768000123], + [-122.510243292999903, 47.832586981000034], + [-122.504221157999893, 47.822455145000092], + [-122.493763800999915, 47.814032294000029], + [-122.490061001999962, 47.803859768000095], + [-122.504017706999932, 47.788234768], + [-122.495025193999922, 47.786118882], + [-122.484527147999941, 47.782131252000013], + [-122.475168423999918, 47.776068427000112], + [-122.469227667999888, 47.768377997000087], + [-122.468373175999886, 47.756537177000141], + [-122.47345943899991, 47.748032945000105], + [-122.479725714999859, 47.741888739000117], + [-122.482899542999917, 47.737005927000055], + [-122.492909308999913, 47.73525625200007], + [-122.541086391999869, 47.742865302000027], + [-122.557972785999951, 47.740423895000063], + [-122.555775519999955, 47.728705145000092], + [-122.564686652999896, 47.712551174000041], + [-122.579701300999915, 47.698187567000147], + [-122.595855272999884, 47.691961981000091], + [-122.651600714999887, 47.7325707050001], + [-122.661040818999894, 47.73045482], + [-122.658111131999874, 47.717962958000058], + [-122.650990363999924, 47.711411851], + [-122.641916469999927, 47.706691799000069], + [-122.633127407999865, 47.699448960000055], + [-122.628407355999855, 47.692938544000143], + [-122.592152472999942, 47.59707265800013], + [-122.599598761999914, 47.590236721000124], + [-122.592152472999942, 47.582749742000075], + [-122.616932745999904, 47.574123440000065], + [-122.643788214999887, 47.595851955000128], + [-122.681507941999953, 47.651678778000118], + [-122.68919837099989, 47.643540757], + [-122.69456946499993, 47.634100653000175], + [-122.696929490999892, 47.623114325000031], + [-122.69579016799986, 47.610052802000141], + [-122.690012173999889, 47.596625067000147], + [-122.681548631999945, 47.590521552000055], + [-122.646839972999885, 47.576971747000087], + [-122.639149542999874, 47.57705312700007], + [-122.638986782999908, 47.574774481000091], + [-122.64736894399995, 47.562323309000092], + [-122.656890428999958, 47.551743882000139], + [-122.675933397999941, 47.537665106000091], + [-122.681507941999953, 47.52753327000012], + [-122.630197719999842, 47.544378973000121], + [-122.607045050999901, 47.555487372000172], + [-122.585926886999886, 47.569077867000132], + [-122.553130662999877, 47.583400783000016], + [-122.543202277999868, 47.566799221000153], + [-122.541615363999938, 47.540961005000113], + [-122.534087693999879, 47.52753327000012], + [-122.507923956999932, 47.520331122000115], + [-122.509592251999948, 47.502915757000139], + [-122.522694464999915, 47.481756903000033], + [-122.530669725999871, 47.462958075000088], + [-122.538319464999901, 47.43748607], + [-122.551625128999916, 47.414007880000113], + [-122.556223110999866, 47.391994533000016], + [-122.537505662999891, 47.370550848000065], + [-122.545074022999927, 47.356431382000139], + [-122.555246548999975, 47.346625067], + [-122.568674282999879, 47.340155341000113], + [-122.585926886999886, 47.336371161000088], + [-122.560658331999932, 47.301336981000091], + [-122.55699622299997, 47.284613348000065], + [-122.568511522999913, 47.264064846000011], + [-122.583485480999855, 47.264227606000176], + [-122.661040818999894, 47.287909247000087], + [-122.68626868399987, 47.301214911000116], + [-122.683461066999911, 47.310370184000092], + [-122.669504360999852, 47.319484768000095], + [-122.661040818999894, 47.332586981000148], + [-122.653472459999946, 47.349188544000114], + [-122.638579881999902, 47.363226630000057], + [-122.627919074999866, 47.379950262000094], + [-122.633127407999865, 47.404608466000084], + [-122.640614386999928, 47.385972398000021], + [-122.653635219999913, 47.376532294000086], + [-122.688343878999973, 47.364325262000094], + [-122.696115688999882, 47.35846588700015], + [-122.703033006999888, 47.351223049000126], + [-122.710438605999869, 47.34516022300015], + [-122.71934973899991, 47.34259674700003], + [-122.72594153599988, 47.339056708000058], + [-122.727935350999914, 47.330633856000091], + [-122.729074673999946, 47.320624091000028], + [-122.733021613999938, 47.312445380000113], + [-122.748605923999932, 47.295355536000059], + [-122.753081834999904, 47.281195380000057], + [-122.747629360999866, 47.267279364000061], + [-122.723296678999887, 47.23847077000012], + [-122.724476691999911, 47.232611395], + [-122.730865037999934, 47.228013414000046], + [-122.736724412999891, 47.21967194200009], + [-122.736927863999938, 47.224554755000057], + [-122.741444464999887, 47.222316799000069], + [-122.747059699999895, 47.216986395], + [-122.750396287999919, 47.212836005000057], + [-122.748646613999924, 47.210679429000081], + [-122.745269334999904, 47.204982815000093], + [-122.742583787999919, 47.197902736000017], + [-122.742990688999839, 47.191717841000141], + [-122.772775844999842, 47.173081773000078], + [-122.798695441999939, 47.204982815000093], + [-122.814849412999905, 47.25088125200007], + [-122.814930792999888, 47.274318752000127], + [-122.795562303999873, 47.280666408000073], + [-122.78661048099994, 47.296087958], + [-122.784006313999853, 47.315252997000144], + [-122.784535285999922, 47.342759507], + [-122.786040818999965, 47.35040924700003], + [-122.791371222999928, 47.364325262000094], + [-122.798085089999887, 47.371486721000153], + [-122.8066300119999, 47.376532294000086], + [-122.811105923999961, 47.38377513200011], + [-122.805653449999923, 47.397772528000147], + [-122.820139126999976, 47.383286851000108], + [-122.836577928999873, 47.334295966000141], + [-122.846018032999893, 47.315863348000121], + [-122.870025193999936, 47.299261786000059], + [-122.885650193999922, 47.291327216000113], + [-122.897531704999878, 47.287909247000087], + [-122.913400844999899, 47.2853050800001], + [-122.920480923999946, 47.278021552], + [-122.949777798999975, 47.202297268], + [-122.965077277999939, 47.181138414000102], + [-122.990630662999919, 47.165025132000139], + [-123.043283657999851, 47.154445705000072], + [-123.068348761999928, 47.14594147300015], + [-123.07876542899993, 47.130275783000073], + [-123.063872850999871, 47.137111721000096], + [-123.040923631999888, 47.144232489000146], + [-123.021636522999941, 47.14443594], + [-123.017933722999899, 47.130275783000073], + [-123.029408331999946, 47.121527411], + [-123.048898891999841, 47.11823151200015], + [-123.06810462099989, 47.112494208], + [-123.07876542899993, 47.096136786000088], + [-123.058990037999905, 47.102687893000066], + [-122.974517381999945, 47.146429755000142], + [-122.968902147999941, 47.14769114800005], + [-122.9648331369999, 47.150946356000091], + [-122.942209438999839, 47.178045966000028], + [-122.930246548999904, 47.174465236000131], + [-122.934681769999969, 47.159979559000092], + [-122.979074673999904, 47.101507880000113], + [-122.992543097999885, 47.090887762000094], + [-123.010487433999927, 47.082505601000136], + [-122.987456834999946, 47.08100006700009], + [-122.964588995999947, 47.0899925800001], + [-122.945871548999975, 47.107163804000109], + [-122.935414191999897, 47.130275783000073], + [-122.929310675999915, 47.120428778000147], + [-122.927316860999881, 47.109808661000031], + [-122.929310675999915, 47.099269924000154], + [-122.935414191999897, 47.089300848000065], + [-122.925648566999953, 47.07831452], + [-122.918202277999882, 47.056138414000131], + [-122.908070441999925, 47.048325914000046], + [-122.893299933999856, 47.047267971000096], + [-122.892974412999919, 47.057359117000047], + [-122.900217251999948, 47.071519273000078], + [-122.908070441999925, 47.082505601000136], + [-122.89582271999987, 47.092596747000087], + [-122.896473761999914, 47.104925848000121], + [-122.901193813999924, 47.117865302000055], + [-122.901234503999916, 47.130275783000073], + [-122.892404751999948, 47.142075914000046], + [-122.852853969999913, 47.165025132000139], + [-122.847401495999875, 47.155218817], + [-122.847971157999851, 47.146063544000029], + [-122.852609829999864, 47.137762762000037], + [-122.859689907999837, 47.130275783000073], + [-122.845529751999905, 47.131740627000127], + [-122.830799933999913, 47.136786200000145], + [-122.820952928999887, 47.142075914000046], + [-122.821522589999859, 47.144598700000145], + [-122.822661912999891, 47.160101630000085], + [-122.817128058999884, 47.165716864000061], + [-122.798207160999951, 47.15761953300013], + [-122.790109829999835, 47.149115302000112], + [-122.782053188999896, 47.137762762000037], + [-122.772775844999842, 47.127752997000144], + [-122.748158331999932, 47.120021877000127], + [-122.735747850999914, 47.111476955000043], + [-122.726429816999953, 47.100409247000087], + [-122.722482876999976, 47.089300848000065], + [-122.685902472999942, 47.10439687700007], + [-122.652333136999914, 47.128078518000095], + [-122.571603969999899, 47.209295966000084], + [-122.550200975999942, 47.242336330000128], + [-122.537098761999886, 47.27855052300005], + [-122.537505662999891, 47.315863348000121], + [-122.520375128999945, 47.30548737200003], + [-122.485422329999849, 47.290228583000058], + [-122.448475714999887, 47.268459377000099], + [-122.433094855999855, 47.264878648000106], + [-122.418609178999901, 47.269476630000057], + [-122.400380011999914, 47.281073309000178], + [-122.417551235999852, 47.289252020000092], + [-122.427601691999925, 47.296535549000012], + [-122.429554816999968, 47.304877020000063], + [-122.422027147999913, 47.315863348000121], + [-122.40941321499993, 47.325018622000115], + [-122.39126542899993, 47.333685614], + [-122.372141079999864, 47.34003327000012], + [-122.339466925999915, 47.346584377000013], + [-122.328480597999956, 47.357123114000089], + [-122.323597785999894, 47.372544664000102], + [-122.325266079999906, 47.391017971000124], + [-122.333648240999963, 47.404120184000092], + [-122.360951300999943, 47.429999091000113], + [-122.366810675999886, 47.442206122000087], + [-122.366688605999911, 47.485337632000025], + [-122.370228644999898, 47.49713776200015], + [-122.381418423999904, 47.510199286000059], + [-122.38841712099989, 47.52081940300009], + [-122.40754146999987, 47.566066799000041], + [-122.409047003999916, 47.574937242000075], + [-122.403716600999942, 47.581976630000142], + [-122.390451626999919, 47.593695380000113], + [-122.377919074999923, 47.596177476000051], + [-122.366607225999928, 47.585679429], + [-122.356068488999881, 47.57127513200011], + [-122.345773891999869, 47.562323309000092], + [-122.341053839999859, 47.582953192000033], + [-122.339995897999898, 47.598944403000118], + [-122.345204230999897, 47.611965236000103], + [-122.359364386999914, 47.623724677000084], + [-122.404042120999875, 47.637396552000112], + [-122.413482225999886, 47.641669012000037], + [-122.423329230999911, 47.651068427000055], + [-122.428781704999849, 47.66038646], + [-122.425160285999894, 47.664740302], + [-122.413685675999943, 47.667466539000046], + [-122.409291144999955, 47.674383856000148], + [-122.406809048999932, 47.683294989], + [-122.400380011999914, 47.691961981000091], + [-122.384673631999945, 47.708970445000048], + [-122.381092902999882, 47.720160223000065], + [-122.383900519999926, 47.736721096000124], + [-122.387562628999888, 47.752346096000011], + [-122.398345506999888, 47.762925523000078], + [-122.406117316999897, 47.777899481000091], + [-122.404367641999897, 47.797593492000047], + [-122.399484829999835, 47.813950914000046], + [-122.391916469999884, 47.827582098], + [-122.382191535999922, 47.839056708000143], + [-122.352609829999878, 47.856268622000144], + [-122.339711066999953, 47.872788804000137], + [-122.336984829999892, 47.894842841000028], + [-122.334217902999924, 47.910467841000028], + [-122.324574347999956, 47.924383856000091], + [-122.324533657999879, 47.934149481000034], + [-122.320423956999917, 47.942084052], + [-122.312652147999927, 47.947211005000113], + [-122.292713995999932, 47.95734284100017], + [-122.285715298999946, 47.962836005], + [-122.277170376999933, 47.967433986000131], + [-122.241607225999871, 47.9728050800001], + [-122.232899542999888, 47.978420315], + [-122.212798631999931, 47.986802476000051], + [-122.209136522999884, 47.999701239000061], + [-122.207346157999893, 48.014390367000075], + [-122.200835740999906, 48.018988348], + [-122.196278449999866, 48.022650458000058], + [-122.191721157999908, 48.026312567], + [-122.193511522999898, 48.030951239000117], + [-122.201771613999881, 48.033677476000108], + [-122.20750891799986, 48.037543036000031], + [-122.221587693999894, 48.03815338700015], + [-122.238107876999962, 48.026312567], + [-122.307728644999955, 48.065375067000062], + [-122.340158657999865, 48.090033270000063], + [-122.362294074999937, 48.12250397300015], + [-122.367746548999961, 48.159613348000065], + [-122.365712042999945, 48.190578518], + [-122.375599738999952, 48.213202216000141], + [-122.416859503999902, 48.225531317], + [-122.421864386999857, 48.227972723000121], + [-122.428374803999944, 48.232123114000089], + [-122.435943162999891, 48.234605210000026], + [-122.444203253999973, 48.232367255000113], + [-122.448963995999875, 48.22284577000012], + [-122.446115688999839, 48.202215887000094], + [-122.466623501999891, 48.19204336100016], + [-122.469471808999927, 48.177069403000033], + [-122.465728318999894, 48.15908437700007], + [-122.457875128999916, 48.14362213700015], + [-122.448068813999882, 48.13418203300013], + [-122.432118292999874, 48.122463283000158], + [-122.414621548999918, 48.112494208000058], + [-122.399810350999942, 48.108221747000144], + [-122.384103969999884, 48.101467190000037], + [-122.369130011999857, 48.085679429000081], + [-122.348011847999942, 48.054266669000057], + [-122.366037563999868, 48.053900458000115], + [-122.377430792999931, 48.060248114000061], + [-122.396392381999945, 48.081529039000131], + [-122.405629035999908, 48.087795315000093], + [-122.489654100999957, 48.130438544000114], + [-122.510365363999966, 48.147447007000082], + [-122.526112433999927, 48.170965887000037], + [-122.533273891999869, 48.196112372000115], + [-122.531239386999928, 48.219875393], + [-122.533950316999878, 48.249676800000046], + [-122.498850063999839, 48.25287506700009], + [-122.465158657999837, 48.25995514500012], + [-122.445912238999881, 48.26105377800009], + [-122.429921027999882, 48.259100653000033], + [-122.418365037999948, 48.251532294000086], + [-122.409657355999883, 48.241400458000115], + [-122.400786912999919, 48.235256252000156], + [-122.388986782999865, 48.239813544000086], + [-122.393706834999961, 48.249986070000048], + [-122.390614386999886, 48.260199286000088], + [-122.375314907999922, 48.280747789000131], + [-122.379383917999888, 48.28595612200003], + [-122.381825324999909, 48.296820380000028], + [-122.385853644999884, 48.303778387000094], + [-122.391753709999918, 48.309759833000115], + [-122.425363735999852, 48.330226955000072], + [-122.455148891999855, 48.342474677000141], + [-122.478627081999917, 48.359808661000116], + [-122.491363084999961, 48.365057684000121], + [-122.506214972999928, 48.36798737200003], + [-122.522694464999915, 48.368963934000121], + [-122.533762173999946, 48.374660549000097], + [-122.553537563999882, 48.401312567000119], + [-122.567046678999944, 48.409898179000137], + [-122.567046678999944, 48.417385158000016], + [-122.552072719999913, 48.427883205000072], + [-122.558949347999928, 48.434027411000059], + [-122.5742081369999, 48.437079169000143], + [-122.584462042999917, 48.437811591000084], + [-122.591704881999945, 48.434068101000051], + [-122.607777472999928, 48.416001695000134], + [-122.615549282999837, 48.409898179000137], + [-122.630360480999897, 48.405340887000094], + [-122.646595831999932, 48.403753973000065], + [-122.661773240999921, 48.40623607], + [-122.673573370999904, 48.413641669000171], + [-122.683461066999911, 48.430161851000051], + [-122.67857825399993, 48.43886953300013], + [-122.66877193899991, 48.445257880000057], + [-122.663319464999873, 48.454901434000035], + [-122.669341600999886, 48.472805080000072], + [-122.682932094999842, 48.479193427], + [-122.697010870999875, 48.481350002000013], + [-122.704904751999948, 48.486273505000057], + [-122.70238196499993, 48.497992255000057], + [-122.689076300999915, 48.499823309000035], + [-122.672474738999952, 48.498968817000119], + [-122.659901495999861, 48.502997137000094], + [-122.633046027999882, 48.516262111000017], + [-122.613270636999857, 48.500311591000028], + [-122.597035285999908, 48.474554755000085], + [-122.580718553999887, 48.458319403000033], + [-122.580881313999853, 48.484523830000072], + [-122.568348761999857, 48.489488023000106], + [-122.551014777999868, 48.48151276200015], + [-122.527211066999968, 48.460353908000158], + [-122.514271613999952, 48.453192450000031], + [-122.500599738999924, 48.45042552300005], + [-122.488880988999938, 48.454901434000035], + [-122.480824347999899, 48.464097398], + [-122.480132615999963, 48.470282294000143], + [-122.482818162999934, 48.476507880000113], + [-122.485178188999896, 48.486273505000057], + [-122.488392706999946, 48.512925523], + [-122.494252081999903, 48.529364325000088], + [-122.503529425999943, 48.543646552], + [-122.515858527999896, 48.557603257000054], + [-122.556019660999908, 48.576605536000059], + [-122.567005988999952, 48.58535390800013], + [-122.546620245999875, 48.588690497000144], + [-122.525135870999947, 48.583197333000115], + [-122.485340949999866, 48.55980052300005], + [-122.468088344999856, 48.554510809000149], + [-122.447621222999885, 48.562160549000012], + [-122.440297003999888, 48.580715236000017], + [-122.444325324999852, 48.603257554], + [-122.457875128999916, 48.623439846000039], + [-122.466460740999921, 48.628729559000092], + [-122.475331183999884, 48.631252346000011], + [-122.484120245999932, 48.634751695000105], + [-122.492583787999891, 48.643255927000141], + [-122.497141079999835, 48.65355052300005], + [-122.503041144999955, 48.679632880000113], + [-122.502552863999881, 48.68488190300009], + [-122.525135870999947, 48.692287502000099], + [-122.521107550999886, 48.709051825000117], + [-122.498850063999839, 48.739488023000078], + [-122.508615688999882, 48.755682684000121], + [-122.52993730399993, 48.768622137000122], + [-122.554676886999914, 48.777329820000105], + [-122.574533657999922, 48.780462958000086], + [-122.593617316999897, 48.774115302000055], + [-122.609771287999962, 48.75861237200003], + [-122.639719204999835, 48.722398179000109], + [-122.650380011999871, 48.718166408000101], + [-122.6601456369999, 48.722560940000093], + [-122.667347785999937, 48.731878973000121], + [-122.670155402999896, 48.74290599199999], + [-122.666900193999936, 48.748114325000145], + [-122.652902798999975, 48.758286851000108], + [-122.64964759, 48.763657945000077], + [-122.658192511999857, 48.777329820000105], + [-122.676991339999901, 48.793443101], + [-122.695952928999915, 48.80076732], + [-122.704904751999948, 48.787909247000144], + [-122.700591600999942, 48.812160549000126], + [-122.703846808999899, 48.827378648000106], + [-122.714222785999894, 48.838202216000028], + [-122.757557745999861, 48.864243882], + [-122.768218553999901, 48.874009507000139], + [-122.772531704999892, 48.886542059000035], + [-122.768381313999868, 48.897406317000119], + [-122.759144660999894, 48.905951239000146], + [-122.749908006999931, 48.912543036000116], + [-122.745838995999875, 48.917669989000117], + [-122.758859829999864, 48.935939846000011], + [-122.808094855999869, 48.934515692000119], + [-122.813547329999906, 48.951808986000046], + [-122.80101477799991, 48.962307033000101], + [-122.777495897999941, 48.964789130000113], + [-122.731556769999884, 48.959214585000112], + [-122.741118943999965, 48.976792710000055], + [-122.753000454999921, 48.992499091000113], + [-122.753012325014581, 48.992514892989064], + [-122.65325801699997, 48.992514547000056], + [-122.433374796999928, 48.992514547000056], + [-122.213517415999988, 48.992514547000056], + [-121.993763387999977, 48.992514547000056], + [-121.773957682999949, 48.992514547000056], + [-121.554151977999936, 48.992514547000056], + [-121.33432043499991, 48.992514547000056], + [-121.114514729999982, 48.992514547000056], + [-120.894709025999958, 48.992514547000056], + [-120.674954997999947, 48.992514547000056], + [-120.455149292999934, 48.992514547000056], + [-120.235317749999908, 48.992514547000056], + [-120.015512044999966, 48.992514547000056], + [-119.795706339999953, 48.992514547000056], + [-119.575874796999926, 48.992514547000056], + [-119.3560432539999, 48.992514547000056], + [-119.136211710999959, 48.992514547000056], + [-118.916483520999961, 48.992514547000056], + [-118.696677815999934, 48.992514547000056], + [-118.476872111999924, 48.992514547000056], + [-118.257066406999897, 48.992514547000056], + [-118.037234863999956, 48.992514547000056], + [-117.817429158999943, 48.992514547000056], + [-117.597675130999932, 48.992514547000056], + [-117.377869425999918, 48.992514547000056], + [-117.158012044999879, 48.992514547000056], + [-117.038151102999947, 48.992514547000056], + [-116.938180501999938, 48.992514547000056], + [-116.718374796999925, 48.992514547000056], + [-116.498569091999897, 48.992514547000056], + [-116.278763387999888, 48.992514547000056], + [-116.058957682999946, 48.992514547000056], + [-116.048163124999959, 48.992514547000056], + [-115.839126139999919, 48.992514547000056], + [-115.619372111999922, 48.992514547000056], + [-115.399514730999883, 48.992514547000056], + [-115.179657349999943, 48.992514547000056], + [-114.959929158999941, 48.992514547000056], + [-114.740097615999915, 48.992514547000056], + [-114.520266072999888, 48.992514547000056], + [-114.300486206999878, 48.992514547000056], + [-114.080680501999936, 48.992514547000056], + [-114.063840127999939, 48.992514547000056], + [-113.860874796999923, 48.992514547000056], + [-113.641043254999985, 48.992514547000056], + [-113.421185872999956, 48.992514547000056], + [-113.201380167999929, 48.992514547000056], + [-112.981626139999918, 48.992514547000056], + [-112.76182043499999, 48.992566223000054], + [-112.541988891999878, 48.992617900000155], + [-112.32218318799994, 48.992617900000155], + [-112.102377482999927, 48.992617900000155], + [-111.882571778, 48.992617900000155], + [-111.66271439599987, 48.992617900000155], + [-111.442882853999933, 48.992617900000155], + [-111.22307714899992, 48.992617900000155], + [-111.003323120999909, 48.992617900000155], + [-110.783517415999981, 48.992617900000155], + [-110.563711711999957, 48.992617900000155], + [-110.343880167999927, 48.992617900000155], + [-110.124100300999913, 48.992617900000155], + [-109.999321087999903, 48.992617900000155], + [-109.904268758999976, 48.992617900000155], + [-109.684540568999878, 48.992617900000155], + [-109.464709025999952, 48.992617900000155], + [-109.244851644999912, 48.992617900000155], + [-109.025045939999899, 48.992617900000155], + [-108.805240234999957, 48.992617900000155], + [-108.585434529999944, 48.992617900000155], + [-108.365628824999916, 48.992617900000155], + [-108.14579728199989, 48.992617900000155], + [-107.926043253999893, 48.992617900000155], + [-107.706237549999955, 48.992617900000155], + [-107.486431844999942, 48.992617900000155], + [-107.266626138999911, 48.992617900000155], + [-107.046794596999888, 48.992617900000155], + [-106.826988892999864, 48.992617900000155], + [-106.607183186999933, 48.992617900000155], + [-106.387325805999907, 48.992617900000155], + [-106.16752010099988, 48.992617900000155], + [-105.947740234999955, 48.992617900000155], + [-105.727934529999942, 48.992617900000155], + [-105.508154662999928, 48.992617900000155], + [-105.288323120999905, 48.992617900000155], + [-105.068543253999891, 48.992617900000155], + [-104.84871171099995, 48.992617900000155], + [-104.628854329999911, 48.992617900000155], + [-104.409048624999897, 48.992617900000155], + [-104.189242920999874, 48.992617900000155], + [-104.047574446999903, 48.992617900000155], + [-103.969488891999873, 48.992617900000155], + [-103.749683186999931, 48.992617900000155], + [-103.529851643999905, 48.992617900000155], + [-103.310045938999892, 48.992617900000155], + [-103.090240234999868, 48.992617900000155], + [-102.870382853999928, 48.992617900000155], + [-102.650577148999901, 48.992617900000155], + [-102.430745605999874, 48.992617900000155], + [-102.210939900999946, 48.992669577000086], + [-101.991185872999935, 48.992669577000086], + [-101.771380167999922, 48.992669577000086], + [-101.551574462999895, 48.992669577000086], + [-101.364339646999895, 48.992669577000086], + [-101.331691243999856, 48.992669577000086], + [-101.111885538999928, 48.992669577000086], + [-100.892105672999918, 48.992669577000086], + [-100.672274129999977, 48.992669577000086], + [-100.452494262999963, 48.992669577000086], + [-100.232662719999936, 48.992669577000086], + [-100.012882853999926, 48.992669577000086], + [-99.793102986999912, 48.992669577000086], + [-99.573297282999974, 48.992669577000086], + [-99.353491576999957, 48.992669577000086], + [-99.133660034999934, 48.992669577000086], + [-98.913854329999907, 48.992669577000086], + [-98.694048625, 48.992669577000086], + [-98.47419124399994, 48.992669577000086], + [-98.254437215999928, 48.992669577000086], + [-98.034605671999827, 48.992669577000086], + [-97.814799967999903, 48.992669577000086], + [-97.594994262999876, 48.992669577000086], + [-97.375188558999952, 48.992669577000086], + [-97.226088565999987, 48.992669577000086], + [-97.155382852999935, 48.992669577000086], + [-96.935602987999914, 48.992669577000086], + [-96.715797281999897, 48.992669577000086], + [-96.49599157699987, 48.992669577000086], + [-96.276211710999945, 48.992669577000086], + [-96.056328491999892, 48.992669577000086], + [-95.836496948999979, 48.992669577000086], + [-95.616717081999951, 48.992669577000086], + [-95.396937215999941, 48.992669577000086], + [-95.177105672999915, 48.992669577000086], + [-95.168527384999976, 48.995046693000134], + [-95.161886962999887, 49.00114451200001], + [-95.15932898, 49.011789856000078], + [-95.159664876999869, 49.10950999000012], + [-95.160026611999882, 49.223353170000067], + [-95.160336669999964, 49.313011780000025], + [-95.160569213999906, 49.369494121000074] + ] + ], + [ + [ + [-179.081491665999948, 51.286444403000033], + [-179.069447394999941, 51.262844143], + [-179.061594204999864, 51.254543361000017], + [-179.061594204999864, 51.247707424000012], + [-179.085153774999924, 51.242905992000104], + [-179.103098110999952, 51.226467190000122], + [-179.119007941999882, 51.215399481000176], + [-179.136667446999894, 51.227240302000141], + [-179.129709438999896, 51.24359772300015], + [-179.134470180999898, 51.255764065000122], + [-179.142038540999948, 51.265570380000085], + [-179.143462693999908, 51.275051174000069], + [-179.143503383999899, 51.275051174000069], + [-179.13414466099988, 51.283758856000148], + [-179.118601040999863, 51.290187893000066], + [-179.088246222999885, 51.29608795800003], + [-179.081491665999948, 51.286444403000033] + ] + ], + [ + [ + [-178.973622199999909, 51.312445380000113], + [-178.986887173999946, 51.307521877000156], + [-178.992665167999917, 51.326239325000031], + [-178.99046790299991, 51.334173895], + [-178.978382941999911, 51.353827216000141], + [-178.980295376999891, 51.362860419000143], + [-178.986887173999946, 51.377020575000174], + [-178.985829230999911, 51.384222723], + [-178.972238735999952, 51.396551825000145], + [-178.95441646999987, 51.395209052000084], + [-178.917551235999895, 51.377427476], + [-178.904245571999866, 51.353827216000141], + [-178.913889126999948, 51.345770575000117], + [-178.93305416599992, 51.344183661000088], + [-178.948312954999892, 51.33982982], + [-178.973622199999909, 51.312445380000113] + ] + ], + [ + [ + [178.769216342000249, 51.639715887000179], + [178.787119988000285, 51.623846747000144], + [178.800303582000225, 51.635443427000084], + [178.814789259000207, 51.635931708000058], + [178.829274936000132, 51.628607489000061], + [178.841807488000228, 51.617010809000035], + [178.853770379000167, 51.620672919000086], + [178.86988366000017, 51.621812242000132], + [178.887380405000187, 51.620550848000121], + [178.920176629000224, 51.611802476000051], + [178.927907748000138, 51.607163804000109], + [178.931162957000282, 51.600287177000112], + [178.934336784999942, 51.588609117000104], + [178.941905144000287, 51.584947007000054], + [178.951833530000187, 51.583807684000121], + [178.961680535000227, 51.579779364000061], + [178.966644727000045, 51.578924872000144], + [178.986338738, 51.577826239], + [178.992686394000117, 51.576646226], + [178.996836785000056, 51.572333075000174], + [179.00611412900011, 51.558539130000085], + [179.009287957000168, 51.555568752000156], + [179.020762566000229, 51.549953518000152], + [179.060313347000175, 51.514593817000147], + [179.122894727000102, 51.480414130000057], + [179.139984571000156, 51.47679271], + [179.183441602000158, 51.473211981000119], + [179.195323113000114, 51.470526434000035], + [179.204274935999962, 51.463080145000063], + [179.228037957000168, 51.439195054], + [179.240082227000158, 51.416693427], + [179.257578972000232, 51.413641669000114], + [179.294281446000156, 51.41901276200015], + [179.291026238000285, 51.414984442], + [179.288747592000192, 51.411322333000143], + [179.285655144000117, 51.408026434000092], + [179.280039910000227, 51.404730536000059], + [179.280039910000227, 51.398504950000117], + [179.379242384000094, 51.401922919000114], + [179.400075717000135, 51.408433335000112], + [179.458506707000225, 51.381293036], + [179.472341342000135, 51.370550848000065], + [179.454274936000132, 51.370347398000106], + [179.421153191000059, 51.364162502000156], + [179.403575066000229, 51.364406643], + [179.405772332000112, 51.368394273000078], + [179.406911655000187, 51.368638414000102], + [179.410411004000053, 51.370550848000065], + [179.396657748000251, 51.376898505000028], + [179.382823113000171, 51.377346096000011], + [179.355153842000249, 51.370550848000065], + [179.348643425000233, 51.36741771], + [179.340668165000096, 51.359279690000093], + [179.335215691000172, 51.357570705000072], + [179.326996290000153, 51.358587958000143], + [179.310720248000138, 51.363267320000077], + [179.30111738400015, 51.364406643], + [179.287852410000227, 51.361029364000089], + [179.271169467000192, 51.354559637000179], + [179.254893425000176, 51.350287177000055], + [179.243011915000096, 51.353827216000141], + [179.235850457000168, 51.363470770000035], + [179.234222852000215, 51.372015692000119], + [179.237803582, 51.380764065], + [179.246429884000207, 51.391058661000116], + [179.076914910000227, 51.453558661000059], + [179.058441602000102, 51.467596747000115], + [179.041026238000171, 51.477036851000136], + [179.039073113000285, 51.482896226000079], + [179.034515821000156, 51.490627346000096], + [179.026866082000225, 51.500921942], + [179.014170769000231, 51.509019273000135], + [178.988129102000158, 51.522162177], + [178.960134310999962, 51.542141018000066], + [178.941416863000285, 51.550360419000143], + [178.872325066000172, 51.571356512000094], + [178.838389519000117, 51.576646226], + [178.799978061000246, 51.571112372000144], + [178.782969597000175, 51.572170315000037], + [178.77963300900015, 51.582831122000144], + [178.753591342000249, 51.582831122000144], + [178.735118035000227, 51.584906317000062], + [178.719411655000243, 51.592108466000113], + [178.701914910000227, 51.607367255000085], + [178.689463738000285, 51.615383205000015], + [178.636403842000192, 51.637437242000104], + [178.666677280000187, 51.655015367000047], + [178.68262780000029, 51.65900299700003], + [178.721202019000231, 51.642808335000083], + [178.769216342000249, 51.639715887000179] + ] + ], + [ + [ + [178.23129316500021, 51.831773179000137], + [178.237152540000153, 51.830511786000116], + [178.243825717000135, 51.830715236000074], + [178.252207879000167, 51.829901434000149], + [178.271820509000094, 51.825018622000087], + [178.313649936000246, 51.821926174000012], + [178.333994988000171, 51.816229559000035], + [178.35035241000017, 51.806952216000084], + [178.396169467000249, 51.76850006700009], + [178.381114129000167, 51.772365627000099], + [178.356455925000233, 51.767401434000035], + [178.341481967000135, 51.76850006700009], + [178.331228061000132, 51.774237372000144], + [178.311696811000246, 51.792059637000037], + [178.303721550000176, 51.795721747000172], + [178.285980665000153, 51.799750067000147], + [178.260264519000117, 51.80963776200015], + [178.236582879000224, 51.822943427000084], + [178.22486412900011, 51.836737372000087], + [178.23129316500021, 51.831773179000137] + ] + ], + [ + [ + [-178.760487433999941, 51.752264716000056], + [-178.80829830599987, 51.747300523], + [-178.822702602999954, 51.756170966000028], + [-178.842722133999928, 51.772650458000115], + [-178.858143683999941, 51.788641669000029], + [-178.858876105999883, 51.795721747000172], + [-178.846058722999942, 51.805894273000135], + [-178.832224087999947, 51.825751044000029], + [-178.813588019999855, 51.839178778000033], + [-178.786529100999928, 51.829901434000149], + [-178.748483852999925, 51.817572333000115], + [-178.740183071999951, 51.783636786000088], + [-178.760487433999941, 51.752264716000056] + ] + ], + [ + [ + [-176.354115363999938, 51.836737372000087], + [-176.354115363999938, 51.829901434000149], + [-176.345692511999886, 51.830471096000124], + [-176.32835852799991, 51.829169012000037], + [-176.319935675999943, 51.829901434000149], + [-176.325306769999912, 51.814398505000057], + [-176.327381964999915, 51.810003973000065], + [-176.298288540999948, 51.821478583000115], + [-176.283029751999891, 51.82257721600017], + [-176.264719204999921, 51.816229559000035], + [-176.264719204999921, 51.810003973000065], + [-176.270375128999916, 51.806463934000092], + [-176.273915167999917, 51.802150783000101], + [-176.276478644999912, 51.796332098000121], + [-176.279001430999926, 51.788275458], + [-176.26390540299991, 51.783148505], + [-176.258534308999856, 51.782131252000127], + [-176.258534308999856, 51.775295315], + [-176.27440344999988, 51.775132554000052], + [-176.286081508999871, 51.76850006700009], + [-176.292551235999895, 51.756740627000013], + [-176.292673305999955, 51.741156317], + [-176.300119594999927, 51.741156317], + [-176.307932094999927, 51.752386786000031], + [-176.315866665999891, 51.749579169000143], + [-176.330515102999897, 51.730292059000121], + [-176.340687628999945, 51.72581614800005], + [-176.35175533799989, 51.740871486000074], + [-176.360951300999858, 51.733710028000033], + [-176.37205969999988, 51.736721096000124], + [-176.385609503999945, 51.737127997000059], + [-176.397043423999889, 51.741888739000146], + [-176.401926235999895, 51.758205471000068], + [-176.409372524999952, 51.823675848], + [-176.403879360999923, 51.820990302000141], + [-176.393910285999937, 51.818264065000065], + [-176.38886471299989, 51.816229559000035], + [-176.395822719999899, 51.8263207050001], + [-176.423044399999895, 51.851019598000093], + [-176.392933722999857, 51.863104559000178], + [-176.34715735599994, 51.869940497000115], + [-176.303212042999917, 51.868963934000035], + [-176.279001430999926, 51.857163804000052], + [-176.292673305999955, 51.843736070000077], + [-176.311838344999927, 51.839789130000085], + [-176.333363410999937, 51.839341539000188], + [-176.354115363999938, 51.836737372000087] + ] + ], + [ + [ + [-176.120798305999926, 51.846869208000143], + [-176.111927863999881, 51.838568427000055], + [-176.10773678299995, 51.847316799000126], + [-176.093861456999889, 51.858587958000115], + [-176.062855597999942, 51.854966539000159], + [-176.030222133999899, 51.843166408000101], + [-176.011463995999918, 51.829901434000149], + [-176.018910285999908, 51.823675848], + [-175.999379035999937, 51.811957098000121], + [-175.990956183999884, 51.810003973000065], + [-175.998483852999925, 51.802557684000092], + [-176.026234503999916, 51.822333075000031], + [-176.031971808999884, 51.829901434000149], + [-176.049631313999896, 51.824855861000131], + [-176.06590735599994, 51.825384833000115], + [-176.097482876999919, 51.829901434000149], + [-176.106394008999871, 51.826483466000141], + [-176.10492916599992, 51.817816473000065], + [-176.094064907999922, 51.795721747000172], + [-176.109201626999919, 51.798976955000128], + [-176.121774868999921, 51.805650132], + [-176.130848761999914, 51.815904039000102], + [-176.135609503999916, 51.829901434000149], + [-176.148386196999951, 51.817938544000057], + [-176.152414516999926, 51.804510809000064], + [-176.149647589999859, 51.790228583000058], + [-176.141835089999859, 51.775295315], + [-176.148671027999882, 51.775295315], + [-176.15172278599988, 51.778998114000146], + [-176.159006313999896, 51.791449286000059], + [-176.16234290299991, 51.795721747000172], + [-176.162953253999888, 51.798529364000117], + [-176.161691860999866, 51.807318427], + [-176.16234290299991, 51.810003973000065], + [-176.166452602999868, 51.81126536699999], + [-176.175282355999911, 51.810777085], + [-176.194162563999953, 51.819973049000069], + [-176.208322719999899, 51.820013739000061], + [-176.219064907999893, 51.824367580000157], + [-176.223744269999912, 51.843573309000092], + [-176.201242641999926, 51.840887762000037], + [-176.199045376999919, 51.848863023], + [-176.210682745999918, 51.867132880000057], + [-176.204538540999948, 51.881008205000128], + [-176.190134243999893, 51.886704820000134], + [-176.173898891999954, 51.885321356000063], + [-176.16234290299991, 51.877671617000104], + [-176.137074347999885, 51.868597723000036], + [-176.128163214999915, 51.86399974199999], + [-176.128163214999915, 51.859523830000015], + [-176.120798305999926, 51.846869208000143] + ] + ], + [ + [ + [-176.018910285999908, 51.891994533000101], + [-175.990956183999884, 51.884507554000137], + [-175.986887173999918, 51.8868675800001], + [-175.974964972999885, 51.897040106000034], + [-175.970529751999919, 51.898138739000089], + [-175.962595180999926, 51.888617255000085], + [-175.958322719999927, 51.874741929], + [-175.95677649599989, 51.860825914000102], + [-175.956857876999891, 51.851019598000093], + [-175.976999477999925, 51.852362372000172], + [-176.10773678299995, 51.884507554000137], + [-176.092355923999918, 51.894476630000113], + [-176.073312954999921, 51.903794664000159], + [-176.052561001999919, 51.910345770000148], + [-176.020944790999948, 51.912787177], + [-176.010324673999889, 51.91242096600017], + [-176.000233527999939, 51.910101630000113], + [-175.990956183999884, 51.905585028000147], + [-175.999094204999892, 51.904486395], + [-176.018910285999908, 51.898138739000089], + [-176.018910285999908, 51.891994533000101] + ] + ], + [ + [ + [-177.845448370999918, 51.851874091000084], + [-177.840646938999924, 51.836737372000087], + [-177.708973761999886, 51.837307033000158], + [-177.648182745999861, 51.847601630000085], + [-177.622181769999884, 51.857163804000052], + [-177.626698370999918, 51.832586981000148], + [-177.647409633999843, 51.820502020000148], + [-177.675160285999908, 51.816555080000157], + [-177.700998501999948, 51.816229559000035], + [-177.726796027999882, 51.812201239000061], + [-177.775217251999862, 51.796535549000097], + [-177.800282355999855, 51.795721747000172], + [-177.797189907999893, 51.786322333000058], + [-177.791452602999897, 51.779689846000096], + [-177.783273891999897, 51.775946356000148], + [-177.773019985999866, 51.775295315], + [-177.796620245999918, 51.759222723000121], + [-177.80610104099992, 51.745591539000159], + [-177.807443813999896, 51.728908596000124], + [-177.806507941999911, 51.703314520000063], + [-177.810373501999919, 51.695379950000088], + [-177.837513800999943, 51.675360419000029], + [-177.847849087999947, 51.671861070000048], + [-177.860666469999899, 51.675034898000106], + [-177.882883266999954, 51.685858466000113], + [-177.885202602999925, 51.674505927000141], + [-177.892526821999923, 51.667914130000057], + [-177.903553839999859, 51.665106512000094], + [-177.916981574999852, 51.66543203300013], + [-177.90953528599988, 51.65924713700015], + [-177.916127081999946, 51.645331122000087], + [-177.913034633999871, 51.630926825000117], + [-177.895863410999937, 51.603949286000059], + [-177.906727667999917, 51.598089911000116], + [-177.920114712999919, 51.596502997000087], + [-177.933461066999939, 51.598700262000179], + [-177.944325324999909, 51.603949286000059], + [-177.948841925999886, 51.610785223000093], + [-177.953806118999921, 51.630113023000106], + [-177.957997199999852, 51.637437242000104], + [-177.973622199999937, 51.645168361000017], + [-178.011179165999948, 51.648138739000117], + [-178.032460089999915, 51.65924713700015], + [-178.044626430999926, 51.665594794000086], + [-178.082508917999945, 51.662502346000011], + [-178.101389126999891, 51.66543203300013], + [-178.091908331999889, 51.690578518], + [-178.079945441999939, 51.700344143000152], + [-178.029367641999954, 51.700140692], + [-178.01903235599994, 51.702337958], + [-178.002145962999947, 51.711737372000115], + [-177.974558071999923, 51.715480861000131], + [-177.96308346299989, 51.720526434000178], + [-177.95482337099989, 51.729071356000091], + [-177.950510219999899, 51.741156317], + [-177.955393032999865, 51.763739325000174], + [-177.97398841099988, 51.778265692000119], + [-177.998890753999888, 51.786037502000042], + [-178.046254035999937, 51.791449286000059], + [-178.062082485999895, 51.799627997000172], + [-178.09516354099992, 51.823675848], + [-178.189564581999889, 51.854966539000159], + [-178.213815883999871, 51.876044012000094], + [-178.17707271999987, 51.905585028000147], + [-178.147816535999937, 51.914699611000131], + [-177.952259894999884, 51.924750067000119], + [-177.931263800999943, 51.918646552000141], + [-177.931263800999943, 51.911810614000117], + [-177.895497199999909, 51.889227606000034], + [-177.882883266999954, 51.884507554000137], + [-177.882883266999954, 51.877671617000104], + [-177.892689581999889, 51.867010809000178], + [-177.845448370999918, 51.851874091000084] + ] + ], + [ + [ + [-177.13231360599994, 51.73065827000012], + [-177.156686977999897, 51.700140692], + [-177.192616339999887, 51.709173895], + [-177.203846808999884, 51.713812567000119], + [-177.202097133999899, 51.707098700000088], + [-177.202463344999899, 51.702053127000156], + [-177.203561977999954, 51.697577216000084], + [-177.203846808999884, 51.692694403000033], + [-177.223825649999867, 51.697088934000092], + [-177.249216274999895, 51.687201239], + [-177.277658657999893, 51.680121161000116], + [-177.306874152999939, 51.692694403000033], + [-177.315052863999853, 51.687323309000149], + [-177.319569464999915, 51.68695709800015], + [-177.327341274999924, 51.692694403000033], + [-177.32831783799989, 51.69424062700007], + [-177.341013149999952, 51.706366278000147], + [-177.356760219999899, 51.71775950700011], + [-177.370798305999955, 51.723863023000106], + [-177.385446743999864, 51.726385809000035], + [-177.436146613999938, 51.725897528000033], + [-177.454335089999915, 51.722967841000028], + [-177.467640753999945, 51.716945705000015], + [-177.484811977999868, 51.705877997000172], + [-177.498850063999924, 51.703314520000063], + [-177.532785610999866, 51.706366278000147], + [-177.598581508999843, 51.702704169000114], + [-177.629587368999864, 51.691636460000083], + [-177.642648891999954, 51.668850002000127], + [-177.648060675999886, 51.654730536000031], + [-177.660023566999911, 51.652980861000017], + [-177.671986456999946, 51.659125067], + [-177.677438930999898, 51.668850002000127], + [-177.678781704999892, 51.678534247000087], + [-177.683338995999918, 51.686265367000104], + [-177.691761847999885, 51.693304755000085], + [-177.704701300999886, 51.700140692], + [-177.704701300999886, 51.706366278000147], + [-177.688181118999921, 51.712103583000115], + [-177.659047003999945, 51.729925848], + [-177.646351691999882, 51.733710028000033], + [-177.626332160999908, 51.731594143000123], + [-177.588815883999899, 51.722154039000102], + [-177.570668097999885, 51.72003815300009], + [-177.522897915999948, 51.72003815300009], + [-177.518991665999948, 51.723334052000141], + [-177.519113735999923, 51.730617580000128], + [-177.517567511999886, 51.737860419000171], + [-177.508900519999884, 51.741156317], + [-177.474720831999889, 51.741156317], + [-177.471994594999927, 51.743312893], + [-177.469064907999922, 51.747951565000122], + [-177.463856574999909, 51.752630927000055], + [-177.454294399999924, 51.754787502000156], + [-177.387766079999921, 51.761664130000057], + [-177.292469855999883, 51.782782294000171], + [-177.215524868999893, 51.818793036000145], + [-177.203846808999884, 51.870184637000065], + [-177.199289516999954, 51.878607489], + [-177.195505337999919, 51.900946356000034], + [-177.190174933999856, 51.911810614000117], + [-177.194406704999892, 51.929999091000113], + [-177.173451300999915, 51.935614325000117], + [-177.122181769999884, 51.932928778000033], + [-177.099802212999862, 51.930365302000112], + [-177.074818488999853, 51.922593492000104], + [-177.054676886999914, 51.909816799000069], + [-177.046823696999923, 51.891994533000101], + [-177.06114661399991, 51.887844143000066], + [-177.066965298999889, 51.881577867000104], + [-177.06773841099988, 51.874253648000106], + [-177.067250128999888, 51.867132880000057], + [-177.074330206999861, 51.858832098000065], + [-177.121896938999953, 51.843573309000092], + [-177.136952277999882, 51.822821356000119], + [-177.128977016999926, 51.783596096000096], + [-177.142404751999919, 51.761623440000065], + [-177.127756313999896, 51.74746328300013], + [-177.13231360599994, 51.73065827000012] + ] + ], + [ + [ + [-175.707630988999853, 51.97386302300005], + [-175.678456183999913, 51.966986395000148], + [-175.662058071999894, 51.96702708500014], + [-175.662058071999894, 51.959621486000131], + [-175.703928188999896, 51.952378648000135], + [-175.710438605999911, 51.950018622000172], + [-175.714955206999946, 51.937323309000121], + [-175.726063605999883, 51.933050848], + [-175.73969479099992, 51.934556382000054], + [-175.752023891999897, 51.939154364000089], + [-175.745920376999891, 51.948431708000143], + [-175.72411048099994, 51.97386302300005], + [-175.707630988999853, 51.97386302300005] + ] + ], + [ + [ + [-176.559885219999927, 51.960435289000074], + [-176.560292120999918, 51.947414455000072], + [-176.553781704999921, 51.937323309000121], + [-176.53966223899991, 51.932928778000033], + [-176.549427863999938, 51.914129950000174], + [-176.563913540999891, 51.909125067000119], + [-176.58149166599992, 51.90916575700011], + [-176.600534633999928, 51.905585028000147], + [-176.611398891999897, 51.895453192], + [-176.618519660999851, 51.881415106000148], + [-176.626942511999914, 51.869086005], + [-176.641468878999945, 51.86399974199999], + [-176.641468878999945, 51.857163804000052], + [-176.588124152999882, 51.857163804000052], + [-176.595692511999914, 51.849351304000081], + [-176.598011847999885, 51.84393952000012], + [-176.596913214999944, 51.838324286000116], + [-176.594309048999946, 51.829901434000149], + [-176.569081183999884, 51.839056708000058], + [-176.549387173999946, 51.835516669000171], + [-176.529855923999889, 51.827704169000171], + [-176.504953579999921, 51.823675848], + [-176.504953579999921, 51.829901434000149], + [-176.511789516999954, 51.829901434000149], + [-176.504017706999946, 51.838934637000179], + [-176.491688605999911, 51.843736070000077], + [-176.463978644999912, 51.851019598000093], + [-176.44078528599988, 51.841864325000088], + [-176.427683071999923, 51.834295966000141], + [-176.42638098899991, 51.826808986000074], + [-176.431507941999939, 51.815008856000119], + [-176.427927212999947, 51.803900458], + [-176.426258917999945, 51.794663804000109], + [-176.437245245999918, 51.788275458], + [-176.433949347999885, 51.778062242000075], + [-176.429798956999917, 51.76886627800009], + [-176.423939581999889, 51.760972398000106], + [-176.415598110999895, 51.754787502000156], + [-176.427235480999911, 51.74144114800005], + [-176.454782680999926, 51.73045482], + [-176.470814581999946, 51.72003815300009], + [-176.490793423999918, 51.754217841000084], + [-176.522938605999883, 51.741522528000033], + [-176.588124152999882, 51.685858466000113], + [-176.593617316999911, 51.69611237200003], + [-176.601267055999926, 51.702582098000121], + [-176.61070716099988, 51.704291083000143], + [-176.621652798999918, 51.700140692], + [-176.614816860999895, 51.692694403000033], + [-176.629628058999884, 51.691961981000091], + [-176.64203854099992, 51.686835028000175], + [-176.651966925999915, 51.681097723], + [-176.659494594999956, 51.678412177000112], + [-176.671254035999937, 51.680853583000058], + [-176.683827277999939, 51.685492255], + [-176.696888800999915, 51.688462632000025], + [-176.710397915999891, 51.685858466000113], + [-176.719797329999921, 51.669012762000094], + [-176.724313930999955, 51.657171942000147], + [-176.721262173999889, 51.651760158000101], + [-176.71117102799991, 51.647772528000118], + [-176.706898566999882, 51.638332424000012], + [-176.707102016999954, 51.626857815000065], + [-176.710397915999891, 51.617010809000035], + [-176.751332160999908, 51.637437242000104], + [-176.771351691999882, 51.619614976000136], + [-176.784494594999927, 51.612860419000086], + [-176.799753383999899, 51.610785223000093], + [-176.814442511999914, 51.61554596600017], + [-176.824777798999918, 51.624823309000035], + [-176.824208136999943, 51.633734442000062], + [-176.806589321999923, 51.637437242000104], + [-176.806589321999923, 51.644964911000059], + [-176.819406704999949, 51.659898179000109], + [-176.82831783799989, 51.673814195], + [-176.829701300999886, 51.690578518], + [-176.820261196999951, 51.713812567000119], + [-176.827097133999871, 51.72003815300009], + [-176.89598548099994, 51.637437242000104], + [-176.902780727999954, 51.626939195000048], + [-176.909494594999899, 51.613348700000088], + [-176.917062954999949, 51.601548570000105], + [-176.92638098899991, 51.596502997000087], + [-176.952137824999937, 51.592189846000096], + [-176.969838019999941, 51.59267812700007], + [-176.97789466099988, 51.600287177000112], + [-176.975575324999909, 51.647121486000074], + [-176.966623501999891, 51.669134833000086], + [-176.902170376999891, 51.700140692], + [-176.889963344999927, 51.710150458000086], + [-176.882150844999842, 51.720363674000041], + [-176.879343227999897, 51.732367255000142], + [-176.882313605999911, 51.747300523], + [-176.861683722999885, 51.747951565000122], + [-176.854969855999911, 51.747300523], + [-176.857899542999945, 51.751776434000149], + [-176.861195441999882, 51.754787502000156], + [-176.820261196999951, 51.76850006700009], + [-176.820261196999951, 51.775295315], + [-176.84227454299986, 51.773830471000153], + [-176.866566535999937, 51.76886627800009], + [-176.889881964999944, 51.767157294000086], + [-176.909006313999924, 51.775295315], + [-176.915109829999921, 51.791937567000062], + [-176.904774542999917, 51.807562567000147], + [-176.885568813999953, 51.819159247000144], + [-176.864938930999926, 51.823675848], + [-176.854969855999911, 51.818182684000178], + [-176.846547003999888, 51.805975653000118], + [-176.833688930999955, 51.793850002000013], + [-176.810292120999861, 51.788275458], + [-176.726551886999943, 51.781968492000075], + [-176.704172329999921, 51.788275458], + [-176.72166907499988, 51.795558986000017], + [-176.755970831999946, 51.80548737200003], + [-176.769032355999911, 51.813177802000141], + [-176.779855923999918, 51.829046942000062], + [-176.778513149999924, 51.843166408000101], + [-176.767201300999943, 51.853338934000064], + [-176.748239712999919, 51.857163804000052], + [-176.706003383999899, 51.85968659100017], + [-176.758737758999899, 51.883978583000058], + [-176.779286261999943, 51.908677476000136], + [-176.781809048999861, 51.936468817], + [-176.776315883999928, 51.944484768000152], + [-176.758778449999909, 51.953436591000084], + [-176.741647915999948, 51.958319403000147], + [-176.722360805999926, 51.960516669000143], + [-176.68305416599992, 51.959621486000131], + [-176.660511847999942, 51.953192450000031], + [-176.648671027999882, 51.95180898600016], + [-176.638376430999955, 51.956488348000065], + [-176.626779751999948, 51.975165106000148], + [-176.621652798999918, 51.980129299000012], + [-176.604807094999927, 51.986761786000059], + [-176.583729620999918, 51.989691473000093], + [-176.562692837999862, 51.987860419000114], + [-176.545887824999852, 51.980129299000012], + [-176.553334113999938, 51.97386302300005], + [-176.559885219999927, 51.960435289000074] + ] + ], + [ + [ + [-175.874948696999923, 51.994370835000112], + [-175.86750240799995, 51.987494208], + [-175.85094153599988, 51.988836981000091], + [-175.834706183999941, 51.992743231000176], + [-175.819569464999944, 51.993963934000092], + [-175.80601966099988, 51.987494208], + [-175.876413540999891, 51.96893952], + [-175.910349087999919, 51.967230536], + [-175.950021938999953, 51.97386302300005], + [-175.93915768099987, 51.986476955000128], + [-175.919504360999923, 51.989447333000143], + [-175.89789791599992, 51.986273505000085], + [-175.881174282999893, 51.980129299000012], + [-175.880441860999952, 51.984808661000116], + [-175.878773566999939, 51.987779039000131], + [-175.876820441999882, 51.990464585000112], + [-175.874948696999923, 51.994370835000112] + ] + ], + [ + [ + [178.53785241000017, 51.89667389500012], + [178.516774936000246, 51.896185614000117], + [178.50261478000013, 51.901922919000114], + [178.471364780000187, 51.926255601000079], + [178.464528841999964, 51.932928778000033], + [178.45997155, 51.94440338700015], + [178.46322675900015, 51.952053127000013], + [178.46900475400011, 51.96116771], + [178.471934440999945, 51.976996161000116], + [178.477305535000113, 51.985907294000171], + [178.490407747999967, 51.988674221000124], + [178.506114129000224, 51.989935614000117], + [178.519704623000081, 51.994370835000112], + [178.522959832000225, 51.990545966000084], + [178.526133660000113, 51.988959052000055], + [178.533946160000113, 51.987494208], + [178.573415561000246, 51.975653387000037], + [178.59050540500013, 51.968247789000046], + [178.60230553500017, 51.953436591000084], + [178.604258660000227, 51.93768952000012], + [178.596202019000174, 51.929144598], + [178.582530144000231, 51.922349351000079], + [178.568044467000135, 51.911810614000117], + [178.574229363000285, 51.905585028000147], + [178.559092644000287, 51.900702216000084], + [178.53785241000017, 51.89667389500012] + ] + ], + [ + [ + [179.671397332000225, 51.877183335000112], + [179.642100457000168, 51.874172268000123], + [179.566742384000094, 51.885239976000079], + [179.557790561000246, 51.888251044000171], + [179.549327019, 51.894924221000124], + [179.522715691000172, 51.909125067000119], + [179.498220248000138, 51.916408596000153], + [179.497325065999945, 51.926214911000088], + [179.50261478000013, 51.935614325000117], + [179.50660241000017, 51.939154364000089], + [179.503672722000061, 51.950100002000156], + [179.499359571000156, 51.958929755000113], + [179.493500196000213, 51.966538804000052], + [179.486094597000232, 51.97386302300005], + [179.496267123000081, 51.978013414000017], + [179.516368035000227, 51.978216864000146], + [179.527110222000232, 51.980129299000012], + [179.558278842000249, 52.001857815000065], + [179.57447350400011, 52.004380601], + [179.597911004000053, 52.011542059000035], + [179.621267122999967, 52.022162177000084], + [179.636973504000224, 52.03534577000012], + [179.643402540000153, 52.030340887000179], + [179.649261915000096, 52.029038804], + [179.664235873000194, 52.02850983300003], + [179.670095247999967, 52.019842841000113], + [179.67652428500017, 52.015692450000174], + [179.683767123000081, 52.012844143000123], + [179.69214928500017, 52.00804271000014], + [179.718923372999967, 51.987494208], + [179.734548373000138, 51.978827216000113], + [179.749278190999945, 51.973578192000119], + [179.780935092000135, 51.96702708500014], + [179.775075716999964, 51.955471096000011], + [179.763845248000251, 51.946193752000156], + [179.753428582000282, 51.939642645000063], + [179.749847852000102, 51.936021226000108], + [179.755381707000112, 51.922674872000087], + [179.746592644000231, 51.91347890800013], + [179.722666863000285, 51.901922919000114], + [179.699717644000287, 51.886542059000149], + [179.671397332000225, 51.877183335000112] + ] + ], + [ + [ + [-175.995594855999911, 52.032945054], + [-175.985544399999924, 52.026434637000179], + [-175.963693813999896, 52.03534577000012], + [-175.975087042999945, 52.021918036000116], + [-176.03026282499988, 52.012844143000123], + [-176.04625403599988, 51.994370835000112], + [-176.028879360999895, 51.995998440000122], + [-176.021311001999948, 51.990708726000051], + [-176.021839972999942, 51.981350002000042], + [-176.028879360999895, 51.970445054000052], + [-176.043039516999926, 51.963364976], + [-176.057728644999941, 51.966945705000157], + [-176.080393032999893, 51.980129299000012], + [-176.122873501999948, 51.992621161000116], + [-176.138701951999906, 51.994370835000112], + [-176.138742641999897, 51.994370835000112], + [-176.155466274999924, 51.995347398], + [-176.164865688999924, 51.998602606000034], + [-176.170602993999921, 52.005031643000123], + [-176.190012173999918, 52.038519598000093], + [-176.194528774999867, 52.051092841000084], + [-176.193348761999943, 52.05955638200011], + [-176.187204555999955, 52.068060614000061], + [-176.175526495999861, 52.089667059000149], + [-176.169138149999952, 52.097398179000081], + [-176.143259243999921, 52.107123114000117], + [-176.105417446999894, 52.110744533000073], + [-176.068714972999885, 52.107652085], + [-176.04625403599988, 52.097398179000081], + [-176.005319790999948, 52.067816473], + [-175.998483852999925, 52.05955638200011], + [-175.998483852999925, 52.046698309000092], + [-175.995594855999911, 52.032945054] + ] + ], + [ + [ + [177.576996290000153, 51.988918361000074], + [177.563975457000282, 51.979071356000148], + [177.554453972000175, 51.968451239], + [177.57447350399994, 51.953436591000084], + [177.609141472000118, 51.952460028000118], + [177.614756707000282, 51.950018622000172], + [177.614431186000076, 51.936916408000016], + [177.612071160000227, 51.927923895000092], + [177.605967644000231, 51.92572663], + [177.594248894000174, 51.932928778000033], + [177.58033287900011, 51.925116278000033], + [177.573090040000096, 51.919582424000012], + [177.567637566000116, 51.911810614000117], + [177.555349155000243, 51.920599677000084], + [177.538747592000192, 51.928290106000091], + [177.521250847000175, 51.932928778000033], + [177.505544467000192, 51.932928778000033], + [177.494151238000114, 51.92568594], + [177.486094597000118, 51.915961005000057], + [177.477793816000116, 51.912990627000127], + [177.465098504000224, 51.925482489000146], + [177.471364780000187, 51.939154364000089], + [177.413584832000168, 51.930650132000054], + [177.392344597000175, 51.92088450700011], + [177.36597741000017, 51.912095445000048], + [177.354258660000113, 51.896063544000143], + [177.334483269000174, 51.839667059000121], + [177.330902540000096, 51.833807684000149], + [177.323578321000099, 51.826808986000074], + [177.316905144000174, 51.828762111000131], + [177.306813998000251, 51.836981512000037], + [177.297373894000231, 51.846991278000118], + [177.293142123000138, 51.854071356000176], + [177.283376498000138, 51.862494208000115], + [177.237803582000225, 51.883124091000141], + [177.224294467000249, 51.891994533000101], + [177.293711785000227, 51.922186591000113], + [177.316742384000207, 51.925482489000146], + [177.328868035000113, 51.92967357], + [177.340017123000081, 51.939764716000141], + [177.35840905000012, 51.963324286], + [177.372569207000168, 51.974676825000145], + [177.388031446000099, 51.978583075000145], + [177.423513217000192, 51.980129299000012], + [177.445323113000114, 51.98651764500012], + [177.454274935999962, 51.987494208], + [177.477875196000099, 51.986761786000059], + [177.48503665500013, 51.987494208], + [177.50847415500013, 51.994574286000059], + [177.51628665500013, 52.000962632], + [177.527110222000118, 52.034816799000154], + [177.556000196000213, 52.084906317000062], + [177.553884311000189, 52.10423411699999], + [177.593435092000135, 52.125067450000145], + [177.615407748000251, 52.130072333], + [177.642588738000171, 52.124701239000146], + [177.672211133999923, 52.112697658000044], + [177.683767123000138, 52.105047919000086], + [177.69044030000029, 52.089911200000088], + [177.682139519000287, 52.08283112200003], + [177.663910352000215, 52.075506903000033], + [177.656260613000285, 52.069484768000123], + [177.651052280000187, 52.059637762000094], + [177.648448113000285, 52.043646552000027], + [177.642588738000171, 52.03534577000012], + [177.626963738000171, 52.025213934000149], + [177.567637566000116, 52.001857815000065], + [177.576996290000153, 51.988918361000074] + ] + ], + [ + [ + [-173.592030402999853, 52.152044989000117], + [-173.575266079999921, 52.143744208000143], + [-173.548085089999915, 52.14752838700015], + [-173.531198696999923, 52.144964911000059], + [-173.544870571999866, 52.117905992000104], + [-173.531239386999914, 52.124701239000146], + [-173.520863410999937, 52.115301825000031], + [-173.50800533799989, 52.111558335], + [-173.430165167999917, 52.112209377000127], + [-173.422230597999942, 52.116766669000086], + [-173.414540167999917, 52.117905992000104], + [-173.408395962999947, 52.115790106000119], + [-173.407297329999892, 52.111070054000024], + [-173.405588344999899, 52.10639069200009], + [-173.39745032499988, 52.10423411699999], + [-173.370106574999909, 52.108587958000086], + [-173.360218878999888, 52.105169989000061], + [-173.353098110999952, 52.089911200000088], + [-173.330637173999946, 52.099758205000015], + [-173.30406653599988, 52.10773346600017], + [-173.276234503999945, 52.112250067000119], + [-173.250070766999897, 52.111721096000153], + [-173.249379035999851, 52.10960521000014], + [-173.24579830599987, 52.104803778000147], + [-173.240956183999913, 52.099798895], + [-173.236398891999954, 52.097398179000081], + [-173.228138800999886, 52.098049221000011], + [-173.216175910999937, 52.10260651200015], + [-173.209055141999897, 52.10423411699999], + [-173.157826300999943, 52.10423411699999], + [-173.140451626999948, 52.109442450000174], + [-173.130848761999886, 52.111151434000178], + [-173.123402472999913, 52.107977606000119], + [-173.114003058999884, 52.101304429000052], + [-173.101673956999946, 52.09829336100016], + [-172.955799933999884, 52.089911200000088], + [-172.974476691999882, 52.083889065000093], + [-173.016957160999937, 52.081610419000029], + [-173.034047003999888, 52.073187567000062], + [-173.051869269999855, 52.068548895000148], + [-173.102894660999851, 52.074693101000108], + [-173.139759894999912, 52.058661200000031], + [-173.164906378999888, 52.056341864000061], + [-173.189930792999917, 52.05882396], + [-173.213937954999949, 52.070379950000117], + [-173.22675533799989, 52.074204820000134], + [-173.23859615799995, 52.075751044000171], + [-173.243845180999926, 52.073187567000062], + [-173.247629360999952, 52.063299872000144], + [-173.25645911399991, 52.063055731000119], + [-173.27391516799986, 52.069484768000123], + [-173.307118292999888, 52.06346263200011], + [-173.376535610999923, 52.038763739000117], + [-173.414540167999917, 52.03534577000012], + [-173.449696417999888, 52.044378973000121], + [-173.462961391999926, 52.042792059000092], + [-173.472523566999911, 52.037339585000055], + [-173.484242316999882, 52.024725653000175], + [-173.490223761999914, 52.021673895000092], + [-173.500559048999918, 52.022853908000016], + [-173.515736456999917, 52.032416083], + [-173.523793097999942, 52.03534577000012], + [-173.538034633999871, 52.034735419000171], + [-173.549916144999884, 52.032171942000062], + [-173.560902472999857, 52.03115469], + [-173.572214321999923, 52.03534577000012], + [-173.557810024999867, 52.044623114000089], + [-173.570668097999885, 52.048529364000089], + [-173.682077602999925, 52.049017645000063], + [-173.67747962099989, 52.055853583000086], + [-173.674631313999924, 52.06268952], + [-173.688832160999851, 52.069484768000123], + [-173.715402798999889, 52.05499909100017], + [-173.749134894999884, 52.047796942000147], + [-173.836008266999897, 52.043361721000068], + [-173.887440558999884, 52.056463934000035], + [-173.922067837999862, 52.059393622000144], + [-173.929880337999862, 52.066310940000065], + [-173.92162024599989, 52.083726304000137], + [-173.930897589999915, 52.087347723000093], + [-173.956369594999927, 52.089911200000088], + [-173.965199347999885, 52.093247789000131], + [-173.981516079999921, 52.101304429000052], + [-173.990549282999922, 52.10423411699999], + [-173.997385219999956, 52.104396877000127], + [-174.01496334499987, 52.102728583000115], + [-174.024647589999915, 52.10423411699999], + [-174.033314581999917, 52.108465887000094], + [-174.050485805999955, 52.120266018000066], + [-174.059437628999888, 52.124701239000146], + [-174.058664516999954, 52.12909577000012], + [-174.057484503999945, 52.132147528000033], + [-174.055368618999921, 52.134955145000063], + [-174.051950649999924, 52.138373114000089], + [-174.044667120999918, 52.132554429000137], + [-174.023630337999862, 52.12889232], + [-174.010975714999915, 52.124701239000146], + [-173.958851691999882, 52.122992255000142], + [-173.942087368999921, 52.124701239000146], + [-173.902211066999882, 52.137518622000172], + [-173.887440558999884, 52.138373114000089], + [-173.892648891999897, 52.124335028000033], + [-173.895822719999956, 52.117987372000087], + [-173.901112433999913, 52.111721096000153], + [-173.885812954999864, 52.113023179000052], + [-173.857370571999951, 52.123358466000141], + [-173.846506313999953, 52.124701239000146], + [-173.838815883999843, 52.119574286000116], + [-173.805531378999945, 52.089911200000088], + [-173.790231899999895, 52.115301825000031], + [-173.765207485999895, 52.127386786000116], + [-173.733631964999887, 52.130845445000134], + [-173.698801235999952, 52.130926825000117], + [-173.685373501999948, 52.133978583], + [-173.660267706999861, 52.148016669000143], + [-173.647287563999953, 52.152044989000117], + [-173.630848761999857, 52.151271877000099], + [-173.61860104099992, 52.147894598000093], + [-173.606800910999937, 52.146673895000063], + [-173.592030402999853, 52.152044989000117] + ] + ], + [ + [ + [175.962901238000285, 52.344061591000084], + [175.928884311000246, 52.339260158000101], + [175.898610873000251, 52.348822333000086], + [175.881846550000233, 52.377997137000037], + [175.915863477000102, 52.377997137000037], + [175.936534050000176, 52.371649481000091], + [175.973317905000187, 52.364650783000016], + [175.99097741000017, 52.358099677000141], + [175.962901238000285, 52.344061591000084] + ] + ], + [ + [ + [-172.387277798999861, 52.296047268000095], + [-172.41279049399995, 52.27855052300005], + [-172.425770636999943, 52.276678778000175], + [-172.441273566999882, 52.289211330000072], + [-172.479440883999928, 52.264797268000123], + [-172.529408331999889, 52.25023021], + [-172.583241339999915, 52.248236395000063], + [-172.633046027999882, 52.261297919000029], + [-172.598825649999895, 52.313421942000062], + [-172.579050258999871, 52.335842190000093], + [-172.55797278599988, 52.35065338700015], + [-172.496530727999868, 52.371161200000117], + [-172.441273566999882, 52.399074611000131], + [-172.435536261999886, 52.393784898000078], + [-172.427357550999886, 52.390570380000113], + [-172.407175258999871, 52.385443427000027], + [-172.383534308999913, 52.368801174000154], + [-172.337106899999867, 52.358384507000082], + [-172.301584438999896, 52.344305731000034], + [-172.310902472999942, 52.316473700000145], + [-172.325998501999948, 52.309475002000099], + [-172.387277798999861, 52.296047268000095] + ] + ], + [ + [ + [-174.123890753999888, 52.39972565300009], + [-174.102406378999945, 52.394720770000063], + [-174.086130337999919, 52.399074611000131], + [-174.07172604099992, 52.382025458], + [-174.054514126999919, 52.368475653000033], + [-174.034413214999887, 52.359930731000119], + [-174.010975714999915, 52.358099677000141], + [-174.010487433999913, 52.342108466000028], + [-173.999623175999915, 52.328029690000093], + [-173.991892055999926, 52.312567450000174], + [-174.000477667999917, 52.292629299000097], + [-174.006947394999941, 52.287095445000077], + [-174.015858527999882, 52.281480210000055], + [-174.02562415299991, 52.277289130000142], + [-174.03461666599992, 52.27558014500012], + [-174.046254035999937, 52.271226304000137], + [-174.049387173999918, 52.26105377800009], + [-174.049509243999893, 52.249457098000065], + [-174.051909959999932, 52.240790106000176], + [-174.051950649999924, 52.240790106000176], + [-174.089182094999899, 52.227118231000063], + [-174.180734829999921, 52.230698960000112], + [-174.202829555999898, 52.212836005000057], + [-174.192738410999937, 52.201361395], + [-174.180653449999937, 52.190334377000156], + [-174.154367641999897, 52.171942450000117], + [-174.11750240799995, 52.152980861000103], + [-174.100209113999938, 52.140936591000084], + [-174.092966274999924, 52.127834377000042], + [-174.098947719999927, 52.112982489000061], + [-174.113514777999882, 52.112494208000086], + [-174.14789791599992, 52.127834377000042], + [-174.156849738999938, 52.12909577000012], + [-174.163807745999918, 52.125433661000088], + [-174.170521613999881, 52.12034739800005], + [-174.178578253999916, 52.117905992000104], + [-174.189645962999947, 52.119330145000092], + [-174.211008266999897, 52.124660549000154], + [-174.223255988999881, 52.124701239000146], + [-174.216501430999926, 52.116603908000016], + [-174.213205532999893, 52.107977606000119], + [-174.213205532999893, 52.099066473000093], + [-174.216420050999943, 52.089911200000088], + [-174.230051235999895, 52.095607815000093], + [-174.271066860999895, 52.097398179000081], + [-174.279245571999923, 52.100775458000086], + [-174.30052649599989, 52.11322663], + [-174.305856899999952, 52.117905992000104], + [-174.321034308999941, 52.123358466000141], + [-174.338693813999953, 52.120550848], + [-174.356882290999948, 52.114813544000029], + [-174.373768683999941, 52.111721096000153], + [-174.413197394999912, 52.113836981000148], + [-174.429921027999939, 52.110052802000141], + [-174.435536261999943, 52.097398179000081], + [-174.42133541599992, 52.102280992000132], + [-174.406198696999923, 52.104193427], + [-174.374134894999855, 52.10423411699999], + [-174.374134894999855, 52.097398179000081], + [-174.392770962999947, 52.092840887000122], + [-174.398142055999898, 52.052639065000122], + [-174.411366339999944, 52.042792059000092], + [-174.435861782999865, 52.044501044000114], + [-174.444447394999884, 52.050848700000031], + [-174.449167446999894, 52.063421942000119], + [-174.46226966099988, 52.083726304000137], + [-174.475697394999941, 52.068915106000148], + [-174.493275519999884, 52.072007554000137], + [-174.510935024999895, 52.084377346000068], + [-174.524973110999952, 52.097398179000081], + [-174.526071743999893, 52.081976630000142], + [-174.497792120999918, 52.053168036], + [-174.490183071999894, 52.03534577000012], + [-174.504831508999899, 52.047512111000017], + [-174.52314205599987, 52.057318427000141], + [-174.542185024999952, 52.061428127000099], + [-174.559071417999945, 52.056463934000035], + [-174.552601691999854, 52.052964585000055], + [-174.543649868999921, 52.04572174700003], + [-174.538563605999911, 52.042792059000092], + [-174.538563605999911, 52.03534577000012], + [-174.550648566999911, 52.036769924000097], + [-174.571278449999937, 52.041693427000055], + [-174.582956508999928, 52.042792059000092], + [-174.592396613999938, 52.040716864000089], + [-174.61546790299991, 52.031317450000145], + [-174.627390102999925, 52.02850983300003], + [-174.650746222999942, 52.03266022300015], + [-174.694203253999888, 52.051581122000172], + [-174.709299282999893, 52.049017645000063], + [-174.699330206999889, 52.042547919000143], + [-174.697702602999868, 52.035834052000112], + [-174.703724738999881, 52.030585028000033], + [-174.716745571999866, 52.02850983300003], + [-174.702137824999937, 52.020575262000037], + [-174.715280727999897, 52.016506252000099], + [-174.754261847999885, 52.014837958000086], + [-174.763050910999851, 52.016994533000073], + [-174.783273891999869, 52.02635325700011], + [-174.888050910999937, 52.042792059000092], + [-174.899037238999881, 52.039780992000104], + [-174.918649868999921, 52.030462958000058], + [-174.929025844999927, 52.02850983300003], + [-174.967477993999921, 52.030585028000033], + [-174.984811977999925, 52.027899481000148], + [-175.000965949999909, 52.018255927000084], + [-175.035023566999911, 52.004339911], + [-175.323557094999927, 52.007757880000113], + [-175.340524868999921, 52.014837958000086], + [-175.31078040299991, 52.026678778000033], + [-175.210194464999859, 52.03534577000012], + [-175.161325649999867, 52.048529364000089], + [-175.141306118999921, 52.049017645000063], + [-175.124501105999911, 52.047552802], + [-175.110218878999916, 52.044623114000089], + [-175.106312628999916, 52.038763739000117], + [-175.120798305999955, 52.02850983300003], + [-175.10411536399991, 52.029852606000091], + [-175.075998501999919, 52.040594794000114], + [-175.059315558999884, 52.042792059000092], + [-175.042469855999883, 52.038723049000126], + [-175.029855923999889, 52.032538153000175], + [-175.019846157999922, 52.031480210000112], + [-175.010935024999895, 52.042792059000092], + [-175.023508266999869, 52.048407294000114], + [-175.027048305999955, 52.05402252800009], + [-175.024606899999924, 52.066107489], + [-175.019968227999897, 52.074530341000141], + [-175.009958462999919, 52.074774481000091], + [-175.000477667999917, 52.071478583000058], + [-174.997263149999952, 52.069484768000123], + [-174.994130011999886, 52.066310940000065], + [-174.984608527999882, 52.06053294500002], + [-174.974598761999886, 52.058335679000109], + [-174.969960089999859, 52.066107489], + [-174.965931769999884, 52.079738674000154], + [-174.956735805999926, 52.0821800800001], + [-174.93895423099994, 52.076890367000104], + [-174.930287238999938, 52.086615302000055], + [-174.917795376999948, 52.104681708000086], + [-174.90656490799995, 52.114894924000012], + [-174.90172278599988, 52.100816148000078], + [-174.893788214999887, 52.088934637000122], + [-174.855091925999943, 52.104803778000147], + [-174.840199347999885, 52.089911200000088], + [-174.824940558999913, 52.097601630000113], + [-174.808664516999897, 52.098049221000011], + [-174.794504360999866, 52.091131903000118], + [-174.785633917999917, 52.076890367000104], + [-174.755482550999886, 52.094875393000152], + [-174.744007941999854, 52.103501695000048], + [-174.744007941999854, 52.117905992000104], + [-174.722971157999922, 52.124701239000146], + [-174.697824673999946, 52.110988674000041], + [-174.650380011999914, 52.104315497000144], + [-174.601551886999914, 52.104641018000095], + [-174.572132941999939, 52.111721096000153], + [-174.592152472999885, 52.115301825000031], + [-174.597889777999882, 52.122626044000029], + [-174.590687628999945, 52.131048895000092], + [-174.572132941999939, 52.138373114000089], + [-174.551625128999888, 52.139105536000116], + [-174.529123501999891, 52.137111721000068], + [-174.509470180999926, 52.139105536000116], + [-174.497629360999895, 52.152044989000117], + [-174.526722785999937, 52.15131256700009], + [-174.540476040999948, 52.153225002000127], + [-174.552845831999889, 52.158880927000141], + [-174.545399542999917, 52.165716864000061], + [-174.550038214999944, 52.168524481000091], + [-174.552357550999915, 52.17080312700007], + [-174.559071417999945, 52.179348049000012], + [-174.449208136999886, 52.179348049000012], + [-174.42442786399991, 52.170843817000062], + [-174.412668423999946, 52.171210028000175], + [-174.407663540999891, 52.182766018], + [-174.413034633999871, 52.189601955000128], + [-174.425607876999948, 52.196682033000101], + [-174.449208136999886, 52.206691799000069], + [-174.449208136999886, 52.212836005000057], + [-174.387074347999857, 52.212958075000031], + [-174.361195441999939, 52.20538971600017], + [-174.339344855999911, 52.186183986000017], + [-174.330881313999953, 52.202337958000086], + [-174.315419074999937, 52.214667059000035], + [-174.29828854099992, 52.219427802000112], + [-174.284738735999952, 52.212836005000057], + [-174.277658657999893, 52.219549872000087], + [-174.272572394999855, 52.23135000200007], + [-174.267648891999897, 52.237697658000101], + [-174.25914466099988, 52.240912177000055], + [-174.236317511999943, 52.243719794000114], + [-174.229481574999937, 52.248236395000063], + [-174.228260870999918, 52.267523505], + [-174.24474036399991, 52.274155992000075], + [-174.284738735999952, 52.27558014500012], + [-174.299672003999888, 52.283148505000085], + [-174.309519008999899, 52.293036200000088], + [-174.317128058999941, 52.302679755000057], + [-174.325672980999883, 52.309637762000065], + [-174.344919399999924, 52.315375067000119], + [-174.355295376999919, 52.311183986000103], + [-174.356271938999896, 52.299261786000145], + [-174.346791144999884, 52.281805731000091], + [-174.376779751999948, 52.283840236000017], + [-174.415842251999891, 52.293443101], + [-174.442575649999924, 52.307521877000127], + [-174.435536261999943, 52.322699286000116], + [-174.369374152999853, 52.324774481000063], + [-174.338612433999884, 52.335516669000143], + [-174.346791144999884, 52.364325262000094], + [-174.334421352999925, 52.370266018000038], + [-174.323068813999868, 52.367865302000084], + [-174.311472133999871, 52.363755601000108], + [-174.298410610999895, 52.364325262000094], + [-174.288319464999915, 52.371771552000084], + [-174.282297329999892, 52.388413804000109], + [-174.242054816999911, 52.396877346000153], + [-174.190297003999888, 52.41787344], + [-174.161813930999898, 52.419582424000012], + [-174.145456508999871, 52.409491278000033], + [-174.123890753999888, 52.39972565300009] + ] + ], + [ + [ + [173.791270379000167, 52.501532294000057], + [173.730642123000194, 52.47211334800015], + [173.713063997999967, 52.45058828300013], + [173.726084832000168, 52.422919012000037], + [173.733653191000116, 52.411200262000037], + [173.738942905000243, 52.394435940000122], + [173.742442254000167, 52.376410223], + [173.743418815999945, 52.361232815], + [173.660899284999942, 52.35065338700015], + [173.663584832000225, 52.356105861000103], + [173.664235872999967, 52.35871002800009], + [173.665049675000176, 52.360663153000033], + [173.668467644000287, 52.364325262000094], + [173.668467644000287, 52.371161200000117], + [173.656016472000175, 52.370062567000062], + [173.644541863000285, 52.371161200000117], + [173.634532097000232, 52.373968817000062], + [173.626719597000232, 52.377997137000037], + [173.62761478000013, 52.394598700000088], + [173.605316602000102, 52.39679596600017], + [173.500661655000187, 52.387030341000056], + [173.401703320999928, 52.396673895], + [173.38892662900011, 52.403794664000074], + [173.394053582000168, 52.419582424000012], + [173.408457879000167, 52.430121161000059], + [173.431325717000249, 52.44049713700015], + [173.454274936000246, 52.447211005000113], + [173.469086134000207, 52.446844794000086], + [173.491465690999945, 52.442043361000017], + [173.510508660000227, 52.44159577], + [173.527842644000231, 52.44550202], + [173.544932488000285, 52.453680731000119], + [173.567067905000243, 52.471177476000079], + [173.575531446000213, 52.473578192], + [173.592784050000176, 52.474066473], + [173.599294467000192, 52.476385809000149], + [173.602305535000113, 52.481675523000135], + [173.609548373000194, 52.491278387000122], + [173.618662957000282, 52.498724677], + [173.624522332000225, 52.500718492000132], + [173.631114129000224, 52.500433661], + [173.737478061000189, 52.510809637000094], + [173.767344597000118, 52.509426174000012], + [173.791270379000167, 52.501532294000057] + ] + ], + [ + [ + [-171.222157355999911, 52.46308014500012], + [-171.27684485599994, 52.453680731000119], + [-171.311634894999884, 52.464260158000158], + [-171.31464596299989, 52.488430080000072], + [-171.293568488999881, 52.514105536000116], + [-171.256418423999889, 52.529445705000072], + [-171.221669074999909, 52.510809637000094], + [-171.207630988999881, 52.498724677], + [-171.211659308999913, 52.484442450000088], + [-171.216013149999924, 52.477240302000055], + [-171.218088344999927, 52.469387111000074], + [-171.222157355999911, 52.46308014500012] + ] + ], + [ + [ + [-170.59784908799989, 52.611395575000117], + [-170.621937628999888, 52.593898830000157], + [-170.645456508999956, 52.587103583000143], + [-170.670847133999871, 52.589016018000095], + [-170.700876430999926, 52.597723700000174], + [-170.752797003999916, 52.574286200000088], + [-170.769154425999943, 52.562933661000116], + [-170.786081508999928, 52.547512111000103], + [-170.797840949999909, 52.540269273000078], + [-170.81078040299991, 52.542914130000057], + [-170.831247524999952, 52.556708075000174], + [-170.83739173099994, 52.549261786], + [-170.846669074999909, 52.584377346000068], + [-170.821237758999871, 52.616034247000059], + [-170.755482550999886, 52.659125067000062], + [-170.748646613999881, 52.667669989], + [-170.747059699999937, 52.674383856000034], + [-170.743723110999923, 52.678697007000139], + [-170.73192298099994, 52.680243231000176], + [-170.715077277999939, 52.68032461100016], + [-170.703480597999942, 52.681870835000026], + [-170.694081183999913, 52.686835028000147], + [-170.684071417999917, 52.696966864000032], + [-170.670480923999889, 52.700832424000012], + [-170.647084113999881, 52.69916413], + [-170.622303839999915, 52.693996486000103], + [-170.604644334999904, 52.687079169000086], + [-170.593454555999898, 52.685207424000126], + [-170.583119269999884, 52.68235911699999], + [-170.573353644999941, 52.678371486000017], + [-170.563710089999887, 52.672796942], + [-170.566110805999926, 52.662176825000145], + [-170.565907355999883, 52.65615469000015], + [-170.567250128999859, 52.650702216000028], + [-170.59784908799989, 52.611395575000117] + ] + ], + [ + [ + [174.164805535000113, 52.720933335000055], + [174.182302280000187, 52.70693594], + [174.096690300000176, 52.713771877000042], + [174.080332879000053, 52.717678127000013], + [174.083506707000112, 52.726507880000085], + [174.097666863000228, 52.735785223000121], + [174.113942905000073, 52.741034247000115], + [174.164805535000113, 52.720933335000055] + ] + ], + [ + [ + [-170.128122524999895, 52.727443752000156], + [-170.194406704999949, 52.727443752000156], + [-170.180246548999918, 52.766791083000058], + [-170.17328854099992, 52.775213934000092], + [-170.179676886999943, 52.78001536699999], + [-170.182443813999896, 52.781480210000055], + [-170.186960415999863, 52.782660223000093], + [-170.169016079999921, 52.789780992000132], + [-170.146555141999926, 52.791001695000048], + [-170.12364661399991, 52.78807200700011], + [-170.104400193999879, 52.782660223000093], + [-170.086252407999893, 52.779120184000092], + [-170.065785285999908, 52.771063544000143], + [-170.056101040999948, 52.760321356000148], + [-170.070261196999866, 52.748480536], + [-170.067209438999896, 52.744574286], + [-170.065744594999927, 52.741441148000106], + [-170.063425258999956, 52.734279690000065], + [-170.128122524999895, 52.727443752000156] + ] + ], + [ + [ + [-169.78290768099987, 52.892523505000057], + [-169.767526821999923, 52.884711005000057], + [-169.755482550999915, 52.884914455000015], + [-169.743356899999924, 52.887111721000011], + [-169.727609829999892, 52.88507721600017], + [-169.715891079999892, 52.879055080000072], + [-169.70722408799989, 52.872748114000117], + [-169.698557094999899, 52.86933014500012], + [-169.686634894999855, 52.872015692], + [-169.686634894999855, 52.866929429000081], + [-169.684763149999895, 52.863999742000047], + [-169.681996222999942, 52.861476955000128], + [-169.679269985999952, 52.857733466000113], + [-169.683054165999891, 52.851996161000116], + [-169.693470831999889, 52.830471096000011], + [-169.679269985999952, 52.823635158000101], + [-169.692575649999867, 52.813788153000175], + [-169.70653235599994, 52.80556875200007], + [-169.713856574999852, 52.796128648000078], + [-169.707142706999917, 52.782660223000093], + [-169.723378058999941, 52.77448151200015], + [-169.737904425999886, 52.778306382], + [-169.761789516999954, 52.795721747000144], + [-169.781442837999919, 52.803900458000058], + [-169.864816860999923, 52.820868231000034], + [-169.877308722999942, 52.819525458000143], + [-169.914865688999924, 52.799383856000119], + [-169.922067837999862, 52.797552802000141], + [-169.939930792999917, 52.795721747000144], + [-169.957102016999954, 52.79035065300009], + [-169.964100714999944, 52.789496161], + [-169.97016354099992, 52.791652736000103], + [-169.978993292999888, 52.80101146000014], + [-170.000721808999856, 52.809515692000062], + [-170.01109778599988, 52.823635158000101], + [-170.011667446999923, 52.837713934000035], + [-169.973255988999938, 52.855658270000092], + [-169.964100714999944, 52.857733466000113], + [-169.922840949999909, 52.85089752800009], + [-169.899362758999928, 52.851792710000083], + [-169.887440558999884, 52.855292059000149], + [-169.86851966099988, 52.875148830000072], + [-169.850290493999893, 52.882513739000061], + [-169.802967902999939, 52.882269598000121], + [-169.78290768099987, 52.892523505000057] + ] + ], + [ + [ + [-170.030588344999956, 52.864569403000033], + [-170.056101040999948, 52.857082424000154], + [-170.090769008999928, 52.864569403000033], + [-170.104807094999899, 52.871161200000088], + [-170.117054816999939, 52.879217841000028], + [-170.124826626999948, 52.888617255000057], + [-170.125477667999888, 52.899359442000062], + [-170.117298956999889, 52.909654038999989], + [-170.103220180999926, 52.916327216000141], + [-170.086374477999925, 52.919501044000114], + [-170.070261196999866, 52.919175523], + [-170.014271613999938, 52.905829169000171], + [-169.994577602999897, 52.905585028000033], + [-170.01109778599988, 52.882269598000121], + [-170.030588344999956, 52.864569403000033] + ] + ], + [ + [ + [172.904063347000175, 53.001166083000115], + [172.911387566000116, 52.998602606000091], + [172.914235873000024, 52.992661851], + [172.916270379000167, 52.986232815000065], + [172.921071811000076, 52.981878973000065], + [172.934092644000231, 52.97988515800013], + [172.957286004000167, 52.979641018000095], + [172.969411655000073, 52.974432684000092], + [173.008067254000053, 52.989691473000065], + [173.027191601999988, 52.993597723000065], + [173.127207879000167, 52.994940497000144], + [173.143321160000056, 52.990383205000015], + [173.175059441000172, 52.971747137000122], + [173.184743686000019, 52.967596747000172], + [173.186045769000231, 52.961818752000013], + [173.171397332000225, 52.948635158000073], + [173.140147332000168, 52.926662502000156], + [173.151540561000019, 52.92877838700015], + [173.160329623000194, 52.927720445000105], + [173.165863477000045, 52.922756252000156], + [173.167491082000225, 52.913031317], + [173.222178582000168, 52.937323309000178], + [173.249847852000158, 52.944403387000065], + [173.25684655000012, 52.933498440000065], + [173.301280144000231, 52.925604559000092], + [173.322520379000224, 52.916001695000105], + [173.321787957000225, 52.902492580000128], + [173.309336785000113, 52.892767645], + [173.296397332000168, 52.88548411699999], + [173.263031446000099, 52.872015692], + [173.301524285000113, 52.859320380000142], + [173.351573113000285, 52.852484442000119], + [173.401866082000168, 52.851874091000141], + [173.441905144000287, 52.857733466000113], + [173.433116082000168, 52.838568427000141], + [173.41871178500017, 52.830755927000055], + [173.376638217000135, 52.830471096000011], + [173.337412957, 52.826239325000088], + [173.322032097000175, 52.820217190000093], + [173.321543816000172, 52.810858466000141], + [173.296153190999945, 52.829535223000121], + [173.281993035000227, 52.837388414000102], + [173.263031446000099, 52.844142971000153], + [173.241953972000175, 52.847113348000065], + [173.222666863000171, 52.843817450000031], + [173.206553582000168, 52.833929755000113], + [173.194834832000112, 52.816799221000068], + [173.188649936000019, 52.816799221000068], + [173.188649936000019, 52.823635158000101], + [173.181162957000055, 52.823635158000101], + [173.174327019000231, 52.809312242000104], + [173.188649936000019, 52.803168036000116], + [173.188649936000019, 52.795721747000144], + [173.163747592000192, 52.793524481000148], + [173.146494988000114, 52.788275458000086], + [173.131521030000073, 52.788641669000086], + [173.112803582000112, 52.803168036000116], + [173.094004754000053, 52.826564846000039], + [173.089366082000112, 52.830471096000011], + [173.077484571000156, 52.828314520000035], + [173.057871941000116, 52.818915106000091], + [173.048350457000112, 52.816799221000068], + [173.016612175000233, 52.802191473000065], + [172.981293165000039, 52.772772528000147], + [172.944346550000063, 52.749823309000178], + [172.907481316, 52.754706122000144], + [172.910817905000016, 52.760158596000096], + [172.91285241000017, 52.770086981000091], + [172.912119988000228, 52.780991929000081], + [172.907481316, 52.789496161], + [172.893809441000172, 52.796087958000086], + [172.880218946000042, 52.795314846000153], + [172.85621178500017, 52.789496161], + [172.849375847000061, 52.791815497000144], + [172.839366082000055, 52.801581122000087], + [172.832286004, 52.803168036000116], + [172.826996290000039, 52.799383856000119], + [172.821787957000225, 52.785630601], + [172.814626498000194, 52.782660223000093], + [172.801768425000176, 52.784409898000078], + [172.776621941000172, 52.792873440000037], + [172.763438347000061, 52.795721747000144], + [172.763438347000061, 52.803168036000116], + [172.776703321000156, 52.810980536000116], + [172.783213738000171, 52.822821356000176], + [172.790782097, 52.85089752800009], + [172.808767123000081, 52.877508856000034], + [172.811045769000117, 52.887925523000106], + [172.797618035000056, 52.892523505000057], + [172.78785241000017, 52.890814520000148], + [172.756032748000081, 52.878241278000147], + [172.744476759000037, 52.877101955000043], + [172.708181186000019, 52.878241278000147], + [172.640391472, 52.868801174000126], + [172.626149936000189, 52.872015692], + [172.635590040000039, 52.879339911], + [172.660411004000167, 52.913031317], + [172.652842644000231, 52.924383856000176], + [172.639903191000059, 52.928045966000028], + [172.605153842000078, 52.926662502000156], + [172.54761803500017, 52.91290924700003], + [172.534027540000039, 52.916083075000088], + [172.520192905000016, 52.922593492000019], + [172.491872592000192, 52.920111395000063], + [172.476084832000225, 52.926662502000156], + [172.551117384000094, 52.967596747000172], + [172.557383660000056, 52.960150458], + [172.57691491, 52.977972723000093], + [172.660411004000167, 53.008612372000087], + [172.73080488399998, 53.000392971000096], + [172.746755405000187, 53.004868882000054], + [172.762868686000076, 53.014146226000108], + [172.781097852000158, 53.015529690000093], + [172.904063347000175, 53.001166083000115] + ] + ], + [ + [ + [-169.719349738999881, 52.950140692000119], + [-169.748117641999926, 52.94651927300005], + [-169.741932745999947, 52.960150458], + [-169.760487433999856, 52.968695380000113], + [-169.758005337999919, 52.98273346600017], + [-169.749867316999911, 52.998480536000116], + [-169.753285285999937, 53.02480703300013], + [-169.734242316999939, 53.032904364000061], + [-169.709421352999868, 53.03652578300013], + [-169.693470831999889, 53.03587474199999], + [-169.680734829999921, 53.033189195000105], + [-169.67320716099988, 53.025213934000064], + [-169.669138149999895, 53.013861395000063], + [-169.66620846299989, 53.001166083000115], + [-169.686350063999924, 52.988999742000132], + [-169.701405402999939, 52.968207098000121], + [-169.719349738999881, 52.950140692000119] + ] + ], + [ + [ + [-168.00829016799986, 53.570298570000105], + [-167.959909633999956, 53.537787177000112], + [-167.934681769999884, 53.526760158000073], + [-167.901560024999952, 53.52252838700015], + [-167.837391730999911, 53.525458075000174], + [-167.806996222999942, 53.520086981000119], + [-167.794789191999882, 53.502020575000088], + [-167.808094855999911, 53.477932033000073], + [-167.85297604099992, 53.447251695], + [-167.871164516999897, 53.426947333000086], + [-167.861683722999885, 53.421454169000143], + [-167.853871222999885, 53.413641669000143], + [-167.85130774599989, 53.403876044000114], + [-167.857492641999954, 53.392767645000092], + [-167.850046352999897, 53.385402736000103], + [-167.875559048999889, 53.371893622000115], + [-167.93773352799991, 53.348456122000059], + [-167.966420050999943, 53.344427802000084], + [-167.988107876999948, 53.338568427000112], + [-168.138172980999911, 53.273260809000035], + [-168.172230597999913, 53.26504140800013], + [-168.225778774999924, 53.259711005000085], + [-168.256459113999938, 53.250311591000141], + [-168.271188930999926, 53.248195705000128], + [-168.287587042999917, 53.242987372000144], + [-168.311716274999924, 53.220038153000147], + [-168.329213019999884, 53.214667059000092], + [-168.325428839999859, 53.204779364], + [-168.322987433999941, 53.200995184000149], + [-168.340199347999942, 53.189398505000057], + [-168.349436001999919, 53.172430731000176], + [-168.359120245999861, 53.161078192], + [-168.377634243999893, 53.16620514500012], + [-168.376576300999943, 53.140204169000029], + [-168.390695766999954, 53.124701239000117], + [-168.412098761999914, 53.112616278000118], + [-168.432850714999915, 53.097357489000146], + [-168.466053839999915, 53.056626695], + [-168.489938930999898, 53.042059637000065], + [-168.515451626999891, 53.050197658000158], + [-168.531198696999951, 53.034613348000065], + [-168.584055141999926, 53.030462958000115], + [-168.607289191999939, 53.018866278000118], + [-168.626210089999859, 53.004950262000037], + [-168.671579555999955, 52.982367255000057], + [-168.686105923999889, 52.967596747000172], + [-168.681467251999891, 52.96308014500012], + [-168.679310675999886, 52.960150458], + [-168.751291469999899, 52.960150458], + [-168.774525519999941, 52.956366278000175], + [-168.778635219999899, 52.947333075000174], + [-168.769886847999913, 52.936265367000132], + [-168.754383917999917, 52.926662502000156], + [-168.766061977999897, 52.913885809000121], + [-168.780384894999884, 52.913641669000171], + [-168.795399542999917, 52.921820380000085], + [-168.809030727999954, 52.933498440000065], + [-168.818348761999914, 52.919623114000089], + [-168.83177649599989, 52.918524481000034], + [-168.846628383999956, 52.920599677000055], + [-168.860218878999916, 52.916083075000088], + [-168.885731574999909, 52.896185614], + [-168.900827602999925, 52.888251044000143], + [-168.934681769999884, 52.882635809000035], + [-168.988392706999946, 52.864569403000033], + [-169.024240688999953, 52.859564520000092], + [-169.039906378999916, 52.853664455000128], + [-169.035593227999925, 52.844142971000153], + [-169.035593227999925, 52.83730703300013], + [-169.111276821999923, 52.823635158000101], + [-169.095326300999886, 52.83490631700009], + [-169.077219204999892, 52.837591864000061], + [-169.060861782999893, 52.84178294500002], + [-169.049875454999921, 52.857733466000113], + [-169.053171352999954, 52.859808661000116], + [-169.053822394999912, 52.860337632000025], + [-169.054066535999937, 52.861314195], + [-169.05601966099988, 52.864569403000033], + [-168.996571417999945, 52.871527411000116], + [-168.98094641799986, 52.878241278000147], + [-168.97044837099989, 52.894720770000148], + [-168.967884894999884, 52.927191473000121], + [-168.952992316999939, 52.940334377000099], + [-168.930246548999889, 52.94428131700009], + [-168.910104946999951, 52.940619208000115], + [-168.890980597999885, 52.940334377000099], + [-168.871083136999886, 52.954006252000127], + [-168.863270636999914, 52.971584377000156], + [-168.862009243999893, 53.006903387000179], + [-168.850575324999937, 53.022202867000047], + [-168.828928188999953, 53.016099351000051], + [-168.808054165999891, 53.028387762000122], + [-168.77208411399991, 53.066961981000176], + [-168.768625454999892, 53.08144765800013], + [-168.794504360999923, 53.115545966000141], + [-168.795969204999892, 53.138332424000069], + [-168.788522915999891, 53.152329820000134], + [-168.775339321999951, 53.170803127000156], + [-168.759510870999918, 53.186712958000086], + [-168.727406378999945, 53.199286200000145], + [-168.697824673999889, 53.223700262000122], + [-168.686105923999889, 53.228338934000035], + [-168.637562628999945, 53.250474351000108], + [-168.630848761999886, 53.258734442], + [-168.623361782999922, 53.274237372000115], + [-168.60570227799991, 53.275132554000109], + [-168.569447394999884, 53.261786200000088], + [-168.550485805999898, 53.252427476000079], + [-168.541330532999893, 53.249335028000175], + [-168.528187628999945, 53.248195705000128], + [-168.520822719999956, 53.251288153000033], + [-168.501535610999923, 53.265448309000149], + [-168.482411261999943, 53.270493882], + [-168.473744269999941, 53.274237372000115], + [-168.46430416599992, 53.276800848000121], + [-168.453358527999853, 53.275458075000031], + [-168.447865363999938, 53.270819403000118], + [-168.43891354099992, 53.25470612200003], + [-168.432850714999915, 53.248195705000128], + [-168.404367641999897, 53.257961330000072], + [-168.379465298999861, 53.260972398], + [-168.360788540999891, 53.271307684000092], + [-168.35094153599988, 53.302801825000117], + [-168.362294074999937, 53.297308661000088], + [-168.371530727999897, 53.298325914000046], + [-168.375477667999888, 53.305161851000051], + [-168.37079830599987, 53.317084052], + [-168.386097785999937, 53.322577216000028], + [-168.417795376999891, 53.326239325000174], + [-168.432850714999915, 53.33006419500002], + [-168.432850714999915, 53.337591864000061], + [-168.419748501999948, 53.342718817000062], + [-168.406198696999866, 53.353664455000128], + [-168.395700649999924, 53.366848049000097], + [-168.391916469999899, 53.378485419000086], + [-168.396962042999917, 53.396673895000092], + [-168.40404212099989, 53.40322500200007], + [-168.406564907999893, 53.409491278000118], + [-168.398142055999926, 53.426947333000086], + [-168.373605923999918, 53.460150458], + [-168.364613410999908, 53.467922268000095], + [-168.349720831999946, 53.473822333000115], + [-168.314564581999889, 53.482001044000029], + [-168.270700649999924, 53.513861395000063], + [-168.236805792999888, 53.530096747000115], + [-168.199818488999938, 53.540228583000058], + [-168.125477667999945, 53.546698309000149], + [-168.107004360999923, 53.551703192], + [-168.093373175999886, 53.559759833000143], + [-168.077870245999861, 53.563381252000013], + [-168.028879360999895, 53.560492255000085], + [-168.00829016799986, 53.570298570000105] + ] + ], + [ + [ + [-166.089182094999899, 53.844671942], + [-166.099191860999895, 53.833929755], + [-166.102772589999944, 53.831000067000062], + [-166.112904425999886, 53.830308335000112], + [-166.120961066999939, 53.826483466000113], + [-166.126820441999882, 53.819810289000074], + [-166.130116339999915, 53.810492255000113], + [-166.119618292999945, 53.802639065000122], + [-166.117176886999914, 53.793036200000145], + [-166.121205206999889, 53.783636786000116], + [-166.130116339999915, 53.77635325700011], + [-166.144479946999894, 53.772528387000094], + [-166.174265102999897, 53.776312567000119], + [-166.19159908799989, 53.77635325700011], + [-166.176706508999928, 53.757635809000064], + [-166.171579555999926, 53.747870184000092], + [-166.17479407499988, 53.738511460000083], + [-166.184519008999928, 53.733872789000046], + [-166.226307745999947, 53.727972723], + [-166.22211666599992, 53.72284577], + [-166.212635870999918, 53.708075262000122], + [-166.232899542999917, 53.716782945000105], + [-166.271921352999897, 53.743353583000058], + [-166.290882941999911, 53.749090887000122], + [-166.297840949999909, 53.760199286000059], + [-166.299265102999868, 53.781683661000088], + [-166.290516730999911, 53.795355536000116], + [-166.26728268099987, 53.783148505000142], + [-166.267526821999923, 53.796820380000085], + [-166.262033657999893, 53.803208726000022], + [-166.253244594999927, 53.807318427000055], + [-166.243397589999915, 53.813910223000121], + [-166.237863735999895, 53.815252997000115], + [-166.236805792999917, 53.806138414000131], + [-166.23997962099989, 53.783148505000142], + [-166.232533331999917, 53.783148505000142], + [-166.212351040999891, 53.822943427000141], + [-166.197824673999946, 53.837103583000058], + [-166.177927212999947, 53.831000067000062], + [-166.169748501999948, 53.842962958], + [-166.160837368999921, 53.843573309000149], + [-166.150257941999854, 53.839585679], + [-166.136952277999939, 53.837836005], + [-166.124582485999895, 53.841213283000016], + [-166.116037563999896, 53.845770575000145], + [-166.105946417999917, 53.848049221000124], + [-166.089182094999899, 53.844671942] + ] + ], + [ + [ + [-166.111520962999919, 53.956000067000147], + [-166.153920050999915, 53.955308335], + [-166.169056769999912, 53.956773179000052], + [-166.191273566999882, 53.964911200000174], + [-166.196115688999953, 53.981024481000148], + [-166.189157680999955, 53.98969147300015], + [-166.18028723899991, 53.989813544000114], + [-166.156564907999893, 53.993597723000121], + [-166.115793423999946, 53.988674221000068], + [-166.094553188999953, 53.98065827000012], + [-166.087757941999911, 53.977932033000158], + [-166.07953854099992, 53.970892645], + [-166.088978644999941, 53.961655992000132], + [-166.111520962999919, 53.956000067000147] + ] + ], + [ + [ + [-166.746449347999885, 53.975002346000124], + [-166.731027798999946, 53.974107164000046], + [-166.719349738999853, 53.98456452000012], + [-166.709462042999945, 53.998480536000031], + [-166.699289516999897, 54.008490302], + [-166.668324347999885, 54.013576565000037], + [-166.634592251999891, 54.004584052], + [-166.605702277999853, 53.98578522300015], + [-166.589426235999923, 53.961371161], + [-166.61274166599992, 53.955511786000059], + [-166.625070766999869, 53.950669663999989], + [-166.630441860999923, 53.943996486000017], + [-166.631337042999917, 53.939032294000171], + [-166.635609503999945, 53.929388739], + [-166.636586066999911, 53.923488674000069], + [-166.634592251999891, 53.91705963700015], + [-166.630197719999899, 53.91046784100017], + [-166.625681118999921, 53.906073309000092], + [-166.623605923999918, 53.906154690000065], + [-166.636097785999937, 53.876532294000029], + [-166.633493618999921, 53.871975002000099], + [-166.619699673999918, 53.875189520000148], + [-166.608143683999884, 53.881293036000116], + [-166.596424933999913, 53.884507554], + [-166.581979946999951, 53.879380601000079], + [-166.606678839999915, 53.844794012000179], + [-166.609934048999889, 53.831000067000062], + [-166.586984829999892, 53.83930084800015], + [-166.489491339999944, 53.900091864000089], + [-166.475331183999913, 53.899074611000017], + [-166.459095831999889, 53.885565497000059], + [-166.455799933999941, 53.896144924000097], + [-166.438588019999941, 53.926581122000144], + [-166.439564581999889, 53.928127346000096], + [-166.43976803299995, 53.941717841000141], + [-166.438588019999941, 53.947088934000092], + [-166.422718878999888, 53.951157945000077], + [-166.418080206999889, 53.953843492000047], + [-166.40986080599987, 53.980169989000146], + [-166.403879360999952, 53.989243882000054], + [-166.370350714999915, 54.008490302], + [-166.360178188999896, 53.992824611000017], + [-166.369130011999914, 53.973822333000115], + [-166.373402472999913, 53.956773179000052], + [-166.349232550999915, 53.947088934000092], + [-166.326039191999882, 53.952866929000081], + [-166.300241665999948, 53.96613190300009], + [-166.27672278599988, 53.974920966000141], + [-166.260487433999941, 53.967596747000144], + [-166.254221157999893, 53.951402085000026], + [-166.250965949999852, 53.936590887000037], + [-166.254221157999893, 53.923488674000069], + [-166.26728268099987, 53.912909247000115], + [-166.253285285999908, 53.913519598000065], + [-166.241037563999953, 53.919012762000094], + [-166.218861456999889, 53.934027411000116], + [-166.218739386999914, 53.918605861000103], + [-166.224924282999893, 53.905462958000143], + [-166.235056118999921, 53.894476630000085], + [-166.246815558999913, 53.885565497000059], + [-166.266550258999928, 53.874335028000033], + [-166.283924933999913, 53.868963934000178], + [-166.301706508999899, 53.86847565300009], + [-166.32249915299991, 53.871975002000099], + [-166.327748175999886, 53.876532294000029], + [-166.33149166599992, 53.883612372000087], + [-166.336537238999938, 53.887437242000104], + [-166.345814581999889, 53.882513739000146], + [-166.349476691999854, 53.875921942000062], + [-166.352976040999948, 53.858343817000147], + [-166.356678839999887, 53.851507880000113], + [-166.374338344999899, 53.842108466000084], + [-166.414296027999853, 53.837958075000145], + [-166.431752081999917, 53.831000067000062], + [-166.418405727999897, 53.815415757000082], + [-166.411325649999924, 53.810492255000113], + [-166.424183722999885, 53.80475495000006], + [-166.521595831999917, 53.78900788], + [-166.541615363999881, 53.790025132000054], + [-166.51781165299991, 53.780585028000033], + [-166.506703253999888, 53.777899481000148], + [-166.493234829999892, 53.77635325700011], + [-166.493234829999892, 53.76951732000002], + [-166.520700649999924, 53.764593817000119], + [-166.540882941999854, 53.751776434000092], + [-166.575144008999928, 53.714300848000065], + [-166.559519008999928, 53.715643622000144], + [-166.550892706999946, 53.710598049000126], + [-166.549305792999917, 53.70058828300013], + [-166.554676886999857, 53.686997789000017], + [-166.540638800999915, 53.695135809000121], + [-166.521595831999917, 53.721421617000132], + [-166.513742641999926, 53.727972723], + [-166.498402472999885, 53.72284577], + [-166.487985805999898, 53.694810288999989], + [-166.476429816999882, 53.697577216000141], + [-166.473215298999918, 53.702948309000092], + [-166.472157355999855, 53.709947007], + [-166.472727016999926, 53.724554755], + [-166.471302863999881, 53.733954169000029], + [-166.467518683999941, 53.738023179], + [-166.462025519999912, 53.740545966000113], + [-166.455677863999881, 53.745347398], + [-166.440378383999928, 53.754461981000176], + [-166.420277472999885, 53.758734442], + [-166.404977993999921, 53.755316473000093], + [-166.403879360999952, 53.74164459800015], + [-166.393869594999899, 53.740627346000096], + [-166.386179165999948, 53.736721096000096], + [-166.380482550999886, 53.730129299000012], + [-166.376535610999895, 53.721136786], + [-166.369699673999889, 53.734849351000108], + [-166.368275519999912, 53.758734442], + [-166.359811977999954, 53.772935289000102], + [-166.346180792999917, 53.782700914000046], + [-166.334095831999917, 53.782416083000115], + [-166.32367916599992, 53.77472565300009], + [-166.315134243999893, 53.762111721000011], + [-166.314442511999857, 53.748032945000077], + [-166.31977291599992, 53.737290757000054], + [-166.317575649999924, 53.730414130000142], + [-166.294300910999937, 53.727972723], + [-166.278146938999953, 53.723863023000078], + [-166.275217251999948, 53.713690497000115], + [-166.276682094999899, 53.700384833], + [-166.273508266999926, 53.686997789000017], + [-166.289499477999925, 53.67991771000014], + [-166.331288214999859, 53.674017645], + [-166.407785610999952, 53.672674872000115], + [-166.424997524999867, 53.666489976000136], + [-166.409413214999887, 53.655707098000121], + [-166.403879360999952, 53.652818101000108], + [-166.427601691999882, 53.651109117000104], + [-166.449208136999886, 53.643500067000062], + [-166.470407680999955, 53.638739325000145], + [-166.493234829999892, 53.646063544000171], + [-166.547230597999885, 53.625921942000119], + [-166.562123175999943, 53.618109442000119], + [-166.546254035999908, 53.615383205000072], + [-166.534535285999937, 53.608954169000143], + [-166.526437954999892, 53.598781643], + [-166.521188930999926, 53.584621486000074], + [-166.54950924399995, 53.601060288999989], + [-166.575795050999886, 53.59369538], + [-166.593373175999915, 53.569566148000078], + [-166.595651821999894, 53.536200262000094], + [-166.608631964999887, 53.555121161000116], + [-166.664540167999945, 53.598211981000034], + [-166.665882941999939, 53.581732489000061], + [-166.64289303299995, 53.550034898], + [-166.636586066999911, 53.532782294000086], + [-166.647409633999899, 53.529120184000035], + [-166.712961391999926, 53.549790757000054], + [-166.708444790999891, 53.536281643000066], + [-166.696522589999944, 53.530340887000065], + [-166.681630011999886, 53.526556708000115], + [-166.667958136999943, 53.519435940000065], + [-166.656361456999946, 53.502386786000116], + [-166.65916907499988, 53.490912177000084], + [-166.671498175999943, 53.48847077000012], + [-166.697824673999946, 53.505316473000121], + [-166.70771236899995, 53.508246161000059], + [-166.729685024999952, 53.508856512000122], + [-166.734364386999886, 53.511542059000092], + [-166.742624477999868, 53.524725653000147], + [-166.746449347999885, 53.529364325000174], + [-166.771555141999869, 53.548163153000033], + [-166.794870571999866, 53.570298570000105], + [-166.809152798999889, 53.556626695000077], + [-166.800282355999911, 53.546087958], + [-166.781239386999914, 53.508856512000122], + [-166.750599738999938, 53.479193427], + [-166.746449347999885, 53.467922268000095], + [-166.752186652999853, 53.450873114000146], + [-166.764475063999896, 53.44912344000015], + [-166.794870571999866, 53.461086330000072], + [-166.800282355999911, 53.464748440000122], + [-166.801828579999864, 53.468980210000055], + [-166.805002407999922, 53.47101471600017], + [-166.815378383999928, 53.467922268000095], + [-166.816110805999955, 53.464422919000114], + [-166.825021938999896, 53.445868231000091], + [-166.829050258999956, 53.439927476000079], + [-166.868845180999955, 53.476019598000121], + [-166.876820441999911, 53.481512762000065], + [-166.893055792999945, 53.47597890800013], + [-166.904489712999919, 53.446844794000171], + [-166.917795376999919, 53.439927476000079], + [-166.930409308999913, 53.445135809000149], + [-166.934519008999956, 53.455796617000104], + [-166.938913540999948, 53.463812567000147], + [-166.952504035999908, 53.461086330000072], + [-166.96031653599988, 53.451483466000084], + [-166.963205532999922, 53.439520575000145], + [-166.969186977999925, 53.429673570000048], + [-166.986683722999885, 53.426947333000086], + [-166.984364386999914, 53.431341864000061], + [-166.979237433999913, 53.447414455000128], + [-167.007394985999895, 53.45258209800015], + [-167.068348761999886, 53.426988023000078], + [-167.099964972999885, 53.419501044000086], + [-167.12055416599992, 53.418524481000034], + [-167.136667446999866, 53.415920315000122], + [-167.212228969999899, 53.387518622000087], + [-167.242990688999868, 53.383205471000011], + [-167.27363033799989, 53.373846747000144], + [-167.291737433999884, 53.371649481000176], + [-167.299183722999885, 53.365912177], + [-167.312855597999913, 53.338690497000087], + [-167.321848110999923, 53.33006419500002], + [-167.391346808999941, 53.344427802000084], + [-167.407297329999949, 53.340562242000075], + [-167.439035610999895, 53.325262762000094], + [-167.458973761999886, 53.323919989000117], + [-167.455026821999894, 53.313462632000139], + [-167.452829555999926, 53.309637762000122], + [-167.469349738999881, 53.304510809000121], + [-167.480539516999897, 53.295843817000119], + [-167.500599738999853, 53.275458075000031], + [-167.502674933999884, 53.270412502000013], + [-167.504261847999913, 53.263413804000109], + [-167.508249477999897, 53.259914455000128], + [-167.527088995999918, 53.27220286699999], + [-167.536447719999956, 53.275132554000109], + [-167.559274868999864, 53.275458075000031], + [-167.592111782999893, 53.280951239000061], + [-167.606068488999938, 53.280707098000121], + [-167.620065883999899, 53.272040106000034], + [-167.625803188999896, 53.265692450000088], + [-167.627878383999899, 53.262640692], + [-167.630482550999886, 53.260199286000059], + [-167.665109829999892, 53.241929429], + [-167.672311977999925, 53.261623440000122], + [-167.697132941999882, 53.270941473000093], + [-167.753854946999951, 53.275458075000031], + [-167.780588344999956, 53.280707098000121], + [-167.80223548099994, 53.289129950000174], + [-167.809152798999946, 53.294134833000115], + [-167.811472133999928, 53.298529364], + [-167.815134243999864, 53.301581122000087], + [-167.834299282999922, 53.303127346000124], + [-167.840321417999917, 53.304266669000171], + [-167.845204230999911, 53.306341864000089], + [-167.850046352999897, 53.309637762000122], + [-167.718454555999926, 53.381293036000145], + [-167.702951626999919, 53.385402736000103], + [-167.67039954299986, 53.385443427000084], + [-167.654652472999913, 53.382554429000052], + [-167.641468878999945, 53.375067450000174], + [-167.638050910999937, 53.378159898000078], + [-167.594186977999897, 53.378607489000061], + [-167.592111782999893, 53.382310289000102], + [-167.596791144999884, 53.392767645000092], + [-167.570546027999882, 53.396307684000149], + [-167.516550258999956, 53.381415106000119], + [-167.48692786399991, 53.378485419000086], + [-167.495350714999859, 53.385199286000145], + [-167.513620571999923, 53.40643952000012], + [-167.513620571999923, 53.412665106000176], + [-167.504587368999921, 53.41412995000006], + [-167.499134894999884, 53.417547919000143], + [-167.49437415299991, 53.422023830000015], + [-167.474598761999886, 53.434027411000145], + [-167.458973761999886, 53.433742580000015], + [-167.440866665999891, 53.43040599199999], + [-167.408436652999882, 53.419256903000147], + [-167.390736456999889, 53.419501044000086], + [-167.395456508999899, 53.42405833500014], + [-167.400746222999885, 53.430731512000094], + [-167.404408331999917, 53.433742580000015], + [-167.37840735599994, 53.431952216000028], + [-167.343210415999891, 53.418768622000172], + [-167.321522589999915, 53.416449286], + [-167.336130337999919, 53.447414455000128], + [-167.313099738999938, 53.441961981000091], + [-167.303578253999945, 53.445257880000142], + [-167.301950649999924, 53.455511786000059], + [-167.302601691999882, 53.471340236000103], + [-167.29161536399991, 53.476019598000121], + [-167.226267055999926, 53.461086330000072], + [-167.212757941999882, 53.46198151200015], + [-167.169626430999955, 53.470200914000074], + [-167.158640102999897, 53.477118231000148], + [-167.161488410999937, 53.482367255000057], + [-167.166574673999946, 53.497300523], + [-167.164784308999884, 53.495184637000179], + [-167.172474738999881, 53.510199286000031], + [-167.177479620999918, 53.51634349199999], + [-167.185292120999918, 53.52252838700015], + [-167.17015540299991, 53.523260809000178], + [-167.107289191999882, 53.51447174700003], + [-167.043080206999946, 53.517767645000063], + [-166.980051235999923, 53.52806224199999], + [-166.960031704999949, 53.536200262000094], + [-166.981882290999891, 53.544867255], + [-167.004099087999947, 53.543890692000033], + [-167.051869269999912, 53.536200262000094], + [-167.098133917999888, 53.539252020000092], + [-167.120676235999895, 53.545396226000079], + [-167.144357876999891, 53.556626695000077], + [-167.139637824999909, 53.559271552000055], + [-167.137277798999946, 53.561997789000131], + [-167.134958462999862, 53.565497137000122], + [-167.130075649999895, 53.570298570000105], + [-167.153635219999956, 53.581447658000016], + [-167.162058071999894, 53.602362372000172], + [-167.155384894999941, 53.622626044000086], + [-167.133778449999937, 53.631781317000062], + [-167.092722133999928, 53.628648179], + [-167.082875128999916, 53.625555731000119], + [-167.073353644999941, 53.618801174000069], + [-167.059763149999867, 53.603461005000113], + [-167.048166469999956, 53.598211981000034], + [-167.050160285999908, 53.601792710000112], + [-167.051584438999868, 53.602443752000156], + [-167.053089972999913, 53.602484442000147], + [-167.055531378999945, 53.604437567], + [-167.048166469999956, 53.611273505000113], + [-167.053578253999916, 53.627508856000148], + [-167.03779049399995, 53.628729559000178], + [-166.993519660999908, 53.618109442000119], + [-167.006825324999909, 53.637274481000091], + [-167.044911261999914, 53.652736721000124], + [-167.062367316999882, 53.666489976000136], + [-167.064645962999947, 53.682684637000094], + [-167.050648566999882, 53.695868231000034], + [-167.028024868999921, 53.704779364000089], + [-166.946522589999887, 53.715765692000119], + [-166.916371222999857, 53.715725002000127], + [-166.894154425999886, 53.704331773], + [-166.870432094999899, 53.673895575000031], + [-166.864938930999955, 53.657171942], + [-166.863148566999882, 53.631781317000062], + [-166.856312628999859, 53.631781317000062], + [-166.853586391999897, 53.640814520000092], + [-166.850168423999889, 53.647853908000158], + [-166.842640753999916, 53.659654039000131], + [-166.830759243999864, 53.652899481000176], + [-166.801706508999899, 53.631781317000062], + [-166.827097133999928, 53.690863348], + [-166.829050258999956, 53.708075262000122], + [-166.786732550999858, 53.691961981000063], + [-166.766916469999956, 53.690863348], + [-166.746449347999885, 53.700628973000121], + [-166.757639126999891, 53.699693101000051], + [-166.768422003999888, 53.700873114000089], + [-166.778513149999952, 53.703762111000017], + [-166.787464972999885, 53.708075262000122], + [-166.768137173999861, 53.714544989000117], + [-166.72480221299989, 53.714097398000106], + [-166.705515102999954, 53.721136786], + [-166.733998175999886, 53.726467190000065], + [-166.807687954999921, 53.729559637000037], + [-166.883981899999952, 53.755275783000101], + [-166.898630337999862, 53.756903387000122], + [-166.938303188999896, 53.76951732000002], + [-166.968617316999882, 53.772609768000095], + [-166.990549282999893, 53.767035223000065], + [-167.011301235999895, 53.759222723000093], + [-167.038197394999884, 53.755275783000101], + [-167.103382941999882, 53.803656317], + [-167.100819464999887, 53.805568752000156], + [-167.097604946999923, 53.811753648000106], + [-167.095529751999891, 53.819037177000141], + [-167.096547003999859, 53.824164130000057], + [-167.101999477999897, 53.825628973], + [-167.117543097999913, 53.823675848000065], + [-167.130075649999895, 53.824693101000136], + [-167.145253058999884, 53.822902736000131], + [-167.151112433999941, 53.824164130000057], + [-167.156198696999951, 53.829779364000146], + [-167.158151821999923, 53.842189846000068], + [-167.161366339999859, 53.848089911000116], + [-167.163400844999899, 53.857367255000057], + [-167.151926235999952, 53.862250067000119], + [-167.137277798999946, 53.865179755000057], + [-167.130075649999895, 53.868557033000073], + [-167.126779751999862, 53.875067450000174], + [-167.103382941999882, 53.906154690000065], + [-167.086659308999941, 53.920314846000011], + [-167.049672003999916, 53.941636460000055], + [-167.031076626999919, 53.95766836100016], + [-167.021595831999917, 53.961249091000028], + [-166.98289954299986, 53.953843492000047], + [-166.972645636999943, 53.956732489000061], + [-166.938303188999896, 53.975002346000124], + [-166.91620846299989, 53.979885158000016], + [-166.895253058999941, 53.980902411000088], + [-166.87531490799995, 53.977199611000131], + [-166.856312628999859, 53.967596747000144], + [-166.831857876999919, 53.982123114], + [-166.779001430999955, 54.00275299700003], + [-166.753895636999857, 54.016017971000153], + [-166.741892055999926, 54.005438544000086], + [-166.746449347999885, 53.994818427000055], + [-166.752878383999899, 53.984442450000145], + [-166.746449347999885, 53.975002346000124] + ] + ], + [ + [ + [-165.252797003999945, 54.077704169000171], + [-165.247303839999915, 54.068182684000178], + [-165.245676235999895, 54.05695221600017], + [-165.261952277999939, 54.063177802000141], + [-165.271351691999854, 54.064683335], + [-165.280384894999884, 54.06378815300009], + [-165.284291144999884, 54.060126044000143], + [-165.292836066999882, 54.046820380000113], + [-165.294056769999912, 54.043890692], + [-165.307810024999924, 54.047837632], + [-165.326039191999911, 54.066839911], + [-165.338449673999918, 54.071234442000062], + [-165.387806769999912, 54.070135809000035], + [-165.422434048999889, 54.077460028000033], + [-165.465280727999868, 54.073879299000154], + [-165.485829230999911, 54.077460028000033], + [-165.376576300999915, 54.091050523], + [-165.266713019999941, 54.091050523], + [-165.25995846299989, 54.085394598], + [-165.252797003999945, 54.077704169000171] + ] + ], + [ + [ + [-164.93781490799995, 54.125189520000092], + [-164.932728644999912, 54.11399974199999], + [-164.939930792999945, 54.099310614000089], + [-164.952870245999861, 54.085598049000154], + [-164.965077277999939, 54.077460028000033], + [-164.97602291599992, 54.075751044000029], + [-165.053822394999884, 54.077460028000033], + [-165.089182094999899, 54.070868231000148], + [-165.102243618999893, 54.071234442000062], + [-165.107736782999922, 54.073879299000154], + [-165.116322394999941, 54.082953192000062], + [-165.123036261999886, 54.084865627000013], + [-165.128529425999915, 54.083685614], + [-165.143259243999893, 54.077460028000033], + [-165.206776495999918, 54.085353908000016], + [-165.225778774999895, 54.091050523], + [-165.219349738999881, 54.101629950000031], + [-165.212595180999955, 54.109361070000048], + [-165.203684048999918, 54.114732164000102], + [-165.191029425999943, 54.118353583000058], + [-165.183216925999943, 54.118353583000058], + [-165.171254035999937, 54.11347077], + [-165.164377407999922, 54.112127997000115], + [-165.154977993999893, 54.115383205000157], + [-165.14093990799995, 54.129461981000091], + [-165.133005337999862, 54.132635809000149], + [-165.126210089999944, 54.130357163999989], + [-165.12047278599988, 54.125555731000091], + [-165.116892055999898, 54.120591539000046], + [-165.116525844999899, 54.118353583000058], + [-165.109445766999926, 54.119452216000113], + [-165.097401495999918, 54.124172268000123], + [-165.091745571999923, 54.125189520000092], + [-165.077381964999944, 54.123602606000148], + [-165.064157680999898, 54.119289455000157], + [-165.051828579999949, 54.112779039000074], + [-165.040150519999884, 54.104681708000115], + [-165.02684485599994, 54.111476955000157], + [-164.988596157999893, 54.123602606000148], + [-164.981068488999938, 54.130682684000121], + [-164.972523566999911, 54.125189520000092], + [-164.963856574999909, 54.131089585000112], + [-164.955067511999943, 54.133124091000141], + [-164.946156378999916, 54.131089585000112], + [-164.93781490799995, 54.125189520000092] + ] + ], + [ + [ + [-165.874867316999882, 54.174383856000091], + [-165.854359503999945, 54.167669989000061], + [-165.831369594999956, 54.171535549000154], + [-165.814808722999885, 54.187323309000092], + [-165.799875454999949, 54.173895575000117], + [-165.759714321999923, 54.163153387000094], + [-165.739084438999896, 54.153143622000115], + [-165.75951087099989, 54.144476630000113], + [-165.821644660999908, 54.139471747000172], + [-165.821644660999908, 54.132635809000149], + [-165.809925910999908, 54.13271719000015], + [-165.780100063999924, 54.125189520000092], + [-165.739084438999896, 54.125189520000092], + [-165.67210852799991, 54.128851630000142], + [-165.657175258999956, 54.125189520000092], + [-165.664621548999946, 54.118353583000058], + [-165.679514126999891, 54.099066473000121], + [-165.699533657999865, 54.08869049700003], + [-165.770619269999912, 54.070746161000088], + [-165.780995245999918, 54.070013739000061], + [-165.794300910999937, 54.071234442000062], + [-165.828928188999924, 54.082993882000054], + [-165.839060024999867, 54.084865627000013], + [-165.852243618999921, 54.07510000200007], + [-165.88731848899991, 54.036322333000058], + [-165.900746222999885, 54.033351955000128], + [-165.908558722999885, 54.04401276200015], + [-165.912464972999885, 54.053859768000095], + [-165.918202277999853, 54.060980536000145], + [-165.931507941999882, 54.06378815300009], + [-165.956898566999911, 54.060736395], + [-165.966135219999956, 54.062445380000028], + [-165.972482876999891, 54.071234442000062], + [-165.988718227999925, 54.059149481000148], + [-166.023182745999861, 54.045884507000139], + [-166.04076087099989, 54.036444403000033], + [-166.075510219999956, 54.06378815300009], + [-166.065988735999952, 54.077582098], + [-166.080189581999889, 54.092189846000124], + [-166.122670050999943, 54.118353583000058], + [-166.108998175999915, 54.132635809000149], + [-166.116444464999887, 54.139471747000172], + [-166.106434699999909, 54.149562893000152], + [-166.091664191999911, 54.171291408000016], + [-166.081735805999926, 54.180487372000087], + [-166.071237758999928, 54.185207424000097], + [-166.034535285999937, 54.194077867000047], + [-165.97138424399995, 54.219468492000075], + [-165.945505337999947, 54.222072658000158], + [-165.934152798999889, 54.22089264500012], + [-165.912098761999886, 54.215765692000119], + [-165.879628058999884, 54.213446356000148], + [-165.876779751999948, 54.209621486000131], + [-165.880686001999948, 54.202297268000123], + [-165.883737758999928, 54.190659898000135], + [-165.874867316999882, 54.174383856000091] + ] + ], + [ + [ + [-165.51903235599994, 54.270209052000112], + [-165.529896613999938, 54.260891018000095], + [-165.546254035999937, 54.252630927], + [-165.561594204999892, 54.242499091000056], + [-165.554758266999869, 54.235052802000055], + [-165.547922329999949, 54.239243882], + [-165.541086391999926, 54.242499091000056], + [-165.544911261999943, 54.227484442000033], + [-165.547311977999897, 54.222072658000158], + [-165.443837042999945, 54.200140692000147], + [-165.418202277999882, 54.20774974199999], + [-165.404530402999939, 54.191839911000059], + [-165.423898891999954, 54.183091538999989], + [-165.457346157999922, 54.17987702000012], + [-165.485829230999911, 54.180487372000087], + [-165.485829230999911, 54.173651434000149], + [-165.47398841099988, 54.165920315000065], + [-165.479685024999924, 54.162665106000119], + [-165.506337042999888, 54.159328518000095], + [-165.528553839999915, 54.148586330000072], + [-165.539906378999916, 54.145209052000055], + [-165.554758266999869, 54.145697333000143], + [-165.541086391999926, 54.139471747000172], + [-165.550852016999869, 54.12230052300005], + [-165.567941860999923, 54.112494208000115], + [-165.588815883999899, 54.110907294000086], + [-165.609974738999881, 54.118353583000058], + [-165.624867316999939, 54.132391669000029], + [-165.623890753999888, 54.145086981000176], + [-165.612375454999949, 54.158270575000031], + [-165.595692511999914, 54.173651434000149], + [-165.631784633999928, 54.189642645000063], + [-165.623483852999954, 54.200832424000069], + [-165.596018032999922, 54.213690497000115], + [-165.574574347999885, 54.235052802000055], + [-165.600697394999941, 54.242010809000149], + [-165.684437628999859, 54.235052802000055], + [-165.679798956999946, 54.248928127000156], + [-165.673573370999861, 54.262355861000131], + [-165.664255337999919, 54.272609768000066], + [-165.650339321999951, 54.27659739800005], + [-165.634836391999926, 54.276312567000033], + [-165.630686001999891, 54.279242255000142], + [-165.627064581999946, 54.296454169000143], + [-165.621571417999917, 54.296616929000109], + [-165.614206508999928, 54.292792059000092], + [-165.598459438999953, 54.287298895000063], + [-165.596872524999924, 54.28050364800005], + [-165.597238735999952, 54.27338288], + [-165.595692511999914, 54.269191799000154], + [-165.587228969999956, 54.266546942000062], + [-165.585031704999864, 54.268052476000108], + [-165.582875128999859, 54.272121486000074], + [-165.574574347999885, 54.27659739800005], + [-165.531198696999923, 54.294378973000121], + [-165.513172980999911, 54.297186591000084], + [-165.494333462999947, 54.296372789000074], + [-165.491281704999949, 54.289984442000147], + [-165.500843878999945, 54.283880927000055], + [-165.519968227999925, 54.283514716000141], + [-165.51903235599994, 54.270209052000112] + ] + ], + [ + [ + [-162.405140753999888, 54.390570380000085], + [-162.401600714999887, 54.385891018000152], + [-162.395741339999944, 54.385891018000152], + [-162.368112758999928, 54.392075914000131], + [-162.368112758999928, 54.385891018000152], + [-162.413197394999884, 54.371812242000104], + [-162.435414191999882, 54.372015692000062], + [-162.453806118999921, 54.382473049000126], + [-162.480173305999898, 54.401922919000143], + [-162.484811977999925, 54.406398830000015], + [-162.485422329999892, 54.413885809000178], + [-162.481516079999892, 54.419582424000154], + [-162.472238735999952, 54.422105210000083], + [-162.456898566999882, 54.420070705000128], + [-162.409128383999928, 54.406398830000015], + [-162.407338019999884, 54.39740631700009], + [-162.405140753999888, 54.390570380000085] + ] + ], + [ + [ + [-162.621408657999922, 54.454779364000032], + [-162.615427212999919, 54.454291083000115], + [-162.602121548999889, 54.456000067000119], + [-162.594675258999899, 54.454779364000032], + [-162.594593878999916, 54.45311107000002], + [-162.592600063999896, 54.448716539000102], + [-162.589670376999862, 54.444037177], + [-162.587228969999927, 54.441107489000089], + [-162.587188279999936, 54.441107489000089], + [-162.549997524999924, 54.420070705000128], + [-162.546498175999943, 54.414699611000074], + [-162.545358852999925, 54.402980861000103], + [-162.546498175999943, 54.391262111000017], + [-162.549997524999924, 54.385891018000152], + [-162.655506964999915, 54.392075914000131], + [-162.646555141999897, 54.385687567], + [-162.636830206999946, 54.381415106000091], + [-162.626210089999915, 54.379339911000059], + [-162.614572719999899, 54.37909577000012], + [-162.614572719999899, 54.37225983300003], + [-162.632679816999911, 54.371893622000087], + [-162.647572394999884, 54.375433661000088], + [-162.676625128999945, 54.385891018000152], + [-162.728586391999897, 54.395819403000147], + [-162.754017706999946, 54.409572658000073], + [-162.783640102999868, 54.416408596000096], + [-162.796376105999911, 54.423488674000154], + [-162.841135219999956, 54.461004950000174], + [-162.82164466099988, 54.462469794000029], + [-162.822499152999882, 54.473822333], + [-162.829172329999949, 54.489081122000172], + [-162.827463344999927, 54.50193919500002], + [-162.81383216099988, 54.504339911000145], + [-162.793080206999889, 54.50031159100017], + [-162.758534308999884, 54.488267320000077], + [-162.734567837999919, 54.48456452000012], + [-162.690134243999921, 54.471340236000074], + [-162.656809048999918, 54.466782945000134], + [-162.621408657999922, 54.454779364000032] + ] + ], + [ + [ + [-159.527088995999918, 54.759466864], + [-159.547108527999882, 54.75389232], + [-159.569325324999937, 54.754584052000112], + [-159.58930416599992, 54.75967031500015], + [-159.593617316999939, 54.766831773], + [-159.590199347999913, 54.775783596000124], + [-159.592640753999945, 54.786607164000102], + [-159.596994594999956, 54.79710521], + [-159.602731899999924, 54.805080471000124], + [-159.604196743999864, 54.812323309000149], + [-159.597279425999886, 54.820217190000122], + [-159.585153774999867, 54.824204820000105], + [-159.571278449999909, 54.822251695000077], + [-159.55833899599989, 54.815252997000087], + [-159.545480923999861, 54.806138414000102], + [-159.525135870999861, 54.794378973000121], + [-159.521473761999914, 54.792263088000098], + [-159.521473761999914, 54.792222398000106], + [-159.515085415999891, 54.786932684000035], + [-159.512644008999956, 54.778509833], + [-159.515329555999926, 54.768744208000058], + [-159.527088995999918, 54.759466864] + ] + ], + [ + [ + [-133.515166795999903, 54.782456773], + [-133.521758592999873, 54.766750393], + [-133.529245571999923, 54.768337307000039], + [-133.543975389999929, 54.779445705000072], + [-133.546091274999924, 54.785020249000084], + [-133.543771938999896, 54.794053453000103], + [-133.543568488999938, 54.799587307000124], + [-133.545725063999924, 54.801825262000094], + [-133.545033331999974, 54.805446682000152], + [-133.545155402999853, 54.81602610900002], + [-133.543527798999946, 54.822292385000154], + [-133.544748501999834, 54.831691799000097], + [-133.537831183999941, 54.83498769700013], + [-133.529815232999908, 54.831040757000139], + [-133.520578579999835, 54.820257880000113], + [-133.520334438999896, 54.814195054000137], + [-133.520334438999896, 54.814113674000154], + [-133.520130988999938, 54.80821360900002], + [-133.515777147999927, 54.796861070000048], + [-133.515166795999903, 54.782456773] + ] + ], + [ + [ + [-132.736439581999889, 54.920314846000068], + [-132.725900844999842, 54.91486237200003], + [-132.715240037999934, 54.915228583000058], + [-132.704986131999874, 54.919867255000085], + [-132.695464647999898, 54.927720445000077], + [-132.685536261999886, 54.921128648], + [-132.674305792999888, 54.916815497000087], + [-132.665109829999921, 54.911932684000121], + [-132.661366339999887, 54.90355052300005], + [-132.655832485999866, 54.902167059000178], + [-132.643177863999881, 54.904730536000088], + [-132.629302537999905, 54.903998114000146], + [-132.620350714999859, 54.893011786], + [-132.615345831999946, 54.882473049000126], + [-132.616932745999861, 54.876166083], + [-132.623768683999884, 54.874823309000092], + [-132.634632941999968, 54.879339911000059], + [-132.635568813999839, 54.867499091000084], + [-132.630686001999891, 54.856268622000087], + [-132.628570115999963, 54.847845770000148], + [-132.637766079999835, 54.844549872000115], + [-132.6517634759999, 54.846380927], + [-132.663238084999932, 54.849310614], + [-132.674916144999941, 54.849839585], + [-132.689279751999919, 54.844549872000115], + [-132.675607876999891, 54.837388414000074], + [-132.669300910999937, 54.828558661000031], + [-132.662668423999975, 54.821030992000047], + [-132.647694464999944, 54.817857163999989], + [-132.637115037999877, 54.814032294000171], + [-132.626372850999871, 54.804754950000117], + [-132.617583787999934, 54.793443101000136], + [-132.612904425999886, 54.783758856000176], + [-132.616200324999937, 54.760199286000116], + [-132.636057094999842, 54.757473049000154], + [-132.661610480999911, 54.767889716000141], + [-132.681792772999955, 54.783758856000176], + [-132.684681769999884, 54.788763739000117], + [-132.689279751999919, 54.801825262000094], + [-132.692372199999909, 54.807318427000112], + [-132.698353644999941, 54.811672268000038], + [-132.713490363999938, 54.817084052000055], + [-132.71971594999988, 54.821275132], + [-132.722564256999931, 54.826564846000068], + [-132.727406378999888, 54.840399481000148], + [-132.730213995999947, 54.844549872000115], + [-132.736398891999897, 54.847316799000069], + [-132.749908006999874, 54.849188544000029], + [-132.757557745999918, 54.851996161000088], + [-132.771962042999888, 54.862250067000033], + [-132.776926235999838, 54.870062567], + [-132.779774542999888, 54.878241278000118], + [-132.788238084999932, 54.88959381700009], + [-132.794056769999969, 54.901922919000029], + [-132.78880774599989, 54.911037502000042], + [-132.782378709999875, 54.918890692], + [-132.784820115999906, 54.927720445000077], + [-132.778065558999884, 54.934556382000082], + [-132.773019985999838, 54.930243231000176], + [-132.757557745999918, 54.920314846000068], + [-132.750559048999946, 54.931097723000093], + [-132.738148566999911, 54.935370184000092], + [-132.723500128999888, 54.937241929000052], + [-132.709787563999896, 54.94082265800013], + [-132.713734503999945, 54.933050848000121], + [-132.719797329999864, 54.926947333000143], + [-132.727447068999879, 54.92267487200003], + [-132.736439581999889, 54.920314846000068] + ] + ], + [ + [ + [-159.284535285999851, 54.94082265800013], + [-159.268991665999948, 54.929632880000113], + [-159.247670050999886, 54.930161851], + [-159.226877407999893, 54.933579820000105], + [-159.212595180999898, 54.931138414000074], + [-159.208811001999891, 54.918524481000091], + [-159.219471808999913, 54.906805731000091], + [-159.246408657999893, 54.88959381700009], + [-159.286610480999855, 54.871730861000017], + [-159.317819790999948, 54.884711005000113], + [-159.326161261999914, 54.907863674000154], + [-159.29820716099988, 54.920314846000068], + [-159.30695553299995, 54.929632880000113], + [-159.31773841099988, 54.933783270000063], + [-159.329050258999928, 54.934759833000115], + [-159.339182094999899, 54.934556382000082], + [-159.322255011999914, 54.938381252000099], + [-159.306996222999942, 54.94623444200009], + [-159.292347785999937, 54.951727606000091], + [-159.277088995999861, 54.948187567000119], + [-159.284535285999851, 54.94082265800013] + ] + ], + [ + [ + [-162.27875729099992, 54.851996161000088], + [-162.309030727999925, 54.837347723000065], + [-162.342152472999942, 54.839544989000061], + [-162.37437903599988, 54.853094794000029], + [-162.401600714999887, 54.872503973000121], + [-162.424183722999885, 54.897935289000046], + [-162.434152798999946, 54.914374091000141], + [-162.436390753999945, 54.927720445000077], + [-162.426706508999871, 54.938666083000115], + [-162.374948696999951, 54.954413153000175], + [-162.344349738999938, 54.969794012000122], + [-162.302561001999891, 54.985663153000147], + [-162.262684699999937, 54.989203192000119], + [-162.237782355999911, 54.968085028000118], + [-162.233387824999909, 54.95697663], + [-162.230417446999923, 54.939154364000117], + [-162.229318813999953, 54.920599677000112], + [-162.230946417999888, 54.907294012000179], + [-162.239003058999913, 54.893988348000065], + [-162.27875729099992, 54.851996161000088] + ] + ], + [ + [ + [-131.241566535999937, 54.974595445000105], + [-131.237904425999886, 54.96112702000012], + [-131.237172003999973, 54.949530341000113], + [-131.243723110999866, 54.94082265800013], + [-131.243723110999866, 54.934556382000082], + [-131.211659308999884, 54.927232163999989], + [-131.197499152999853, 54.920314846000068], + [-131.194691535999908, 54.907294012000179], + [-131.203195766999841, 54.900702216000113], + [-131.239165818999908, 54.88300202], + [-131.250233527999853, 54.879339911000059], + [-131.285715298999946, 54.881781317], + [-131.29979407499988, 54.879217841000084], + [-131.314768032999922, 54.869452216000141], + [-131.331166144999941, 54.86123281500015], + [-131.350087042999945, 54.860907294000029], + [-131.369455532999865, 54.865668036000116], + [-131.38707434799997, 54.872503973000121], + [-131.387562628999945, 54.884222723000121], + [-131.426421678999873, 54.905829169000029], + [-131.441721157999837, 54.920314846000068], + [-131.468169725999928, 54.912420966000113], + [-131.482167120999861, 54.925604559000149], + [-131.478382941999939, 54.944728908000044], + [-131.451568162999934, 54.954413153000175], + [-131.430246548999889, 54.956000067000119], + [-131.371490037999877, 54.966986395000063], + [-131.352284308999913, 54.975531317], + [-131.330189581999946, 54.961371161000088], + [-131.263824022999927, 54.996893622000144], + [-131.236236131999874, 54.99542877800009], + [-131.243723110999866, 54.989203192000119], + [-131.241566535999937, 54.974595445000105] + ] + ], + [ + [ + [-163.756540493999921, 55.060370184000149], + [-163.681752081999917, 55.044378973000065], + [-163.571644660999908, 55.057033596000124], + [-163.52570553299995, 55.043850002000099], + [-163.539133266999926, 55.043443101], + [-163.545725063999896, 55.037583726000136], + [-163.54588782499988, 55.028021552000055], + [-163.539987758999928, 55.016546942], + [-163.531239386999857, 55.009711005], + [-163.508493618999921, 55.002020575000145], + [-163.479603644999912, 54.984930731000119], + [-163.461415167999917, 54.970770575000088], + [-163.444813605999855, 54.953680731000148], + [-163.430734829999921, 54.934556382000082], + [-163.42316646999987, 54.912014065], + [-163.421131964999944, 54.865912177000055], + [-163.412709113999881, 54.848334052000141], + [-163.373036261999886, 54.792669989000117], + [-163.354359503999888, 54.776922919000143], + [-163.328846808999913, 54.765692450000145], + [-163.30333411399991, 54.761786200000145], + [-163.23310299399995, 54.763495184000149], + [-163.223378058999913, 54.766424872000087], + [-163.216053839999915, 54.771918036000116], + [-163.207630988999853, 54.78034088700015], + [-163.198841925999886, 54.783880927000055], + [-163.188343878999916, 54.782294012000122], + [-163.177113410999908, 54.778794664000131], + [-163.166696743999921, 54.776922919000143], + [-163.144154425999943, 54.770331122000087], + [-163.128854946999894, 54.75413646000014], + [-163.107980923999918, 54.714829820000134], + [-163.099680141999926, 54.704738674000069], + [-163.09080969999988, 54.698472398000106], + [-163.082020636999914, 54.693670966000028], + [-163.073841925999915, 54.687567450000031], + [-163.067738410999937, 54.683579820000077], + [-163.05610104099992, 54.673895575000088], + [-163.050648566999882, 54.664129950000145], + [-163.063303188999953, 54.659613348], + [-163.155506964999915, 54.666205145000092], + [-163.170033331999946, 54.673895575000088], + [-163.154855923999861, 54.675685940000093], + [-163.114816860999923, 54.687567450000031], + [-163.127064581999889, 54.69550202], + [-163.140126105999883, 54.699855861000103], + [-163.154367641999897, 54.70140208500014], + [-163.170033331999946, 54.701239325000174], + [-163.185251430999926, 54.69749583500014], + [-163.215809699999852, 54.683294989000117], + [-163.228098110999923, 54.680080471000068], + [-163.238474087999919, 54.683050848000093], + [-163.247751430999955, 54.689886786], + [-163.26191158799989, 54.704657294000086], + [-163.272287563999896, 54.709133205000128], + [-163.299183722999885, 54.709906317000062], + [-163.313465949999852, 54.714829820000134], + [-163.347767706999917, 54.75226471600017], + [-163.369496222999885, 54.764553127000042], + [-163.402699347999913, 54.74713776200015], + [-163.417551235999866, 54.741766669000086], + [-163.43110104099992, 54.73501211100016], + [-163.436960415999891, 54.725083726000051], + [-163.429554816999882, 54.69212474199999], + [-163.430734829999921, 54.680080471000068], + [-163.449167446999951, 54.663519598], + [-163.506662563999953, 54.655747789000102], + [-163.518869594999927, 54.636379299000097], + [-163.53388424399995, 54.635321356000034], + [-163.622547980999911, 54.611802476000079], + [-163.678089972999885, 54.616359768000038], + [-163.789865688999896, 54.637925523000135], + [-164.132679816999882, 54.62323639500012], + [-164.18305416599992, 54.610256252000127], + [-164.218373175999943, 54.598130601000136], + [-164.329701300999886, 54.534816799000097], + [-164.334462042999888, 54.52680084800015], + [-164.332834438999953, 54.515570380000142], + [-164.330067511999886, 54.509588934000035], + [-164.32953854099992, 54.502508856000148], + [-164.334462042999888, 54.488267320000077], + [-164.361317511999857, 54.458482164000046], + [-164.405588344999899, 54.435980536000059], + [-164.457102016999897, 54.421047268000038], + [-164.505808071999923, 54.413804429], + [-164.573312954999892, 54.41339752800009], + [-164.608713344999899, 54.408921617000132], + [-164.633046027999882, 54.395819403000147], + [-164.652577277999853, 54.39199453300013], + [-164.802316860999895, 54.404038804000052], + [-164.825998501999919, 54.411322333000058], + [-164.845285610999952, 54.423488674000154], + [-164.873036261999943, 54.457220770000148], + [-164.889149542999917, 54.470933335000083], + [-164.909860805999926, 54.475287177000055], + [-164.904286261999914, 54.496649481000119], + [-164.912546352999897, 54.508734442000119], + [-164.924753383999956, 54.516913153000033], + [-164.930978969999927, 54.52680084800015], + [-164.933664516999897, 54.542954820000105], + [-164.940419074999937, 54.558661200000174], + [-164.958241339999915, 54.585150458000143], + [-164.938303188999924, 54.598863023000078], + [-164.909250454999949, 54.612127997000087], + [-164.879099087999919, 54.622137762000179], + [-164.796823696999866, 54.634466864000117], + [-164.739206508999899, 54.652777411], + [-164.700672980999911, 54.678290106000176], + [-164.569528774999867, 54.83698151200015], + [-164.557606574999937, 54.844549872000115], + [-164.547352667999917, 54.882757880000057], + [-164.541818813999896, 54.88743724199999], + [-164.47752844999988, 54.918890692], + [-164.453195766999897, 54.924994208], + [-164.399647589999887, 54.927720445000077], + [-164.378163214999859, 54.922837632], + [-164.336008266999926, 54.900051174000069], + [-164.313954230999911, 54.893011786], + [-164.225087042999888, 54.89472077], + [-164.212961391999897, 54.899888414000102], + [-164.210926886999857, 54.908433335000112], + [-164.224598761999914, 54.920314846000068], + [-164.190663214999944, 54.942124742000132], + [-164.156849738999881, 54.95697663], + [-164.119374152999853, 54.965399481000034], + [-164.050729946999923, 54.971136786000116], + [-164.026437954999949, 54.978338934000064], + [-163.985666469999899, 54.99542877800009], + [-163.937001105999855, 55.029120184000092], + [-163.916737433999941, 55.036363023000106], + [-163.823963995999918, 55.043850002000099], + [-163.803212042999917, 55.048041083000115], + [-163.780588344999956, 55.05585358300003], + [-163.756540493999921, 55.060370184000149] + ] + ], + [ + [ + [-159.355051235999923, 55.037298895], + [-159.363229946999923, 55.036322333000115], + [-159.373605923999946, 55.036363023000106], + [-159.383168097999942, 55.034369208000086], + [-159.391346808999913, 55.029852606000034], + [-159.394724087999947, 55.025376695000077], + [-159.39008541599992, 55.023382880000113], + [-159.37922115799995, 55.017075913999989], + [-159.363229946999923, 55.002671617000104], + [-159.339182094999899, 54.975531317], + [-159.401071743999864, 54.950344143000123], + [-159.434315558999884, 54.941839911], + [-159.462717251999919, 54.948187567000119], + [-159.451486782999893, 54.956488348], + [-159.452219204999949, 54.966009833], + [-159.456369594999899, 54.975002346000039], + [-159.455270962999919, 54.981756903000147], + [-159.445668097999885, 54.985052802], + [-159.421457485999952, 54.981878973000121], + [-159.408070441999882, 54.981756903000147], + [-159.413075324999909, 54.991848049000041], + [-159.424794074999909, 55.030218817000147], + [-159.439076300999886, 55.028713283000101], + [-159.483143683999884, 55.016546942], + [-159.459828253999888, 55.038153387000094], + [-159.454294399999952, 55.049750067000119], + [-159.462717251999919, 55.058050848], + [-159.462717251999919, 55.064276434000149], + [-159.444162563999896, 55.060980536000116], + [-159.364491339999944, 55.057562567000033], + [-159.354481574999852, 55.054754950000145], + [-159.345407680999955, 55.05068594], + [-159.349110480999911, 55.041449286000145], + [-159.355051235999923, 55.037298895] + ] + ], + [ + [ + [-131.189992318999941, 55.04833726000011], + [-131.216200289999904, 55.048024022000121], + [-131.25489452899987, 55.069236562000029], + [-131.244148378999881, 55.092743682], + [-131.20397197099993, 55.109932967000091], + [-131.189149909999855, 55.103431457000127], + [-131.188079458999937, 55.075074197000149], + [-131.189992318999941, 55.04833726000011] + ] + ], + [ + [ + [-161.730661587999947, 55.160549221000068], + [-161.730213995999861, 55.155910549000154], + [-161.731638149999924, 55.154486395000092], + [-161.734445766999897, 55.154364325000117], + [-161.738148566999939, 55.153713283000158], + [-161.71312415299991, 55.143988348], + [-161.660837368999921, 55.130682684000092], + [-161.641306118999921, 55.119533596000068], + [-161.652780727999868, 55.106268622000059], + [-161.685780402999939, 55.090399481000119], + [-161.696522589999859, 55.071112372000172], + [-161.711862758999928, 55.079006252000156], + [-161.724720831999946, 55.07428620000006], + [-161.737253383999928, 55.064764716000141], + [-161.751169399999924, 55.058050848], + [-161.770497199999937, 55.059027411000088], + [-161.78453528599988, 55.066799221000068], + [-161.797434048999889, 55.077053127000013], + [-161.813221808999941, 55.085394598000065], + [-161.80687415299991, 55.095648505], + [-161.775380011999914, 55.122626044000143], + [-161.771677212999862, 55.134344794000143], + [-161.783192511999914, 55.144924221000096], + [-161.813221808999941, 55.160549221000068], + [-161.809030727999925, 55.145005601000079], + [-161.81220455599987, 55.129787502000099], + [-161.826283331999946, 55.099066473], + [-161.840321417999888, 55.111761786000059], + [-161.871937628999888, 55.121405341000056], + [-161.893137173999946, 55.133937893000123], + [-161.90062415299991, 55.133490302000141], + [-161.906076626999862, 55.134588934000178], + [-161.908192511999857, 55.143459377000127], + [-161.906076626999862, 55.154852606000091], + [-161.900135870999918, 55.158026434000149], + [-161.891672329999892, 55.158148505000142], + [-161.843820766999869, 55.171332098000093], + [-161.730661587999947, 55.160549221000068] + ] + ], + [ + [ + [-132.791574673999946, 55.173081773], + [-132.741607225999928, 55.149115302000112], + [-132.722767706999946, 55.133205471000011], + [-132.66820227799991, 55.05068594], + [-132.682687954999835, 55.034369208000086], + [-132.750721808999913, 54.99542877800009], + [-132.758697068999936, 55.008368231000091], + [-132.768177863999938, 55.018744208], + [-132.79165605399993, 55.036363023000106], + [-132.791574673999946, 55.013617255000085], + [-132.815500454999892, 55.015692450000088], + [-132.873646613999938, 55.036363023000106], + [-132.861643032999837, 55.045477606000119], + [-132.83226477799991, 55.048814195000134], + [-132.826486782999893, 55.054388739000146], + [-132.823394334999875, 55.065863348000093], + [-132.816070115999878, 55.074855861000017], + [-132.807036912999962, 55.081284898000106], + [-132.799143032999893, 55.085394598000065], + [-132.810658331999946, 55.090277411000145], + [-132.827219204999892, 55.094631252000127], + [-132.856556769999912, 55.099066473], + [-132.861805792999917, 55.104803778000175], + [-132.86538652299987, 55.11782461100016], + [-132.86742102799991, 55.131659247000144], + [-132.866851365999935, 55.146429755000142], + [-132.869211391999897, 55.153998114], + [-132.86742102799991, 55.160549221000068], + [-132.863107876999891, 55.162054755000113], + [-132.855946417999945, 55.16156647300015], + [-132.849273240999878, 55.163275458000143], + [-132.842681443999936, 55.179144598000065], + [-132.833851691999939, 55.18646881700009], + [-132.822661912999934, 55.190497137000065], + [-132.812163865999878, 55.188421942000119], + [-132.791574673999946, 55.173081773] + ] + ], + [ + [ + [-161.354359503999945, 55.221502997000172], + [-161.340321417999888, 55.218980210000055], + [-161.338205532999893, 55.214056708], + [-161.341501430999926, 55.206773179], + [-161.338205532999893, 55.197902736000131], + [-161.333566860999952, 55.191473700000031], + [-161.33149166599992, 55.188055731000119], + [-161.330189581999946, 55.182033596000011], + [-161.330759243999921, 55.170355536000031], + [-161.341867641999926, 55.162746486000074], + [-161.360463019999941, 55.163031317], + [-161.369821743999864, 55.165350653000147], + [-161.42218990799995, 55.185451565000037], + [-161.43968665299991, 55.197333075000145], + [-161.437448696999923, 55.204901434000121], + [-161.427316860999952, 55.213690497000172], + [-161.411447719999927, 55.219468492000047], + [-161.372263149999895, 55.219142971000039], + [-161.354359503999945, 55.221502997000172] + ] + ], + [ + [ + [-159.524159308999913, 55.119533596000068], + [-159.522694464999915, 55.078802802], + [-159.524159308999913, 55.071112372000172], + [-159.494455532999893, 55.063137111000017], + [-159.489979620999918, 55.058050848], + [-159.493641730999855, 55.047593492000104], + [-159.504465298999946, 55.042466539000102], + [-159.517404751999948, 55.042425848000036], + [-159.527536587999919, 55.047267971000096], + [-159.549997524999924, 55.073797919000143], + [-159.562977667999917, 55.085435289000074], + [-159.578724738999881, 55.092230536], + [-159.582264777999939, 55.081610419000143], + [-159.583688930999926, 55.070868231000034], + [-159.582630988999881, 55.060492255000142], + [-159.578724738999881, 55.05068594], + [-159.593942837999947, 55.05072663], + [-159.620106574999909, 55.057033596000124], + [-159.633371548999918, 55.058050848], + [-159.639719204999949, 55.053859768000066], + [-159.643666144999941, 55.046616929000052], + [-159.647775844999899, 55.043280341000028], + [-159.654489712999919, 55.05068594], + [-159.659250454999949, 55.065130927000055], + [-159.654367641999954, 55.073391018000152], + [-159.633371548999918, 55.085394598000065], + [-159.627145962999862, 55.087632554000052], + [-159.621652798999946, 55.086371161000145], + [-159.616892055999926, 55.086371161000145], + [-159.612904425999858, 55.092230536], + [-159.61164303299995, 55.098944403000033], + [-159.613270636999857, 55.102972723], + [-159.61742102799991, 55.104803778000175], + [-159.623402472999942, 55.105292059000149], + [-159.645375128999945, 55.112697658000158], + [-159.650380011999886, 55.126369533000101], + [-159.640248175999943, 55.133937893000123], + [-159.592600063999953, 55.11017487200003], + [-159.577137824999937, 55.112005927000112], + [-159.577259894999912, 55.12173086100016], + [-159.599842902999882, 55.133205471000011], + [-159.585764126999948, 55.140936591000028], + [-159.551380988999881, 55.142157294000029], + [-159.544626430999955, 55.15029531500015], + [-159.552601691999911, 55.158921617000047], + [-159.591786261999943, 55.163763739000117], + [-159.606068488999938, 55.167914130000085], + [-159.582508917999888, 55.17715078300013], + [-159.584177212999919, 55.193182684000035], + [-159.589222785999937, 55.208400783000016], + [-159.575672980999883, 55.215155341000141], + [-159.56224524599989, 55.21548086100016], + [-159.55711829299986, 55.217027085000112], + [-159.553456183999913, 55.221340236000017], + [-159.544626430999955, 55.229396877000127], + [-159.540760870999947, 55.237616278000061], + [-159.539255337999919, 55.247137762000037], + [-159.533640102999897, 55.251044012000037], + [-159.517933722999942, 55.24241771000014], + [-159.520985480999911, 55.226385809000035], + [-159.53026282499988, 55.216620184000092], + [-159.540109829999892, 55.208685614000146], + [-159.544626430999955, 55.198065497000087], + [-159.538319464999915, 55.183539130000057], + [-159.524647589999887, 55.176174221000068], + [-159.511545376999919, 55.172919012000122], + [-159.507069464999944, 55.171087958000143], + [-159.51219641799986, 55.161322333], + [-159.524159308999913, 55.119533596000068] + ] + ], + [ + [ + [-133.062245245999918, 55.18382396], + [-133.06541907499988, 55.15029531500015], + [-133.055897589999887, 55.144110419000086], + [-133.011138475999928, 55.132310289000102], + [-132.997141079999892, 55.125718492000047], + [-132.994862433999913, 55.119289455000128], + [-132.993072068999936, 55.09979889500012], + [-132.99087480399993, 55.092230536], + [-132.956166144999941, 55.064276434000149], + [-132.984852667999917, 55.075995184000064], + [-133.019357876999834, 55.097235419000029], + [-133.054839647999927, 55.108954169000029], + [-133.086537238999881, 55.092230536], + [-132.997141079999892, 55.064276434000149], + [-132.997141079999892, 55.058050848], + [-133.032582160999965, 55.050279039000102], + [-133.045521613999881, 55.05068594], + [-133.045521613999881, 55.043850002000099], + [-133.014068162999934, 55.03457265800013], + [-132.98306230399993, 55.032049872000115], + [-132.957590298999946, 55.023342190000122], + [-132.942494269999941, 54.99542877800009], + [-132.941761847999885, 54.954413153000175], + [-132.942494269999941, 54.948187567000119], + [-132.932769334999875, 54.945502020000148], + [-132.906646287999934, 54.951361395000092], + [-132.894113735999923, 54.948187567000119], + [-132.901519334999904, 54.94082265800013], + [-132.893950975999957, 54.939154364000117], + [-132.891102667999917, 54.937567450000174], + [-132.887277798999889, 54.934556382000082], + [-132.892445441999911, 54.929510809000064], + [-132.901519334999904, 54.91351959800015], + [-132.860463019999912, 54.900336005], + [-132.843820766999869, 54.889105536], + [-132.839466925999943, 54.872503973000121], + [-132.824574347999913, 54.87518952000012], + [-132.815012173999918, 54.867580471000068], + [-132.814361131999874, 54.85545482], + [-132.826486782999893, 54.844549872000115], + [-132.812814907999837, 54.839992580000157], + [-132.78453528599988, 54.83685944200009], + [-132.771229620999861, 54.831529039000131], + [-132.762603318999936, 54.824448960000055], + [-132.758697068999936, 54.818182684000121], + [-132.755930141999897, 54.811590887000037], + [-132.750721808999913, 54.803656317000062], + [-132.722482876999834, 54.776556708000143], + [-132.72520911399991, 54.767401434000149], + [-132.750721808999913, 54.756415106000091], + [-132.74388587099989, 54.74900950700011], + [-132.751088019999912, 54.74701569200009], + [-132.753814256999874, 54.745428778000147], + [-132.757557745999918, 54.742173570000105], + [-132.705433722999885, 54.728827216000084], + [-132.688303188999839, 54.717962958], + [-132.702951626999862, 54.701239325000174], + [-132.671213344999899, 54.677313544000114], + [-132.68687903599988, 54.673976955000072], + [-132.724273240999935, 54.677435614000089], + [-132.757557745999918, 54.673895575000088], + [-132.76821855399993, 54.693019924000069], + [-132.793771938999839, 54.698065497000115], + [-132.842884894999969, 54.693793036], + [-132.843576626999919, 54.69830963700015], + [-132.852935350999928, 54.719142971000124], + [-132.863596157999893, 54.734523830000072], + [-132.863840298999918, 54.74160390800013], + [-132.856190558999913, 54.744696356000119], + [-132.839466925999943, 54.742173570000105], + [-132.938059048999946, 54.78774648600016], + [-132.956166144999941, 54.803656317000062], + [-132.94351152299987, 54.807074286000088], + [-132.925607876999834, 54.81533437700007], + [-132.911000128999916, 54.826402085000112], + [-132.908355272999927, 54.838324286000145], + [-132.921701626999834, 54.845200914000074], + [-132.942250128999973, 54.842027085], + [-132.980376756999931, 54.831529039000131], + [-132.998768683999913, 54.837958075000031], + [-133.007069464999887, 54.866115627000013], + [-133.021351691999968, 54.872503973000121], + [-133.037098761999914, 54.877386786000031], + [-133.049143032999837, 54.88890208500014], + [-133.051503058999913, 54.9024925800001], + [-133.038075324999909, 54.91351959800015], + [-133.053293423999975, 54.917792059000149], + [-133.068714972999913, 54.919745184000092], + [-133.100738084999904, 54.920314846000068], + [-133.100738084999904, 54.927720445000077], + [-133.075835740999963, 54.932196356000034], + [-133.063710089999859, 54.935736395], + [-133.058583136999857, 54.94082265800013], + [-133.064564581999946, 54.947088934000178], + [-133.078358527999882, 54.949286200000174], + [-133.107004360999838, 54.948187567000119], + [-133.132801886999886, 54.943345445000048], + [-133.139068162999934, 54.94525788], + [-133.147938605999883, 54.954413153000175], + [-133.144195115999935, 54.955511786000116], + [-133.14126542899993, 54.963080145000092], + [-133.143462693999908, 54.973089911000059], + [-133.154774542999917, 54.981756903000147], + [-133.134836391999897, 54.997503973], + [-133.153472459999904, 55.021185614000117], + [-133.203236456999974, 55.058050848], + [-133.199289516999897, 55.06525299700003], + [-133.203724738999966, 55.075140692000147], + [-133.211293097999913, 55.086818752000127], + [-133.216867641999926, 55.099066473], + [-133.168365037999934, 55.096380927000112], + [-133.120676235999895, 55.099066473], + [-133.139312303999873, 55.115668036000059], + [-133.189361131999874, 55.12173086100016], + [-133.203236456999974, 55.133205471000011], + [-133.18211829299986, 55.133205471000011], + [-133.216867641999926, 55.153713283000158], + [-133.205799933999884, 55.155829169000171], + [-133.18211829299986, 55.15322500200007], + [-133.168446417999917, 55.153713283000158], + [-133.177642381999902, 55.164292710000112], + [-133.18700110599994, 55.172023830000043], + [-133.199208136999914, 55.175604559000092], + [-133.216867641999926, 55.174139716000028], + [-133.216867641999926, 55.180975653000147], + [-133.154774542999917, 55.19464752800009], + [-133.1888728509999, 55.213771877000156], + [-133.19399980399993, 55.222235419000114], + [-133.18211829299986, 55.235581773000106], + [-133.166127081999946, 55.243109442000062], + [-133.143462693999908, 55.248846747000144], + [-133.121408657999922, 55.251288153000175], + [-133.107004360999838, 55.248683986000074], + [-133.096547003999945, 55.233099677], + [-133.102202928999958, 55.220282294000143], + [-133.104237433999913, 55.211574611000074], + [-133.082834438999839, 55.208319403000033], + [-133.066761847999942, 55.200913804000137], + [-133.062245245999918, 55.18382396] + ] + ], + [ + [ + [-161.564076300999915, 55.207912502000013], + [-161.574086066999882, 55.207017320000134], + [-161.592640753999888, 55.207505601000108], + [-161.637196417999888, 55.193548895000148], + [-161.645334438999896, 55.194525458000115], + [-161.664173956999946, 55.19867584800015], + [-161.676869269999912, 55.20018138200011], + [-161.691721157999893, 55.211615302000055], + [-161.683338995999918, 55.230902411], + [-161.658884243999864, 55.242377020000148], + [-161.612416144999941, 55.24510325700011], + [-161.559030727999868, 55.254461981000063], + [-161.548573370999918, 55.252834377000042], + [-161.544016079999949, 55.240627346000153], + [-161.557443813999953, 55.215765692], + [-161.564076300999915, 55.207912502000013] + ] + ], + [ + [ + [-131.352284308999913, 55.122626044000143], + [-131.355580206999946, 55.114813544000143], + [-131.36192786399991, 55.106187242000075], + [-131.366118943999936, 55.097398179], + [-131.363189256999931, 55.08881256700009], + [-131.348784959999932, 55.077948309000092], + [-131.345082160999908, 55.070990302000027], + [-131.345529751999891, 55.058050848], + [-131.357045050999943, 55.03253815300009], + [-131.378000454999892, 55.017889716000084], + [-131.404286261999914, 55.011297919000029], + [-131.471831834999961, 55.004828192000119], + [-131.479562954999892, 55.006293036000088], + [-131.485340949999937, 55.017035223000093], + [-131.484445766999841, 55.02610911699999], + [-131.48176021999987, 55.034654039000102], + [-131.482655402999853, 55.043850002000099], + [-131.493763800999886, 55.057277736000074], + [-131.513742641999869, 55.074164130000085], + [-131.53449459499987, 55.087103583000086], + [-131.54784094999988, 55.08881256700009], + [-131.549794074999909, 55.076361395000063], + [-131.536691860999866, 55.064439195000105], + [-131.524973110999895, 55.049994208000058], + [-131.531117316999939, 55.030218817000147], + [-131.539296027999853, 55.022609768], + [-131.550200975999928, 55.014715887000037], + [-131.57201087099989, 55.002875067000062], + [-131.575266079999835, 55.000433661000116], + [-131.578114386999857, 54.997503973], + [-131.582997199999937, 54.995347398000106], + [-131.592518683999941, 54.99542877800009], + [-131.598988410999937, 54.998195705000157], + [-131.603342251999834, 55.003078518000123], + [-131.606556769999884, 55.00771719000015], + [-131.609608527999882, 55.009711005], + [-131.62450110599994, 55.017401434000092], + [-131.618397589999944, 55.035223700000174], + [-131.581044074999909, 55.09007396], + [-131.583729620999861, 55.095770575000174], + [-131.599354620999947, 55.099066473], + [-131.582875128999945, 55.125555731000176], + [-131.564279751999891, 55.126288153000118], + [-131.544260219999899, 55.118557033000101], + [-131.523589647999898, 55.119533596000068], + [-131.517241990999935, 55.134182033000073], + [-131.531483527999853, 55.151760158000016], + [-131.553944464999859, 55.166896877000013], + [-131.57201087099989, 55.174139716000028], + [-131.568186001999891, 55.177394924000069], + [-131.561919725999928, 55.185126044000086], + [-131.558420376999834, 55.188421942000119], + [-131.572173631999931, 55.196844794000171], + [-131.581695115999935, 55.206284898], + [-131.586537238999938, 55.218654690000122], + [-131.586333787999962, 55.235581773000106], + [-131.581288214999915, 55.253363348], + [-131.572987433999856, 55.260484117000047], + [-131.560861782999865, 55.263820705000072], + [-131.544097459999932, 55.270412502000156], + [-131.551584438999896, 55.276556708000115], + [-131.531239386999914, 55.274237372000172], + [-131.503570115999935, 55.264797268000152], + [-131.479237433999856, 55.252630927000084], + [-131.451283331999917, 55.223781643000152], + [-131.395578579999921, 55.215399481000176], + [-131.37279212099989, 55.201483466000113], + [-131.376942511999914, 55.182847398000106], + [-131.369130011999914, 55.163723049000126], + [-131.357980923999918, 55.143703518000066], + [-131.352284308999913, 55.122626044000143] + ] + ], + [ + [ + [-159.921986456999946, 55.221909898], + [-159.904408331999889, 55.207464911000116], + [-159.916940883999899, 55.156927802000112], + [-159.901478644999884, 55.140082098000036], + [-159.886952277999939, 55.149115302000112], + [-159.875111456999889, 55.172674872000172], + [-159.857533331999946, 55.190252997000115], + [-159.825795050999886, 55.180975653000147], + [-159.832875128999945, 55.171616929000109], + [-159.839304165999863, 55.145168361000131], + [-159.846262173999946, 55.133205471000011], + [-159.848255988999881, 55.134426174000126], + [-159.874216274999867, 55.125718492000047], + [-159.876535610999952, 55.120794989000089], + [-159.875233527999939, 55.115057684000092], + [-159.874867316999939, 55.109564520000092], + [-159.879750128999888, 55.105292059000149], + [-159.897409633999928, 55.104885158000158], + [-159.909250454999892, 55.114813544000143], + [-159.920155402999853, 55.127020575000031], + [-159.93500729099992, 55.133205471000011], + [-159.949452277999882, 55.128892320000105], + [-159.967884894999912, 55.106756903000033], + [-159.982858852999925, 55.099066473], + [-159.955881313999896, 55.081488348000065], + [-159.946115688999953, 55.069647528000118], + [-159.959543423999946, 55.064276434000149], + [-160.012644008999928, 55.071356512000122], + [-160.031239386999943, 55.071112372000172], + [-160.01728268099987, 55.0528832050001], + [-160.01703854099992, 55.045314846000153], + [-160.045521613999938, 55.030218817000147], + [-160.083688930999926, 54.995835679], + [-160.129831508999928, 54.965969143], + [-160.155384894999912, 54.94082265800013], + [-160.183298305999955, 54.918931382], + [-160.196359829999949, 54.905218817000062], + [-160.20844479099992, 54.87384674700003], + [-160.222727016999926, 54.876125393], + [-160.237049933999913, 54.888576565000122], + [-160.243519660999937, 54.90355052300005], + [-160.240223761999886, 54.927069403000118], + [-160.230295376999891, 54.934475002000099], + [-160.213327602999925, 54.937648830000157], + [-160.188913540999948, 54.948187567000119], + [-160.144520636999914, 55.006293036000088], + [-160.130686001999948, 55.015692450000088], + [-160.114816860999895, 55.023830471000039], + [-160.100819464999944, 55.034247137000094], + [-160.092722133999928, 55.05068594], + [-160.174631313999953, 55.058050848], + [-160.174631313999953, 55.064276434000149], + [-160.161976691999882, 55.069037177000055], + [-160.148548956999889, 55.070990302000027], + [-160.119984503999888, 55.071112372000172], + [-160.125192837999919, 55.082464911000145], + [-160.134144660999937, 55.091253973000036], + [-160.145619269999884, 55.09699127800009], + [-160.173939581999917, 55.103216864000146], + [-160.18919837099989, 55.112372137000037], + [-160.194813605999911, 55.121527411000031], + [-160.181752081999917, 55.125718492000047], + [-160.152902798999889, 55.121649481000176], + [-160.100656704999892, 55.103420315], + [-160.072214321999951, 55.099066473], + [-160.084095831999917, 55.115301825000145], + [-160.113474087999919, 55.139308986000103], + [-160.127430792999888, 55.153713283000158], + [-160.110585089999887, 55.160834052000112], + [-160.094309048999946, 55.156927802000112], + [-160.079904751999891, 55.147040106000091], + [-160.068796352999954, 55.136664130000028], + [-160.064076300999943, 55.128851630000113], + [-160.063588019999884, 55.123521226000051], + [-160.060658331999946, 55.12051015800013], + [-160.039784308999856, 55.118475653000118], + [-160.031564907999893, 55.115545966000084], + [-160.02403723899991, 55.111029364000146], + [-160.017567511999914, 55.105292059000149], + [-160.01398678299995, 55.108058986000046], + [-160.010202602999925, 55.111761786000059], + [-160.003895636999857, 55.119533596000068], + [-160.019154425999943, 55.13373444200009], + [-160.056101040999891, 55.181382554000052], + [-160.065378383999928, 55.201483466000113], + [-159.981271938999896, 55.177883205000072], + [-159.953602667999917, 55.175848700000031], + [-159.976633266999897, 55.208319403000033], + [-159.964833136999914, 55.210516669000114], + [-159.954090949999909, 55.209702867000104], + [-159.943348761999886, 55.210760809000149], + [-159.931630011999914, 55.218573309000149], + [-159.930653449999909, 55.226141669000086], + [-159.936960415999863, 55.235256252000099], + [-159.94481360599994, 55.244452216000141], + [-159.948679165999948, 55.252386786000116], + [-159.93968665299991, 55.2560082050001], + [-159.89867102799991, 55.28534577], + [-159.887277798999861, 55.297064520000092], + [-159.876901821999951, 55.287583726], + [-159.874216274999867, 55.284002997000115], + [-159.864979620999918, 55.25116608300003], + [-159.875111456999889, 55.238836981000148], + [-159.896717902999882, 55.233628648000078], + [-159.921986456999946, 55.221909898] + ] + ], + [ + [ + [-133.285267706999889, 55.317938544000143], + [-133.291574673999946, 55.300848700000117], + [-133.319243943999936, 55.270412502000156], + [-133.291371222999885, 55.262925523], + [-133.280384894999941, 55.282131252000127], + [-133.259632941999939, 55.28156159100017], + [-133.234242316999911, 55.27362702], + [-133.209380662999934, 55.270412502000156], + [-133.226633266999869, 55.252875067000033], + [-133.233754035999937, 55.242254950000174], + [-133.240142381999931, 55.220363674000126], + [-133.248890753999916, 55.216498114000117], + [-133.272084113999938, 55.215155341000141], + [-133.306548631999874, 55.203111070000134], + [-133.316151495999947, 55.201483466000113], + [-133.328439907999893, 55.202948309000149], + [-133.334339972999942, 55.206610419000029], + [-133.338856574999909, 55.211086330000072], + [-133.346587693999908, 55.215155341000141], + [-133.369455532999893, 55.221991278000147], + [-133.382435675999915, 55.223334052000055], + [-133.388172980999883, 55.218573309000149], + [-133.391835089999915, 55.20917389500012], + [-133.400786912999962, 55.2032738300001], + [-133.411976691999968, 55.200751044000171], + [-133.422271287999877, 55.201483466000113], + [-133.436594204999892, 55.211371161000116], + [-133.445627407999893, 55.229152736000103], + [-133.449859178999901, 55.250230210000112], + [-133.449615037999962, 55.270412502000156], + [-133.437408006999874, 55.26581452000012], + [-133.424672003999945, 55.26308828300013], + [-133.41234290299991, 55.263902085000055], + [-133.401234503999945, 55.270412502000156], + [-133.434437628999973, 55.28587474199999], + [-133.442779100999928, 55.297796942000119], + [-133.432240363999881, 55.314439195000077], + [-133.414133266999897, 55.318182684000092], + [-133.392079230999883, 55.315578518], + [-133.377512173999946, 55.316717841000056], + [-133.381947394999941, 55.331854559000035], + [-133.360259568999936, 55.332912502000099], + [-133.338775193999908, 55.337347723000065], + [-133.318104620999918, 55.339056708000058], + [-133.298736131999874, 55.331854559000035], + [-133.285267706999889, 55.317938544000143] + ] + ], + [ + [ + [-160.032093878999945, 55.313666083000143], + [-160.039987758999928, 55.307074286000059], + [-160.072946743999893, 55.308294989000089], + [-160.096994594999927, 55.314927476000051], + [-160.109079555999926, 55.325751044000143], + [-160.108469204999892, 55.333889065000065], + [-160.09935462099989, 55.340277411000088], + [-160.085438605999911, 55.343410549000154], + [-160.066599087999862, 55.344712632000054], + [-160.061512824999937, 55.342678127000127], + [-160.059030727999925, 55.338568427000084], + [-160.052561001999891, 55.333441473000065], + [-160.036244269999884, 55.32619863500004], + [-160.036244269999884, 55.326157945000048], + [-160.033070441999939, 55.322577216000084], + [-160.032093878999945, 55.313666083000143] + ] + ], + [ + [ + [-160.332875128999945, 55.352280992000104], + [-160.324777798999918, 55.313910223000093], + [-160.323719855999855, 55.295233466000113], + [-160.325428839999859, 55.276556708000115], + [-160.336293097999942, 55.248683986000074], + [-160.346913214999887, 55.250555731000148], + [-160.361765102999954, 55.255113023], + [-160.374989386999914, 55.261053778000118], + [-160.401112433999941, 55.286769924000069], + [-160.498483852999925, 55.302232163999989], + [-160.531483527999882, 55.325018622000115], + [-160.518991665999863, 55.32713450700011], + [-160.50841223899991, 55.331732489000061], + [-160.504261847999885, 55.338039455000015], + [-160.511057094999899, 55.345445054], + [-160.486927863999881, 55.353216864], + [-160.461659308999913, 55.351141669000171], + [-160.437123175999915, 55.346177476000108], + [-160.41547604099992, 55.345445054], + [-160.367380337999947, 55.366522528000118], + [-160.345204230999883, 55.371079820000048], + [-160.325428839999859, 55.358547268000152], + [-160.332875128999945, 55.352280992000104] + ] + ], + [ + [ + [-160.690663214999915, 55.307806708], + [-160.679392055999926, 55.306708075000145], + [-160.658151821999951, 55.311346747000172], + [-160.654042120999918, 55.314520575000145], + [-160.650135870999918, 55.321600653000118], + [-160.64521236899995, 55.328599351], + [-160.637928839999944, 55.331854559000035], + [-160.630238410999937, 55.330755927], + [-160.618031378999945, 55.326117255000057], + [-160.610340949999909, 55.325018622000115], + [-160.604725714999915, 55.330755927], + [-160.602487758999928, 55.360093492000104], + [-160.599802212999862, 55.372788804000052], + [-160.590158657999893, 55.383856512000094], + [-160.57555091099988, 55.391424872000144], + [-160.559274868999921, 55.393133856000148], + [-160.544545050999943, 55.386419989], + [-160.535593227999925, 55.364325262000122], + [-160.551584438999924, 55.345038153000175], + [-160.57445227799991, 55.324937242000132], + [-160.586130337999919, 55.300482489], + [-160.582386847999885, 55.285549221000153], + [-160.573231574999909, 55.27806224199999], + [-160.562001105999911, 55.272406317], + [-160.551991339999915, 55.262925523], + [-160.546091274999895, 55.250433661000088], + [-160.549875454999921, 55.245021877000127], + [-160.579904751999891, 55.235581773000106], + [-160.563710089999915, 55.229803778000147], + [-160.528024868999864, 55.227525132000082], + [-160.511057094999899, 55.221909898], + [-160.507679816999882, 55.216945705000128], + [-160.502308722999942, 55.200262762000179], + [-160.497385219999956, 55.19464752800009], + [-160.486317511999914, 55.193670966000113], + [-160.477487758999871, 55.197577216000113], + [-160.469838019999941, 55.198472398000106], + [-160.462595180999926, 55.188421942000119], + [-160.486195441999882, 55.181463934000035], + [-160.533558722999885, 55.187933661000145], + [-160.558827277999939, 55.188421942000119], + [-160.518625454999949, 55.17877838700015], + [-160.511057094999899, 55.174139716000028], + [-160.513295050999886, 55.164984442000147], + [-160.538319464999915, 55.133205471000011], + [-160.555246548999889, 55.157456773], + [-160.575266079999949, 55.162665106000091], + [-160.627064581999946, 55.153713283000158], + [-160.637684699999909, 55.154933986000074], + [-160.666371222999885, 55.163153387000179], + [-160.675526495999918, 55.167914130000085], + [-160.685251430999898, 55.180365302], + [-160.682484503999945, 55.186957098000065], + [-160.676136847999885, 55.192531643000066], + [-160.675526495999918, 55.201483466000113], + [-160.683338995999918, 55.211371161000116], + [-160.692331508999928, 55.20917389500012], + [-160.703317837999919, 55.20136139500012], + [-160.717111782999922, 55.19464752800009], + [-160.733347133999956, 55.191961981000119], + [-160.745838995999861, 55.191473700000031], + [-160.757679816999939, 55.189113674000069], + [-160.771717902999882, 55.180975653000147], + [-160.783884243999864, 55.166937567], + [-160.802845831999889, 55.133368231000148], + [-160.818918423999946, 55.119533596000068], + [-160.82050533799989, 55.135402736000103], + [-160.81273352799991, 55.166083075000088], + [-160.81578528599988, 55.177557684000035], + [-160.83922278599988, 55.197943427000112], + [-160.847401495999861, 55.207098700000117], + [-160.853627081999917, 55.221909898], + [-160.852365688999896, 55.225002346000068], + [-160.847238735999895, 55.24209219], + [-160.846180792999945, 55.248683986000074], + [-160.84862219999988, 55.256089585000083], + [-160.858265753999945, 55.265692450000145], + [-160.860463019999941, 55.273504950000031], + [-160.856922980999855, 55.288723049000012], + [-160.850534633999928, 55.303168036000088], + [-160.847279425999886, 55.317328192], + [-160.853627081999917, 55.331854559000035], + [-160.821400519999884, 55.363226630000085], + [-160.784047003999945, 55.389878648000106], + [-160.742054816999939, 55.406317450000088], + [-160.695993618999921, 55.406927802000055], + [-160.665760870999918, 55.383856512000094], + [-160.658762173999918, 55.363836981000034], + [-160.671986456999861, 55.343085028000033], + [-160.702829555999926, 55.317572333000143], + [-160.690663214999915, 55.307806708] + ] + ], + [ + [ + [-131.818470831999946, 55.413763739000089], + [-131.696522589999859, 55.343451239000146], + [-131.636097785999937, 55.299302476000079], + [-131.633452928999958, 55.262925523], + [-131.638579881999874, 55.275946356000176], + [-131.646351691999968, 55.286810614000061], + [-131.657134568999879, 55.294256903000033], + [-131.671294725999928, 55.297064520000092], + [-131.675363735999866, 55.291205145000148], + [-131.668283657999893, 55.256089585000083], + [-131.686146613999966, 55.230292059000035], + [-131.711740688999839, 55.23663971600017], + [-131.739491339999915, 55.250718492000104], + [-131.763824022999898, 55.248683986000074], + [-131.737212693999936, 55.217840887000122], + [-131.720855272999927, 55.203070380000142], + [-131.702381964999915, 55.19464752800009], + [-131.712757941999911, 55.177476304000052], + [-131.726551886999914, 55.166327216000141], + [-131.733306443999936, 55.155707098], + [-131.722889777999853, 55.140082098000036], + [-131.743316209999932, 55.142726955000015], + [-131.771962042999917, 55.167914130000085], + [-131.804921027999882, 55.181138414000102], + [-131.817779100999928, 55.197984117000104], + [-131.853179490999935, 55.300482489], + [-131.853138800999943, 55.339544989000061], + [-131.857004360999923, 55.357407945000105], + [-131.866851365999935, 55.372788804000052], + [-131.850941535999937, 55.373358466000028], + [-131.845773891999926, 55.372788804000052], + [-131.851958787999905, 55.394842841000141], + [-131.849517381999959, 55.41608307500006], + [-131.838368292999945, 55.425930080000157], + [-131.818470831999946, 55.413763739000089] + ] + ], + [ + [ + [-133.569691535999965, 55.424302476000136], + [-133.541900193999908, 55.414618231000176], + [-133.471587693999879, 55.416449286000059], + [-133.449615037999962, 55.406927802000055], + [-133.449045376999891, 55.392320054000137], + [-133.447580532999837, 55.386542059000178], + [-133.442209438999896, 55.38027578300013], + [-133.449615037999962, 55.374172268000123], + [-133.457875128999945, 55.369696356000176], + [-133.466908331999946, 55.366888739000117], + [-133.497710740999935, 55.365952867000047], + [-133.505360480999855, 55.364447333], + [-133.505034959999932, 55.36074453300013], + [-133.502837693999936, 55.356146552000112], + [-133.50487219999988, 55.352280992000104], + [-133.516224738999938, 55.345445054], + [-133.521473761999914, 55.341253973000065], + [-133.526844855999911, 55.339178778000033], + [-133.538685675999943, 55.338609117000075], + [-133.548329230999911, 55.339992580000157], + [-133.568104620999918, 55.34516022300015], + [-133.579945441999882, 55.345445054], + [-133.567209438999839, 55.33038971600017], + [-133.565174933999913, 55.319810289000131], + [-133.579945441999882, 55.29026927300005], + [-133.587757941999882, 55.257717190000093], + [-133.594309048999975, 55.242987372000087], + [-133.607289191999968, 55.235581773000106], + [-133.621164516999869, 55.240383205000015], + [-133.636301235999866, 55.25315989800005], + [-133.655669725999871, 55.276556708000115], + [-133.657297329999892, 55.283921617000132], + [-133.655873175999943, 55.30023834800015], + [-133.658802863999938, 55.307603257000054], + [-133.664418097999942, 55.310248114000117], + [-133.680572068999908, 55.309312242000047], + [-133.689198370999918, 55.311346747000172], + [-133.665394660999937, 55.323391018000095], + [-133.658802863999938, 55.325018622000115], + [-133.646351691999939, 55.325751044000143], + [-133.641468878999945, 55.328192450000174], + [-133.639230923999975, 55.332464911], + [-133.621449347999885, 55.354193427000055], + [-133.623361782999865, 55.361314195000105], + [-133.655669725999871, 55.372788804000052], + [-133.64273027299987, 55.382025458000115], + [-133.615061001999891, 55.390082098000065], + [-133.603871222999942, 55.39667389500012], + [-133.590443488999966, 55.417181708], + [-133.58055579299986, 55.426214911], + [-133.569691535999965, 55.424302476000136] + ] + ], + [ + [ + [-163.139027472999942, 55.403509833000058], + [-163.151682094999899, 55.396958726000079], + [-163.162587042999888, 55.398993231000091], + [-163.171945766999897, 55.404038804000137], + [-163.195057745999861, 55.412665106000034], + [-163.18818111899995, 55.425116278000147], + [-163.167917446999923, 55.436997789000102], + [-163.142770962999862, 55.441066799000154], + [-163.133127407999893, 55.432440497000144], + [-163.12938391799986, 55.423041083000115], + [-163.131418423999889, 55.413275458], + [-163.139027472999942, 55.403509833000058] + ] + ], + [ + [ + [-133.238282998999921, 55.413802715000102], + [-133.274493430999883, 55.404279945], + [-133.315196539999874, 55.40454704200009], + [-133.320269559999872, 55.423126599000099], + [-133.307276610999907, 55.432187230000167], + [-133.269250983999939, 55.443950171000083], + [-133.236056754999936, 55.440219968000164], + [-133.238282998999921, 55.413802715000102] + ] + ], + [ + [ + [-160.236927863999938, 55.449855861000046], + [-160.233591274999924, 55.447902736000074], + [-160.223825649999867, 55.449042059000121], + [-160.206288214999915, 55.454169012000037], + [-160.198841925999858, 55.455308335000055], + [-160.171131964999859, 55.453762111000017], + [-160.159901495999861, 55.449530341000113], + [-160.155384894999912, 55.441066799000154], + [-160.15986080599987, 55.426988023000106], + [-160.159413214999887, 55.412665106000034], + [-160.155100063999896, 55.398871161000116], + [-160.14793860599994, 55.386419989], + [-160.15986080599987, 55.380804755000028], + [-160.166981574999909, 55.384426174000069], + [-160.173085089999915, 55.392482815], + [-160.182077602999925, 55.400091864000146], + [-160.197214321999923, 55.404242255000085], + [-160.233713344999899, 55.409979559000149], + [-160.246937628999945, 55.417466539000131], + [-160.259470180999926, 55.422308661], + [-160.273386196999923, 55.416652736000017], + [-160.298776821999923, 55.400091864000146], + [-160.312367316999882, 55.397447007000054], + [-160.328114386999943, 55.398138739], + [-160.341135219999927, 55.404120184000121], + [-160.346547003999888, 55.417466539000131], + [-160.334095831999946, 55.443670966000141], + [-160.304758266999954, 55.458319403000147], + [-160.270578579999949, 55.46369049700003], + [-160.243519660999937, 55.462144273], + [-160.238758917999917, 55.459051825000088], + [-160.236927863999938, 55.449855861000046] + ] + ], + [ + [ + [-133.49478105399993, 55.429510809000035], + [-133.511382615999963, 55.427435614000117], + [-133.533029751999862, 55.430121161], + [-133.600453253999945, 55.447902736000074], + [-133.589751756999931, 55.463283596000039], + [-133.574289516999897, 55.469794012000122], + [-133.556304490999963, 55.474066473000121], + [-133.538400844999899, 55.48265208500014], + [-133.524728969999899, 55.499579169000029], + [-133.517689581999889, 55.514837958], + [-133.505726691999968, 55.522609768000095], + [-133.476918097999942, 55.516791083000143], + [-133.431752081999889, 55.496527411000116], + [-133.422271287999877, 55.489447333000058], + [-133.41844641799986, 55.475572007000082], + [-133.420765753999945, 55.459662177000055], + [-133.428089972999942, 55.446519273000021], + [-133.439076300999886, 55.441066799000154], + [-133.457102016999926, 55.438910223000065], + [-133.49478105399993, 55.429510809000035] + ] + ], + [ + [ + [-133.337025519999912, 55.464544989000117], + [-133.346587693999908, 55.447902736000074], + [-133.360585089999859, 55.460638739000117], + [-133.395008917999917, 55.503119208], + [-133.423980272999898, 55.518011786000059], + [-133.433176235999866, 55.527980861000131], + [-133.428537563999839, 55.54413483300003], + [-133.413644985999895, 55.553208726000108], + [-133.390614386999914, 55.557196356000176], + [-133.32445227799991, 55.556952216000141], + [-133.304798956999974, 55.553208726000108], + [-133.287424282999893, 55.5450707050001], + [-133.272084113999938, 55.530462958000086], + [-133.27196204299986, 55.511948960000055], + [-133.273426886999914, 55.500311591000141], + [-133.279042120999918, 55.491848049000012], + [-133.291371222999885, 55.48265208500014], + [-133.309152798999946, 55.47483958500014], + [-133.32445227799991, 55.471177476], + [-133.337025519999912, 55.464544989000117] + ] + ], + [ + [ + [-133.646311001999834, 55.542303778000033], + [-133.612416144999884, 55.541571356000091], + [-133.586781378999916, 55.54413483300003], + [-133.580922003999973, 55.527085679000052], + [-133.578684048999889, 55.509263413999989], + [-133.584706183999913, 55.495184637000037], + [-133.603871222999942, 55.489447333000058], + [-133.618478969999899, 55.482977606000148], + [-133.633168097999885, 55.454413153000175], + [-133.651966925999943, 55.447902736000074], + [-133.671050584999932, 55.4513207050001], + [-133.709624803999901, 55.465806382000139], + [-133.730132615999935, 55.468410549000126], + [-133.74937903599988, 55.464178778000118], + [-133.779408331999946, 55.449855861000046], + [-133.79906165299991, 55.447902736000074], + [-133.79906165299991, 55.455308335000055], + [-133.777007615999906, 55.464300848000093], + [-133.748280402999939, 55.496161200000117], + [-133.700835740999935, 55.507391669000114], + [-133.701812303999901, 55.516791083000143], + [-133.711293097999913, 55.526068427], + [-133.72020423099994, 55.532456773000106], + [-133.724517381999931, 55.531683661], + [-133.728505011999914, 55.532863674000012], + [-133.730132615999935, 55.540716864], + [-133.726714647999927, 55.546616929000137], + [-133.718739386999886, 55.551743882000054], + [-133.702870245999947, 55.557766018000152], + [-133.679351365999878, 55.547349351000079], + [-133.646311001999834, 55.542303778000033] + ] + ], + [ + [ + [-159.289621548999889, 55.767889716000028], + [-159.30211341099988, 55.759222723000121], + [-159.31810462099989, 55.767767645000148], + [-159.328602667999945, 55.778387762000094], + [-159.344715949999909, 55.783880927000112], + [-159.362294074999852, 55.786281643000066], + [-159.359852667999917, 55.798163153000118], + [-159.332834438999896, 55.812445380000113], + [-159.31273352799991, 55.811224677], + [-159.298044399999924, 55.793646552000055], + [-159.289051886999914, 55.778998114000061], + [-159.289621548999889, 55.767889716000028] + ] + ], + [ + [ + [-133.589100714999887, 55.811672268000095], + [-133.573109503999973, 55.804754950000088], + [-133.578968878999945, 55.824408270000148], + [-133.565256313999896, 55.830308335000083], + [-133.504505988999938, 55.822902736000103], + [-133.495228644999912, 55.82029857000002], + [-133.486887173999946, 55.81476471600017], + [-133.482411261999857, 55.806586005000085], + [-133.481109178999873, 55.798773505000085], + [-133.477691209999961, 55.792792059000149], + [-133.466949022999927, 55.790472723], + [-133.351673956999946, 55.787787177000112], + [-133.339751756999874, 55.790472723], + [-133.329741990999906, 55.798814195000077], + [-133.322987433999856, 55.809027411], + [-133.316029425999972, 55.811672268000095], + [-133.30565344999988, 55.797349351000108], + [-133.310047980999855, 55.78221263200011], + [-133.368234829999892, 55.758734442000147], + [-133.391590949999909, 55.746161200000145], + [-133.417876756999902, 55.73847077000012], + [-133.44859778599988, 55.750718492000104], + [-133.475575324999852, 55.771795966000028], + [-133.49058997299997, 55.790472723], + [-133.503814256999931, 55.766180731000119], + [-133.488596157999837, 55.73436107], + [-133.487172003999945, 55.706732489000089], + [-133.542103644999941, 55.694891669000029], + [-133.578684048999889, 55.704901434000092], + [-133.623850063999839, 55.72947825700011], + [-133.663238084999932, 55.760728257], + [-133.682362433999913, 55.790472723], + [-133.649322068999936, 55.788560289000046], + [-133.641428188999896, 55.790472723], + [-133.639312303999958, 55.796454169000114], + [-133.638905402999853, 55.817084052000141], + [-133.634592251999862, 55.825262762000065], + [-133.614898240999906, 55.833197333000115], + [-133.601389126999834, 55.824896552000141], + [-133.589100714999887, 55.811672268000095] + ] + ], + [ + [ + [-158.745310024999924, 55.863185940000065], + [-158.730091925999886, 55.855169989000117], + [-158.717030402999882, 55.843980210000112], + [-158.708566860999952, 55.831488348], + [-158.811227993999893, 55.859523830000015], + [-158.85838782499988, 55.862982489000117], + [-158.887318488999881, 55.831488348], + [-158.87474524599989, 55.827948309000035], + [-158.861765102999897, 55.825832424000012], + [-158.851144985999952, 55.821437893000123], + [-158.845773891999897, 55.810980536000059], + [-158.866281704999949, 55.80573151200015], + [-158.883778449999909, 55.805243231000176], + [-158.897653774999867, 55.811346747000172], + [-158.907175258999871, 55.825262762000065], + [-158.908680792999917, 55.841294664000046], + [-158.897328253999859, 55.860581773000078], + [-158.900339321999951, 55.873724677000141], + [-158.853749152999939, 55.890936591000141], + [-158.828114386999886, 55.896714585000112], + [-158.791737433999913, 55.890285549000012], + [-158.77684485599994, 55.880926825000145], + [-158.760365363999881, 55.86627838700015], + [-158.745310024999924, 55.863185940000065] + ] + ], + [ + [ + [-133.26463782499988, 55.86627838700015], + [-133.254058397999927, 55.864203192000119], + [-133.228911912999934, 55.87128327], + [-133.216867641999926, 55.86627838700015], + [-133.220366990999935, 55.822455145], + [-133.223703579999835, 55.810980536000059], + [-133.235910610999923, 55.785711981000091], + [-133.240467902999853, 55.779974677000112], + [-133.250803188999896, 55.775946356000148], + [-133.259103969999842, 55.780259507000054], + [-133.266713019999884, 55.787014065], + [-133.275217251999919, 55.790472723], + [-133.283355272999927, 55.795965887000037], + [-133.302845831999946, 55.819810289000102], + [-133.316151495999947, 55.825262762000065], + [-133.324289516999869, 55.826727606000119], + [-133.334299282999837, 55.830877997000144], + [-133.341175910999937, 55.83734772300015], + [-133.339751756999874, 55.845770575000088], + [-133.332020636999886, 55.847479559000092], + [-133.291371222999885, 55.851996161000059], + [-133.318999803999873, 55.860541083000086], + [-133.330555792999917, 55.868312893000095], + [-133.332915818999965, 55.87986888200011], + [-133.325835740999906, 55.881415106000148], + [-133.291615363999938, 55.902004299000097], + [-133.285145636999914, 55.907171942], + [-133.267404751999834, 55.902167059000149], + [-133.266713019999884, 55.891669012000179], + [-133.270130988999881, 55.878729559000178], + [-133.26463782499988, 55.86627838700015] + ] + ], + [ + [ + [-155.570383266999897, 55.783026434000121], + [-155.597264121999956, 55.760431424000117], + [-155.629900349999957, 55.762901507000137], + [-155.663692559999845, 55.774462847000066], + [-155.697388269999919, 55.771345854000103], + [-155.718693372999894, 55.774851075000029], + [-155.728016730999911, 55.804754950000088], + [-155.749848675999914, 55.817680173999989], + [-155.741647915999948, 55.831488348], + [-155.701257952999924, 55.841336773000151], + [-155.663418954999855, 55.856008120000112], + [-155.652333136999914, 55.886664130000142], + [-155.652292446999923, 55.886704820000134], + [-155.635324673999861, 55.905747789000131], + [-155.59996916399993, 55.914813918], + [-155.556101040999891, 55.914618231000148], + [-155.557240363999938, 55.895209052000055], + [-155.569040493999921, 55.868801174000069], + [-155.570383266999897, 55.851996161000059], + [-155.55805416599992, 55.817572333000115], + [-155.557240363999938, 55.800482489000089], + [-155.570383266999897, 55.783026434000121] + ] + ], + [ + [ + [-134.244130011999914, 55.920843817000119], + [-134.257923956999889, 55.899888413999989], + [-134.234852667999945, 55.899969794000143], + [-134.179269985999895, 55.914618231000148], + [-134.122059699999937, 55.923732815000065], + [-134.101551886999914, 55.920803127000127], + [-134.114369269999941, 55.900336005000085], + [-134.153187628999945, 55.893622137000037], + [-134.19595292899993, 55.873358466000028], + [-134.233876105999855, 55.846136786000116], + [-134.258412238999881, 55.818426825000031], + [-134.276275193999936, 55.828802802000112], + [-134.318430141999897, 55.833807684000149], + [-134.326649542999917, 55.848822333], + [-134.318430141999897, 55.857855536], + [-134.264556443999965, 55.873724677000141], + [-134.279164191999882, 55.882147528000175], + [-134.334787563999896, 55.895086981000091], + [-134.347157355999855, 55.910956122000115], + [-134.332183397999927, 55.922512111000131], + [-134.298695441999968, 55.926499742000104], + [-134.263579881999902, 55.925238348], + [-134.244130011999914, 55.920843817000119] + ] + ], + [ + [ + [-133.842518683999941, 55.866359768000123], + [-133.871652798999889, 55.846747137000179], + [-133.912668423999889, 55.862779039000074], + [-133.921376105999911, 55.87433502800009], + [-133.931711391999897, 55.89398834800015], + [-133.93423417899993, 55.912583726000136], + [-133.919504360999923, 55.920843817000119], + [-133.877308722999885, 55.938055731000063], + [-133.856027798999918, 55.94228750200007], + [-133.832183397999927, 55.90058014500012], + [-133.842518683999941, 55.866359768000123] + ] + ], + [ + [ + [-131.208892381999931, 55.944891669000143], + [-131.179554816999911, 55.923529364], + [-131.044422980999883, 55.790472723], + [-131.046131964999887, 55.76658763200011], + [-131.02281653599988, 55.742865302000112], + [-130.968739386999914, 55.701117255000085], + [-130.966908331999917, 55.694159247000087], + [-130.968576626999834, 55.678127346000011], + [-130.965321417999888, 55.671047268000123], + [-130.938303188999839, 55.651516018000152], + [-130.934559699999909, 55.643133856000091], + [-130.938221808999856, 55.624212958000086], + [-130.955555792999945, 55.60049062700007], + [-130.96190344999988, 55.585109768000123], + [-130.945790167999917, 55.582749742000075], + [-130.943714972999885, 55.572699286], + [-130.954172329999892, 55.565619208000143], + [-130.975575324999909, 55.572007554000052], + [-130.974924282999865, 55.534572658000016], + [-130.977284308999913, 55.515936591000028], + [-130.983021613999881, 55.503119208], + [-130.978749152999882, 55.493312893000066], + [-130.979237433999856, 55.485541083000058], + [-130.981556769999941, 55.477036851000136], + [-130.983021613999881, 55.465277411000059], + [-130.971831834999875, 55.443589585000083], + [-130.968739386999914, 55.43488190300009], + [-130.967152472999942, 55.423773505000057], + [-130.968739386999914, 55.39667389500012], + [-130.971669074999909, 55.385239976], + [-130.978179490999906, 55.387640692000119], + [-130.989165818999965, 55.400091864000146], + [-131.005034959999904, 55.413397528000147], + [-131.015126105999855, 55.417181708], + [-131.02708899599989, 55.410345770000063], + [-131.03099524599989, 55.400458075000145], + [-131.027251756999931, 55.391058661000116], + [-131.020985480999911, 55.382025458000115], + [-131.017160610999895, 55.372788804000052], + [-131.018381313999896, 55.35431549700003], + [-131.025257941999911, 55.342352606000091], + [-131.03490149599989, 55.330267645], + [-131.044422980999883, 55.311346747000172], + [-131.05565344999988, 55.273586330000015], + [-131.065174933999884, 55.261053778000118], + [-131.085438605999911, 55.248683986000074], + [-131.106312628999945, 55.238918361000131], + [-131.116525844999899, 55.236395575000031], + [-131.130116339999944, 55.235581773000106], + [-131.137603318999936, 55.23139069200009], + [-131.140533006999931, 55.221625067000147], + [-131.142648891999841, 55.210272528000175], + [-131.147531704999921, 55.201483466000113], + [-131.192005988999938, 55.185736395000148], + [-131.232736782999893, 55.200913804000137], + [-131.271717902999882, 55.225002346000068], + [-131.311390753999888, 55.235581773000106], + [-131.256255662999934, 55.270575262000122], + [-131.234771287999934, 55.290961005], + [-131.215728318999936, 55.317572333000143], + [-131.213734503999888, 55.323065497000172], + [-131.208322719999842, 55.345445054], + [-131.204986131999931, 55.349920966000141], + [-131.20051021999987, 55.353745835000083], + [-131.196400519999912, 55.359442450000145], + [-131.194691535999908, 55.369370835000055], + [-131.195423956999946, 55.387355861000103], + [-131.199533657999893, 55.399725653000033], + [-131.20995032499988, 55.406317450000088], + [-131.229400193999965, 55.406927802000055], + [-131.221994594999899, 55.393255927000112], + [-131.243967251999891, 55.393744208000115], + [-131.268706834999875, 55.386175848000065], + [-131.283070441999939, 55.371079820000048], + [-131.273793097999885, 55.348863023000021], + [-131.261708136999914, 55.328802802000141], + [-131.263824022999927, 55.30939362200003], + [-131.277007615999935, 55.291693427000112], + [-131.298329230999911, 55.276556708000115], + [-131.324208136999914, 55.267075914000131], + [-131.352772589999915, 55.263251044000114], + [-131.404164191999939, 55.262925523], + [-131.427357550999943, 55.267035223000121], + [-131.45055091099988, 55.277899481000119], + [-131.463205532999865, 55.293402411000116], + [-131.454741990999935, 55.311346747000172], + [-131.43187415299991, 55.320013739000089], + [-131.404855923999946, 55.322902736000017], + [-131.3822322259999, 55.32941315300009], + [-131.37279212099989, 55.348863023000021], + [-131.371245897999927, 55.361151434000149], + [-131.366444464999859, 55.371079820000048], + [-131.358062303999901, 55.377834377000099], + [-131.345814581999946, 55.38027578300013], + [-131.329660610999895, 55.381415106000148], + [-131.322621222999885, 55.384955145000148], + [-131.311390753999888, 55.400091864000146], + [-131.278187628999973, 55.430243231000148], + [-131.270741339999915, 55.447333075000117], + [-131.280913865999935, 55.465277411000059], + [-131.283680792999917, 55.472154039000074], + [-131.293365037999962, 55.514553127000156], + [-131.299305792999917, 55.525336005000057], + [-131.330637173999946, 55.568548895000063], + [-131.336903449999909, 55.579657294000086], + [-131.343576626999862, 55.630275783000073], + [-131.350819464999859, 55.645575262000037], + [-131.363189256999931, 55.643133856000091], + [-131.371693488999938, 55.618638414000074], + [-131.365223761999943, 55.587307033000016], + [-131.327951626999891, 55.502752997000087], + [-131.321929490999935, 55.475083726], + [-131.325428839999944, 55.446763414000046], + [-131.342396613999938, 55.417466539000131], + [-131.349720831999946, 55.410142320000105], + [-131.37279212099989, 55.393255927000112], + [-131.380034959999932, 55.385728257000082], + [-131.394520636999857, 55.365952867000047], + [-131.409291144999941, 55.352199611000046], + [-131.424631313999896, 55.344061591000113], + [-131.462147589999915, 55.331854559000035], + [-131.452748175999972, 55.343451239000146], + [-131.426625128999945, 55.363999742000019], + [-131.421254035999965, 55.376532294000086], + [-131.426625128999945, 55.392279364000146], + [-131.439035610999866, 55.405422268], + [-131.452748175999972, 55.416896877000156], + [-131.462147589999915, 55.427435614000117], + [-131.46898352799991, 55.458685614000089], + [-131.458404100999871, 55.48371002800009], + [-131.421254035999965, 55.530462958000086], + [-131.437896287999934, 55.530585028000061], + [-131.463368292999917, 55.523260809000035], + [-131.489003058999913, 55.511786200000088], + [-131.50649980399993, 55.499416408000158], + [-131.516957160999937, 55.480047919000057], + [-131.516184048999889, 55.46002838700015], + [-131.50804602799991, 55.440130927000084], + [-131.49632727799991, 55.421210028000147], + [-131.469105597999885, 55.389634507000054], + [-131.465687628999888, 55.372259833000086], + [-131.479562954999892, 55.348863023000021], + [-131.508859829999892, 55.311712958], + [-131.526478644999941, 55.299383856000148], + [-131.551584438999896, 55.297064520000092], + [-131.573109503999945, 55.305243231000091], + [-131.616037563999896, 55.332709052000141], + [-131.661529100999957, 55.343207098], + [-131.685292120999861, 55.35431549700003], + [-131.722889777999853, 55.38027578300013], + [-131.725209113999938, 55.38353099199999], + [-131.731312628999916, 55.394924221000124], + [-131.735910610999866, 55.400091864000146], + [-131.786610480999911, 55.427313544000143], + [-131.808501756999931, 55.444484768000066], + [-131.820220506999931, 55.463812567], + [-131.810292120999918, 55.476629950000031], + [-131.717844204999835, 55.517971096000068], + [-131.705799933999913, 55.527044989000061], + [-131.688872850999928, 55.54295482], + [-131.678089972999942, 55.54962799700003], + [-131.667307094999927, 55.550767320000077], + [-131.650542772999927, 55.550279038999989], + [-131.644520636999914, 55.557074286000116], + [-131.61978105399993, 55.595282294000171], + [-131.630482550999943, 55.604396877000156], + [-131.681467251999862, 55.610541083000143], + [-131.698963995999918, 55.616115627000156], + [-131.707427537999934, 55.629624742000132], + [-131.708485480999911, 55.645453192000062], + [-131.703928188999868, 55.661118882000139], + [-131.69554602799991, 55.674465236000131], + [-131.691395636999857, 55.679510809000178], + [-131.686879035999908, 55.683905341000141], + [-131.680734829999921, 55.68695709800015], + [-131.671294725999928, 55.688137111000074], + [-131.635161912999962, 55.68695709800015], + [-131.627308722999885, 55.688137111000074], + [-131.625559048999889, 55.693589585000112], + [-131.626128709999961, 55.712103583000143], + [-131.623605923999946, 55.719142971000011], + [-131.614654100999928, 55.72370026200015], + [-131.606556769999884, 55.721625067000119], + [-131.599232550999972, 55.717352606000119], + [-131.592518683999941, 55.715399481000176], + [-131.534982876999862, 55.723089911], + [-131.517445441999911, 55.729071356000119], + [-131.517445441999911, 55.736517645000092], + [-131.533355272999927, 55.736965236000074], + [-131.578846808999913, 55.729071356000119], + [-131.62905839799987, 55.734035549000154], + [-131.647124803999901, 55.729071356000119], + [-131.69176184799997, 55.70526764500012], + [-131.704579230999911, 55.70970286699999], + [-131.70921790299991, 55.739650783000158], + [-131.695423956999917, 55.751613674000097], + [-131.663929816999911, 55.761216539000074], + [-131.629302537999934, 55.767726955000157], + [-131.512847459999875, 55.774725653000061], + [-131.482655402999853, 55.783026434000121], + [-131.490345831999974, 55.79242584800015], + [-131.512766079999892, 55.800279039000131], + [-131.517445441999911, 55.807928778000147], + [-131.521595831999946, 55.819159247000144], + [-131.530751105999911, 55.825751044000029], + [-131.539947068999908, 55.825100002000099], + [-131.544097459999932, 55.81476471600017], + [-131.554351365999963, 55.798773505000085], + [-131.578439907999893, 55.792547919000029], + [-131.606109178999901, 55.789536851000108], + [-131.627308722999885, 55.783026434000121], + [-131.644357876999834, 55.793402411000116], + [-131.678456183999941, 55.799221096000068], + [-131.688710089999887, 55.810980536000059], + [-131.68773352799991, 55.83197663], + [-131.670643683999856, 55.839504299000154], + [-131.470366990999906, 55.83197663], + [-131.435454881999874, 55.845770575000088], + [-131.457386847999913, 55.851955471000068], + [-131.53449459499987, 55.851996161000059], + [-131.546294725999928, 55.858791408000101], + [-131.560047980999855, 55.874741929], + [-131.572132941999939, 55.893215236000017], + [-131.578846808999913, 55.907171942], + [-131.515736456999889, 55.909613348000121], + [-131.49632727799991, 55.914618231000148], + [-131.487660285999908, 55.91925690300009], + [-131.471058722999942, 55.930975653000175], + [-131.462147589999915, 55.934515692000062], + [-131.446848110999838, 55.93545156500015], + [-131.404164191999939, 55.928290106000091], + [-131.365223761999943, 55.937160549000154], + [-131.323597785999965, 55.954250393], + [-131.280262824999909, 55.96515534100017], + [-131.236236131999874, 55.955633856000176], + [-131.208892381999931, 55.944891669000143] + ] + ], + [ + [ + [-156.67804928299995, 56.041489976000108], + [-156.680409308999913, 56.039007880000085], + [-156.680531378999888, 56.036932684000149], + [-156.677357550999915, 56.033596096000124], + [-156.678212042999917, 56.030462958000058], + [-156.680856899999895, 56.024155992000104], + [-156.681752081999889, 56.01951732], + [-156.680734829999921, 56.018052476000136], + [-156.680043097999885, 56.01666901200015], + [-156.683664516999954, 56.012437242000132], + [-156.694935675999943, 56.009344794000143], + [-156.706369594999899, 56.014227606000119], + [-156.71812903599988, 56.021673895], + [-156.73407955599987, 56.026190497000144], + [-156.746164516999897, 56.034898179000137], + [-156.744943813999868, 56.040920315000122], + [-156.734730597999942, 56.039984442000062], + [-156.725168423999946, 56.041327216000141], + [-156.716867641999869, 56.044501044000114], + [-156.709787563999896, 56.051092841000084], + [-156.70763098899991, 56.061021226], + [-156.701283331999889, 56.066148179000024], + [-156.69013424399995, 56.060451565000122], + [-156.678903774999952, 56.04596588700015], + [-156.67804928299995, 56.041489976000108] + ] + ], + [ + [ + [-133.392689581999946, 56.16046784100017], + [-133.3431697259999, 56.147406317], + [-133.302601691999882, 56.150824286], + [-133.28530839799987, 56.147202867000047], + [-133.285145636999914, 56.133124091000113], + [-133.308827277999939, 56.103013414000074], + [-133.313099738999938, 56.092189846000068], + [-133.311919725999928, 56.079901434000121], + [-133.301380988999966, 56.06386953300013], + [-133.298736131999874, 56.054632880000057], + [-133.297759568999908, 56.032945054], + [-133.299549933999913, 56.012030341000028], + [-133.31114661399991, 55.997870184000092], + [-133.339751756999874, 55.996568101000108], + [-133.358265753999888, 56.006170966000084], + [-133.376047329999892, 56.019964911], + [-133.395497199999909, 56.02635325700011], + [-133.439686652999853, 56.00267161699999], + [-133.470326300999943, 56.017279364000032], + [-133.49058997299997, 56.010199286000145], + [-133.510812954999892, 55.987941799000012], + [-133.517893032999865, 55.982326565], + [-133.560047980999911, 55.970892645000148], + [-133.589751756999931, 55.955755927000055], + [-133.62954667899993, 55.959418036], + [-133.641428188999896, 55.948187567], + [-133.638498501999862, 55.937933661000088], + [-133.618153449999852, 55.928045966000141], + [-133.620961066999911, 55.920843817000119], + [-133.630970831999889, 55.918646552000141], + [-133.678618943999965, 55.914618231000148], + [-133.691395636999914, 55.911118882000082], + [-133.697377081999917, 55.904974677], + [-133.702707485999895, 55.902777411000031], + [-133.72288977799991, 55.917710679000052], + [-133.732289191999939, 55.919826565000065], + [-133.758127407999893, 55.920843817000119], + [-133.794911261999857, 55.943589585000055], + [-133.771066860999895, 55.980454820000134], + [-133.689198370999918, 56.043768622000172], + [-133.684559699999909, 56.05353424700003], + [-133.684559699999909, 56.062486070000048], + [-133.680978969999899, 56.069159247000115], + [-133.607289191999968, 56.078517971000124], + [-133.541574673999975, 56.074774481000091], + [-133.509592251999891, 56.078111070000134], + [-133.483143683999913, 56.092189846000068], + [-133.513539191999968, 56.097357489000089], + [-133.596506313999868, 56.10097890800013], + [-133.620961066999911, 56.112616278000147], + [-133.617014126999919, 56.131537177000084], + [-133.580637173999946, 56.131903387000179], + [-133.507964647999955, 56.11945221600017], + [-133.494943813999896, 56.120672919000086], + [-133.479074673999946, 56.124212958000058], + [-133.463856574999852, 56.129624742000104], + [-133.442290818999936, 56.143011786000116], + [-133.415760870999918, 56.150783596000011], + [-133.40489661399991, 56.157375393000095], + [-133.392689581999946, 56.16046784100017] + ] + ], + [ + [ + [-156.774525519999941, 56.153225002000156], + [-156.792062954999864, 56.153021552], + [-156.80528723899991, 56.16478099199999], + [-156.809396938999953, 56.17890045800003], + [-156.809315558999856, 56.190130927000112], + [-156.806874152999939, 56.19733307500006], + [-156.802479620999947, 56.200669664000074], + [-156.799631313999896, 56.205511786000145], + [-156.799427863999881, 56.211737372000115], + [-156.792591925999943, 56.220689195000134], + [-156.778309699999852, 56.226711330000128], + [-156.774403449999852, 56.224188544000029], + [-156.780140753999916, 56.217922268000066], + [-156.783395962999862, 56.209051825000031], + [-156.78388424399995, 56.198716539000131], + [-156.779896613999881, 56.18964264500012], + [-156.766672329999949, 56.178534247000087], + [-156.766550258999871, 56.167669989], + [-156.774525519999941, 56.153225002000156] + ] + ], + [ + [ + [-132.483794725999871, 56.194566148], + [-132.457630988999938, 56.186672268], + [-132.429554816999939, 56.186753648], + [-132.403675910999937, 56.19354889500012], + [-132.359445766999841, 56.217922268000066], + [-132.338246222999942, 56.212103583000115], + [-132.316802537999934, 56.198716539000131], + [-132.291371222999913, 56.188381252000013], + [-132.223378058999941, 56.18349844000015], + [-132.192128058999884, 56.176581122000144], + [-132.164458787999877, 56.157375393000095], + [-132.148182745999947, 56.143011786000116], + [-132.092193162999905, 56.106431382000082], + [-132.096302863999938, 56.099432684000092], + [-132.101144985999923, 56.093654690000122], + [-132.106841600999928, 56.088812567000062], + [-132.113880988999881, 56.084662177000112], + [-132.130034959999932, 56.093817450000088], + [-132.137074347999913, 56.08808014500012], + [-132.141753709999932, 56.077460028000175], + [-132.151193813999839, 56.071682033000016], + [-132.163563605999883, 56.074774481000091], + [-132.188384568999936, 56.088609117000104], + [-132.202015753999973, 56.092189846000068], + [-132.196278449999909, 56.077866929], + [-132.175770636999857, 56.063055731000119], + [-132.167876756999874, 56.051214911000059], + [-132.172189907999893, 56.049546617000047], + [-132.182199673999946, 56.043768622000172], + [-132.169097459999904, 56.036810614], + [-132.160023566999911, 56.02728913], + [-132.153228318999965, 56.015814520000148], + [-132.147450324999909, 56.002752997000172], + [-132.150705532999865, 55.999090887000122], + [-132.152333136999886, 55.996527411000116], + [-132.154896613999881, 55.989732163999989], + [-132.129465298999975, 55.970282294000086], + [-132.122629360999866, 55.94550202000012], + [-132.13345292899993, 55.929022528000033], + [-132.161040818999965, 55.934515692000062], + [-132.168120897999927, 55.943019924000097], + [-132.177561001999834, 55.964829820000048], + [-132.185292120999947, 55.969305731000119], + [-132.191517706999917, 55.964300848000065], + [-132.211822068999936, 55.941392320000077], + [-132.223133917999917, 55.934515692000062], + [-132.236683722999942, 55.93349844], + [-132.245187954999892, 55.935492255000142], + [-132.252105272999898, 55.936265367000075], + [-132.271555141999897, 55.925238348], + [-132.286691860999895, 55.919378973000065], + [-132.30337480399993, 55.91535065300009], + [-132.31871497299997, 55.914618231000148], + [-132.335560675999972, 55.91819896000014], + [-132.34508216099988, 55.924302476000136], + [-132.363392706999946, 55.944769598000093], + [-132.379994269999884, 55.952337958000143], + [-132.416818813999896, 55.957831122000172], + [-132.428578253999945, 55.969305731000119], + [-132.412261522999927, 55.998114325000145], + [-132.404652472999885, 56.002752997000172], + [-132.392404751999834, 56.005845445000048], + [-132.384429490999963, 56.013413804000109], + [-132.382313605999855, 56.022609768000066], + [-132.387603318999936, 56.030707098], + [-132.41421464799987, 56.03510163], + [-132.444732225999928, 56.031927802000112], + [-132.462066209999904, 56.036688544000029], + [-132.449086066999911, 56.064846096000011], + [-132.558949347999885, 56.071682033000016], + [-132.570057745999918, 56.075018622000144], + [-132.581654425999943, 56.081610419000029], + [-132.593861456999889, 56.086574611000074], + [-132.606760219999899, 56.084662177000112], + [-132.612538214999887, 56.076971747000087], + [-132.613514777999853, 56.066555080000015], + [-132.616281704999921, 56.056870835000055], + [-132.62718665299991, 56.051214911000059], + [-132.645415818999965, 56.058091539000074], + [-132.676625128999945, 56.097235419000114], + [-132.692372199999909, 56.106431382000082], + [-132.704986131999874, 56.11741771000014], + [-132.713205532999893, 56.139797268000152], + [-132.711740688999924, 56.157171942000119], + [-132.695464647999898, 56.153631903000147], + [-132.693104620999918, 56.175523179], + [-132.687367316999939, 56.195379950000088], + [-132.687489386999914, 56.211615302000141], + [-132.702951626999862, 56.222479559000121], + [-132.681385870999947, 56.229193427000084], + [-132.603342251999891, 56.236151434000149], + [-132.589670376999891, 56.24681224199999], + [-132.566029425999943, 56.29376862200003], + [-132.548410610999923, 56.304429429000052], + [-132.541127081999889, 56.308783270000148], + [-132.537993943999936, 56.318915106000091], + [-132.53579667899993, 56.330511786000116], + [-132.530995245999947, 56.339178778000118], + [-132.521148240999935, 56.343207098000093], + [-132.427479620999918, 56.352199611000103], + [-132.399769660999937, 56.350409247000115], + [-132.393869594999899, 56.339178778000118], + [-132.385324673999946, 56.332180080000128], + [-132.380686001999834, 56.321519273000106], + [-132.380970831999946, 56.30951569200009], + [-132.387603318999936, 56.298244533000101], + [-132.377512173999946, 56.284572658000158], + [-132.376942511999914, 56.271633205000128], + [-132.385121222999913, 56.261786200000031], + [-132.401275193999965, 56.257269598000065], + [-132.38695227799991, 56.247707424000097], + [-132.389963344999899, 56.235500393], + [-132.402007615999906, 56.224025783000158], + [-132.414906378999916, 56.216294664000046], + [-132.470529751999834, 56.20404694200009], + [-132.483794725999871, 56.194566148] + ] + ], + [ + [ + [-133.586781378999916, 56.352850653000147], + [-133.439076300999886, 56.332342841000084], + [-133.341542120999861, 56.33344147300015], + [-133.313099738999938, 56.325588283000158], + [-133.313099738999938, 56.318752346000124], + [-133.330067511999914, 56.307033596000153], + [-133.328480597999885, 56.289007880000113], + [-133.312245245999947, 56.27724844000015], + [-133.285145636999914, 56.283921617000104], + [-133.289947068999908, 56.285142320000105], + [-133.293609178999958, 56.287095445000077], + [-133.296701626999862, 56.289618231000176], + [-133.299387173999946, 56.292547919000114], + [-133.294097459999932, 56.31378815300009], + [-133.25841223899991, 56.32737864800005], + [-133.213856574999909, 56.33344147300015], + [-133.18211829299986, 56.332342841000084], + [-133.167225714999915, 56.325181382000054], + [-133.151600714999915, 56.312811591000028], + [-133.139312303999873, 56.299017645], + [-133.134348110999923, 56.287339585000112], + [-133.136463995999918, 56.280829169000029], + [-133.140004035999908, 56.272935289000046], + [-133.140614386999857, 56.266302802000084], + [-133.134022589999915, 56.263495184000035], + [-133.126535610999838, 56.262274481000119], + [-133.105213995999861, 56.255926825000174], + [-133.095326300999943, 56.25071849199999], + [-133.068511522999955, 56.247544664000131], + [-133.058583136999857, 56.242987372000172], + [-133.053863084999932, 56.234442450000145], + [-133.053578253999916, 56.226263739000146], + [-133.054188605999883, 56.217922268000066], + [-133.052357550999886, 56.208889065000065], + [-133.053456183999941, 56.206610419000086], + [-133.056507941999939, 56.203192450000088], + [-133.058990037999962, 56.199042059000064], + [-133.058583136999857, 56.194566148], + [-133.053700324999909, 56.190741278000147], + [-133.040272589999915, 56.187811591000141], + [-133.035023566999911, 56.184963283000016], + [-133.030506964999859, 56.180121161000116], + [-133.024891730999855, 56.1720238300001], + [-133.024281378999888, 56.164455471000153], + [-133.035023566999911, 56.161078192000119], + [-133.0462947259999, 56.154242255000113], + [-133.065012173999946, 56.122503973000065], + [-133.072865363999938, 56.112616278000147], + [-133.092925584999904, 56.109320380000113], + [-133.123850063999839, 56.124497789000102], + [-133.140492316999882, 56.11945221600017], + [-133.092640753999973, 56.069159247000115], + [-133.079090949999909, 56.058050848000065], + [-133.062814907999893, 56.052313544000114], + [-133.048695441999939, 56.052801825000088], + [-133.018218553999901, 56.058050848000065], + [-133.000965949999909, 56.056789455000072], + [-132.956166144999941, 56.043768622000172], + [-132.955189581999974, 56.053859768000152], + [-132.95132402299987, 56.061712958000115], + [-132.9447322259999, 56.067613023000078], + [-132.935658331999889, 56.071682033000016], + [-132.918527798999946, 56.065904039000074], + [-132.91234290299991, 56.057766018000123], + [-132.909331834999904, 56.048000393], + [-132.898264126999862, 56.032171942000062], + [-132.898508266999897, 56.028062242000104], + [-132.895863410999908, 56.025458075000117], + [-132.875721808999884, 56.024644273000106], + [-132.869048631999931, 56.025702216000141], + [-132.863107876999891, 56.028509833000115], + [-132.856556769999912, 56.034125067000033], + [-132.842437303999873, 56.039048570000077], + [-132.827870245999947, 56.032375393000038], + [-132.814076300999943, 56.022284247000144], + [-132.802235480999883, 56.017035223000065], + [-132.789051886999914, 56.014715887000094], + [-132.736439581999889, 55.996568101000108], + [-132.715199347999942, 55.980780341000141], + [-132.693959113999938, 55.960109768000123], + [-132.670969204999864, 55.942124742000104], + [-132.633127407999922, 55.931708075000117], + [-132.620716925999886, 55.924383856000119], + [-132.610829230999883, 55.914496161], + [-132.606760219999899, 55.903753973000093], + [-132.600453253999973, 55.893377997000087], + [-132.569732225999871, 55.8829613300001], + [-132.558338995999918, 55.873724677000141], + [-132.565785285999908, 55.86627838700015], + [-132.531727667999888, 55.848537502000156], + [-132.508412238999881, 55.827622789000102], + [-132.462717251999862, 55.776841539000046], + [-132.472808397999927, 55.763576565000122], + [-132.468495245999918, 55.750637111000017], + [-132.457875128999973, 55.73729075700011], + [-132.449086066999911, 55.722845770000148], + [-132.445423956999946, 55.706122137000122], + [-132.447132941999939, 55.694037177000112], + [-132.462717251999862, 55.667629299000126], + [-132.448638475999928, 55.663234768000152], + [-132.438791469999899, 55.654689846000124], + [-132.433908657999922, 55.642401434000149], + [-132.434803839999915, 55.626654364000032], + [-132.425852016999897, 55.633978583000115], + [-132.393706834999932, 55.668402411000145], + [-132.3705134759999, 55.667629299000126], + [-132.365549282999837, 55.664374091000084], + [-132.349964972999942, 55.648586330000128], + [-132.346669074999909, 55.643133856000091], + [-132.345366990999906, 55.620062567000119], + [-132.343129035999937, 55.613470770000063], + [-132.339222785999937, 55.605536200000088], + [-132.297108527999882, 55.54706452000012], + [-132.287709113999938, 55.537298895000092], + [-132.236398891999926, 55.53701406500015], + [-132.214833136999914, 55.53119538], + [-132.157582160999965, 55.496730861000074], + [-132.145497199999852, 55.483058986000131], + [-132.140614386999914, 55.465277411000059], + [-132.150502081999889, 55.44940827000012], + [-132.173207160999937, 55.452826239000146], + [-132.216297980999883, 55.475816148000106], + [-132.25047766799986, 55.503119208], + [-132.29625403599988, 55.513576565000093], + [-132.333851691999968, 55.532294012000065], + [-132.405344204999835, 55.541205145000092], + [-132.434803839999915, 55.550279038999989], + [-132.491037563999896, 55.60370514500012], + [-132.523508266999897, 55.62523021000014], + [-132.552113410999965, 55.619208075000031], + [-132.544300910999965, 55.614935614000117], + [-132.539377407999893, 55.61017487200003], + [-132.530995245999947, 55.598700262000179], + [-132.54320227799991, 55.597235419000029], + [-132.552601691999939, 55.59105052300005], + [-132.559925910999937, 55.582098700000031], + [-132.565785285999908, 55.572007554000052], + [-132.550119594999927, 55.571478583000086], + [-132.528187628999888, 55.567328192000147], + [-132.512196417999917, 55.559271552000027], + [-132.514515753999945, 55.547186591000113], + [-132.562001105999883, 55.506252346000068], + [-132.591135219999842, 55.492865302000084], + [-132.659820115999935, 55.47565338700015], + [-132.681792772999955, 55.455308335000055], + [-132.666656053999958, 55.45107656500015], + [-132.654652472999942, 55.444891669000171], + [-132.649322068999965, 55.435492255000057], + [-132.654530402999853, 55.421210028000147], + [-132.642445441999939, 55.432928778000061], + [-132.63109290299991, 55.446437893000038], + [-132.617014126999834, 55.457505601000051], + [-132.555246548999946, 55.468410549000126], + [-132.546864386999886, 55.472601630000057], + [-132.544911261999914, 55.482082424000069], + [-132.54466712099989, 55.491400458000115], + [-132.541574673999889, 55.495672919000029], + [-132.534413214999859, 55.497626044000171], + [-132.519113735999895, 55.506659247000172], + [-132.511138475999928, 55.509344794000143], + [-132.501088019999969, 55.509588934000092], + [-132.495961066999939, 55.507757880000113], + [-132.491607225999871, 55.505072333000143], + [-132.483794725999871, 55.503119208], + [-132.464955206999946, 55.502183335000112], + [-132.443226691999939, 55.503566799000097], + [-132.42121334499987, 55.508002020000063], + [-132.401275193999965, 55.516791083000143], + [-132.383900519999884, 55.500392971000124], + [-132.37523352799991, 55.484767971000153], + [-132.361561652999853, 55.47296784100017], + [-132.302601691999911, 55.463568427000055], + [-132.276926235999838, 55.452704169000171], + [-132.267974412999934, 55.44135163], + [-132.291371222999913, 55.43488190300009], + [-132.305531378999945, 55.436835028000033], + [-132.324086066999939, 55.447088934000149], + [-132.339222785999937, 55.447902736000074], + [-132.350453253999945, 55.443670966000141], + [-132.358509894999969, 55.43675364800005], + [-132.368072068999936, 55.430243231000148], + [-132.383900519999884, 55.427435614000117], + [-132.441314256999902, 55.42706940300009], + [-132.469553188999896, 55.42129140800013], + [-132.483794725999871, 55.406927802000055], + [-132.478260870999861, 55.390570380000142], + [-132.456776495999918, 55.394842841000141], + [-132.4115291009999, 55.413763739000089], + [-132.400990363999938, 55.411525783000101], + [-132.388579881999931, 55.40570709800015], + [-132.37828528599988, 55.397935289000046], + [-132.369943813999924, 55.381170966000028], + [-132.360910610999895, 55.383246161000145], + [-132.346669074999909, 55.393255927000112], + [-132.341135219999899, 55.395819403000033], + [-132.332102016999897, 55.403631903000033], + [-132.32555091099988, 55.406927802000055], + [-132.324615037999934, 55.405991929000081], + [-132.250111456999946, 55.413763739000089], + [-132.242746548999946, 55.409165757000139], + [-132.212880011999857, 55.376532294000086], + [-132.200998501999919, 55.369208075000088], + [-132.188059048999918, 55.368312893], + [-132.174549933999941, 55.368841864000089], + [-132.161040818999965, 55.365952867000047], + [-132.154896613999881, 55.365952867000047], + [-132.159006313999839, 55.356024481000034], + [-132.161040818999965, 55.352280992000104], + [-132.150298631999931, 55.346380927000084], + [-132.145659959999932, 55.33722565300009], + [-132.143950975999928, 55.325018622000115], + [-132.132883266999897, 55.323065497000172], + [-132.124256964999887, 55.318019924000126], + [-132.121205206999974, 55.311224677000112], + [-132.126942511999857, 55.303900458], + [-132.102609829999892, 55.28803131700009], + [-132.090728318999936, 55.276800848000065], + [-132.095285610999895, 55.267075914000131], + [-132.120106574999937, 55.256089585000083], + [-132.148182745999947, 55.248602606000091], + [-132.179676886999857, 55.245062567000119], + [-132.212147589999944, 55.247137762000037], + [-132.243031378999888, 55.256089585000083], + [-132.236317511999943, 55.244940497000144], + [-132.241566535999937, 55.234076239000061], + [-132.249379035999937, 55.222235419000114], + [-132.25047766799986, 55.208319403000033], + [-132.240223761999943, 55.197211005], + [-132.226389126999834, 55.194281317000062], + [-132.217762824999937, 55.198431708000115], + [-132.223133917999917, 55.208319403000033], + [-132.203114386999914, 55.229193427], + [-132.172474738999938, 55.225002346000068], + [-132.113880988999881, 55.201483466000113], + [-132.083363410999937, 55.210109768], + [-132.050689256999902, 55.258937893], + [-132.027658657999837, 55.270412502000156], + [-132.00259355399993, 55.271918036], + [-131.994292772999955, 55.268133856000176], + [-131.983550584999932, 55.256089585000083], + [-131.977447068999936, 55.245428778000033], + [-131.97301184799997, 55.232367255000057], + [-131.970204230999911, 55.218410549000097], + [-131.969309048999946, 55.204901434000121], + [-131.9759822259999, 55.176947333000086], + [-131.991810675999943, 55.158270575000117], + [-132.00999915299991, 55.14154694200009], + [-132.023915167999917, 55.119533596000068], + [-131.989816860999895, 55.119533596000068], + [-132.001454230999911, 55.104478257000054], + [-132.018950975999928, 55.091376044000086], + [-132.039051886999914, 55.082098700000031], + [-132.058338995999918, 55.078599351000051], + [-132.066070115999935, 55.08274974199999], + [-132.081288214999915, 55.101060289000046], + [-132.092844204999864, 55.105292059000149], + [-132.100331183999913, 55.101263739], + [-132.097075975999871, 55.092515367000132], + [-132.088124152999939, 55.083441473000121], + [-132.078521287999962, 55.078599351000051], + [-132.087513800999972, 55.072943427000055], + [-132.097767706999917, 55.070379950000145], + [-132.108754035999965, 55.070013739000117], + [-132.120106574999937, 55.071112372000172], + [-132.120106574999937, 55.064276434000149], + [-132.090891079999892, 55.05609772300015], + [-132.076893683999941, 55.048773505000142], + [-132.075428839999887, 55.04010651200015], + [-132.086496548999918, 55.034654039000102], + [-132.117421027999853, 55.032782294000143], + [-132.152333136999886, 55.016058661000116], + [-132.208851691999911, 55.002630927000112], + [-132.223133917999917, 54.989203192000119], + [-132.178781704999864, 54.989203192000119], + [-132.167062954999892, 54.98725006700009], + [-132.158599412999934, 54.982814846000011], + [-132.152333136999886, 54.978176174000097], + [-132.134592251999891, 54.970160223000121], + [-132.12730872299997, 54.970933335000055], + [-132.108794725999957, 54.98574453300013], + [-132.101958787999934, 54.988226630000057], + [-132.096506313999896, 54.985256252000127], + [-132.092193162999905, 54.975531317], + [-132.069976365999935, 55.001125393000066], + [-132.035389777999939, 55.022772528000147], + [-131.996815558999884, 55.034491278000147], + [-131.963042772999898, 55.030218817000147], + [-131.974273240999878, 55.024644273000135], + [-131.981271938999896, 55.016750393000152], + [-131.982533331999974, 55.006822007000054], + [-131.976714647999927, 54.99542877800009], + [-131.997141079999892, 54.984361070000048], + [-132.005197719999927, 54.977687893], + [-132.01024329299986, 54.968085028000118], + [-131.976714647999927, 54.969712632000139], + [-131.969309048999946, 54.968085028000118], + [-131.961822068999965, 54.957709052000112], + [-131.965199347999885, 54.951890367000075], + [-131.972482876999891, 54.947251695000048], + [-131.976714647999927, 54.94082265800013], + [-131.976063605999883, 54.908148505], + [-131.984771287999962, 54.905910549000012], + [-132.01024329299986, 54.907294012000179], + [-132.03355872299997, 54.905585028000175], + [-132.047027147999955, 54.898586330000015], + [-132.045399542999917, 54.887193101000136], + [-132.023915167999917, 54.872503973000121], + [-131.985503709999875, 54.861070054], + [-131.968617316999882, 54.853501695000134], + [-131.955637173999889, 54.838324286000145], + [-131.960113084999961, 54.834051825000031], + [-131.964955206999946, 54.831976630000113], + [-131.970366990999878, 54.831366278000147], + [-131.976714647999927, 54.831529039000131], + [-131.95767167899993, 54.828111070000105], + [-131.956857876999919, 54.81720612200003], + [-131.958973761999914, 54.803045966000113], + [-131.948801235999895, 54.789984442000119], + [-131.963124152999882, 54.785467841000084], + [-131.978382941999939, 54.783758856000176], + [-132.01024329299986, 54.783758856000176], + [-131.996571417999917, 54.776922919000143], + [-132.00243079299986, 54.765448309000121], + [-132.001372850999928, 54.75576406500015], + [-131.997914191999939, 54.746242580000157], + [-131.996571417999917, 54.735296942], + [-132.000314907999865, 54.722723700000088], + [-132.005604620999918, 54.712958075000145], + [-132.008208787999934, 54.704006252000127], + [-132.004017706999889, 54.693793036], + [-132.067534959999904, 54.699042059000178], + [-132.08226477799991, 54.704657294000086], + [-132.096099412999905, 54.712713934000121], + [-132.111073370999918, 54.716701565], + [-132.117746548999975, 54.713690497000087], + [-132.106434699999909, 54.701239325000174], + [-132.149973110999923, 54.698635158000073], + [-132.200795050999943, 54.725246486000017], + [-132.247222459999932, 54.743312893000123], + [-132.277740037999962, 54.714829820000134], + [-132.292388475999871, 54.727484442], + [-132.297596808999856, 54.74445221600017], + [-132.294422980999911, 54.762152411000088], + [-132.284006313999896, 54.776922919000143], + [-132.265614386999857, 54.784654039000074], + [-132.224517381999874, 54.791652736000131], + [-132.216297980999883, 54.803656317000062], + [-132.21890214799987, 54.810288804000137], + [-132.225982225999928, 54.814683335000112], + [-132.235829230999855, 54.81720612200003], + [-132.24673417899993, 54.817857163999989], + [-132.259144660999965, 54.815171617000104], + [-132.266224738999938, 54.809027411000116], + [-132.271351691999939, 54.802191473], + [-132.277740037999962, 54.797430731000119], + [-132.299794074999852, 54.79433828300013], + [-132.336496548999946, 54.803412177000112], + [-132.359689907999893, 54.803656317000062], + [-132.336537238999938, 54.814886786000088], + [-132.283029751999834, 54.831000067000147], + [-132.264759894999941, 54.844549872000115], + [-132.275868292999917, 54.853705145000092], + [-132.310292120999918, 54.859930731000148], + [-132.32555091099988, 54.866278387000179], + [-132.314320441999882, 54.870672919000143], + [-132.302805141999869, 54.872381903000147], + [-132.277740037999962, 54.872503973000121], + [-132.277740037999962, 54.879339911000059], + [-132.315907355999911, 54.88300202], + [-132.335682745999947, 54.887884833000086], + [-132.349720831999889, 54.896429755], + [-132.352121548999946, 54.904608466000113], + [-132.349720831999889, 54.91229889500012], + [-132.349924282999865, 54.918036200000088], + [-132.359974738999938, 54.920314846000068], + [-132.369740363999966, 54.921210028000147], + [-132.378570115999935, 54.923976955000128], + [-132.386586066999968, 54.928412177], + [-132.393869594999899, 54.934556382000082], + [-132.378041144999941, 54.940130927], + [-132.369618292999917, 54.941555080000157], + [-132.359689907999893, 54.94082265800013], + [-132.367990688999896, 54.950995184000178], + [-132.387277798999918, 54.964422919000171], + [-132.393869594999899, 54.975531317], + [-132.394602016999897, 54.988226630000057], + [-132.390980597999942, 55.00096263200011], + [-132.380197719999842, 55.023382880000113], + [-132.402699347999942, 55.015285549000097], + [-132.412017381999874, 54.993719794000086], + [-132.414906378999916, 54.97150299700003], + [-132.418039516999897, 54.961249091000113], + [-132.415394660999908, 54.956000067000119], + [-132.417551235999895, 54.943915106000119], + [-132.422596808999941, 54.930161851], + [-132.428578253999945, 54.920314846000068], + [-132.43614661399991, 54.916571356000034], + [-132.472971157999893, 54.907294012000179], + [-132.485585089999859, 54.907375393000066], + [-132.495269334999932, 54.908880927000112], + [-132.501454230999911, 54.913763739], + [-132.503732876999862, 54.92401764500012], + [-132.497670050999943, 54.933050848000121], + [-132.483631964999915, 54.935777085], + [-132.467884894999941, 54.93691640800013], + [-132.456532355999883, 54.94082265800013], + [-132.444162563999839, 54.9630394550001], + [-132.452219204999892, 54.980536200000031], + [-132.470814581999974, 54.993638414000102], + [-132.490061001999834, 55.002875067000062], + [-132.495472785999965, 54.965277411000059], + [-132.51886959499987, 54.944159247000144], + [-132.550200975999928, 54.940252997000144], + [-132.579416469999842, 54.954413153000175], + [-132.593413865999906, 54.968247788999989], + [-132.598133917999917, 54.976019598000093], + [-132.599924282999893, 54.985500393000095], + [-132.596018032999893, 54.989081122000144], + [-132.575347459999875, 54.977118231000034], + [-132.565785285999908, 54.975531317], + [-132.555531378999973, 54.986395575000174], + [-132.551869269999941, 55.000677802000084], + [-132.546498175999943, 55.012640692], + [-132.530995245999947, 55.016546942], + [-132.546701626999919, 55.020209052000055], + [-132.566965298999946, 55.021429755000085], + [-132.579497850999928, 55.027044989000089], + [-132.571929490999878, 55.043850002000099], + [-132.553456183999856, 55.052435614], + [-132.52989661399991, 55.050116278000033], + [-132.5052791009999, 55.044663804], + [-132.483794725999871, 55.043850002000099], + [-132.464955206999946, 55.05072663], + [-132.530995245999947, 55.058050848], + [-132.542958136999886, 55.070217190000093], + [-132.539173956999946, 55.083644924000069], + [-132.511138475999928, 55.11273834800015], + [-132.529286261999943, 55.115464585000112], + [-132.544911261999914, 55.121527411000031], + [-132.559803839999887, 55.124090887000122], + [-132.575672980999911, 55.116156317000147], + [-132.602853969999927, 55.069525458000143], + [-132.612904425999886, 55.064276434000149], + [-132.626616990999935, 55.085638739000117], + [-132.608550584999904, 55.119208075000145], + [-132.579090949999909, 55.151312567000119], + [-132.558338995999918, 55.167914130000085], + [-132.575835740999878, 55.174994208000143], + [-132.589182094999899, 55.186265367000132], + [-132.609852667999917, 55.21173737200003], + [-132.633208787999905, 55.230902411], + [-132.640207485999895, 55.24054596600017], + [-132.64085852799991, 55.256089585000083], + [-132.657460089999887, 55.241848049000069], + [-132.655832485999866, 55.218980210000055], + [-132.642445441999939, 55.197739976000079], + [-132.623768683999884, 55.188421942000119], + [-132.616118943999936, 55.181952216000028], + [-132.615305141999841, 55.167669989000117], + [-132.620472785999937, 55.153387762000037], + [-132.630930141999926, 55.146877346000124], + [-132.696115688999839, 55.146877346000124], + [-132.706857876999862, 55.149237372000087], + [-132.736439581999889, 55.167914130000085], + [-132.774891730999911, 55.183050848000065], + [-132.784820115999906, 55.188421942000119], + [-132.798980272999927, 55.205145575000145], + [-132.808216925999886, 55.228216864000117], + [-132.809315558999941, 55.251898505000142], + [-132.799143032999893, 55.270412502000156], + [-132.826730923999918, 55.275458075000088], + [-132.840443488999938, 55.274888414000102], + [-132.846302863999881, 55.266669012000122], + [-132.847767706999946, 55.257513739000146], + [-132.851226365999935, 55.248236395000092], + [-132.855620897999927, 55.240423895], + [-132.859974738999938, 55.235581773000106], + [-132.881703253999888, 55.225816148000078], + [-132.928700324999909, 55.217474677000027], + [-132.949330206999946, 55.208319403000033], + [-133.030425584999875, 55.214097398], + [-133.035023566999911, 55.225653387000122], + [-133.025542772999898, 55.230169989000061], + [-132.983509894999941, 55.235581773000106], + [-132.913726365999878, 55.26471588700015], + [-132.905100063999896, 55.271063544000114], + [-132.901519334999904, 55.280259507000082], + [-132.909779425999886, 55.285223700000031], + [-132.928293423999889, 55.283351955000157], + [-132.959584113999966, 55.276556708000115], + [-133.086537238999881, 55.276556708000115], + [-133.083729620999918, 55.272772528000118], + [-133.079090949999909, 55.262925523], + [-133.092193162999877, 55.270819403000147], + [-133.103911912999962, 55.279771226], + [-133.116118943999936, 55.287176825000174], + [-133.130930141999897, 55.29026927300005], + [-133.147206183999941, 55.288234768000123], + [-133.17406165299991, 55.279201565000122], + [-133.1888728509999, 55.276556708000115], + [-133.212961391999926, 55.279201565000122], + [-133.21703040299991, 55.28839752800009], + [-133.214914516999897, 55.301174221000124], + [-133.220285610999838, 55.314439195000077], + [-133.232492641999897, 55.322007554000109], + [-133.2455134759999, 55.327337958000086], + [-133.257069464999915, 55.333929755000057], + [-133.26463782499988, 55.345445054], + [-133.24819902299987, 55.347154039000017], + [-133.240345831999889, 55.354681708000058], + [-133.235910610999923, 55.364447333], + [-133.229888475999928, 55.372788804000052], + [-133.218006964999859, 55.380316473000121], + [-133.206613735999895, 55.384466864000061], + [-133.194081183999913, 55.386135158000073], + [-133.178700324999852, 55.386419989], + [-133.174224412999877, 55.385321356000148], + [-133.162424282999922, 55.379380601000136], + [-133.152495897999927, 55.372300523000078], + [-133.14972896999987, 55.374172268000123], + [-133.147775844999899, 55.378078518000123], + [-133.144195115999935, 55.38027578300013], + [-133.060658331999974, 55.368597723000121], + [-133.052357550999886, 55.365952867000047], + [-133.033355272999898, 55.353949286000116], + [-133.03189042899993, 55.352280992000104], + [-133.017730272999927, 55.350327867000075], + [-132.872425910999937, 55.359076239000117], + [-132.846302863999881, 55.352280992000104], + [-132.869862433999913, 55.363918361000017], + [-132.956166144999941, 55.372788804000052], + [-133.007801886999914, 55.388128973], + [-133.028716600999871, 55.40058014500012], + [-133.024484829999835, 55.413763739000089], + [-133.031076626999919, 55.422430731000176], + [-133.040679490999906, 55.426988023000106], + [-133.052479620999861, 55.428412177], + [-133.06541907499988, 55.427435614000117], + [-133.046701626999891, 55.437079169000086], + [-133.023793097999913, 55.444281317000119], + [-132.999623175999886, 55.448187567000033], + [-132.977284308999856, 55.447902736000074], + [-133.008208787999934, 55.457464911000059], + [-133.075306769999884, 55.451117255000142], + [-133.107004360999838, 55.462144273], + [-133.125843878999888, 55.483587958000115], + [-133.124867316999911, 55.502183335000112], + [-133.111643032999893, 55.519598700000088], + [-133.093373175999886, 55.537298895000092], + [-133.087025519999969, 55.54682038], + [-133.07787024599989, 55.570013739000117], + [-133.072865363999938, 55.578273830000015], + [-133.064116990999878, 55.582912502000127], + [-133.024484829999835, 55.598700262000179], + [-133.00015214799987, 55.614976304000109], + [-132.986480272999927, 55.621771552000141], + [-132.969838019999884, 55.626654364000032], + [-132.922678188999896, 55.627630927], + [-132.908355272999927, 55.632879950000174], + [-132.922963019999941, 55.637355861000131], + [-132.938343878999973, 55.639715887000179], + [-132.969838019999884, 55.639715887000179], + [-132.982777472999885, 55.637030341000113], + [-133.014515753999945, 55.626654364000032], + [-133.06309973899991, 55.623480536000145], + [-133.203602667999917, 55.58690013200011], + [-133.25129146999987, 55.584784247000087], + [-133.357045050999886, 55.616197007000139], + [-133.379058397999898, 55.629787502000099], + [-133.388172980999883, 55.650213934000149], + [-133.386789516999897, 55.662054755000113], + [-133.382191535999965, 55.669501044000086], + [-133.373768683999913, 55.673285223000121], + [-133.341460740999878, 55.677720445], + [-133.34194902299987, 55.685451565], + [-133.360259568999936, 55.701117255000085], + [-133.368153449999909, 55.703558661000116], + [-133.378570115999906, 55.704535223000093], + [-133.38524329299986, 55.709295966000084], + [-133.381947394999941, 55.722845770000148], + [-133.370432094999899, 55.733343817000119], + [-133.357533331999946, 55.730617580000157], + [-133.345529751999862, 55.721177476000136], + [-133.336333787999877, 55.71198151200015], + [-133.323963995999918, 55.709295966000084], + [-133.317982550999943, 55.726385809000035], + [-133.31346594999988, 55.749172268000152], + [-133.30565344999988, 55.763861395000063], + [-133.293365037999934, 55.757757880000085], + [-133.265207485999838, 55.747951565000122], + [-133.236683722999942, 55.745062567], + [-133.223703579999835, 55.760077216000028], + [-133.213978644999884, 55.783351955000128], + [-133.191395636999914, 55.797186591000141], + [-133.166086391999897, 55.807074286000059], + [-133.147938605999883, 55.818426825000031], + [-133.142974412999934, 55.832261460000112], + [-133.139881964999944, 55.85455963700015], + [-133.139800584999961, 55.876613674000069], + [-133.144195115999935, 55.889837958], + [-133.156361456999946, 55.896226304000109], + [-133.15884355399993, 55.890204169000029], + [-133.156646287999962, 55.880764065], + [-133.154774542999917, 55.876776434000035], + [-133.161122199999909, 55.865668036], + [-133.175038214999915, 55.865668036], + [-133.217681443999936, 55.883693752000127], + [-133.227284308999913, 55.890570380000142], + [-133.236724412999934, 55.900336005000085], + [-133.240874803999873, 55.909979559000035], + [-133.248646613999966, 55.935980536000116], + [-133.25413977799991, 55.941351630000085], + [-133.259755011999914, 55.945298570000077], + [-133.25035559799997, 55.953436591000084], + [-133.236805792999917, 55.959784247000115], + [-133.229888475999928, 55.958685614000061], + [-133.231760219999899, 55.970363674000069], + [-133.244130011999914, 55.996568101000108], + [-133.246205206999946, 56.035589911000088], + [-133.25023352799991, 56.055975653000147], + [-133.279123501999919, 56.076402085000112], + [-133.278146938999839, 56.102484442], + [-133.26463782499988, 56.147406317], + [-133.285511847999942, 56.167385158000073], + [-133.331206834999961, 56.172552802000084], + [-133.425404425999943, 56.167914130000057], + [-133.443470831999974, 56.169826565], + [-133.457753058999884, 56.174994208000115], + [-133.490305141999841, 56.191473700000088], + [-133.508371548999946, 56.191717841000141], + [-133.561919725999871, 56.183783270000092], + [-133.573109503999973, 56.184963283000016], + [-133.575998501999919, 56.188177802000055], + [-133.593006964999887, 56.202053127000156], + [-133.606271938999896, 56.20994700700011], + [-133.610991990999935, 56.210760809000035], + [-133.612172003999945, 56.212347723000065], + [-133.614735480999855, 56.222479559000121], + [-133.615386522999898, 56.23041413], + [-133.613392706999946, 56.247137762000122], + [-133.614735480999855, 56.257269598000065], + [-133.619048631999931, 56.260321356000148], + [-133.62710527299987, 56.264064846000011], + [-133.633900519999912, 56.269517320000134], + [-133.634592251999862, 56.277777411000116], + [-133.619618292999917, 56.289496161000116], + [-133.576324022999927, 56.292629299000097], + [-133.566314256999931, 56.304429429000052], + [-133.572661912999877, 56.314398505000057], + [-133.587798631999874, 56.327337958000058], + [-133.614735480999855, 56.345404364000089], + [-133.614735480999855, 56.352850653000147], + [-133.586781378999916, 56.352850653000147] + ] + ], + [ + [ + [-157.821888800999943, 56.317531643000123], + [-157.833322719999899, 56.313666083000115], + [-157.848825649999924, 56.319810289000102], + [-157.86742102799991, 56.329250393], + [-157.884877081999889, 56.333563544000114], + [-157.898386196999923, 56.339056708000143], + [-157.897409633999956, 56.347398179000109], + [-157.856556769999912, 56.362127997000115], + [-157.826161261999943, 56.361639716000028], + [-157.811390753999888, 56.356146552], + [-157.811268683999913, 56.353705145000148], + [-157.812733527999853, 56.34902578300013], + [-157.812326626999948, 56.342922268000152], + [-157.812326626999948, 56.34288157800016], + [-157.807321743999921, 56.335882880000085], + [-157.806019660999908, 56.328802802000112], + [-157.812448696999923, 56.323309637000179], + [-157.821888800999943, 56.317531643000123] + ] + ], + [ + [ + [-132.64085852799991, 56.442206122000172], + [-132.632679816999939, 56.430650132000054], + [-132.623402472999942, 56.408758856000119], + [-132.612904425999886, 56.400620835], + [-132.624379035999937, 56.387600002000013], + [-132.659657355999883, 56.368231512000094], + [-132.66820227799991, 56.352850653000147], + [-132.663929816999882, 56.341864325000088], + [-132.634632941999968, 56.304429429000052], + [-132.647206183999856, 56.282416083000058], + [-132.667958136999857, 56.274603583000058], + [-132.691639777999882, 56.270697333000058], + [-132.732736782999865, 56.251654364000061], + [-132.819650844999842, 56.236151434000149], + [-132.868885870999861, 56.243475653000147], + [-132.99087480399993, 56.311916408000044], + [-133.038889126999919, 56.330511786000116], + [-133.055246548999946, 56.344794012000122], + [-133.048939581999889, 56.362779039000046], + [-132.992827928999873, 56.418605861000131], + [-132.969838019999884, 56.434800523], + [-132.946685350999928, 56.445786851000051], + [-132.924224412999934, 56.451971747000115], + [-132.874256964999915, 56.455267645000148], + [-132.85757402299987, 56.453273830000015], + [-132.825591600999871, 56.444281317], + [-132.80874589799987, 56.442206122000172], + [-132.796742316999939, 56.443915106000176], + [-132.757557745999918, 56.455267645000148], + [-132.702951626999862, 56.462103583000058], + [-132.652902798999946, 56.448675848000065], + [-132.64085852799991, 56.442206122000172] + ] + ], + [ + [ + [-132.151519334999961, 56.351996161000145], + [-132.123890753999945, 56.343207098000093], + [-132.103016730999911, 56.349107164000102], + [-132.080881313999924, 56.361314195], + [-132.052805141999897, 56.362046617000132], + [-132.025135870999918, 56.353908596000011], + [-132.004017706999889, 56.339178778000118], + [-131.992746548999918, 56.322333075000117], + [-131.977691209999904, 56.285467841000141], + [-131.940093553999901, 56.233058986000074], + [-131.928049282999893, 56.210516669000086], + [-131.928334113999938, 56.194566148], + [-131.952219204999892, 56.185858466000084], + [-131.976877407999893, 56.190904039000131], + [-131.996205206999917, 56.188544012000179], + [-132.004017706999889, 56.157375393000095], + [-132.013254360999895, 56.141343492000104], + [-132.034291144999884, 56.128322658000016], + [-132.057281053999873, 56.12034739800005], + [-132.072336391999897, 56.11945221600017], + [-132.085031704999864, 56.132147528000033], + [-132.090728318999936, 56.148871161000059], + [-132.099191860999895, 56.162909247000115], + [-132.120106574999937, 56.167914130000057], + [-132.118031378999916, 56.156724351000136], + [-132.128773566999939, 56.158148505000113], + [-132.144642706999946, 56.167059637000065], + [-132.15794837099989, 56.178127346000096], + [-132.175770636999857, 56.189439195000077], + [-132.243031378999888, 56.202053127000156], + [-132.270415818999936, 56.214016018000095], + [-132.306467251999919, 56.23456452000012], + [-132.338246222999942, 56.257798570000048], + [-132.352894660999965, 56.277777411000116], + [-132.327137824999909, 56.330267645000092], + [-132.330189581999917, 56.34243398600016], + [-132.346669074999909, 56.35968659100017], + [-132.346506313999839, 56.370428778000175], + [-132.342355923999889, 56.376898505], + [-132.337025519999941, 56.383368231000091], + [-132.33299719999988, 56.393784898], + [-132.33336341099988, 56.407945054000024], + [-132.338937954999892, 56.422430731000148], + [-132.349191860999923, 56.437160549000126], + [-132.363392706999946, 56.451849677000141], + [-132.376616990999878, 56.47186920800003], + [-132.37535559799997, 56.488470770000063], + [-132.362049933999856, 56.494574286000059], + [-132.339222785999937, 56.483221747000172], + [-132.260894334999961, 56.458929755], + [-132.239898240999935, 56.445298570000048], + [-132.227609829999864, 56.429266669000171], + [-132.209136522999927, 56.395453192], + [-132.195871548999889, 56.380194403000033], + [-132.178130662999934, 56.367132880000142], + [-132.151519334999961, 56.351996161000145] + ] + ], + [ + [ + [-153.893503383999956, 56.535223700000145], + [-153.928171352999925, 56.516669012000037], + [-153.965687628999945, 56.504624742000132], + [-153.99071204299986, 56.507066148000078], + [-154.005970831999946, 56.51300690300009], + [-154.024647589999915, 56.511053778000033], + [-154.059274868999893, 56.503648179000052], + [-154.100331183999913, 56.502386786000145], + [-154.120594855999911, 56.50413646000014], + [-154.137806769999941, 56.510484117000075], + [-154.119089321999951, 56.523749091000113], + [-154.09312903599988, 56.536688544000114], + [-154.069040493999921, 56.541408596000011], + [-154.055816209999904, 56.530340887000179], + [-154.043649868999921, 56.54759349199999], + [-154.020456508999871, 56.555487372000144], + [-153.877145962999947, 56.565130927000112], + [-153.877145962999947, 56.552069403000147], + [-153.893503383999956, 56.535223700000145] + ] + ], + [ + [ + [-157.060617641999897, 56.582220770000063], + [-157.044748501999891, 56.572984117000104], + [-157.008778449999909, 56.563950914000102], + [-156.992380337999919, 56.555161851000136], + [-156.978260870999861, 56.53652578300013], + [-156.988352016999954, 56.530585028000118], + [-157.006296352999897, 56.533433335000055], + [-157.025949673999946, 56.549953518000123], + [-157.048939581999917, 56.552923895000148], + [-157.139475063999868, 56.552069403000147], + [-157.14549719999988, 56.548895575000174], + [-157.155873175999886, 56.534409898000135], + [-157.159982876999919, 56.530340887000179], + [-157.168568488999938, 56.531236070000077], + [-157.177927212999862, 56.535834052000027], + [-157.18773352799991, 56.538641669000143], + [-157.205433722999885, 56.530178127000013], + [-157.308705206999889, 56.530666408000101], + [-157.331247524999895, 56.524155992000104], + [-157.327097133999928, 56.534857489000117], + [-157.317575649999952, 56.548488674000069], + [-157.30711829299986, 56.560207424000069], + [-157.300526495999918, 56.565130927000112], + [-157.286366339999859, 56.568670966000113], + [-157.25926673099994, 56.583400783000101], + [-157.242502407999922, 56.585638739000089], + [-157.202626105999855, 56.582098700000088], + [-157.098581508999928, 56.593980210000055], + [-157.060617641999897, 56.582220770000063] + ] + ], + [ + [ + [-154.461415167999917, 56.60537344], + [-154.425160285999937, 56.593044338000155], + [-154.425160285999937, 56.593003648000078], + [-154.415638800999943, 56.587469794000143], + [-154.407907680999926, 56.579006252000013], + [-154.402088995999861, 56.568833726000079], + [-154.398508266999897, 56.558294989], + [-154.410633917999888, 56.54759349199999], + [-154.424061652999882, 56.541408596000011], + [-154.44013424399995, 56.538519598000093], + [-154.446644660999851, 56.538641669000143], + [-154.434519008999956, 56.54181549700003], + [-154.424794074999909, 56.548041083000086], + [-154.419016079999949, 56.558294989], + [-154.430287238999938, 56.556789455000157], + [-154.440744594999899, 56.554144598000065], + [-154.450510219999956, 56.550238348000065], + [-154.45995032499988, 56.544663804000052], + [-154.44281979099992, 56.581203518], + [-154.47484290299991, 56.598089911], + [-154.516713019999941, 56.590155341000028], + [-154.528879360999923, 56.552069403000147], + [-154.497995571999866, 56.530666408000101], + [-154.487538214999887, 56.516791083000115], + [-154.504953579999949, 56.510484117000075], + [-154.530995245999918, 56.508002020000148], + [-154.559681769999884, 56.501532294000143], + [-154.610788540999863, 56.483221747000172], + [-154.670725063999896, 56.441229559000092], + [-154.699818488999881, 56.426906643], + [-154.716908331999889, 56.410874742000132], + [-154.738229946999866, 56.398260809000035], + [-154.76781165299991, 56.400620835], + [-154.79124915299991, 56.430853583], + [-154.770497199999909, 56.470851955000128], + [-154.731434699999937, 56.508205471000011], + [-154.700144008999871, 56.530340887000179], + [-154.536325649999895, 56.597601630000113], + [-154.499338344999956, 56.60545482], + [-154.461415167999917, 56.60537344] + ] + ], + [ + [ + [-154.082590298999889, 56.606105861000131], + [-154.077463344999899, 56.591782945000048], + [-154.068430141999897, 56.580511786000059], + [-154.058094855999855, 56.570135809000149], + [-154.049061652999853, 56.558294989], + [-154.080759243999921, 56.576849677000112], + [-154.09345455599987, 56.578802802000055], + [-154.103993292999945, 56.574896552000055], + [-154.102040167999917, 56.566148179], + [-154.09308834499987, 56.557074286], + [-154.082590298999889, 56.552069403000147], + [-154.090565558999856, 56.546698309000092], + [-154.138905402999853, 56.531683661000059], + [-154.141550258999956, 56.530340887000179], + [-154.158314581999889, 56.52619049700003], + [-154.191395636999914, 56.507879950000174], + [-154.210072394999884, 56.503648179000052], + [-154.280140753999888, 56.50657786699999], + [-154.322132941999882, 56.515082098], + [-154.333811001999862, 56.519598700000145], + [-154.341623501999948, 56.528143622000087], + [-154.350087042999917, 56.544663804000052], + [-154.337757941999939, 56.563910223], + [-154.310414191999882, 56.583807684000092], + [-154.279001430999926, 56.597805080000157], + [-154.247670050999886, 56.606105861000131], + [-154.226185675999886, 56.608343817000119], + [-154.165720180999955, 56.606105861000131], + [-154.124094204999892, 56.612616278000033], + [-154.103016730999883, 56.61318594], + [-154.082590298999889, 56.606105861000131] + ] + ], + [ + [ + [-169.742990688999896, 56.62034739800005], + [-169.608021613999938, 56.603338934000178], + [-169.580881313999924, 56.609523830000157], + [-169.556996222999857, 56.618109442000062], + [-169.523142055999898, 56.616278387000179], + [-169.491525844999899, 56.606919664000046], + [-169.47435462099989, 56.593003648000078], + [-169.515085415999948, 56.578517971000124], + [-169.550160285999937, 56.556952216000028], + [-169.586903449999937, 56.541408596000011], + [-169.632679816999939, 56.544663804000052], + [-169.653024868999921, 56.554144598000065], + [-169.678456183999941, 56.576117255000085], + [-169.693470831999889, 56.585638739000089], + [-169.766224738999938, 56.606878973000065], + [-169.789051886999943, 56.62034739800005], + [-169.742990688999896, 56.62034739800005] + ] + ], + [ + [ + [-132.882232225999871, 56.801174221000011], + [-132.870513475999871, 56.797837632000082], + [-132.833648240999906, 56.79913971600017], + [-132.816314256999931, 56.797349351], + [-132.751942511999914, 56.759222723], + [-132.74388587099989, 56.746975002000127], + [-132.733265753999945, 56.725978908000101], + [-132.709787563999896, 56.709906317000119], + [-132.686268683999913, 56.698675848000121], + [-132.675648566999968, 56.692084052000141], + [-132.671457485999838, 56.683823960000055], + [-132.661529100999928, 56.679632880000113], + [-132.64085852799991, 56.674994208], + [-132.629139777999939, 56.669012762000179], + [-132.623361782999893, 56.66526927300005], + [-132.608387824999937, 56.648016669000143], + [-132.599191860999895, 56.633775132000139], + [-132.593088344999899, 56.626532294000114], + [-132.583811001999834, 56.618109442000062], + [-132.577219204999864, 56.614081122000087], + [-132.558338995999918, 56.606105861000131], + [-132.548491990999906, 56.603745835], + [-132.53970292899993, 56.603501695000048], + [-132.53343665299991, 56.60032786699999], + [-132.530995245999947, 56.589300848000121], + [-132.53343665299991, 56.580308335000112], + [-132.539458787999877, 56.576402085000112], + [-132.54735266799986, 56.573879299000012], + [-132.555246548999946, 56.56854889500012], + [-132.573719855999855, 56.559475002000127], + [-132.621571417999888, 56.555731512000094], + [-132.637766079999835, 56.548407294000086], + [-132.650461391999897, 56.537054755000113], + [-132.66616777299987, 56.529730536000116], + [-132.683990037999934, 56.527167059000121], + [-132.702951626999862, 56.530340887000179], + [-132.717844204999892, 56.540961005000113], + [-132.732045050999943, 56.554510809000178], + [-132.747059699999852, 56.559515692000119], + [-132.764393683999941, 56.544663804000052], + [-132.730132615999963, 56.521185614], + [-132.722767706999946, 56.510484117000075], + [-132.740549282999865, 56.508246161], + [-132.77367102799991, 56.499090887000094], + [-132.79165605399993, 56.496893622000115], + [-132.91860917899993, 56.507025458000086], + [-132.937489386999886, 56.517564195000134], + [-132.945179816999882, 56.536566473000121], + [-132.954497850999928, 56.592271226000051], + [-132.952219204999892, 56.601629950000174], + [-132.942494269999941, 56.612941799000154], + [-132.928049282999865, 56.619696356000091], + [-132.890858527999882, 56.629380601000051], + [-132.88109290299991, 56.640204169000143], + [-132.886586066999939, 56.650580145000148], + [-132.922027147999955, 56.688666083000143], + [-132.924143032999893, 56.702215887000094], + [-132.923410610999838, 56.717922268000066], + [-132.92015540299991, 56.732814846000039], + [-132.914621548999946, 56.743841864000061], + [-132.92442786399991, 56.757554429], + [-132.959584113999966, 56.787990627000156], + [-132.962798631999931, 56.79979075700011], + [-132.951527472999942, 56.81045156500015], + [-132.922027147999955, 56.825832424000097], + [-132.882232225999871, 56.801174221000011] + ] + ], + [ + [ + [-133.98668372299997, 56.865627346000096], + [-133.99083411399991, 56.832017320000077], + [-133.971262173999946, 56.836411851000051], + [-133.964100714999915, 56.83112213700015], + [-133.956695115999935, 56.797837632000082], + [-133.951486782999922, 56.802394924000012], + [-133.941029425999943, 56.80784739800005], + [-133.935617641999897, 56.812201239000146], + [-133.930083787999962, 56.801581122000115], + [-133.919260219999899, 56.770249742000047], + [-133.912668423999889, 56.763739325000145], + [-133.90489661399991, 56.76064687700007], + [-133.904855923999918, 56.753851630000057], + [-133.909331834999875, 56.746975002000127], + [-133.923003709999932, 56.740708726], + [-133.922840949999852, 56.733099677000055], + [-133.920806443999936, 56.723944403000175], + [-133.922596808999913, 56.715969143000038], + [-133.927316860999895, 56.712225653000175], + [-133.93879146999987, 56.706203518000066], + [-133.943023240999878, 56.702337958000086], + [-133.955067511999914, 56.678412177000112], + [-133.959828253999888, 56.671291408000158], + [-133.972645636999914, 56.660142320000134], + [-133.987172003999945, 56.655178127000099], + [-134.025013800999886, 56.653876044000086], + [-133.993763800999943, 56.639227606000176], + [-133.96434485599994, 56.643255927000141], + [-133.938099738999938, 56.659369208000115], + [-133.916371222999942, 56.681219794000143], + [-133.916249152999882, 56.687201239000089], + [-133.919829881999931, 56.694159247000144], + [-133.920765753999945, 56.699896552000141], + [-133.912668423999889, 56.702337958000086], + [-133.903187628999888, 56.703273830000157], + [-133.885487433999913, 56.707505601000079], + [-133.877552863999938, 56.708563544000029], + [-133.870757615999906, 56.714911200000145], + [-133.863107876999891, 56.729681708000143], + [-133.856678839999859, 56.745917059000178], + [-133.853667772999955, 56.756903387000037], + [-133.858225063999896, 56.780259507000139], + [-133.86587480399993, 56.800970770000148], + [-133.862375454999835, 56.809881903000175], + [-133.833159959999904, 56.797837632000082], + [-133.813059048999946, 56.781480210000055], + [-133.801177537999905, 56.777004299000097], + [-133.768422003999973, 56.785711981000176], + [-133.750152147999927, 56.783758856000034], + [-133.732533331999889, 56.77814362200003], + [-133.717152472999942, 56.771185614000146], + [-133.775135870999918, 56.698879299000069], + [-133.780344204999921, 56.686428127000156], + [-133.773101365999906, 56.676459052000055], + [-133.760080532999922, 56.669907945], + [-133.732167120999861, 56.663153387000037], + [-133.728627081999889, 56.65306224199999], + [-133.730295376999891, 56.641791083000086], + [-133.730132615999935, 56.633978583], + [-133.70567786399991, 56.604152736000103], + [-133.709543423999918, 56.594712632000082], + [-133.735910610999895, 56.567124742000075], + [-133.745432094999899, 56.561957098000065], + [-133.756947394999941, 56.559149481000119], + [-133.771799282999893, 56.558294989], + [-133.779693162999877, 56.563381252000127], + [-133.792103644999912, 56.588690497000172], + [-133.79906165299991, 56.59870026200015], + [-133.823841925999943, 56.60773346600017], + [-133.905100063999868, 56.62034739800005], + [-133.922596808999913, 56.616644598], + [-133.91038977799991, 56.601467190000037], + [-133.857736782999922, 56.587469794000143], + [-133.847482876999891, 56.565130927000112], + [-133.851958787999934, 56.563910223], + [-133.871896938999839, 56.535956122000172], + [-133.874175584999932, 56.530340887000179], + [-133.886545376999862, 56.524400132000054], + [-133.909250454999892, 56.520086981000148], + [-133.919504360999923, 56.513617255000142], + [-133.920236782999865, 56.50519440300009], + [-133.910145636999886, 56.497544664000074], + [-133.895985480999855, 56.492132880000113], + [-133.884673631999874, 56.490057684000092], + [-133.869292772999927, 56.486802476000051], + [-133.862904425999915, 56.478583075000145], + [-133.859608527999882, 56.467352606000148], + [-133.853667772999955, 56.455267645000148], + [-133.847808397999927, 56.450628973000121], + [-133.825754360999923, 56.442206122000172], + [-133.845204230999911, 56.434393622000172], + [-133.887847459999932, 56.44009023600016], + [-133.908924933999856, 56.434800523], + [-133.897368943999936, 56.424302476000108], + [-133.883534308999941, 56.418443101000079], + [-133.875355597999942, 56.410589911], + [-133.880970831999946, 56.393784898], + [-133.887847459999932, 56.39264557500006], + [-133.898793097999913, 56.394476630000113], + [-133.909575975999928, 56.390814520000063], + [-133.916371222999942, 56.373358466000113], + [-133.859364386999943, 56.359116929000024], + [-133.843739386999857, 56.349107164000102], + [-133.841623501999834, 56.337591864000089], + [-133.853586391999897, 56.310492255000057], + [-133.847482876999891, 56.298244533000101], + [-133.868967251999919, 56.284735419000114], + [-133.898752407999922, 56.306341864000117], + [-133.930246548999946, 56.339300848000093], + [-133.956695115999935, 56.35968659100017], + [-133.972523566999939, 56.360500393000095], + [-133.97508704299986, 56.351385809000092], + [-133.971913214999915, 56.336167710000112], + [-133.970366990999935, 56.318752346000124], + [-133.975941535999937, 56.296210028000147], + [-133.981271938999924, 56.283880927000112], + [-133.978505011999857, 56.278753973], + [-133.959828253999888, 56.277777411000116], + [-133.923085089999915, 56.280829169000029], + [-133.908111131999959, 56.276353257000054], + [-133.891916469999899, 56.229803778000033], + [-133.895578579999864, 56.219956773000106], + [-133.943837042999888, 56.21198151200015], + [-133.94469153599988, 56.201605536000059], + [-133.92625891799986, 56.173488674000154], + [-133.920236782999865, 56.166896877000099], + [-133.916167772999898, 56.159002997000115], + [-133.919504360999923, 56.150539455000072], + [-133.93773352799991, 56.137030341000084], + [-133.940988735999838, 56.130194403000175], + [-133.935617641999897, 56.11945221600017], + [-133.941477016999841, 56.103094794000143], + [-133.949126756999959, 56.092352606000034], + [-133.961252407999865, 56.086493231000091], + [-133.980336066999939, 56.084662177000112], + [-133.993967251999891, 56.087876695000077], + [-134.030506964999915, 56.104722398000078], + [-134.03929602799991, 56.112616278000147], + [-134.036691860999895, 56.1231957050001], + [-134.00926673099994, 56.185126044000171], + [-134.017241990999906, 56.196966864000117], + [-134.030100063999924, 56.207220770000148], + [-134.03929602799991, 56.216294664000046], + [-134.037993943999908, 56.238714911000059], + [-134.031849738999938, 56.274562893000066], + [-134.032582160999937, 56.306830145], + [-134.052316860999895, 56.318752346000124], + [-134.069081183999913, 56.302801825000031], + [-134.067697719999927, 56.273993231000091], + [-134.072417772999927, 56.248602606000176], + [-134.107533331999889, 56.242987372000172], + [-134.090240037999905, 56.192694403000118], + [-134.121978318999965, 56.179754950000117], + [-134.167103644999941, 56.182114976000079], + [-134.190093553999901, 56.178127346000096], + [-134.162180141999869, 56.139960028000118], + [-134.150624152999939, 56.136948960000112], + [-134.145415818999936, 56.139960028000118], + [-134.140980597999942, 56.144842841000084], + [-134.131174282999837, 56.147406317], + [-134.103586391999926, 56.140285549000126], + [-134.099720831999917, 56.123846747000144], + [-134.100453253999945, 56.105292059000035], + [-134.086415167999917, 56.092189846000068], + [-134.091949022999927, 56.082709052000084], + [-134.100493943999936, 56.076076565], + [-134.121205206999946, 56.064846096000011], + [-134.107980923999889, 56.053045966000028], + [-134.100982225999928, 56.032294012000037], + [-134.102406378999888, 56.01072825700011], + [-134.114369269999941, 55.996568101000108], + [-134.129383917999945, 55.999457098000121], + [-134.148589647999927, 56.011664130000113], + [-134.157541469999927, 56.028143622000087], + [-134.141672329999892, 56.043768622000172], + [-134.163238084999932, 56.053615627000013], + [-134.210682745999918, 56.06281159100017], + [-134.224232550999886, 56.078517971000124], + [-134.210031704999892, 56.087225653000033], + [-134.207753058999913, 56.098578192], + [-134.216216600999957, 56.10838450700011], + [-134.234201626999891, 56.112616278000147], + [-134.236887173999946, 56.11810944200009], + [-134.225412563999924, 56.130194403000175], + [-134.200062628999888, 56.150539455000072], + [-134.197173631999959, 56.162054755000028], + [-134.212717251999891, 56.168361721000153], + [-134.231271938999896, 56.170111395000148], + [-134.23729407499988, 56.167914130000057], + [-134.247303839999859, 56.178371486000131], + [-134.250111456999917, 56.188177802000055], + [-134.251535610999895, 56.216294664000046], + [-134.255197719999927, 56.228461005000142], + [-134.263050910999937, 56.246283270000035], + [-134.264556443999965, 56.260402736000131], + [-134.257232225999957, 56.271633205000128], + [-134.22476152299987, 56.257635809000178], + [-134.217396613999881, 56.267238674000069], + [-134.217193162999934, 56.282294012000179], + [-134.214670376999919, 56.291327216000084], + [-134.206654425999943, 56.297593492000047], + [-134.190093553999901, 56.304429429000052], + [-134.164418097999942, 56.306097723000065], + [-134.160064256999931, 56.31240469], + [-134.169585740999935, 56.332342841000084], + [-134.184071417999917, 56.326157945000134], + [-134.231068488999938, 56.311916408000044], + [-134.244618292999888, 56.301499742000132], + [-134.251535610999895, 56.298244533000101], + [-134.262115037999934, 56.295314846000068], + [-134.272084113999938, 56.293890692], + [-134.281971808999941, 56.294663804000109], + [-134.292551235999895, 56.298244533000101], + [-134.292551235999895, 56.304429429000052], + [-134.259917772999927, 56.315904039000102], + [-134.265980597999942, 56.330552476000108], + [-134.282704230999855, 56.346625067], + [-134.281971808999941, 56.362779039000046], + [-134.270171678999958, 56.365708726000079], + [-134.237700975999871, 56.365545966000113], + [-134.231068488999938, 56.369614976000079], + [-134.239165818999936, 56.404486395], + [-134.23729407499988, 56.41429271000014], + [-134.228423631999931, 56.420233466000141], + [-134.218495245999918, 56.416734117000075], + [-134.20767167899993, 56.410549221000011], + [-134.19627844999988, 56.408107815000065], + [-134.180409308999941, 56.412502346000153], + [-134.177235480999883, 56.418687242000104], + [-134.180246548999975, 56.427232164000046], + [-134.182687954999921, 56.438544012000122], + [-134.17837480399993, 56.441351630000085], + [-134.169016079999892, 56.434637762000122], + [-134.159575975999957, 56.423000393000038], + [-134.155344204999835, 56.411200262000065], + [-134.155344204999835, 56.365912177000112], + [-134.146229620999947, 56.373683986000131], + [-134.114369269999941, 56.393784898], + [-134.115386522999898, 56.396063544000143], + [-134.116322394999969, 56.400946356000119], + [-134.113636847999885, 56.405829169000086], + [-134.104115363999881, 56.408107815000065], + [-134.080230272999927, 56.400620835], + [-134.069488084999932, 56.389593817000147], + [-134.060373501999919, 56.375921942000033], + [-134.050892706999917, 56.367743231000091], + [-134.03929602799991, 56.373358466000113], + [-134.036000128999945, 56.383042710000055], + [-134.036040818999936, 56.409613348000036], + [-134.031849738999938, 56.42112864800005], + [-134.040923631999931, 56.432806708000143], + [-134.060414191999911, 56.448065497000115], + [-134.066558397999898, 56.462103583000058], + [-134.067372199999909, 56.477606512000179], + [-134.061594204999835, 56.484320380000113], + [-134.049549933999913, 56.483384507000139], + [-134.031849738999938, 56.475734768], + [-134.034413214999915, 56.485907294000143], + [-134.039784308999884, 56.497300523000106], + [-134.047189907999893, 56.506659247000144], + [-134.056019660999937, 56.510484117000075], + [-134.059478318999936, 56.515285549000154], + [-134.064198370999918, 56.537502346000039], + [-134.066558397999898, 56.544663804000052], + [-134.081776495999861, 56.551581122000144], + [-134.092640753999945, 56.535956122000172], + [-134.104115363999881, 56.512844143000123], + [-134.121205206999946, 56.496893622000115], + [-134.139149542999888, 56.498724677], + [-134.155669725999957, 56.512355861000131], + [-134.172230597999942, 56.530178127000013], + [-134.190093553999901, 56.544663804000052], + [-134.218006964999944, 56.556789455000157], + [-134.246937628999945, 56.563381252000127], + [-134.276478644999912, 56.564032294000171], + [-134.30614173099994, 56.558294989], + [-134.30614173099994, 56.565130927000112], + [-134.227609829999921, 56.607407945000048], + [-134.184071417999917, 56.615912177000084], + [-134.159535285999965, 56.629950262000122], + [-134.141672329999892, 56.633978583], + [-134.10610917899993, 56.628973700000145], + [-134.093332485999895, 56.631537177000055], + [-134.086415167999917, 56.647040106000148], + [-134.116810675999943, 56.653794664000102], + [-134.144032355999855, 56.651922919000057], + [-134.224720831999974, 56.623683986000074], + [-134.246896938999868, 56.620103257000025], + [-134.266021287999934, 56.626857815000122], + [-134.285715298999946, 56.647040106000148], + [-134.263498501999919, 56.655422268000123], + [-134.241281704999864, 56.656073309000178], + [-134.224232550999886, 56.661688544000171], + [-134.217396613999881, 56.684881903000118], + [-134.222727016999841, 56.694403387000094], + [-134.234486456999946, 56.696966864000117], + [-134.246245897999927, 56.695379950000174], + [-134.251535610999895, 56.692084052000141], + [-134.253570115999906, 56.676336981000091], + [-134.259877081999946, 56.670599677000112], + [-134.306752081999889, 56.665757554000137], + [-134.333973761999914, 56.668361721000124], + [-134.357574022999927, 56.67658112200003], + [-134.367583787999934, 56.692084052000141], + [-134.391835089999915, 56.719061591000113], + [-134.397084113999881, 56.72955963700015], + [-134.395130988999938, 56.741644598000065], + [-134.388091600999871, 56.756903387000037], + [-134.391184048999946, 56.780096747000172], + [-134.405384894999969, 56.819769598], + [-134.408558722999942, 56.842922268000123], + [-134.405669725999928, 56.852687893000066], + [-134.398304816999911, 56.860256252000127], + [-134.388498501999891, 56.865057684000121], + [-134.378163214999887, 56.866848049000012], + [-134.361154751999919, 56.863592841000141], + [-134.350982225999957, 56.855414130000142], + [-134.333485480999911, 56.832017320000077], + [-134.300648566999911, 56.803412177000084], + [-134.280873175999886, 56.792792059000035], + [-134.272043423999946, 56.801581122000115], + [-134.277211066999939, 56.821356512000037], + [-134.289784308999913, 56.83478424700003], + [-134.305287238999938, 56.846258856000148], + [-134.319203253999916, 56.859930731000091], + [-134.328236456999946, 56.888739325000031], + [-134.30614173099994, 56.897894598000036], + [-134.234201626999891, 56.894110419000086], + [-134.220326300999886, 56.889960028000147], + [-134.182687954999921, 56.859930731000091], + [-134.166818813999896, 56.853989976000079], + [-134.146555141999897, 56.848944403000061], + [-134.125559048999946, 56.846014716000028], + [-134.107533331999889, 56.846340236000131], + [-134.107533331999889, 56.853094794000086], + [-134.121937628999973, 56.862005927000112], + [-134.141428188999868, 56.884955145], + [-134.155344204999835, 56.894110419000086], + [-134.197132941999968, 56.900336005000057], + [-134.213449673999889, 56.90713125200007], + [-134.210560675999943, 56.922023830000128], + [-134.223459438999896, 56.929022528000118], + [-134.264556443999965, 56.941880601000136], + [-134.239613410999937, 56.941148179000109], + [-134.175852016999897, 56.922023830000128], + [-134.1283259759999, 56.917059637000179], + [-134.10594641799986, 56.9122582050001], + [-134.086415167999917, 56.900336005000057], + [-134.051747199999909, 56.895209052000141], + [-134.012684699999852, 56.885158596000068], + [-133.98668372299997, 56.865627346000096] + ] + ], + [ + [ + [-133.764637824999852, 57.076808986000017], + [-133.671945766999897, 57.060248114000146], + [-133.582875128999916, 57.050034898000106], + [-133.545806443999908, 57.038072007000082], + [-133.49058997299997, 57.031236070000048], + [-133.464711066999968, 57.024562893], + [-133.413482225999928, 57.003322658000016], + [-133.388172980999883, 56.997137762000065], + [-133.335113084999961, 56.99738190300009], + [-133.315907355999911, 56.990871486000103], + [-133.298736131999874, 56.969183661000116], + [-133.2904353509999, 56.950751044000086], + [-133.279896613999938, 56.933335679000109], + [-133.263254360999895, 56.925279038999989], + [-133.236724412999934, 56.935044664000102], + [-133.275257941999911, 56.966253973], + [-133.293283657999837, 56.988348700000174], + [-133.298736131999874, 57.010199286000116], + [-133.239125128999973, 56.996405341000028], + [-133.109120245999861, 56.998724677000084], + [-133.052357550999886, 56.982855536000059], + [-133.043324347999885, 56.965806382], + [-133.025217251999891, 56.950506903000033], + [-133.002674933999913, 56.939357815000122], + [-132.980376756999931, 56.935044664000102], + [-132.969960089999859, 56.92597077000012], + [-132.955922003999916, 56.905096747000144], + [-132.935658331999889, 56.866848049000012], + [-132.937001105999911, 56.850287177000141], + [-132.9486384759999, 56.83462148600016], + [-132.966664191999939, 56.822943427000055], + [-132.987172003999973, 56.818426825000117], + [-132.991078253999973, 56.808417059000121], + [-132.979237433999913, 56.786810614000117], + [-132.956166144999941, 56.756903387000037], + [-132.952748175999943, 56.746730861000103], + [-132.949086066999882, 56.709051825000117], + [-132.950835740999878, 56.701971747000144], + [-132.949330206999946, 56.695461330000157], + [-132.946197068999965, 56.691066799000069], + [-132.94163977799991, 56.687648830000072], + [-132.937489386999886, 56.683823960000055], + [-132.935658331999889, 56.678127346000068], + [-132.933949347999885, 56.641587632000139], + [-132.941395636999886, 56.626532294000114], + [-132.963002081999974, 56.612941799000154], + [-132.973500128999945, 56.609442450000174], + [-132.999175584999904, 56.605536200000174], + [-133.010812954999892, 56.606105861000131], + [-133.024647589999915, 56.612738348], + [-133.050119594999899, 56.635321356000176], + [-133.062001105999855, 56.640204169000143], + [-133.085560675999915, 56.646144924000069], + [-133.110910610999838, 56.660589911000116], + [-133.185658331999946, 56.721625067], + [-133.198109503999945, 56.736761786], + [-133.207427537999905, 56.770941473], + [-133.218413865999963, 56.787665106000034], + [-133.233631964999944, 56.801906643000123], + [-133.25035559799997, 56.812201239000146], + [-133.257883266999841, 56.80068594], + [-133.275990363999938, 56.80463288], + [-133.331288214999944, 56.834377346000011], + [-133.346424933999941, 56.837591864000061], + [-133.350738084999932, 56.832261460000026], + [-133.323638475999928, 56.799058335], + [-133.322417772999898, 56.786688544000143], + [-133.325754360999923, 56.775620835000112], + [-133.326730923999889, 56.763739325000145], + [-133.319691535999937, 56.75023021], + [-133.305083787999905, 56.735419012000122], + [-133.286732550999943, 56.727118231000034], + [-133.268381313999896, 56.73305898600016], + [-133.251047329999921, 56.742743231000119], + [-133.234364386999886, 56.742010809000092], + [-133.221791144999884, 56.731634833], + [-133.216867641999926, 56.712225653000175], + [-133.216867641999926, 56.678127346000068], + [-133.220855272999898, 56.67011139500012], + [-133.239125128999973, 56.657375393000066], + [-133.244130011999914, 56.647040106000148], + [-133.242339647999927, 56.634100653000147], + [-133.235218878999973, 56.63556549700003], + [-133.227447068999879, 56.642767645000063], + [-133.223703579999835, 56.647040106000148], + [-133.212635870999918, 56.646389065000122], + [-133.192250128999916, 56.641424872000172], + [-133.161936001999834, 56.63808828300013], + [-133.132883266999869, 56.63165924700003], + [-133.107085740999935, 56.62099844], + [-133.093373175999886, 56.606105861000131], + [-133.107004360999838, 56.59870026200015], + [-133.120025193999936, 56.605047919000086], + [-133.135894334999961, 56.609849351000079], + [-133.15269934799997, 56.612738348], + [-133.168446417999917, 56.612941799000154], + [-133.168446417999917, 56.606105861000131], + [-133.114084438999896, 56.593003648000078], + [-133.100738084999904, 56.585638739000089], + [-133.09390214799987, 56.57367584800015], + [-133.086984829999892, 56.543646552], + [-133.079090949999909, 56.530340887000179], + [-133.134348110999923, 56.530340887000179], + [-133.124419725999928, 56.51072825700011], + [-133.123850063999839, 56.491766669000114], + [-133.131906704999892, 56.475002346000096], + [-133.147938605999883, 56.462103583000058], + [-133.160023566999882, 56.457709052], + [-133.172963019999884, 56.455755927000141], + [-133.199533657999837, 56.455267645000148], + [-133.223703579999835, 56.462103583000058], + [-133.228871222999942, 56.465521552000084], + [-133.233021613999881, 56.470119533000016], + [-133.236683722999942, 56.475734768], + [-133.26431230399993, 56.479071356000034], + [-133.319976365999963, 56.471991278000175], + [-133.346587693999908, 56.475734768], + [-133.357899542999888, 56.48379140800013], + [-133.36266028599988, 56.49298737200003], + [-133.369048631999902, 56.500555731000148], + [-133.385080532999893, 56.503648179000052], + [-133.435943162999934, 56.503648179000052], + [-133.426625128999973, 56.49876536699999], + [-133.418853318999879, 56.492661851], + [-133.412831183999884, 56.485093492000047], + [-133.408599412999934, 56.475734768], + [-133.429310675999943, 56.475083726000079], + [-133.422474738999938, 56.463609117000104], + [-133.441314256999874, 56.453802802], + [-133.527170376999919, 56.439032294000114], + [-133.621245897999927, 56.442206122000172], + [-133.659413214999915, 56.46417877800009], + [-133.654164191999939, 56.556708075000174], + [-133.689198370999918, 56.571966864000146], + [-133.679432745999861, 56.584051825000145], + [-133.646066860999895, 56.592596747000172], + [-133.634592251999862, 56.606105861000131], + [-133.654652472999913, 56.605536200000174], + [-133.659047003999888, 56.614732164000046], + [-133.658029751999834, 56.628241278000118], + [-133.661854620999947, 56.640204169000143], + [-133.674224412999877, 56.648260809000178], + [-133.685861782999893, 56.65253327], + [-133.695668097999913, 56.659369208000115], + [-133.702870245999947, 56.674994208], + [-133.701527472999942, 56.694647528000147], + [-133.692982550999943, 56.711249091000113], + [-133.687855597999942, 56.730129299000126], + [-133.69664466099988, 56.756903387000037], + [-133.68211829299986, 56.759588934000121], + [-133.677316860999866, 56.765285549000012], + [-133.679432745999861, 56.772853908000158], + [-133.68578040299991, 56.781154690000122], + [-133.692697719999899, 56.792792059000035], + [-133.688954230999883, 56.798773505000057], + [-133.677642381999874, 56.798325914000074], + [-133.661854620999947, 56.791083075000031], + [-133.670033331999946, 56.813421942000062], + [-133.673085089999944, 56.837347723000121], + [-133.679269985999895, 56.853705145000148], + [-133.69664466099988, 56.853094794000086], + [-133.697580532999893, 56.849554755], + [-133.695912238999938, 56.836004950000031], + [-133.69664466099988, 56.832017320000077], + [-133.702056443999936, 56.829413153000147], + [-133.71532141799986, 56.825506903000147], + [-133.720570441999939, 56.822088934000149], + [-133.729237433999856, 56.814642645000092], + [-133.740589972999942, 56.808905341000113], + [-133.75291907499988, 56.807318427000084], + [-133.764963344999899, 56.812201239000146], + [-133.751291469999842, 56.818426825000117], + [-133.751291469999842, 56.825832424000097], + [-133.766509568999936, 56.824937242000104], + [-133.781239386999914, 56.826564846000124], + [-133.794789191999882, 56.83112213700015], + [-133.806507941999968, 56.839504299000126], + [-133.803700324999909, 56.843329169000143], + [-133.79906165299991, 56.853094794000086], + [-133.811879035999937, 56.85252513200011], + [-133.820139126999919, 56.855414130000142], + [-133.822906053999873, 56.862250067000062], + [-133.819569464999944, 56.872992255000085], + [-133.836333787999962, 56.87189362200003], + [-133.850331183999913, 56.868150132], + [-133.863433397999898, 56.867743231000091], + [-133.877552863999938, 56.876410223000093], + [-133.890451626999834, 56.893377997000144], + [-133.888172980999883, 56.901434637000094], + [-133.876535610999866, 56.902899481000148], + [-133.861154751999919, 56.900336005000057], + [-133.79552161399991, 56.881496486000017], + [-133.763010219999842, 56.880072333000143], + [-133.737619594999899, 56.894110419000086], + [-133.754953579999892, 56.900580145], + [-133.839182094999899, 56.919501044000114], + [-133.888417120999918, 56.955511786000088], + [-134.018177863999881, 57.017564195000105], + [-134.018177863999881, 57.023830471000068], + [-134.01317298099994, 57.029242255000113], + [-134.011219855999911, 57.03611888200011], + [-134.011341925999943, 57.055161851000108], + [-134.004383917999888, 57.063666083000058], + [-133.988107876999834, 57.066473700000088], + [-133.95641028599988, 57.065375067000062], + [-133.945383266999926, 57.066880601000108], + [-133.9330134759999, 57.070746161000116], + [-133.921457485999895, 57.076320705000043], + [-133.912668423999889, 57.082749742000132], + [-133.900705532999893, 57.089341539000102], + [-133.887033657999837, 57.090033270000148], + [-133.764637824999852, 57.076808986000017] + ] + ], + [ + [ + [-153.180856899999867, 57.174994208], + [-153.212351040999891, 57.133693752000127], + [-153.154408331999889, 57.164536851000108], + [-153.123768683999913, 57.170599677000027], + [-153.10106360599994, 57.179754950000088], + [-153.089466925999943, 57.181463934000092], + [-153.079660610999895, 57.17910390800013], + [-153.068470831999889, 57.170355536000059], + [-153.058420376999919, 57.168443101000108], + [-152.979237433999941, 57.17641836100016], + [-152.952259894999884, 57.174627997000172], + [-152.933664516999897, 57.162054755000085], + [-152.920277472999885, 57.157945054000137], + [-152.907866990999878, 57.164740302000055], + [-152.899973110999895, 57.164740302000055], + [-152.888742641999897, 57.158840236000046], + [-152.884510870999861, 57.149969794000171], + [-152.910511847999942, 57.13190338700015], + [-152.926136847999942, 57.125962632000139], + [-153.006906704999949, 57.113836981000034], + [-153.01593990799995, 57.117499091000084], + [-153.020130988999881, 57.123358466000056], + [-153.024606899999924, 57.127875067], + [-153.034250454999892, 57.127427476], + [-153.059030727999868, 57.11469147300015], + [-153.083363410999937, 57.098374742000104], + [-153.11078854099992, 57.088812567000119], + [-153.144724087999947, 57.096136786000145], + [-153.159535285999937, 57.097113348], + [-153.194081183999913, 57.08295319200009], + [-153.20921790299991, 57.079046942], + [-153.215646938999924, 57.072211005000085], + [-153.218739386999914, 57.057033596000096], + [-153.219797329999892, 57.034654039000074], + [-153.235585089999915, 57.009833075000117], + [-153.27216549399995, 56.998521226000136], + [-153.313221808999941, 56.997626044000029], + [-153.342722133999928, 57.003973700000145], + [-153.32555091099988, 57.022040106000176], + [-153.322214321999866, 57.023830471000068], + [-153.326852993999893, 57.031724351000051], + [-153.333688930999926, 57.035711981000119], + [-153.342722133999928, 57.038072007000082], + [-153.341379360999952, 57.05292389500012], + [-153.331898566999939, 57.059881903000033], + [-153.321156378999916, 57.06464264500012], + [-153.316029425999886, 57.072821356000034], + [-153.32909094999988, 57.080023505000057], + [-153.359364386999857, 57.068508205000128], + [-153.391835089999859, 57.06073639500012], + [-153.411610480999883, 57.079046942], + [-153.395130988999881, 57.08331940300009], + [-153.362172003999916, 57.096747137000094], + [-153.338327602999925, 57.10175202000012], + [-153.338612433999884, 57.106675523000021], + [-153.344593878999888, 57.111517645000092], + [-153.353586391999897, 57.113836981000034], + [-153.361683722999942, 57.112250067], + [-153.379953579999892, 57.106390692000062], + [-153.391102667999917, 57.106390692000062], + [-153.378977016999926, 57.117621161000059], + [-153.342722133999928, 57.141099351000136], + [-153.309763149999952, 57.170314846000068], + [-153.298329230999911, 57.174627997000172], + [-153.290760870999947, 57.178656317000147], + [-153.270130988999938, 57.19822825700011], + [-153.260487433999856, 57.205633856000091], + [-153.244374152999882, 57.211004950000145], + [-153.229237433999884, 57.210638739000146], + [-153.221140102999954, 57.203517971000096], + [-153.22602291599992, 57.188299872000115], + [-153.187326626999891, 57.185003973000065], + [-153.180856899999867, 57.174994208] + ] + ], + [ + [ + [-170.136789516999897, 57.224554755000113], + [-170.145375128999888, 57.209418036000116], + [-170.149525519999941, 57.205755927000084], + [-170.154245571999923, 57.199896552000112], + [-170.158029751999862, 57.192572333000115], + [-170.162180141999897, 57.174790757000139], + [-170.168568488999938, 57.16901276200015], + [-170.203073696999923, 57.154364325000145], + [-170.25523841099988, 57.141099351000136], + [-170.254099087999919, 57.129299221000068], + [-170.262806769999912, 57.118882554000081], + [-170.276437954999949, 57.110988674000012], + [-170.289987758999928, 57.106390692000062], + [-170.275339321999923, 57.127142645000063], + [-170.272206183999941, 57.136542059000178], + [-170.275705532999922, 57.147935289000046], + [-170.281727667999917, 57.147609768000123], + [-170.319894985999895, 57.154689846000096], + [-170.347279425999886, 57.14736562700007], + [-170.365956183999941, 57.1485863300001], + [-170.385202602999897, 57.15355052300005], + [-170.399240688999953, 57.161037502000013], + [-170.407093878999916, 57.171128648], + [-170.412098761999857, 57.184800523000106], + [-170.409901495999861, 57.196844794000029], + [-170.396107550999886, 57.201971747000144], + [-170.358265753999916, 57.201971747000144], + [-170.34788977799991, 57.204250393000038], + [-170.333119269999941, 57.214016018000152], + [-170.323801235999895, 57.216253973000121], + [-170.262806769999912, 57.214016018000152], + [-170.241566535999937, 57.216253973000121], + [-170.147409633999928, 57.234076239000117], + [-170.135690883999928, 57.242743231000119], + [-170.123036261999857, 57.2501488300001], + [-170.104440883999956, 57.250392971000124], + [-170.113352016999897, 57.239894924000069], + [-170.136789516999897, 57.224554755000113] + ] + ], + [ + [ + [-135.568714972999942, 57.241197007000082], + [-135.553781704999892, 57.229925848000065], + [-135.570871548999861, 57.222967841000084], + [-135.591053839999887, 57.224310614000089], + [-135.628244594999899, 57.236721096000011], + [-135.614369269999884, 57.223578192000147], + [-135.606271938999868, 57.209458726000108], + [-135.602447068999936, 57.192775783000073], + [-135.601551886999857, 57.171576239000089], + [-135.595570441999939, 57.154608466000113], + [-135.580881313999839, 57.148138739], + [-135.562733527999939, 57.145819403000033], + [-135.546294725999928, 57.141099351000136], + [-135.565012173999918, 57.112290757], + [-135.601633266999841, 57.035549221000153], + [-135.628244594999899, 57.010199286000116], + [-135.642079230999883, 57.008205471000096], + [-135.674183722999942, 57.01170482], + [-135.686879035999908, 57.007025458000058], + [-135.696685350999928, 57.001044012000037], + [-135.707508917999917, 56.998439846000153], + [-135.841135219999899, 56.989691473000065], + [-135.831532355999911, 57.050482489], + [-135.823150193999965, 57.079779364000117], + [-135.806996222999913, 57.099554755000142], + [-135.791371222999942, 57.106105861000131], + [-135.762074347999913, 57.11416250200007], + [-135.727202928999873, 57.142523505], + [-135.717518683999913, 57.153469143000066], + [-135.710804816999968, 57.168443101000108], + [-135.779693162999934, 57.165716864000117], + [-135.809722459999875, 57.173000393000152], + [-135.820668097999942, 57.195746161000088], + [-135.815052863999938, 57.207709052000112], + [-135.797718878999945, 57.228827216000028], + [-135.80016028599988, 57.236721096000011], + [-135.812408006999959, 57.23859284100017], + [-135.842355923999833, 57.226507880000057], + [-135.855376756999931, 57.223089911000059], + [-135.839222785999937, 57.245672919000029], + [-135.837513800999943, 57.255519924000154], + [-135.847971157999922, 57.264634507000139], + [-135.825266079999892, 57.284084377000127], + [-135.833973761999857, 57.306341864], + [-135.843739386999914, 57.324693101000051], + [-135.824086066999939, 57.33234284100017], + [-135.724761522999927, 57.328924872000144], + [-135.615223761999914, 57.284491278000147], + [-135.598622199999937, 57.271918036000059], + [-135.568714972999942, 57.241197007000082] + ] + ], + [ + [ + [-152.298183320999925, 57.363154677000026], + [-152.315124213999894, 57.363121231000108], + [-152.29993522399991, 57.374117520000183], + [-152.288188698999875, 57.396984506000123], + [-152.262730041999902, 57.390629629000117], + [-152.25592217499991, 57.384243442000084], + [-152.267743681999946, 57.375086879], + [-152.298183320999925, 57.363154677000026] + ] + ], + [ + [ + [-153.829294399999924, 57.451076565], + [-153.843576626999919, 57.436224677000141], + [-153.86778723899991, 57.45258209800015], + [-153.881459113999938, 57.476141669000086], + [-153.887074347999942, 57.494940497000144], + [-153.887806769999884, 57.508978583], + [-153.880360480999911, 57.515204169000143], + [-153.875843878999945, 57.521714585000055], + [-153.875721808999884, 57.533107815], + [-153.867909308999884, 57.543361721000124], + [-153.846750454999892, 57.540594794000171], + [-153.83149166599992, 57.525702216000028], + [-153.831776495999947, 57.509995835000055], + [-153.833811001999891, 57.502020575000117], + [-153.830677863999881, 57.485256252000099], + [-153.829294399999924, 57.451076565] + ] + ], + [ + [ + [-135.409779425999943, 57.448960679], + [-135.396066860999895, 57.442694403000033], + [-135.382923956999946, 57.445298570000134], + [-135.354562954999921, 57.462632554000109], + [-135.316517706999917, 57.478338934000178], + [-135.295033331999889, 57.481634833000115], + [-135.28563391799986, 57.472845770000063], + [-135.277414516999869, 57.461330471000124], + [-135.258290167999917, 57.466294663999989], + [-135.236643032999893, 57.477199611000131], + [-135.220773891999897, 57.483099677], + [-135.180287238999938, 57.48069896000014], + [-135.142241990999935, 57.469427802000055], + [-135.153309699999909, 57.452948309000149], + [-135.191232876999919, 57.443182684000121], + [-135.203684048999946, 57.428534247000115], + [-135.181996222999942, 57.436753648000106], + [-135.156239386999914, 57.44131094000015], + [-135.130279100999928, 57.441107489], + [-135.060373501999891, 57.422919012000122], + [-135.052845831999946, 57.418605861000017], + [-135.04515540299991, 57.411444403000147], + [-135.008127407999893, 57.403469143], + [-134.994781053999873, 57.397772528000033], + [-134.909494594999899, 57.339789130000057], + [-134.909494594999899, 57.33234284100017], + [-134.95246334499987, 57.342474677000112], + [-134.99819902299987, 57.34658437700007], + [-134.99819902299987, 57.339789130000057], + [-134.950428839999944, 57.325506903000147], + [-134.950428839999944, 57.319281317], + [-134.971058722999942, 57.312445380000085], + [-134.978830532999893, 57.306830145000092], + [-134.984527147999927, 57.298163153000175], + [-134.965972459999932, 57.29828522300015], + [-134.958322719999899, 57.300482489000146], + [-134.950428839999944, 57.305609442000062], + [-134.939076300999943, 57.299505927000084], + [-134.93297278599988, 57.291245835], + [-134.930409308999884, 57.280829169000086], + [-134.930002407999893, 57.26776764500012], + [-134.923491990999963, 57.259222723], + [-134.908680792999917, 57.256333726000079], + [-134.852853969999927, 57.260321356000034], + [-134.838978644999941, 57.257798570000134], + [-134.833119269999884, 57.246649481000091], + [-134.832834438999868, 57.232814846000011], + [-134.834055141999897, 57.221625067], + [-134.840240037999934, 57.215399481000034], + [-134.854847785999937, 57.216253973000121], + [-134.826161261999914, 57.197455145000092], + [-134.808257615999935, 57.181382554000109], + [-134.808257615999935, 57.164007880000113], + [-134.833119269999884, 57.141099351000136], + [-134.810658331999974, 57.133978583000086], + [-134.78648841099988, 57.117987372000172], + [-134.775380011999943, 57.098089911000088], + [-134.792144334999961, 57.079046942], + [-134.774525519999941, 57.07916901200015], + [-134.761219855999911, 57.072821356000034], + [-134.751576300999943, 57.062811591000141], + [-134.744984503999973, 57.05174388200011], + [-134.743316209999961, 57.043890692000119], + [-134.746815558999856, 57.03143952], + [-134.744984503999973, 57.023830471000068], + [-134.74071204299986, 57.021185614000089], + [-134.734486456999917, 57.020738023], + [-134.728260870999947, 57.01837799700003], + [-134.723866339999859, 57.010199286000116], + [-134.723947719999842, 56.99603913], + [-134.732533331999946, 56.976752020000063], + [-134.731312628999945, 56.962958075000145], + [-134.723540818999936, 56.952948309000178], + [-134.713734503999916, 56.94603099199999], + [-134.709339972999942, 56.937323309000092], + [-134.717681443999908, 56.922023830000128], + [-134.693592902999882, 56.908392645000092], + [-134.686187303999901, 56.893500067000119], + [-134.689768032999865, 56.849676825000174], + [-134.683176235999895, 56.835638739000117], + [-134.641346808999856, 56.797837632000082], + [-134.651926235999923, 56.778062242000047], + [-134.646148240999935, 56.765326239], + [-134.63304602799991, 56.755316473], + [-134.621490037999962, 56.743841864000061], + [-134.616118943999908, 56.728461005000113], + [-134.607818162999934, 56.595892645], + [-134.612456834999932, 56.565090236000131], + [-134.614613410999937, 56.558294989], + [-134.624175584999932, 56.547430731000119], + [-134.62828528599988, 56.548570054000052], + [-134.63219153599988, 56.556341864000061], + [-134.641346808999856, 56.565130927000112], + [-134.642567511999886, 56.5704613300001], + [-134.650298631999902, 56.582261460000055], + [-134.659006313999896, 56.588080145000035], + [-134.663075324999937, 56.575384833000058], + [-134.669260219999899, 56.537827867000047], + [-134.626047329999892, 56.486232815000093], + [-134.624908006999874, 56.472642320000134], + [-134.634999152999939, 56.455511786], + [-134.632679816999968, 56.439113674000097], + [-134.625559048999918, 56.424017645000092], + [-134.621490037999962, 56.411200262000065], + [-134.622466600999928, 56.390773830000072], + [-134.626454230999911, 56.372137762000179], + [-134.634755011999914, 56.355047919000143], + [-134.648793097999942, 56.339178778000118], + [-134.62759355399993, 56.330389716000141], + [-134.631743943999879, 56.309271552000141], + [-134.663075324999937, 56.257269598000065], + [-134.634632941999939, 56.269720770000092], + [-134.626372850999928, 56.261460679000024], + [-134.632964647999927, 56.24087148600016], + [-134.648793097999942, 56.216294664000046], + [-134.641346808999856, 56.208889065000065], + [-134.656239386999914, 56.17470937700007], + [-134.667469855999911, 56.170396226000079], + [-134.689768032999865, 56.181545315], + [-134.672596808999941, 56.205633856000119], + [-134.669260219999899, 56.216294664000046], + [-134.673736131999874, 56.219427802000112], + [-134.682932094999842, 56.229315497000059], + [-134.694650844999927, 56.233343817], + [-134.699574347999885, 56.23041413], + [-134.702219204999892, 56.225287177000084], + [-134.707142706999946, 56.222479559000121], + [-134.735707160999937, 56.217922268000066], + [-134.749989386999914, 56.217352606000119], + [-134.765492316999939, 56.222479559000121], + [-134.751210089999944, 56.236151434000149], + [-134.772124803999901, 56.237209377000013], + [-134.787342902999882, 56.244818427000055], + [-134.796498175999943, 56.257635809000178], + [-134.799631313999839, 56.274359442000119], + [-134.803374803999873, 56.281561591000141], + [-134.8119197259999, 56.284979559000149], + [-134.821197068999936, 56.287176825000145], + [-134.826975063999896, 56.290757554000109], + [-134.829172329999892, 56.29954661699999], + [-134.829213019999884, 56.30988190300009], + [-134.826975063999896, 56.325588283000158], + [-134.847564256999931, 56.329046942000062], + [-134.867502407999837, 56.32538483300003], + [-134.882435675999972, 56.329575914000046], + [-134.888335740999906, 56.356268622000144], + [-134.892201300999915, 56.361070054000052], + [-134.91144771999987, 56.376776434000121], + [-134.919097459999875, 56.380194403000033], + [-134.925689256999959, 56.385158596000068], + [-134.931019660999937, 56.396226304000109], + [-134.936838344999899, 56.41429271000014], + [-134.942372199999909, 56.421576239000146], + [-134.99819902299987, 56.472642320000134], + [-135.003895636999857, 56.490708726000051], + [-135.017893032999922, 56.509019273000106], + [-135.035715298999889, 56.525458075000117], + [-135.052845831999946, 56.537827867000047], + [-135.043446417999917, 56.539252020000035], + [-135.034535285999965, 56.542222398000135], + [-135.02635657499988, 56.546535549000126], + [-135.019357876999891, 56.552069403000147], + [-135.033273891999869, 56.560288804000052], + [-135.037505662999877, 56.56854889500012], + [-135.032622850999928, 56.576849677000112], + [-135.019357876999891, 56.585638739000089], + [-134.998361782999837, 56.58860911699999], + [-134.947010870999918, 56.587307033000101], + [-134.936838344999899, 56.595892645], + [-134.927601691999939, 56.620428778000033], + [-134.904855923999975, 56.646063544000086], + [-134.84740149599989, 56.688666083000143], + [-134.868560350999871, 56.688177802000055], + [-134.883778449999852, 56.685492255000085], + [-134.897084113999881, 56.678208726000051], + [-134.912587042999917, 56.664455471000124], + [-134.933705206999917, 56.639960028000118], + [-134.945871548999889, 56.630438544000114], + [-134.961008266999897, 56.626532294000114], + [-134.978627081999917, 56.631984768000152], + [-134.983713344999842, 56.644924221000153], + [-134.981597459999932, 56.660793361000074], + [-134.971913214999859, 56.692572333000115], + [-134.964466925999886, 56.702541408000044], + [-134.953358527999853, 56.709051825000117], + [-134.936838344999899, 56.715969143000038], + [-134.962635870999918, 56.721136786000116], + [-134.984730597999885, 56.714544989000146], + [-134.999989386999857, 56.69757721600017], + [-135.012318488999938, 56.650213934000035], + [-135.028472459999875, 56.631333726000108], + [-135.048410610999866, 56.616156317000119], + [-135.066517706999974, 56.606105861000131], + [-135.092762824999909, 56.597967841000028], + [-135.109771287999962, 56.601752020000148], + [-135.119007941999939, 56.61713288], + [-135.121734178999901, 56.64362213700015], + [-135.119496222999913, 56.662502346000096], + [-135.112212693999908, 56.678697007000139], + [-135.099354620999861, 56.693589585], + [-135.080189581999917, 56.708563544000029], + [-135.014271613999966, 56.739406643000095], + [-134.994781053999873, 56.753485419000029], + [-134.998850063999839, 56.761664130000142], + [-135.01463782499988, 56.771063544000171], + [-135.031809048999889, 56.775132554000109], + [-135.039784308999856, 56.767523505], + [-135.044992641999869, 56.759222723], + [-135.137033657999865, 56.694525458000086], + [-135.164133266999897, 56.685207424000126], + [-135.175770636999914, 56.679022528000147], + [-135.187896287999877, 56.676743882], + [-135.200550910999937, 56.684881903000118], + [-135.202259894999941, 56.69472890800013], + [-135.194081183999856, 56.702826239000061], + [-135.182932094999927, 56.709784247000144], + [-135.175770636999914, 56.715969143000038], + [-135.177357550999943, 56.725978908000101], + [-135.184437628999973, 56.734930731000034], + [-135.185536261999914, 56.741400458000115], + [-135.154693162999962, 56.745917059000178], + [-135.152088995999861, 56.751654364000061], + [-135.154855923999946, 56.760321356000148], + [-135.158924933999913, 56.792059637000094], + [-135.158680792999945, 56.800238348000036], + [-135.152740037999934, 56.80878327000012], + [-135.143299933999913, 56.815619208000058], + [-135.13540605399993, 56.819322007], + [-135.128529425999943, 56.823472398000135], + [-135.121734178999901, 56.832017320000077], + [-135.174224412999934, 56.826361395000063], + [-135.269276495999947, 56.789007880000113], + [-135.320952928999901, 56.797837632000082], + [-135.307362433999941, 56.820868231000034], + [-135.325672980999911, 56.825506903000147], + [-135.353342251999891, 56.824164130000085], + [-135.367543097999913, 56.828924872000172], + [-135.367787238999938, 56.874009507000139], + [-135.360259568999879, 56.887600002000099], + [-135.340891079999892, 56.879828192], + [-135.324574347999942, 56.890773830000157], + [-135.305897589999887, 56.890692450000174], + [-135.294504360999895, 56.892157294000143], + [-135.299916144999941, 56.907700914000046], + [-135.313791469999842, 56.92072174700003], + [-135.33421790299991, 56.93105703300013], + [-135.356271938999924, 56.938299872000144], + [-135.374989386999886, 56.941880601000136], + [-135.369048631999959, 56.943833726], + [-135.363758917999888, 56.94627513200011], + [-135.354562954999921, 56.955511786000088], + [-135.350005662999962, 56.970404364000117], + [-135.330881313999896, 56.97858307500006], + [-135.30894934799997, 56.982123114000117], + [-135.289377407999893, 56.982855536000059], + [-135.282338019999941, 56.98529694200009], + [-135.262928839999915, 56.996893622000115], + [-135.258900519999941, 57.000555731000148], + [-135.253977016999897, 57.003729559000121], + [-135.229562954999835, 57.004543361000131], + [-135.20335852799991, 57.013495184000149], + [-135.164051886999914, 57.013617255000142], + [-135.156564907999837, 57.020697333], + [-135.165353969999899, 57.041734117000132], + [-135.185902472999942, 57.045640367000132], + [-135.227609829999892, 57.038072007000082], + [-135.267933722999942, 57.039862372000144], + [-135.310292120999861, 57.047349351000136], + [-135.348133917999917, 57.063910223], + [-135.374989386999886, 57.092718817000119], + [-135.378163214999944, 57.128729559000092], + [-135.35024980399993, 57.149359442000119], + [-135.30760657499988, 57.158758856000063], + [-135.266428188999896, 57.161037502000013], + [-135.266428188999896, 57.168443101000108], + [-135.289662238999938, 57.174627997000172], + [-135.310129360999895, 57.177679755000057], + [-135.329172329999892, 57.176092841000028], + [-135.348296678999958, 57.168443101000108], + [-135.376861131999931, 57.150091864000146], + [-135.394154425999943, 57.14736562700007], + [-135.412912563999896, 57.157904364000146], + [-135.412587042999888, 57.169623114000117], + [-135.397694464999915, 57.182074286000145], + [-135.378285285999937, 57.191839911], + [-135.364409959999932, 57.195746161000088], + [-135.364165818999879, 57.204046942000062], + [-135.334055141999869, 57.250392971000124], + [-135.412953253999888, 57.244777736000131], + [-135.429595506999931, 57.246649481000091], + [-135.455962693999936, 57.253322658000158], + [-135.481516079999835, 57.248968817000062], + [-135.506011522999955, 57.241034247000115], + [-135.529204881999902, 57.236721096000011], + [-135.542836066999939, 57.242987372000144], + [-135.577707485999895, 57.287909247000144], + [-135.639230923999833, 57.316839911000059], + [-135.648752407999837, 57.328924872000144], + [-135.673207160999965, 57.349676825000145], + [-135.674956834999961, 57.358628648], + [-135.662424282999893, 57.363755601000108], + [-135.645822719999899, 57.366197007000139], + [-135.604237433999913, 57.367743231000176], + [-135.485666469999899, 57.35101959800015], + [-135.475331183999856, 57.354315497000087], + [-135.471180792999917, 57.363592841000141], + [-135.478586391999897, 57.368312893000152], + [-135.525786912999877, 57.373928127000156], + [-135.56704667899993, 57.389471747000144], + [-135.585845506999874, 57.392564195000134], + [-135.608998175999943, 57.387600002000099], + [-135.602202928999901, 57.397894598], + [-135.591623501999862, 57.404974677000055], + [-135.550648566999939, 57.423773505000113], + [-135.547596808999941, 57.427435614000061], + [-135.547434048999889, 57.431789455000157], + [-135.540109829999892, 57.442206122000144], + [-135.533192511999886, 57.447211005], + [-135.516468878999945, 57.454413153000033], + [-135.508778449999909, 57.459540106000034], + [-135.504709438999868, 57.466498114000117], + [-135.506581183999913, 57.472357489000061], + [-135.510365363999938, 57.477728583000115], + [-135.512115037999934, 57.483099677], + [-135.512806769999884, 57.490464585000083], + [-135.517811652999939, 57.501613674000012], + [-135.519032355999855, 57.507310288999989], + [-135.515370245999918, 57.515611070000077], + [-135.506743943999879, 57.517767645000063], + [-135.496571417999945, 57.518011786], + [-135.488270636999857, 57.520982164000102], + [-135.436512824999852, 57.549994208], + [-135.381174282999865, 57.55361562700007], + [-135.327056443999879, 57.53839752800009], + [-135.279408331999889, 57.511053778000118], + [-135.310536261999914, 57.490871486000074], + [-135.381825324999909, 57.471340236000017], + [-135.409779425999943, 57.448960679] + ] + ], + [ + [ + [-152.422800258999928, 57.96426015800013], + [-152.42430579299986, 57.952093817000147], + [-152.417103644999941, 57.943996486000017], + [-152.416981574999852, 57.938869533000016], + [-152.422963019999884, 57.934312242000075], + [-152.417103644999941, 57.930365302000084], + [-152.388295050999886, 57.926499742000075], + [-152.360829230999855, 57.92674388200011], + [-152.355295376999948, 57.92597077], + [-152.34390214799987, 57.923325914000102], + [-152.336374477999925, 57.921698309000178], + [-152.325388149999952, 57.916001695000105], + [-152.330148891999954, 57.907456773], + [-152.356190558999913, 57.893947658000016], + [-152.360666469999899, 57.888902085000083], + [-152.369374152999882, 57.886419989000146], + [-152.38117428299995, 57.889227606000091], + [-152.397328253999916, 57.896063544000114], + [-152.485951300999886, 57.914536851000136], + [-152.504831508999928, 57.925726630000057], + [-152.492624477999954, 57.940619208], + [-152.483143683999941, 57.948472398], + [-152.487863735999952, 57.95026276200015], + [-152.489084438999896, 57.954006252000013], + [-152.490305141999897, 57.956691799000097], + [-152.492014126999891, 57.957220770000063], + [-152.49445553299995, 57.958197333000143], + [-152.492746548999946, 57.96157461100016], + [-152.483957485999952, 57.963120835], + [-152.474680141999897, 57.960882880000113], + [-152.463449673999889, 57.959540106000034], + [-152.432321743999921, 57.969183661], + [-152.422800258999928, 57.96426015800013] + ] + ], + [ + [ + [-153.260812954999892, 57.887844143000038], + [-153.22874915299991, 57.853908596000068], + [-153.212961391999954, 57.83030833500014], + [-153.212351040999891, 57.81268952], + [-153.224110480999883, 57.81159088700015], + [-153.281239386999943, 57.818915106000148], + [-153.283924933999913, 57.821437893000095], + [-153.287464972999913, 57.826361395000148], + [-153.292958136999943, 57.831040757000054], + [-153.301747199999909, 57.833197333000058], + [-153.319650844999956, 57.834540106000148], + [-153.327707485999895, 57.836411851000108], + [-153.335886196999923, 57.839422919000029], + [-153.331044074999909, 57.841294663999989], + [-153.327015753999859, 57.843736070000134], + [-153.32249915299991, 57.845851955000128], + [-153.316029425999886, 57.846869208], + [-153.325266079999864, 57.858628648], + [-153.342518683999856, 57.862250067000147], + [-153.380563930999955, 57.860500393000152], + [-153.396921352999868, 57.863836981000176], + [-153.522450324999909, 57.92096588700015], + [-153.541940883999928, 57.935614325000145], + [-153.528269008999871, 57.953192450000088], + [-153.506662563999896, 57.96979401200015], + [-153.482248501999948, 57.977769273000106], + [-153.460031704999892, 57.969712632000082], + [-153.432687954999892, 57.963568427], + [-153.326649542999945, 57.926581122000144], + [-153.279733852999897, 57.902899481000034], + [-153.260812954999892, 57.887844143000038] + ] + ], + [ + [ + [-152.764108852999925, 57.930080471000124], + [-152.785959438999896, 57.925523179], + [-152.809885219999927, 57.929103908000073], + [-152.827097133999928, 57.93695709800015], + [-152.852243618999921, 57.944077867000104], + [-152.86070716099988, 57.954657294000143], + [-152.853627081999917, 57.967433986000103], + [-152.833078579999892, 57.974595445000048], + [-152.753610805999955, 57.98065827000012], + [-152.74437415299991, 57.983832098], + [-152.730091925999886, 57.982245184000149], + [-152.729196743999921, 57.973863023000106], + [-152.739003058999941, 57.968573309000035], + [-152.74164791599992, 57.962591864000117], + [-152.739857550999943, 57.951646226000051], + [-152.747995571999951, 57.939154364000146], + [-152.764108852999925, 57.930080471000124] + ] + ], + [ + [ + [-153.012766079999892, 57.929103908000073], + [-152.993234829999892, 57.928778387000037], + [-153.004709438999953, 57.948553778000147], + [-152.982655402999853, 57.951483466000084], + [-152.862294074999909, 57.934515692000119], + [-152.831979946999923, 57.923651434000035], + [-152.808298305999898, 57.908270575000088], + [-152.854603644999884, 57.895453192000062], + [-152.87763424399995, 57.886175848], + [-152.890817837999919, 57.874172268000095], + [-152.872629360999895, 57.876044012000065], + [-152.856678839999915, 57.880316473000065], + [-152.856678839999915, 57.874172268000095], + [-152.893503383999871, 57.86041901200015], + [-152.903675910999937, 57.837591864000146], + [-152.904855923999946, 57.81159088700015], + [-152.92524166599992, 57.768255927], + [-152.915516730999911, 57.755764065000093], + [-152.899362758999928, 57.745794989], + [-152.890817837999919, 57.73330312700007], + [-152.885568813999924, 57.728705145000148], + [-152.873768683999941, 57.730169989], + [-152.862009243999864, 57.735012111000074], + [-152.856678839999915, 57.74042389500012], + [-152.85773678299995, 57.749945380000113], + [-152.862497524999952, 57.765529690000122], + [-152.86351477799991, 57.774237372000115], + [-152.858713344999927, 57.814398505000113], + [-152.843698696999923, 57.845282294000171], + [-152.817982550999886, 57.86041901200015], + [-152.780995245999918, 57.85370514500012], + [-152.766224738999938, 57.843410549000012], + [-152.754139777999939, 57.832464911000116], + [-152.741810675999886, 57.826890367000132], + [-152.726389126999948, 57.833197333000058], + [-152.713978644999941, 57.846869208], + [-152.698068813999896, 57.875718492000132], + [-152.685373501999948, 57.887844143000038], + [-152.668771938999896, 57.880804755000142], + [-152.635568813999896, 57.871568101], + [-152.623972133999956, 57.860500393000152], + [-152.612741665999948, 57.87490469], + [-152.61571204299986, 57.890448309000121], + [-152.626088019999884, 57.904730536000031], + [-152.636952277999853, 57.915106512000094], + [-152.624582485999923, 57.932847398000106], + [-152.607899542999888, 57.935044664000017], + [-152.590402798999946, 57.928900458000115], + [-152.575510219999899, 57.921332098000065], + [-152.570423956999946, 57.916164455000157], + [-152.565012173999889, 57.908433335000055], + [-152.558908657999922, 57.903225002000156], + [-152.551625128999888, 57.905218817], + [-152.542469855999911, 57.91152578300013], + [-152.532704230999883, 57.914455471000153], + [-152.506947394999941, 57.915106512000094], + [-152.486317511999914, 57.910711981000034], + [-152.472727016999954, 57.900336005000113], + [-152.460886196999923, 57.887844143000038], + [-152.445505337999862, 57.87726471600017], + [-152.428334113999938, 57.868068752000099], + [-152.422800258999928, 57.859279690000122], + [-152.426706508999928, 57.84845612200003], + [-152.438343878999916, 57.833197333000058], + [-152.421131964999915, 57.821966864000061], + [-152.402211066999882, 57.823472398000106], + [-152.382557745999918, 57.83323802300005], + [-152.363270636999914, 57.846869208], + [-152.356312628999888, 57.838202216000113], + [-152.348255988999881, 57.831691799000012], + [-152.33922278599988, 57.82746002800009], + [-152.329090949999909, 57.825751044000086], + [-152.357289191999882, 57.799017645000063], + [-152.458973761999943, 57.768133856000119], + [-152.49669348899991, 57.747259833000058], + [-152.535023566999939, 57.719794012000094], + [-152.551136847999913, 57.70331452000012], + [-152.541371222999885, 57.695990302000112], + [-152.520619269999884, 57.702622788999989], + [-152.498036261999914, 57.715887762000122], + [-152.473093227999868, 57.726019598000065], + [-152.46308346299989, 57.72288646], + [-152.468495245999918, 57.714016018000152], + [-152.465646938999896, 57.692328192000062], + [-152.46898352799991, 57.67869700700011], + [-152.476877407999893, 57.672023830000157], + [-152.486154751999948, 57.666083075000031], + [-152.49360104099992, 57.655096747000172], + [-152.467762824999909, 57.657171942], + [-152.420847133999956, 57.68195221600017], + [-152.397409633999899, 57.688544012000037], + [-152.415516730999911, 57.674953518000095], + [-152.428293423999946, 57.655951239000089], + [-152.435861782999893, 57.635443427000112], + [-152.438343878999916, 57.617173570000048], + [-152.426340298999889, 57.613511460000026], + [-152.342762824999937, 57.633978583000058], + [-152.160878058999913, 57.627142645000148], + [-152.147084113999938, 57.622626044000086], + [-152.155466274999867, 57.612860419000143], + [-152.178293423999889, 57.599798895000092], + [-152.24970455599987, 57.541489976000079], + [-152.270619269999941, 57.528509833000086], + [-152.291086391999897, 57.519842841000084], + [-152.308908657999893, 57.509019273], + [-152.322255011999886, 57.489935614], + [-152.328114386999914, 57.465399481000176], + [-152.33031165299991, 57.445949611000074], + [-152.338693813999896, 57.433172919000057], + [-152.362985805999955, 57.428534247000115], + [-152.417917446999923, 57.435288804000052], + [-152.425729946999923, 57.437445380000057], + [-152.433094855999911, 57.441107489], + [-152.440541144999912, 57.442816473], + [-152.44892330599987, 57.438788153000033], + [-152.453724738999881, 57.435248114000061], + [-152.460031704999892, 57.431952216000028], + [-152.466623501999891, 57.429429429000109], + [-152.472523566999911, 57.428534247000115], + [-152.486154751999948, 57.428534247000115], + [-152.47435462099989, 57.436753648000106], + [-152.459706183999884, 57.450628973], + [-152.452259894999884, 57.463690497000172], + [-152.46226966099988, 57.469427802000055], + [-152.487660285999908, 57.471869208000086], + [-152.501332160999937, 57.469427802000055], + [-152.507272915999863, 57.459540106000034], + [-152.508859829999892, 57.449530341000141], + [-152.513417120999947, 57.444322007000054], + [-152.520822719999927, 57.442450262000094], + [-152.530832485999895, 57.442206122000144], + [-152.536366339999915, 57.444077867000104], + [-152.55414791599992, 57.453314520000092], + [-152.562489386999886, 57.456447658000158], + [-152.570139126999919, 57.456447658000158], + [-152.575306769999941, 57.453762111000074], + [-152.57978268099987, 57.450588283000016], + [-152.585438605999883, 57.448960679], + [-152.591013149999895, 57.450913804000137], + [-152.593332485999952, 57.45526764500012], + [-152.594431118999893, 57.459865627000156], + [-152.596018032999922, 57.462632554000109], + [-152.60094153599988, 57.467230536000059], + [-152.605580206999917, 57.47394440300009], + [-152.612497524999924, 57.480129299000069], + [-152.623972133999956, 57.483099677], + [-152.634144660999908, 57.481268622000115], + [-152.653513149999924, 57.471828518000095], + [-152.66429602799991, 57.469427802000055], + [-152.674061652999853, 57.469916083000143], + [-152.684519008999928, 57.471625067000147], + [-152.69432532499988, 57.474839585], + [-152.72240149599989, 57.494818427000084], + [-152.722604946999923, 57.497463283000158], + [-152.72724361899995, 57.499497788999989], + [-152.73407955599987, 57.504217841000084], + [-152.742909308999913, 57.508978583], + [-152.753651495999947, 57.511053778000118], + [-152.801747199999909, 57.503607489000146], + [-152.814523891999954, 57.505438544000114], + [-152.832468227999925, 57.514349677000055], + [-152.84239661399991, 57.517889716000028], + [-152.856068488999938, 57.518133856000176], + [-152.890817837999919, 57.511053778000118], + [-152.911976691999911, 57.51471588700015], + [-152.933216925999886, 57.521226304000052], + [-152.953968878999888, 57.524359442000119], + [-152.973378058999913, 57.517889716000028], + [-152.960438605999911, 57.511867580000128], + [-152.917225714999915, 57.50088125200007], + [-152.910715298999889, 57.489935614], + [-152.928659633999928, 57.482367255000057], + [-153.02802486899995, 57.476263739000061], + [-153.02802486899995, 57.469427802000055], + [-153.023264126999948, 57.468491929000081], + [-153.020619269999884, 57.467189846000068], + [-153.014352993999921, 57.462632554000109], + [-153.036203579999949, 57.447251695], + [-153.044870571999951, 57.436712958000115], + [-153.041696743999893, 57.428534247000115], + [-153.028635219999899, 57.429510809000178], + [-153.000965949999909, 57.450913804000137], + [-152.990183071999923, 57.456447658000158], + [-152.832468227999925, 57.476263739000061], + [-152.800648566999882, 57.470770575000031], + [-152.726389126999948, 57.428534247000115], + [-152.634103969999899, 57.405747788999989], + [-152.617136196999923, 57.387600002000099], + [-152.613392706999889, 57.388169664000046], + [-152.608835415999863, 57.386460679000052], + [-152.603138800999886, 57.381903387000094], + [-152.596018032999922, 57.373928127000156], + [-152.606190558999884, 57.363592841000141], + [-152.630970831999946, 57.34979889500012], + [-152.644398566999939, 57.339789130000057], + [-152.643299933999884, 57.320502020000035], + [-152.663075324999909, 57.299546617000075], + [-152.692209438999868, 57.283270575000031], + [-152.718861456999889, 57.277655341000028], + [-152.712269660999937, 57.302801825000117], + [-152.731678839999915, 57.30744049700003], + [-152.798695441999939, 57.291571356000119], + [-152.817250128999945, 57.278957424000126], + [-152.837473110999952, 57.270738023000135], + [-152.86351477799991, 57.277655341000028], + [-152.858469204999892, 57.2950707050001], + [-152.872181769999912, 57.299953518000066], + [-152.891916469999956, 57.304022528000033], + [-152.905100063999896, 57.319281317], + [-152.880686001999948, 57.337591864000061], + [-152.877186652999853, 57.343166408000073], + [-152.882150844999899, 57.352484442000033], + [-152.893503383999871, 57.350246486000131], + [-152.914418097999942, 57.339789130000057], + [-152.976511196999866, 57.33234284100017], + [-153.00731360599994, 57.340236721000153], + [-153.023874477999925, 57.342230536000088], + [-153.057321743999864, 57.326320705000072], + [-153.088368292999888, 57.318793036000031], + [-153.12079830599987, 57.315741278000118], + [-153.144032355999911, 57.319281317], + [-153.152292446999894, 57.327134507000082], + [-153.158640102999925, 57.346625067000062], + [-153.165150519999912, 57.35276927300005], + [-153.174753383999899, 57.351385809000149], + [-153.177072719999956, 57.341009833000058], + [-153.174997524999924, 57.328111070000048], + [-153.171376105999883, 57.319281317], + [-153.183542446999951, 57.311265367000047], + [-153.172922329999921, 57.305080471000096], + [-153.096872524999924, 57.290472723000065], + [-153.073719855999883, 57.28929271000014], + [-153.03258216099988, 57.304917710000112], + [-153.003000454999949, 57.294989325000117], + [-152.976185675999943, 57.275539455000015], + [-152.959095831999889, 57.257147528000175], + [-153.061512824999909, 57.223089911000059], + [-153.096302863999853, 57.218247788999989], + [-153.195261196999951, 57.229925848000065], + [-153.20262610599994, 57.228013414000102], + [-153.209584113999938, 57.224554755000113], + [-153.216379360999952, 57.222967841000084], + [-153.222889777999853, 57.226507880000057], + [-153.253285285999937, 57.236721096000011], + [-153.264475063999924, 57.232814846000011], + [-153.282419399999867, 57.219183661000059], + [-153.298329230999911, 57.216253973000121], + [-153.307321743999921, 57.211981512000037], + [-153.324167446999923, 57.193060614], + [-153.335886196999923, 57.188299872000115], + [-153.350168423999889, 57.191148179000052], + [-153.37665768099987, 57.205796617000075], + [-153.391102667999917, 57.209418036000116], + [-153.378651495999918, 57.193833726000136], + [-153.373280402999853, 57.185003973000065], + [-153.37372799399995, 57.178045966000084], + [-153.408192511999857, 57.147935289000046], + [-153.426096157999922, 57.140122789000074], + [-153.440663214999859, 57.125433661000059], + [-153.455270962999862, 57.116848049000126], + [-153.473011847999885, 57.127427476], + [-153.479074673999889, 57.144029039000046], + [-153.480051235999952, 57.161688544000171], + [-153.486073370999947, 57.175726630000113], + [-153.50719153599988, 57.181463934000092], + [-153.531605597999913, 57.179754950000088], + [-153.541859503999945, 57.175848700000088], + [-153.548166469999899, 57.168443101000108], + [-153.544260219999899, 57.164455471000124], + [-153.513132290999891, 57.170355536000059], + [-153.500355597999942, 57.168443101000108], + [-153.524525519999941, 57.137396552], + [-153.526844855999911, 57.126695054000081], + [-153.518910285999851, 57.11737702000012], + [-153.507801886999914, 57.108587958000058], + [-153.500355597999942, 57.099554755000142], + [-153.498158331999946, 57.074286200000088], + [-153.513172980999883, 57.06972890800013], + [-153.559030727999954, 57.079046942], + [-153.711374477999925, 57.067043361000074], + [-153.761057094999899, 57.05174388200011], + [-153.761057094999899, 57.044907945], + [-153.607126430999926, 57.05174388200011], + [-153.59125729099992, 57.048163153000033], + [-153.590443488999881, 57.039984442000119], + [-153.598947719999927, 57.030666408000101], + [-153.610829230999883, 57.023830471000068], + [-153.627145962999919, 57.021144924000097], + [-153.643055792999917, 57.021633205000072], + [-153.658070441999939, 57.019842841000084], + [-153.671620245999918, 57.010199286000116], + [-153.576120571999923, 57.003973700000145], + [-153.555124477999868, 56.998724677000084], + [-153.559763149999895, 56.986517645], + [-153.589100714999915, 56.962958075000145], + [-153.592111782999893, 56.962225653000033], + [-153.600209113999938, 56.963527736000046], + [-153.603382941999882, 56.962958075000145], + [-153.603952602999868, 56.960353908000158], + [-153.602772589999944, 56.951239325000174], + [-153.603382941999882, 56.948716539000046], + [-153.617990688999924, 56.939154364000061], + [-153.626779751999891, 56.93618398600016], + [-153.640939907999893, 56.935044664000102], + [-153.666940883999899, 56.93768952], + [-153.671579555999926, 56.945379950000031], + [-153.670236782999922, 56.958441473], + [-153.678456183999913, 56.976629950000088], + [-153.713612433999913, 56.914536851000079], + [-153.738880988999938, 56.889146226000136], + [-153.767893032999922, 56.900336005000057], + [-153.778879360999895, 56.877020575000145], + [-153.756906704999892, 56.874945380000113], + [-153.702707485999895, 56.887274481000176], + [-153.694162563999896, 56.883002020000063], + [-153.694935675999915, 56.873602606000034], + [-153.70140540299991, 56.864203192000033], + [-153.709828253999888, 56.859930731000091], + [-153.767893032999922, 56.853094794000086], + [-153.772897915999863, 56.850490627000099], + [-153.775624152999939, 56.841376044000086], + [-153.780873175999943, 56.839504299000126], + [-153.786936001999919, 56.84080638200011], + [-153.79662024599989, 56.845892645000148], + [-153.824452277999939, 56.846909898000106], + [-153.837717251999891, 56.844183661000145], + [-153.843576626999919, 56.835760809000092], + [-153.850168423999889, 56.814520575000117], + [-153.86620032499988, 56.80170319200009], + [-153.905018683999913, 56.784857489000089], + [-153.941843227999868, 56.75877513200011], + [-153.962513800999886, 56.748236395000148], + [-153.987253383999956, 56.743841864000061], + [-154.015207485999895, 56.748480536], + [-154.035145636999886, 56.757269598000065], + [-154.055002407999893, 56.762518622000144], + [-154.082590298999889, 56.756903387000037], + [-154.108347133999928, 56.744614976], + [-154.122629360999952, 56.741197007000082], + [-154.137806769999941, 56.743841864000061], + [-154.149525519999912, 56.750921942000119], + [-154.148264126999891, 56.756252346000096], + [-154.141713019999912, 56.762884833000058], + [-154.137806769999941, 56.774318752000013], + [-154.130116339999915, 56.786525783000101], + [-154.063791469999956, 56.847398179000024], + [-154.000599738999881, 56.872992255000085], + [-153.976796027999882, 56.892564195000048], + [-153.968088344999899, 56.90550364800005], + [-153.955922003999916, 56.91010163], + [-153.931752081999889, 56.914536851000079], + [-153.888986782999893, 56.930365302], + [-153.810495571999866, 56.97089264500012], + [-153.774728969999956, 56.997137762000065], + [-153.780873175999943, 57.003973700000145], + [-153.833811001999891, 56.972235419000114], + [-153.849802212999862, 56.969183661000116], + [-153.855661587999919, 56.976019598000121], + [-153.832020636999886, 57.001532294000029], + [-153.836130337999919, 57.017564195000105], + [-153.852406378999888, 57.02362702000012], + [-153.862416144999855, 57.011135158000016], + [-153.869577602999897, 56.991644598000121], + [-153.877145962999947, 56.976629950000088], + [-153.896921352999868, 56.965887762000179], + [-153.922474738999881, 56.96214427300005], + [-153.973337368999893, 56.962958075000145], + [-153.96898352799991, 56.979966539000131], + [-153.962635870999861, 56.99510325700011], + [-153.953928188999896, 57.008612372000087], + [-153.929514126999919, 57.035060940000065], + [-153.910878058999941, 57.061224677000112], + [-153.898182745999861, 57.072821356000034], + [-153.882639126999891, 57.080511786000059], + [-153.834828253999945, 57.096584377000127], + [-153.818714972999885, 57.099554755000142], + [-153.810495571999866, 57.102118231000148], + [-153.795887824999852, 57.114935614000089], + [-153.788319464999915, 57.120062567], + [-153.77672278599988, 57.12409088700015], + [-153.765573696999866, 57.126288153000147], + [-153.739938930999898, 57.127427476], + [-153.739938930999898, 57.133693752000127], + [-153.782785610999895, 57.150213934000121], + [-153.805734829999892, 57.154201565], + [-153.815663214999859, 57.144598700000031], + [-153.820668097999913, 57.133368231000119], + [-153.832468227999868, 57.126654364000089], + [-153.857248501999948, 57.120062567], + [-153.973581508999928, 57.061916408000158], + [-154.006947394999912, 57.03929271], + [-154.049549933999941, 56.99603913], + [-154.075062628999945, 56.975572007000139], + [-154.099558071999866, 56.964829820000134], + [-154.114979620999918, 56.985785223000065], + [-154.134103969999899, 56.995184637000094], + [-154.137806769999941, 57.003973700000145], + [-154.134836391999897, 57.008734442000062], + [-154.121774868999921, 57.019110419000143], + [-154.117298956999889, 57.023830471000068], + [-154.110463019999941, 57.038072007000082], + [-154.080026821999894, 57.066595770000063], + [-153.95966549399995, 57.120062567], + [-154.083200649999952, 57.127427476], + [-154.091257290999891, 57.130682684000035], + [-154.109974738999881, 57.14476146], + [-154.120432094999956, 57.147935289000046], + [-154.174916144999941, 57.146226304000052], + [-154.240834113999881, 57.154771226000079], + [-154.299183722999885, 57.147935289000046], + [-154.360666469999956, 57.147935289000046], + [-154.373361782999893, 57.145168361000103], + [-154.397409633999928, 57.131822007000082], + [-154.411569790999863, 57.127427476], + [-154.46825110599994, 57.124457098000093], + [-154.494943813999896, 57.113592841000084], + [-154.484120245999861, 57.089585679000052], + [-154.460764126999891, 57.07111237200003], + [-154.437814907999893, 57.057277736000131], + [-154.412953253999945, 57.050197658000073], + [-154.384226040999891, 57.05174388200011], + [-154.361317511999914, 57.059068101000108], + [-154.346058722999942, 57.069037177000112], + [-154.319040493999864, 57.096136786000145], + [-154.29718990799995, 57.110296942000062], + [-154.272409633999871, 57.11737702000012], + [-154.121205206999889, 57.123724677000055], + [-154.103708462999919, 57.113836981000034], + [-154.10374915299991, 57.097967841000113], + [-154.11192786399991, 57.076727606000034], + [-154.130970831999889, 57.044907945], + [-154.153187628999888, 57.019761460000112], + [-154.158314581999889, 57.010199286000116], + [-154.160267706999917, 56.998724677000084], + [-154.157582160999937, 56.976996161000031], + [-154.158314581999889, 56.969183661000116], + [-154.172474738999881, 56.952622789000046], + [-154.193837042999945, 56.944566148000106], + [-154.247670050999886, 56.941880601000136], + [-154.230336066999911, 56.933050848000093], + [-154.221791144999884, 56.925360419000143], + [-154.221913214999859, 56.916449286000116], + [-154.230295376999919, 56.903998114], + [-154.237985805999926, 56.899562893000123], + [-154.245920376999891, 56.90135325700011], + [-154.253854946999866, 56.905462958000058], + [-154.261586066999882, 56.907700914000046], + [-154.281809048999889, 56.887274481000176], + [-154.276600714999915, 56.897772528000061], + [-154.277577277999882, 56.905951239000146], + [-154.284250454999949, 56.911607164000046], + [-154.296091274999895, 56.914536851000079], + [-154.300648566999939, 56.873521226000051], + [-154.299183722999885, 56.866848049000012], + [-154.282582160999937, 56.869574286000059], + [-154.255604620999861, 56.882757880000113], + [-154.240834113999881, 56.887274481000176], + [-154.240834113999881, 56.879828192], + [-154.271839972999885, 56.863714911000116], + [-154.281809048999889, 56.859930731000091], + [-154.299549933999913, 56.855414130000142], + [-154.304921027999939, 56.855780341000141], + [-154.304880337999947, 56.874904690000122], + [-154.305002407999922, 56.90228913], + [-154.31346594999988, 56.918280341000084], + [-154.328317837999919, 56.929673570000077], + [-154.388742641999954, 56.963853257000054], + [-154.411610480999855, 56.972967841000141], + [-154.448190883999899, 56.978705145000035], + [-154.473255988999881, 56.98769765800013], + [-154.484120245999861, 56.989691473000065], + [-154.514881964999859, 56.989691473000065], + [-154.528553839999915, 56.991644598000121], + [-154.531686977999868, 56.996568101], + [-154.529855923999889, 57.00315989800005], + [-154.527170376999919, 57.032904364000061], + [-154.52000891799986, 57.055975653000033], + [-154.516346808999913, 57.077582098000121], + [-154.533395962999862, 57.112046617000047], + [-154.53148352799991, 57.153143622000144], + [-154.535023566999882, 57.174627997000172], + [-154.548573370999861, 57.192816473000065], + [-154.588693813999896, 57.231105861000103], + [-154.59711666599992, 57.246649481000091], + [-154.601511196999923, 57.258937893000066], + [-154.612172003999945, 57.266302802000055], + [-154.625599738999938, 57.269964911000031], + [-154.672556118999864, 57.270900783000101], + [-154.681345180999926, 57.272894598000121], + [-154.684315558999941, 57.277492580000072], + [-154.684763149999924, 57.28217194200009], + [-154.685861782999893, 57.284491278000147], + [-154.716053839999915, 57.281683661], + [-154.75141354099992, 57.273830471000011], + [-154.783151821999866, 57.272935289000131], + [-154.802561001999891, 57.29132721600017], + [-154.787668423999946, 57.291571356000119], + [-154.768299933999913, 57.294989325000117], + [-154.755116339999859, 57.30263906500015], + [-154.758168097999857, 57.315578518000152], + [-154.771433071999894, 57.325384833000086], + [-154.798451300999943, 57.336086330000015], + [-154.810007290999948, 57.34658437700007], + [-154.787546352999954, 57.357733466000084], + [-154.763498501999919, 57.354193427000112], + [-154.736927863999881, 57.345119533000016], + [-154.706979946999923, 57.339789130000057], + [-154.711008266999869, 57.347723700000117], + [-154.71711178299995, 57.353827216000113], + [-154.724964972999942, 57.358058986000017], + [-154.734242316999882, 57.360256252000013], + [-154.734242316999882, 57.367092190000122], + [-154.714711066999911, 57.378119208000086], + [-154.708444790999863, 57.395697333000115], + [-154.71320553299995, 57.41425202000012], + [-154.726877407999893, 57.428534247000115], + [-154.686146613999938, 57.452704169000029], + [-154.653391079999892, 57.460760809000149], + [-154.644276495999918, 57.466742255000085], + [-154.658558722999913, 57.476263739000061], + [-154.650217251999948, 57.49603913], + [-154.634632941999939, 57.513739325000088], + [-154.61473548099994, 57.526556708000115], + [-154.582956508999899, 57.534084377000099], + [-154.562489386999943, 57.54393138200011], + [-154.549305792999888, 57.544582424000154], + [-154.540028449999937, 57.539496161000116], + [-154.521433071999923, 57.517889716000028], + [-154.509755011999943, 57.528387762000094], + [-154.523426886999886, 57.570013739000061], + [-154.514881964999859, 57.579291083000115], + [-154.455555792999888, 57.576727606000119], + [-154.398508266999897, 57.566310940000122], + [-154.409901495999947, 57.572902736000103], + [-154.446888800999886, 57.586127020000148], + [-154.398508266999897, 57.613470770000035], + [-154.364369269999884, 57.627142645000148], + [-154.362009243999921, 57.631048895000148], + [-154.356434699999909, 57.645453192000033], + [-154.356922980999911, 57.648260809000149], + [-154.33759518099987, 57.650213934000121], + [-154.300648566999939, 57.645697333000058], + [-154.281809048999889, 57.648260809000149], + [-154.268259243999921, 57.655503648], + [-154.254709438999868, 57.665228583000143], + [-154.239328579999921, 57.673285223000065], + [-154.220326300999943, 57.675523179000052], + [-154.202626105999911, 57.671820380000113], + [-154.169300910999937, 57.659247137000122], + [-154.151437954999892, 57.655096747000172], + [-154.055856899999895, 57.655096747000172], + [-154.018625454999892, 57.647202867000104], + [-154.000559048999889, 57.629706122000144], + [-153.973337368999893, 57.572495835], + [-153.999948696999923, 57.555650132], + [-154.110463019999941, 57.544582424000154], + [-154.068348761999914, 57.537054755], + [-153.974802212999947, 57.549953518], + [-153.935495571999923, 57.534979559000178], + [-153.920277472999885, 57.507228908000101], + [-153.90693111899995, 57.434963283000044], + [-153.890736456999889, 57.408026434000149], + [-153.875314907999893, 57.399155992000104], + [-153.840524868999921, 57.38666413], + [-153.825632290999863, 57.37726471600017], + [-153.777821417999917, 57.322333075000088], + [-153.747303839999915, 57.303412177000084], + [-153.630686001999891, 57.270900783000101], + [-153.644520636999886, 57.284002997000144], + [-153.669138149999867, 57.297308661000088], + [-153.696156378999945, 57.307684637000179], + [-153.743763800999915, 57.318915106000176], + [-153.753895636999857, 57.336371161000145], + [-153.758249477999954, 57.35883209800015], + [-153.767893032999922, 57.380764065000065], + [-153.784738735999923, 57.394354559000121], + [-153.80011959499987, 57.401312567000033], + [-153.811350063999896, 57.412339585000055], + [-153.81977291599992, 57.484930731000148], + [-153.818348761999943, 57.506293036000116], + [-153.808827277999853, 57.517889716000028], + [-153.843698696999894, 57.550970770000092], + [-153.849802212999862, 57.558823960000055], + [-153.850819464999915, 57.577297268000095], + [-153.842518683999856, 57.58197663], + [-153.830067511999943, 57.577785549000069], + [-153.818714972999885, 57.569403387000122], + [-153.792429165999948, 57.555975653000118], + [-153.749623175999858, 57.544378973], + [-153.706369594999956, 57.539048570000134], + [-153.678456183999913, 57.544582424000154], + [-153.691029425999915, 57.553778387000037], + [-153.705148891999954, 57.557928778000147], + [-153.740589972999942, 57.558823960000055], + [-153.753977016999954, 57.561957098000121], + [-153.868723110999895, 57.628607489000032], + [-153.884592251999919, 57.648260809000149], + [-153.852772589999887, 57.658677476000051], + [-153.810902472999885, 57.659002997000172], + [-153.667591925999943, 57.64183177300005], + [-153.64110266799986, 57.62921784100017], + [-153.630686001999891, 57.599798895000092], + [-153.61750240799995, 57.605210679000109], + [-153.591013149999952, 57.601385809000121], + [-153.582875128999945, 57.607326565000122], + [-153.584584113999853, 57.617092190000065], + [-153.593332485999923, 57.628322658000073], + [-153.604685024999895, 57.637600002000127], + [-153.631052212999919, 57.646795966000113], + [-153.69896399599989, 57.682359117000075], + [-153.756092902999853, 57.693182684000149], + [-153.87641354099992, 57.701117255000113], + [-153.905751105999911, 57.711249091000084], + [-153.925526495999947, 57.729559637000065], + [-153.938221808999913, 57.775620835], + [-153.924631313999953, 57.810492255000113], + [-153.894479946999923, 57.837591864000146], + [-153.843454555999926, 57.870591539000102], + [-153.836130337999919, 57.874172268000095], + [-153.829782680999926, 57.87523021000014], + [-153.815500454999892, 57.873968817000119], + [-153.808827277999853, 57.874172268000095], + [-153.796701626999862, 57.878485419000086], + [-153.764475063999924, 57.894680080000128], + [-153.723825649999924, 57.902085679000109], + [-153.719471808999913, 57.900824286000116], + [-153.702707485999895, 57.891262111000046], + [-153.692575649999952, 57.887030341000113], + [-153.682240363999853, 57.889105536000116], + [-153.672800258999928, 57.893133856000091], + [-153.66547604099992, 57.894680080000128], + [-153.645090298999946, 57.88369375200007], + [-153.638295050999915, 57.867621161], + [-153.627797003999945, 57.853176174000126], + [-153.596262173999946, 57.846869208], + [-153.574411587999919, 57.839544989], + [-153.564564581999889, 57.821600653000147], + [-153.562204555999926, 57.799058335000055], + [-153.562448696999866, 57.777980861000131], + [-153.558298305999926, 57.738348700000117], + [-153.546945766999954, 57.698919989000146], + [-153.529408331999917, 57.661322333000143], + [-153.50719153599988, 57.627142645000148], + [-153.498158331999946, 57.642564195], + [-153.522165493999893, 57.695624091000113], + [-153.527658657999922, 57.723334052], + [-153.481027798999918, 57.702704169000143], + [-153.452341274999952, 57.69456614800005], + [-153.439523891999926, 57.69940827000012], + [-153.448435024999952, 57.716131903000147], + [-153.469553188999896, 57.728949286], + [-153.514027472999885, 57.743841864000146], + [-153.499134894999941, 57.760891018], + [-153.47431393099987, 57.773627020000148], + [-153.446237758999956, 57.777411200000174], + [-153.421823696999923, 57.767401434000092], + [-153.409413214999887, 57.751695054000109], + [-153.398386196999923, 57.733954169000029], + [-153.384388800999886, 57.718573309000092], + [-153.363148566999882, 57.709662177000055], + [-153.333566860999952, 57.713853257], + [-153.321278449999909, 57.730902411000145], + [-153.325795050999943, 57.749416408000158], + [-153.346424933999856, 57.758042710000055], + [-153.360340949999937, 57.761175848000121], + [-153.378977016999926, 57.774847723000065], + [-153.393747524999924, 57.780218817000119], + [-153.396433071999894, 57.78510163], + [-153.39818274599989, 57.789984442000062], + [-153.401356574999852, 57.79222239800005], + [-153.432077602999925, 57.79222239800005], + [-153.458811001999948, 57.802801825000088], + [-153.476673956999917, 57.821356512000094], + [-153.476429816999882, 57.839016018000038], + [-153.449167446999894, 57.846869208], + [-153.424997524999867, 57.842718817000062], + [-153.350168423999889, 57.81268952], + [-153.291371222999913, 57.798773505000113], + [-153.229725714999859, 57.79222239800005], + [-153.211048956999889, 57.785589911000088], + [-153.210031704999949, 57.769435940000122], + [-153.21454830599987, 57.74892812700007], + [-153.212351040999891, 57.729559637000065], + [-153.206491665999948, 57.720892645000148], + [-153.199330206999889, 57.714544989000117], + [-153.190297003999888, 57.710679429000109], + [-153.178822394999855, 57.709662177000055], + [-153.195261196999951, 57.727118231000119], + [-153.19774329299986, 57.751125393000152], + [-153.191883917999917, 57.805243231000034], + [-153.198679165999948, 57.857123114000117], + [-153.20453854099992, 57.86847565300009], + [-153.231882290999863, 57.888739325000117], + [-153.240305141999926, 57.902085679000109], + [-153.211984829999892, 57.901800848000093], + [-153.186838344999899, 57.893540757], + [-153.144032355999911, 57.867905992000132], + [-153.075062628999888, 57.837469794000171], + [-153.061512824999909, 57.825751044000086], + [-153.048451300999943, 57.833197333000058], + [-153.060617641999897, 57.841620184000121], + [-153.085072394999941, 57.852443752000013], + [-153.096913214999915, 57.860500393000152], + [-153.097727016999926, 57.869330145], + [-153.109486456999889, 57.883368231000148], + [-153.125965949999909, 57.896389065000122], + [-153.156076626999919, 57.907863674000097], + [-153.202463344999899, 57.946193752000013], + [-153.221018032999893, 57.955877997000172], + [-153.262806769999912, 57.966009833000115], + [-153.29515540299991, 57.986395575000117], + [-153.299916144999941, 57.991888739000146], + [-153.301747199999909, 58.000799872000172], + [-153.296457485999923, 58.008124091000084], + [-153.284250454999949, 58.010443427000141], + [-153.270578579999921, 58.008612372000172], + [-153.260812954999892, 58.003892320000077], + [-153.229562954999892, 57.997992255000113], + [-153.166940883999899, 57.97003815300009], + [-153.118763800999943, 57.960394598000121], + [-153.083566860999895, 57.946234442], + [-153.046213344999956, 57.940171617000104], + [-153.012766079999892, 57.929103908000073] + ] + ], + [ + [ + [-136.338368292999917, 58.014634507000082], + [-136.336822068999879, 58.007025458000143], + [-136.370025193999908, 57.999945380000085], + [-136.377919074999909, 57.990057684000149], + [-136.389800584999932, 57.963568427], + [-136.379058397999927, 57.935288804000137], + [-136.392486131999931, 57.898871161000059], + [-136.419911261999857, 57.86554596600017], + [-136.451283331999889, 57.846869208], + [-136.453846808999913, 57.863104559000035], + [-136.464100714999944, 57.872626044000057], + [-136.471180792999917, 57.881170966000141], + [-136.4642634759999, 57.894680080000128], + [-136.471831834999932, 57.898993231000034], + [-136.481800910999937, 57.902044989000117], + [-136.493397589999859, 57.903265692000147], + [-136.505930141999869, 57.902085679000109], + [-136.500152147999898, 57.910711981000034], + [-136.494292772999955, 57.917425848000065], + [-136.487416144999941, 57.923163153000061], + [-136.478586391999897, 57.928778387000037], + [-136.478586391999897, 57.935614325000145], + [-136.496937628999945, 57.938544012000179], + [-136.51024329299986, 57.93305084800015], + [-136.523182745999861, 57.925279039000046], + [-136.540353969999899, 57.921332098000065], + [-136.552845831999889, 57.92511627800009], + [-136.552805141999897, 57.9337425800001], + [-136.544748501999891, 57.943101304000137], + [-136.533192511999943, 57.949286200000088], + [-136.546376105999911, 57.962103583000115], + [-136.541981574999909, 57.978094794000029], + [-136.528146938999924, 57.993231512000037], + [-136.512766079999892, 58.003892320000077], + [-136.520619269999941, 58.013495184000035], + [-136.546742316999911, 58.012396552], + [-136.561146613999881, 58.017523505000028], + [-136.555531378999973, 58.024237372000144], + [-136.55125891799986, 58.031887111000074], + [-136.548451300999915, 58.040106512000179], + [-136.546294725999928, 58.060370184000092], + [-136.542836066999939, 58.065904039000102], + [-136.514719204999921, 58.086737372000087], + [-136.495513475999871, 58.094916083], + [-136.475331183999941, 58.09784577000012], + [-136.45750891799986, 58.093247788999989], + [-136.438059048999889, 58.072455145], + [-136.361927863999881, 58.031195380000142], + [-136.338368292999917, 58.014634507000082] + ] + ], + [ + [ + [-153.202707485999923, 58.098822333], + [-153.181955532999922, 58.093247788999989], + [-153.131052212999919, 58.10024648600016], + [-153.116769985999895, 58.100083726000022], + [-153.106190558999856, 58.094631252000156], + [-153.087961391999897, 58.076117255000142], + [-153.078928188999896, 58.072170315000065], + [-153.074208136999857, 58.068060614000032], + [-153.058420376999919, 58.042059637000037], + [-153.047596808999913, 58.037054755], + [-153.000070766999926, 58.031195380000142], + [-152.890817837999919, 57.997707424000097], + [-152.903513149999867, 57.990668036000116], + [-152.916574673999946, 57.991888739000146], + [-152.930409308999941, 57.995998440000093], + [-152.945423956999889, 57.997707424000097], + [-152.983713344999899, 57.985744533000158], + [-153.000070766999926, 57.984035549000154], + [-153.026926235999895, 57.988755601000079], + [-153.081654425999943, 58.007228908000101], + [-153.115549282999893, 58.013657945000105], + [-153.168649868999921, 58.032700914000017], + [-153.202707485999923, 58.029771226000079], + [-153.216053839999915, 58.034898179], + [-153.244455532999865, 58.071722723000065], + [-153.262644008999956, 58.085353908000016], + [-153.28807532499988, 58.086411851000079], + [-153.263172980999911, 58.059149481000176], + [-153.253285285999937, 58.052313544000143], + [-153.340321417999888, 58.046454169000114], + [-153.379587368999893, 58.049505927000027], + [-153.418365037999934, 58.065985419000086], + [-153.322214321999866, 58.127386786000088], + [-153.329660610999952, 58.134833075000145], + [-153.313059048999889, 58.141791083000143], + [-153.295480923999946, 58.146429755000085], + [-153.277780727999954, 58.146795966000084], + [-153.260812954999892, 58.141058661000116], + [-153.225087042999945, 58.112127997000115], + [-153.202707485999923, 58.098822333] + ] + ], + [ + [ + [-151.84618079299986, 58.175197658000016], + [-151.868885870999918, 58.173529364], + [-151.888661261999914, 58.178859768000066], + [-151.897084113999881, 58.192857164000131], + [-151.891835089999915, 58.206976630000057], + [-151.866078253999945, 58.257757880000113], + [-151.827137824999852, 58.26561107], + [-151.809885219999956, 58.262925523000106], + [-151.79344641799986, 58.244696356000034], + [-151.805978969999956, 58.212103583000086], + [-151.815052863999881, 58.196112372000172], + [-151.828846808999856, 58.182033596000124], + [-151.84618079299986, 58.175197658000016] + ] + ], + [ + [ + [-135.714995897999898, 58.229722398000021], + [-135.689361131999931, 58.226263739], + [-135.662464972999942, 58.230047919000029], + [-135.635650193999965, 58.230414130000142], + [-135.624012824999852, 58.225002346000096], + [-135.601429816999882, 58.206976630000057], + [-135.590972459999904, 58.203111070000048], + [-135.556304490999935, 58.199408270000035], + [-135.546294725999928, 58.196275132000139], + [-135.553781704999892, 58.189439195000105], + [-135.537180141999841, 58.181138414000046], + [-135.501942511999914, 58.173814195000134], + [-135.48485266799986, 58.162095445000048], + [-135.496693488999938, 58.150824286000059], + [-135.502268032999837, 58.138332424000154], + [-135.505970831999974, 58.125474351000108], + [-135.512115037999934, 58.113185940000065], + [-135.523426886999914, 58.102443752000156], + [-135.534047003999973, 58.099432684000149], + [-135.545643683999913, 58.098334052000027], + [-135.560617641999926, 58.093247788999989], + [-135.582142706999946, 58.075181382000054], + [-135.602365688999868, 58.054022528000147], + [-135.627308722999885, 58.041408596000068], + [-135.692372199999937, 58.053412177], + [-135.769398566999911, 58.046454169000114], + [-135.783070441999939, 58.042059637000037], + [-135.752797003999945, 58.027289130000142], + [-135.693226691999939, 58.040106512000179], + [-135.662424282999893, 58.031195380000142], + [-135.669829881999931, 58.024969794000086], + [-135.657297329999864, 58.020900783000044], + [-135.639515753999945, 58.017889716000028], + [-135.624826626999891, 58.013169664000102], + [-135.621408657999865, 58.003892320000077], + [-135.631662563999896, 57.997381903000147], + [-135.649973110999838, 57.995591538999989], + [-135.741281704999921, 58.002264716000056], + [-135.768544074999909, 57.998236395000063], + [-135.79332434799997, 57.984035549000154], + [-135.708973761999914, 57.978257554], + [-135.662464972999942, 57.970119533000073], + [-135.656158006999931, 57.949286200000088], + [-135.640736456999974, 57.952093817000147], + [-135.62743079299986, 57.958889065000065], + [-135.623402472999885, 57.967678127000127], + [-135.635650193999965, 57.97654857], + [-135.635650193999965, 57.984035549000154], + [-135.614369269999884, 57.983832098], + [-135.592884894999941, 57.987453518000066], + [-135.573109503999945, 57.995306708000143], + [-135.557199673999918, 58.007635809000092], + [-135.515533006999959, 58.058539130000113], + [-135.436431443999965, 58.079575914000046], + [-135.42446855399993, 58.09511953300013], + [-135.431711391999869, 58.104071356000176], + [-135.446441209999932, 58.112738348000065], + [-135.457508917999888, 58.127386786000088], + [-135.439808722999885, 58.128892320000134], + [-135.408029751999834, 58.138576565000093], + [-135.389271613999881, 58.141058661000116], + [-135.368804490999935, 58.139349677000112], + [-135.346547003999945, 58.134670315], + [-135.307362433999941, 58.120550848000065], + [-135.314686652999939, 58.11815013200011], + [-135.334055141999869, 58.106878973000121], + [-135.316761847999942, 58.100531317], + [-135.3002009759999, 58.101223049000126], + [-135.266428188999896, 58.106878973000121], + [-135.246164516999897, 58.104803778000118], + [-135.206857876999891, 58.095404364000089], + [-135.186634894999969, 58.093247788999989], + [-135.118031378999945, 58.100083726000022], + [-135.100575324999909, 58.096625067], + [-135.089588995999918, 58.089178778000033], + [-135.09032141799986, 58.08201732], + [-135.108062303999958, 58.079575914000046], + [-135.108062303999958, 58.072170315000065], + [-134.979969855999911, 58.050360419000114], + [-134.92479407499988, 58.0274925800001], + [-134.902007615999935, 57.973130601], + [-134.905262824999909, 57.96979401200015], + [-134.91226152299987, 57.96898021000014], + [-134.919300910999937, 57.967027085], + [-134.922515428999901, 57.960150458000086], + [-134.920074022999955, 57.953517971000039], + [-134.910227016999841, 57.942938544000171], + [-134.909494594999899, 57.935614325000145], + [-134.915760870999861, 57.921047268000123], + [-134.924427863999938, 57.914007880000057], + [-134.950428839999944, 57.902085679000109], + [-134.965077277999853, 57.886053778000033], + [-134.960316535999937, 57.871649481000148], + [-134.942005988999881, 57.858710028000147], + [-134.915679490999878, 57.846869208], + [-134.945952928999873, 57.851060289000131], + [-135.046701626999862, 57.902085679000109], + [-135.109120245999918, 57.919134833000086], + [-135.12828528599988, 57.921332098000065], + [-135.14468339799987, 57.924994208000115], + [-135.197499152999853, 57.949286200000088], + [-135.203684048999946, 57.943060614000146], + [-135.18423417899993, 57.921616929000024], + [-135.16030839799987, 57.903794664000131], + [-135.134266730999911, 57.88987864800005], + [-135.108062303999958, 57.880316473000065], + [-135.055653449999909, 57.87335846600017], + [-135.039784308999856, 57.867905992000132], + [-135.014719204999864, 57.846014716000084], + [-135.001210089999887, 57.840033270000092], + [-134.984527147999927, 57.846869208], + [-134.982004360999838, 57.829006252000127], + [-134.967844204999892, 57.820054429000109], + [-134.930002407999893, 57.81268952], + [-134.942453579999892, 57.806586005000113], + [-134.97093665299991, 57.80215078300013], + [-134.984527147999927, 57.798407294000114], + [-135.003977016999841, 57.788763739000146], + [-135.013783331999974, 57.785874742000104], + [-135.203033006999874, 57.78510163], + [-135.259388800999943, 57.795965887000179], + [-135.421213344999899, 57.863267320000105], + [-135.449777798999889, 57.871161200000174], + [-135.48110917899993, 57.874172268000095], + [-135.4916072259999, 57.877346096000153], + [-135.505686001999834, 57.891424872000087], + [-135.696441209999904, 57.936102606000148], + [-135.845814581999946, 57.992173570000077], + [-135.865956183999856, 57.99628327000012], + [-135.889556443999908, 57.997707424000097], + [-135.889556443999908, 57.990220445000134], + [-135.840565558999941, 57.975897528000033], + [-135.817005988999881, 57.963568427], + [-135.806996222999913, 57.946193752000013], + [-135.792225714999915, 57.934149481000091], + [-135.613758917999917, 57.89594147300015], + [-135.587880011999914, 57.884100653000175], + [-135.575306769999941, 57.880031643000123], + [-135.546986456999974, 57.875799872000115], + [-135.519764777999882, 57.861761786000059], + [-135.515533006999959, 57.860500393000152], + [-135.512847459999875, 57.85814036699999], + [-135.51585852799991, 57.845648505000085], + [-135.512115037999934, 57.839422919000029], + [-135.499908006999874, 57.834784247000087], + [-135.403228318999936, 57.814195054000052], + [-135.388661261999914, 57.81268952], + [-135.372385219999899, 57.805243231000034], + [-135.328968878999945, 57.769720770000148], + [-135.320952928999901, 57.758042710000055], + [-135.327300584999932, 57.751288153000118], + [-135.350738084999904, 57.746283270000092], + [-135.361317511999943, 57.737005927000112], + [-135.363880988999938, 57.726223049000041], + [-135.355091925999886, 57.724758205000157], + [-135.327504035999965, 57.729559637000065], + [-135.273671027999939, 57.730210679], + [-135.250233527999853, 57.726629950000031], + [-135.224191860999895, 57.716498114000061], + [-135.217111782999922, 57.711127020000035], + [-135.214466925999943, 57.707342841000084], + [-135.210031704999864, 57.706488348000093], + [-135.197499152999853, 57.709662177000055], + [-135.173898891999926, 57.72553131700009], + [-135.16270911399991, 57.729559637000065], + [-135.115834113999938, 57.733954169000029], + [-135.101307745999918, 57.737005927000112], + [-135.080189581999917, 57.750637111000074], + [-135.073475714999859, 57.751939195000077], + [-135.060414191999882, 57.752020575000145], + [-135.053456183999913, 57.754339911000116], + [-135.03880774599989, 57.755804755000085], + [-135.024322068999936, 57.750148830000072], + [-135.009836391999897, 57.746527411000116], + [-134.983021613999881, 57.761542059000064], + [-134.967518683999884, 57.764308986000017], + [-134.936512824999852, 57.764308986000017], + [-134.913889126999891, 57.755845445000077], + [-134.902943488999938, 57.735419012000094], + [-134.896717902999882, 57.710516669000143], + [-134.888335740999906, 57.688544012000037], + [-134.891713019999941, 57.673041083000115], + [-134.884348110999838, 57.654242255000085], + [-134.851226365999906, 57.604925848000093], + [-134.844878709999961, 57.588446356000091], + [-134.841623501999919, 57.570990302000141], + [-134.840565558999856, 57.552069403000033], + [-134.843413865999906, 57.533514716000028], + [-134.842681443999965, 57.522691148000106], + [-134.836822068999936, 57.517889716000028], + [-134.833973761999914, 57.514553127000013], + [-134.813872850999928, 57.497463283000158], + [-134.819569464999915, 57.486070054], + [-134.8568416009999, 57.498114325000117], + [-134.874745245999947, 57.489935614], + [-134.84740149599989, 57.469427802000055], + [-134.871408657999922, 57.461004950000088], + [-134.905995245999918, 57.457261460000055], + [-135.028960740999963, 57.460516669000114], + [-135.05687415299991, 57.466620184000092], + [-135.183176235999895, 57.519273179000109], + [-135.320790167999917, 57.584906317000119], + [-135.457508917999888, 57.633978583000058], + [-135.512115037999934, 57.648260809000149], + [-135.554432745999861, 57.671820380000113], + [-135.563710089999915, 57.675523179000052], + [-135.584217902999853, 57.68060944200009], + [-135.628041144999941, 57.706040757], + [-135.768177863999881, 57.759711005000085], + [-135.813221808999856, 57.764308986000017], + [-135.806304490999963, 57.754055080000072], + [-135.79625403599988, 57.743801174000154], + [-135.784413214999915, 57.735093492000075], + [-135.772287563999839, 57.729559637000065], + [-135.754383917999888, 57.728094794000086], + [-135.737538214999887, 57.729152736000131], + [-135.724354620999918, 57.725409247000115], + [-135.717640753999888, 57.709662177000055], + [-135.729562954999835, 57.702541408000101], + [-135.725168423999861, 57.694647528000033], + [-135.71353105399993, 57.685736395000092], + [-135.703968878999945, 57.675523179000052], + [-135.763417120999918, 57.670314846000153], + [-135.79116777299987, 57.660101630000113], + [-135.806996222999913, 57.641424872000144], + [-135.734974738999966, 57.651190497000087], + [-135.710804816999968, 57.648260809000149], + [-135.644602016999897, 57.617865302], + [-135.621693488999881, 57.613470770000035], + [-135.60484778599988, 57.607082424000097], + [-135.584868943999936, 57.592962958000058], + [-135.570627407999893, 57.578924872000115], + [-135.570464647999927, 57.572495835], + [-135.621083136999914, 57.575873114000117], + [-135.64386959499987, 57.570542710000055], + [-135.656158006999931, 57.552069403000033], + [-135.616118943999879, 57.56313711100016], + [-135.595773891999897, 57.56452057500006], + [-135.577707485999895, 57.55548737200003], + [-135.56704667899993, 57.54511139500012], + [-135.558257615999963, 57.533392645000148], + [-135.560047980999855, 57.523342190000065], + [-135.581044074999909, 57.517889716000028], + [-135.581044074999909, 57.511053778000118], + [-135.563628709999932, 57.508124091000084], + [-135.553049282999893, 57.498683986000074], + [-135.547718878999916, 57.484116929000052], + [-135.546294725999928, 57.466050523000135], + [-135.555897589999915, 57.453680731000091], + [-135.578114386999886, 57.448919989], + [-135.621408657999865, 57.448960679], + [-135.594715949999937, 57.428534247000115], + [-135.599110480999911, 57.419256903000147], + [-135.607248501999834, 57.41665273600016], + [-135.616607225999871, 57.415757554000081], + [-135.624826626999891, 57.411769924000097], + [-135.632150844999899, 57.411810614000089], + [-135.644886847999942, 57.414780992000019], + [-135.656971808999913, 57.416205145000063], + [-135.662424282999893, 57.411769924000097], + [-135.660878058999913, 57.403062242000104], + [-135.656727667999888, 57.396226304], + [-135.650461391999841, 57.391099351000079], + [-135.642486131999874, 57.387600002000099], + [-135.653228318999879, 57.387884833000115], + [-135.666859503999945, 57.38666413], + [-135.678537563999839, 57.383246161], + [-135.690785285999908, 57.367010809000149], + [-135.707427537999934, 57.366522528000147], + [-135.823557094999899, 57.386175848000036], + [-135.847971157999922, 57.394354559000121], + [-135.840646938999924, 57.414496161000059], + [-135.853871222999942, 57.425034898000106], + [-135.896351691999939, 57.435288804000052], + [-135.934437628999916, 57.452215887000037], + [-135.949086066999939, 57.461859442], + [-135.950347459999932, 57.469427802000055], + [-135.961252407999893, 57.483465887000094], + [-135.977406378999973, 57.497137762000037], + [-136.012440558999856, 57.517889716000028], + [-135.982533331999974, 57.52415599199999], + [-135.946766730999855, 57.51634349199999], + [-135.889556443999908, 57.489935614], + [-135.838978644999912, 57.454982815000093], + [-135.810210740999963, 57.439886786000088], + [-135.779693162999934, 57.435288804000052], + [-135.800892706999917, 57.465806382], + [-135.836577928999958, 57.488714911000088], + [-136.039418097999942, 57.57689036699999], + [-136.073882615999935, 57.607326565000122], + [-136.061024542999917, 57.611517645000063], + [-136.047718878999888, 57.613226630000085], + [-136.01927649599989, 57.613470770000035], + [-136.024403449999909, 57.601263739000146], + [-136.018544074999852, 57.593980210000112], + [-136.006092902999939, 57.591376044000029], + [-135.991322394999941, 57.592962958000058], + [-135.996449347999942, 57.607489325000088], + [-135.985503709999904, 57.613226630000085], + [-135.950347459999932, 57.613470770000035], + [-135.950347459999932, 57.620917059000092], + [-135.969309048999861, 57.622992255000113], + [-136.005726691999939, 57.632228908000073], + [-136.01927649599989, 57.633978583000058], + [-136.050404425999972, 57.628607489000032], + [-136.057118292999917, 57.630560614000061], + [-136.065581834999961, 57.639146226000079], + [-136.075917120999861, 57.647040106000063], + [-136.084584113999966, 57.648504950000117], + [-136.088205532999837, 57.637640692000119], + [-136.09666907499988, 57.622951565000122], + [-136.11546790299991, 57.621649481000119], + [-136.134266730999883, 57.630113023000078], + [-136.14281165299991, 57.644761460000083], + [-136.136545376999834, 57.657538153000118], + [-136.121449347999942, 57.669826565000065], + [-136.103505011999914, 57.678941148000078], + [-136.088205532999837, 57.682359117000075], + [-136.088205532999837, 57.688544012000037], + [-136.207630988999881, 57.748277085000112], + [-136.225697394999912, 57.766587632000082], + [-136.224720831999946, 57.784816799000154], + [-136.238392706999974, 57.79222239800005], + [-136.260365363999881, 57.77610911699999], + [-136.277251756999874, 57.775336005000057], + [-136.292836066999968, 57.785386460000112], + [-136.310373501999919, 57.801825262000122], + [-136.319935675999886, 57.806830145000063], + [-136.343576626999834, 57.81549713700015], + [-136.348255988999938, 57.822333075000174], + [-136.352284308999913, 57.83417389500012], + [-136.362416144999969, 57.840155341000141], + [-136.375884568999936, 57.841457424000154], + [-136.389800584999932, 57.839422919000029], + [-136.398304816999968, 57.821356512000094], + [-136.405873175999915, 57.81549713700015], + [-136.41649329299986, 57.825751044000086], + [-136.417225714999887, 57.835028387000037], + [-136.405913865999906, 57.854478257000139], + [-136.394846157999893, 57.885687567000119], + [-136.358225063999839, 57.913641669000143], + [-136.348255988999938, 57.928778387000037], + [-136.351063605999911, 57.935614325000145], + [-136.365956183999856, 57.952704169000114], + [-136.369374152999853, 57.963568427], + [-136.364369269999941, 57.975775458000058], + [-136.353138800999915, 57.983221747000144], + [-136.340443488999938, 57.98847077000012], + [-136.331166144999912, 57.993963934000149], + [-136.311919725999957, 57.995510158000101], + [-136.283843553999958, 57.981675523000106], + [-136.161732550999915, 57.902411200000145], + [-136.058583136999886, 57.850409247000172], + [-136.046009894999884, 57.847398179000081], + [-136.032948370999918, 57.846869208], + [-136.056711391999926, 57.86823151200015], + [-136.144032355999911, 57.907782294000114], + [-136.220692511999857, 57.968573309000035], + [-136.234974738999966, 57.97654857], + [-136.25064042899993, 57.98232656500015], + [-136.296945766999926, 58.010565497000115], + [-136.325510219999899, 58.039292710000083], + [-136.40965735599994, 58.079901434000149], + [-136.430775519999941, 58.106878973000121], + [-136.42418372299997, 58.122463283000016], + [-136.405262824999852, 58.133937893000066], + [-136.380238410999937, 58.140366929000081], + [-136.35570227799991, 58.141058661000116], + [-136.334095831999946, 58.135321356000063], + [-136.295521613999938, 58.115301825000174], + [-136.272531704999892, 58.106878973000121], + [-136.28160559799997, 58.117987372000144], + [-136.293527798999918, 58.125921942000119], + [-136.300038214999915, 58.134588934000121], + [-136.293039516999926, 58.147894598000121], + [-136.332386847999942, 58.179348049000154], + [-136.348947719999899, 58.196437893], + [-136.35570227799991, 58.219875393000066], + [-136.300404425999943, 58.216782945], + [-136.272694464999915, 58.22093333500014], + [-136.26317298099994, 58.216945705000157], + [-136.25951087099989, 58.199693101000051], + [-136.255116339999915, 58.190497137000179], + [-136.235951300999943, 58.171942450000174], + [-136.231556769999941, 58.158758856000119], + [-136.224680141999841, 58.14923737200003], + [-136.192738410999937, 58.134263413999989], + [-136.183176235999866, 58.120550848000065], + [-136.184966600999928, 58.117661851000136], + [-136.197987433999913, 58.088771877000013], + [-136.193714972999913, 58.083644924000012], + [-136.165638800999915, 58.067084052000141], + [-136.101185675999943, 58.058539130000113], + [-136.14671790299991, 58.08104075700011], + [-136.159535285999937, 58.089829820000077], + [-136.164784308999913, 58.101955471000068], + [-136.16551673099994, 58.119086005], + [-136.163319464999944, 58.134466864000146], + [-136.159535285999937, 58.141058661000116], + [-136.169504360999923, 58.146918036000059], + [-136.176991339999887, 58.160711981000148], + [-136.180246548999833, 58.176743882000054], + [-136.177561001999862, 58.189439195000105], + [-136.164621548999861, 58.196600653000147], + [-136.145904100999871, 58.201483466000028], + [-136.132883266999897, 58.207180080000015], + [-136.136586066999939, 58.216782945], + [-136.136586066999939, 58.223049221000124], + [-136.102935350999928, 58.221625067000062], + [-136.07095292899993, 58.211411851000136], + [-135.982289191999939, 58.167629299000069], + [-135.96532141799986, 58.164007880000028], + [-135.957834438999896, 58.17210521000014], + [-135.959543423999889, 58.196926174000097], + [-135.955881313999868, 58.204250393000095], + [-135.944203253999945, 58.216782945], + [-135.922840949999909, 58.231919663999989], + [-135.813547329999892, 58.274359442000062], + [-135.785064256999874, 58.276068427000084], + [-135.758859829999864, 58.268622137000094], + [-135.714995897999898, 58.229722398000021] + ] + ], + [ + [ + [-136.059997024999916, 58.267784924000111], + [-136.111953242999903, 58.258534061000105], + [-136.137572816999949, 58.265089394000185], + [-136.143689271999847, 58.285366327000034], + [-136.106983680999946, 58.303409468], + [-136.045053204999874, 58.318595512000073], + [-136.027939233999888, 58.294969352000052], + [-136.059997024999916, 58.267784924000111] + ] + ], + [ + [ + [-152.864857550999915, 58.335150458], + [-152.858265753999945, 58.33486562700007], + [-152.846058722999885, 58.337591864000117], + [-152.842152472999885, 58.336249091000141], + [-152.841420050999943, 58.334133205000128], + [-152.842844204999892, 58.332993882], + [-152.845407680999926, 58.333441473], + [-152.842884894999884, 58.332586981000091], + [-152.827381964999887, 58.329820054000137], + [-152.824045376999948, 58.326849677000112], + [-152.819325324999852, 58.321112372000144], + [-152.810739712999919, 58.316351630000057], + [-152.799875454999949, 58.31659577], + [-152.795480923999889, 58.312201239000032], + [-152.78844153599988, 58.297919012000122], + [-152.782419399999895, 58.288641669000143], + [-152.793812628999945, 58.287420966000141], + [-152.79544023299988, 58.287746486000074], + [-152.802154100999928, 58.288763739000117], + [-152.811350063999896, 58.290350653000147], + [-152.849354620999918, 58.301336981000034], + [-152.902699347999857, 58.30768463700015], + [-152.919056769999884, 58.31537506700009], + [-152.930612758999899, 58.328558661000116], + [-152.924672003999888, 58.338324286000059], + [-152.906239386999914, 58.342189846000068], + [-152.889597133999871, 58.341253973000093], + [-152.864857550999915, 58.335150458] + ] + ], + [ + [ + [-134.381255662999962, 58.27138906500015], + [-134.279367641999841, 58.220648505], + [-134.258412238999881, 58.196275132000139], + [-134.470326300999943, 58.225816148000106], + [-134.512277798999946, 58.223049221000124], + [-134.53538977799991, 58.224107164000102], + [-134.578033006999931, 58.234686591000141], + [-134.597279425999943, 58.237250067000062], + [-134.620472785999908, 58.246405341000056], + [-134.650786912999877, 58.267726955000015], + [-134.674956834999875, 58.29181549700003], + [-134.679839647999955, 58.309271552], + [-134.662831183999913, 58.31964752800009], + [-134.621083136999857, 58.323228257000054], + [-134.604115363999881, 58.329779364000146], + [-134.584339972999942, 58.340969143000152], + [-134.563343878999916, 58.34454987200003], + [-134.481841600999871, 58.333482163999989], + [-134.446278449999909, 58.315130927000141], + [-134.381255662999962, 58.27138906500015] + ] + ], + [ + [ + [-135.54334452899991, 58.334832238000061], + [-135.592221817999899, 58.327751381000112], + [-135.670622900999945, 58.330899652000099], + [-135.71850340199984, 58.346144494000086], + [-135.714230464999901, 58.370477950000023], + [-135.654903829999881, 58.379797404], + [-135.568898147999903, 58.373150673000012], + [-135.54334452899991, 58.334832238000061] + ] + ], + [ + [ + [-134.917062954999864, 58.373521226000108], + [-134.903920050999886, 58.371486721000096], + [-134.88817298099994, 58.371771552000112], + [-134.874745245999947, 58.367621161000088], + [-134.857329881999874, 58.354966539000102], + [-134.832183397999927, 58.344183661000031], + [-134.809437628999945, 58.330633856000063], + [-134.799631313999839, 58.309271552], + [-134.796050584999961, 58.298651434000064], + [-134.787668423999889, 58.292141018000152], + [-134.777577277999939, 58.287298895000063], + [-134.768910285999937, 58.281683661000088], + [-134.738148566999968, 58.244696356000034], + [-134.726877407999893, 58.23517487200003], + [-134.718332485999866, 58.229722398000021], + [-134.71129309799997, 58.223089911000116], + [-134.704009568999965, 58.209947007000082], + [-134.696156378999973, 58.174017645000092], + [-134.693186001999891, 58.168402411], + [-134.604156053999873, 58.171047268000066], + [-134.561350063999896, 58.178656317000119], + [-134.556385870999918, 58.180650132000054], + [-134.551258917999917, 58.1817894550001], + [-134.474354620999918, 58.182033596000124], + [-134.444650844999899, 58.177394924000012], + [-134.390736456999946, 58.155340887000122], + [-134.361398891999869, 58.147894598000121], + [-134.331613735999838, 58.148138739000089], + [-134.186390753999945, 58.168402411], + [-134.176991339999915, 58.163519598000121], + [-134.167062954999835, 58.152044989000089], + [-134.160755988999881, 58.138495184000121], + [-134.162180141999869, 58.127386786000088], + [-134.169992641999841, 58.123439846000096], + [-134.180816209999932, 58.123724677000112], + [-134.20376542899993, 58.127386786000088], + [-134.190541144999884, 58.115668036], + [-134.175852016999897, 58.106878973000121], + [-134.1693416009999, 58.077785549000154], + [-134.090240037999905, 58.026068427000112], + [-134.086415167999917, 57.997707424000097], + [-134.029367641999897, 57.96385325700011], + [-134.002308722999942, 57.939357815], + [-133.979562954999921, 57.877834377000127], + [-133.952219204999864, 57.844794012000179], + [-133.918568488999938, 57.816839911000145], + [-133.888417120999918, 57.798407294000114], + [-133.892730272999927, 57.789496161000088], + [-133.895008917999888, 57.779486395], + [-133.895578579999864, 57.768988348000121], + [-133.894642706999974, 57.758042710000055], + [-133.891428188999924, 57.746527411000116], + [-133.882801886999914, 57.729966539000046], + [-133.880970831999946, 57.719916083000086], + [-133.879139777999853, 57.693182684000149], + [-133.872629360999895, 57.673814195000048], + [-133.860015428999873, 57.658026434000092], + [-133.803944464999859, 57.610012111000017], + [-133.789296027999853, 57.58885325700011], + [-133.802805141999926, 57.579291083000115], + [-133.826161261999914, 57.58592357], + [-133.842152472999942, 57.602118231000034], + [-133.856312628999945, 57.622381903000147], + [-133.874175584999932, 57.641424872000144], + [-133.962961391999869, 57.692328192000062], + [-133.966216600999928, 57.703558661000059], + [-133.980702277999853, 57.715399481000034], + [-133.984038865999878, 57.726467190000065], + [-133.985463019999941, 57.738104559000149], + [-133.989125128999916, 57.745794989], + [-133.993763800999943, 57.75332265800013], + [-133.99828040299991, 57.764308986000017], + [-134.010609503999945, 57.806586005000113], + [-134.023793097999885, 57.82050202], + [-134.06883704299986, 57.831610419000029], + [-134.088042772999927, 57.84589264500012], + [-134.104074673999889, 57.863755601], + [-134.114369269999941, 57.880316473000065], + [-134.131092902999853, 57.937201239], + [-134.141672329999892, 57.956732489000089], + [-134.159331834999932, 57.97654857], + [-134.182118292999945, 57.995428778000118], + [-134.231068488999938, 58.024969794000086], + [-134.231068488999938, 58.031195380000142], + [-134.211293097999885, 58.026841539000046], + [-134.190825975999928, 58.016058661000145], + [-134.155344204999835, 57.990220445000134], + [-134.172678188999924, 58.013739325000174], + [-134.199615037999905, 58.040716864000146], + [-134.230091925999943, 58.062933661], + [-134.258046027999882, 58.072170315000065], + [-134.272084113999938, 58.073187567000119], + [-134.281239386999914, 58.076361395000092], + [-134.288197394999884, 58.081854559000121], + [-134.295643683999884, 58.089829820000077], + [-134.306752081999889, 58.098089911000059], + [-134.310129360999923, 58.093410549000126], + [-134.307932094999927, 58.084540106000091], + [-134.302398240999906, 58.079575914000046], + [-134.289133266999897, 58.073879299000069], + [-134.276437954999921, 58.05963776200015], + [-134.267241990999935, 58.041815497000087], + [-134.264556443999965, 58.024969794000086], + [-134.290842251999891, 58.035956122000059], + [-134.304188605999911, 58.039129950000117], + [-134.319203253999916, 58.038641669000029], + [-134.319203253999916, 58.031195380000142], + [-134.261626756999931, 58.009019273000078], + [-134.238107876999891, 57.992824611000017], + [-134.224232550999886, 57.969712632000082], + [-134.243967251999834, 57.97003815300009], + [-134.263539191999911, 57.975897528000033], + [-134.299387173999889, 57.993963934000149], + [-134.31663977799991, 57.996649481000034], + [-134.312245245999918, 57.979437567000119], + [-134.292551235999895, 57.946193752000013], + [-134.288929816999939, 57.935532945], + [-134.274077928999958, 57.906154690000093], + [-134.272043423999946, 57.887844143000038], + [-134.277821417999917, 57.869940497000144], + [-134.286284959999932, 57.852118231000176], + [-134.289173956999946, 57.836655992000075], + [-134.278228318999908, 57.825751044000086], + [-134.251779751999919, 57.856919663999989], + [-134.20872962099989, 57.839911200000117], + [-134.056996222999885, 57.695868231000063], + [-134.04710852799991, 57.683335679000052], + [-134.052845831999946, 57.67291901200015], + [-134.080230272999927, 57.661932684000092], + [-134.065541144999941, 57.650295315000093], + [-134.011138475999928, 57.653794663999989], + [-133.987416144999912, 57.644761460000083], + [-133.96849524599989, 57.632798570000048], + [-133.951405402999939, 57.62787506700009], + [-133.93785559799997, 57.61855703300013], + [-133.929432745999918, 57.592962958000058], + [-133.929432745999918, 57.55548737200003], + [-133.926177537999877, 57.544419664000017], + [-133.899322068999879, 57.506496486000074], + [-133.854237433999913, 57.476019598000121], + [-133.839995897999927, 57.462632554000109], + [-133.860707160999937, 57.456366278000175], + [-133.872181769999969, 57.466945705000043], + [-133.880441860999866, 57.482163804000024], + [-133.89159094999988, 57.489935614], + [-133.900949673999918, 57.490668036000116], + [-133.906849738999938, 57.491766669000171], + [-133.912831183999856, 57.492010809000121], + [-133.922596808999913, 57.489935614], + [-133.918080206999946, 57.485907294000029], + [-133.918120897999927, 57.475775458000086], + [-133.922922329999835, 57.468451239000089], + [-133.932484503999916, 57.472845770000063], + [-133.964222785999965, 57.482163804000024], + [-134.039865688999868, 57.495306708000058], + [-134.056019660999937, 57.500148830000128], + [-134.072824673999946, 57.511053778000118], + [-134.076324022999927, 57.508368231000034], + [-134.086415167999917, 57.497463283000158], + [-134.066965298999889, 57.487982489000061], + [-134.056630011999886, 57.484523830000157], + [-134.045480923999946, 57.483099677], + [-134.045480923999946, 57.476263739000061], + [-134.100697394999884, 57.476263739000061], + [-134.066273566999939, 57.461371161000116], + [-134.01235917899993, 57.458482163999989], + [-133.977040167999917, 57.449204820000134], + [-133.99828040299991, 57.415472723000121], + [-133.979603644999912, 57.413275458000143], + [-133.941273566999882, 57.425034898000106], + [-133.919504360999923, 57.428534247000115], + [-133.914458787999877, 57.431097723000121], + [-133.903797980999855, 57.435126044000086], + [-133.893218553999901, 57.435003973000036], + [-133.888417120999918, 57.42511627800009], + [-133.886545376999862, 57.42259349199999], + [-133.878732876999862, 57.405340887000179], + [-133.877552863999938, 57.401190497000059], + [-133.870513475999957, 57.392645575000117], + [-133.864491339999944, 57.373928127000156], + [-133.864979620999918, 57.355129299000012], + [-133.877552863999938, 57.34658437700007], + [-133.901722785999937, 57.343329169000029], + [-133.915598110999923, 57.334784247000115], + [-133.939320441999939, 57.308661200000145], + [-133.958078579999892, 57.303697007000025], + [-133.982411261999857, 57.308498440000093], + [-134.052316860999895, 57.339789130000057], + [-134.059925910999937, 57.346747137000037], + [-134.063140428999873, 57.353664455000128], + [-134.067941860999895, 57.356838283000016], + [-134.080230272999927, 57.35276927300005], + [-134.078928188999924, 57.346625067000062], + [-134.075021938999924, 57.335394598000065], + [-134.077137824999937, 57.326076565000122], + [-134.093902147999955, 57.325506903000147], + [-134.099598761999943, 57.329413153000147], + [-134.10289466099988, 57.344671942000119], + [-134.107533331999889, 57.35276927300005], + [-134.119536912999934, 57.363267320000105], + [-134.136830206999946, 57.375311591000028], + [-134.156564907999865, 57.384711005000057], + [-134.175852016999897, 57.387600002000099], + [-134.142241990999963, 57.350165106000148], + [-134.131825324999909, 57.32721588700015], + [-134.149159308999884, 57.311835028000118], + [-134.142323370999947, 57.304510809000121], + [-134.134877081999974, 57.298163153000175], + [-134.117298956999946, 57.306219794000029], + [-134.101429816999939, 57.300238348], + [-134.072824673999946, 57.277655341000028], + [-134.084787563999896, 57.256415106000063], + [-134.099476691999968, 57.256089585000112], + [-134.114491339999915, 57.263373114000117], + [-134.127430792999917, 57.264634507000139], + [-134.135080532999837, 57.253973700000117], + [-134.14712480399993, 57.216864325000088], + [-134.155344204999835, 57.201971747000144], + [-134.167388475999957, 57.191555080000157], + [-134.182036912999962, 57.183417059000035], + [-134.198841925999972, 57.177720445000048], + [-134.217396613999881, 57.174627997000172], + [-134.226470506999874, 57.17641836100016], + [-134.235991990999878, 57.180568752000099], + [-134.245594855999855, 57.182562567000119], + [-134.254953579999892, 57.178045966000084], + [-134.26146399599989, 57.173000393000152], + [-134.285715298999946, 57.161037502000013], + [-134.270090298999975, 57.141913153000061], + [-134.284779425999886, 57.135931708000115], + [-134.310170050999915, 57.135646877000099], + [-134.326649542999917, 57.133693752000127], + [-134.323557094999899, 57.129828192000147], + [-134.319203253999916, 57.120062567], + [-134.331450975999871, 57.120794989000117], + [-134.340931769999884, 57.123358466000056], + [-134.361398891999869, 57.133693752000127], + [-134.364572719999927, 57.122992255000113], + [-134.369943813999896, 57.115057684000149], + [-134.377756313999896, 57.10956452000012], + [-134.388091600999871, 57.106390692000062], + [-134.380686001999891, 57.101019598], + [-134.372303839999915, 57.09690989800005], + [-134.363352016999897, 57.094061591000028], + [-134.35399329299986, 57.092718817000119], + [-134.35399329299986, 57.086493231000148], + [-134.404408331999889, 57.067938544000143], + [-134.437367316999968, 57.060939846000096], + [-134.468617316999939, 57.039129950000031], + [-134.484934048999946, 57.031236070000048], + [-134.501820441999939, 57.028957424000097], + [-134.556304490999935, 57.031236070000048], + [-134.574615037999934, 57.029120184000064], + [-134.614613410999937, 57.010199286000116], + [-134.598459438999896, 57.049505927000112], + [-134.598500128999973, 57.069973049000097], + [-134.622914191999939, 57.110825914000046], + [-134.612863735999866, 57.127183335000055], + [-134.594105597999885, 57.141099351000136], + [-134.579904751999891, 57.154771226000079], + [-134.614369269999912, 57.175279039000131], + [-134.624908006999874, 57.18488190300009], + [-134.631581183999913, 57.195786851000079], + [-134.635568813999896, 57.210760809000121], + [-134.633290167999917, 57.224188544000114], + [-134.621490037999962, 57.229925848000065], + [-134.557687954999835, 57.215643622000172], + [-134.52554277299987, 57.215765692000147], + [-134.504750128999973, 57.236721096000011], + [-134.539702928999901, 57.239935614000061], + [-134.556711391999869, 57.244696356000148], + [-134.569976365999878, 57.25381094000015], + [-134.580474412999934, 57.264634507000139], + [-134.583159959999932, 57.269354559000149], + [-134.566883917999917, 57.284491278000147], + [-134.543568488999881, 57.301092841000113], + [-134.516509568999936, 57.309149481000034], + [-134.457020636999914, 57.311835028000118], + [-134.463775193999965, 57.319525458000143], + [-134.48924719999988, 57.336004950000031], + [-134.497954881999931, 57.339789130000057], + [-134.529896613999938, 57.339789130000057], + [-134.546050584999932, 57.342474677000112], + [-134.559396938999839, 57.35276927300005], + [-134.553822394999941, 57.363023179000081], + [-134.560170050999943, 57.386175848000036], + [-134.556304490999935, 57.397772528000033], + [-134.542103644999941, 57.403387762000037], + [-134.522124803999958, 57.403143622000087], + [-134.508208787999877, 57.395982164000046], + [-134.512277798999946, 57.380764065000065], + [-134.402414516999869, 57.360256252000013], + [-134.341664191999939, 57.335353908000073], + [-134.31297766799986, 57.33234284100017], + [-134.321034308999913, 57.344875393000066], + [-134.335438605999855, 57.354193427000112], + [-134.367583787999934, 57.367092190000122], + [-134.367583787999934, 57.373928127000156], + [-134.351429816999939, 57.375230210000055], + [-134.334787563999896, 57.378851630000113], + [-134.319162563999924, 57.38507721600017], + [-134.30614173099994, 57.394354559000121], + [-134.340972459999875, 57.397040106000091], + [-134.422027147999927, 57.385239976000136], + [-134.463856574999937, 57.394354559000121], + [-134.472727016999897, 57.400702216000141], + [-134.497954881999931, 57.428534247000115], + [-134.533680792999888, 57.457709052000055], + [-134.535511847999942, 57.462632554000109], + [-134.548898891999869, 57.468085028000147], + [-134.562733527999853, 57.480047919000086], + [-134.569162563999896, 57.492010809000121], + [-134.560047980999883, 57.497463283000158], + [-134.551096157999865, 57.496242580000128], + [-134.532582160999937, 57.491115627000127], + [-134.521839972999942, 57.489935614], + [-134.51235917899993, 57.49213288], + [-134.495961066999911, 57.501450914000046], + [-134.473255988999966, 57.506781317], + [-134.441721157999893, 57.520941473000121], + [-134.404530402999882, 57.52643463700015], + [-134.35399329299986, 57.544582424000154], + [-134.378000454999921, 57.552964585000112], + [-134.488148566999939, 57.532700914000102], + [-134.541127081999946, 57.511053778000118], + [-134.566883917999917, 57.511053778000118], + [-134.579741990999935, 57.523016669000143], + [-134.604562954999892, 57.563666083000143], + [-134.618031378999945, 57.572495835], + [-134.638742641999897, 57.579982815000065], + [-134.653553839999944, 57.598211981000063], + [-134.663482225999928, 57.620794989000117], + [-134.669260219999899, 57.641424872000144], + [-134.673654751999891, 57.672430731000148], + [-134.676665818999879, 57.682359117000075], + [-134.700062628999973, 57.706935940000093], + [-134.704009568999965, 57.713080145000063], + [-134.716053839999887, 57.745794989], + [-134.713978644999941, 57.750637111000074], + [-134.708078579999921, 57.755845445000077], + [-134.702707485999895, 57.768011786000145], + [-134.696603969999899, 57.79222239800005], + [-134.698882615999935, 57.812486070000048], + [-134.714100714999915, 57.855902411000031], + [-134.721262173999975, 57.897365627000013], + [-134.751210089999944, 57.956732489000089], + [-134.762196417999917, 57.972154039000102], + [-134.761952277999853, 57.980047919000171], + [-134.751210089999944, 57.990220445000134], + [-134.766590949999909, 58.005804755000113], + [-134.784820115999963, 58.01972077], + [-134.800038214999944, 58.035223700000117], + [-134.806467251999862, 58.055405992000047], + [-134.797474738999938, 58.071763414000046], + [-134.75633704299986, 58.094671942000147], + [-134.744984503999973, 58.113185940000065], + [-134.746327277999882, 58.12433502800009], + [-134.751088019999969, 58.135972398], + [-134.756174282999893, 58.144924221000124], + [-134.758656378999916, 58.147894598000121], + [-134.753041144999941, 58.160834052000141], + [-134.743763800999943, 58.167181708000086], + [-134.735178188999868, 58.171576239000061], + [-134.731312628999945, 58.178900458000058], + [-134.736154751999834, 58.188666083], + [-134.747141079999892, 58.186468817], + [-134.768910285999937, 58.175848700000145], + [-134.774973110999838, 58.171291408000016], + [-134.77476966099988, 58.160305080000157], + [-134.772531704999892, 58.146877346000068], + [-134.772328253999945, 58.134833075000145], + [-134.783680792999917, 58.110500393000095], + [-134.797840949999852, 58.112779039000074], + [-134.829986131999931, 58.151597398], + [-134.843169725999957, 58.172267971000096], + [-134.850209113999938, 58.179348049000154], + [-134.873768683999884, 58.184963283000158], + [-134.891468878999973, 58.192084052000112], + [-134.907622850999928, 58.201239325000088], + [-134.915679490999878, 58.209947007000082], + [-134.907948370999861, 58.230658270000092], + [-134.889637824999909, 58.245591539000131], + [-134.883615688999896, 58.254706122000115], + [-134.912587042999917, 58.257757880000113], + [-134.931874152999939, 58.263617255000057], + [-134.944894985999923, 58.278631903000175], + [-134.952870245999861, 58.298488674000097], + [-134.969146287999905, 58.36322663], + [-134.970570441999968, 58.38556549700003], + [-134.961008266999897, 58.404852606000148], + [-134.949289516999897, 58.40949127800009], + [-134.936634894999941, 58.405422268000123], + [-134.926625128999945, 58.395982164000131], + [-134.922515428999901, 58.384711005000113], + [-134.917062954999864, 58.373521226000108] + ] + ], + [ + [ + [-152.606800910999937, 58.468451239000146], + [-152.603464321999923, 58.456366278000147], + [-152.581654425999943, 58.466620184000178], + [-152.555490688999896, 58.467962958000058], + [-152.499826626999891, 58.46320221600017], + [-152.506174282999922, 58.449408270000063], + [-152.521433071999894, 58.428534247000087], + [-152.52708899599989, 58.414780992000075], + [-152.493763800999886, 58.414048570000048], + [-152.478871222999942, 58.410101630000057], + [-152.465646938999896, 58.401109117000132], + [-152.481312628999888, 58.388983466000141], + [-152.484689907999893, 58.373439846000124], + [-152.476877407999893, 58.361476955000015], + [-152.458851691999882, 58.360174872000115], + [-152.449086066999939, 58.366034247000144], + [-152.444569464999887, 58.372748114], + [-152.438669399999924, 58.376695054], + [-152.424672003999888, 58.373765367000075], + [-152.414906378999945, 58.369614976000108], + [-152.405588344999899, 58.36322663], + [-152.401600714999915, 58.354437567000119], + [-152.419667120999918, 58.322943427000112], + [-152.398548956999946, 58.329046942000033], + [-152.375111456999946, 58.344956773000135], + [-152.379994269999941, 58.353949286000145], + [-152.373483852999925, 58.36163971600017], + [-152.363758917999888, 58.379380601000079], + [-152.357899542999917, 58.399603583000086], + [-152.363270636999914, 58.414780992000075], + [-152.349354620999918, 58.421128648000106], + [-152.323435024999924, 58.414211330000015], + [-152.311756964999915, 58.418524481000091], + [-152.298817511999914, 58.426336981000091], + [-152.28644771999987, 58.425767320000134], + [-152.260202602999925, 58.414780992000075], + [-152.263254360999952, 58.41087474199999], + [-152.264515753999945, 58.407782294000086], + [-152.265370245999947, 58.404730536], + [-152.267038540999863, 58.401109117000132], + [-152.245920376999948, 58.394964911000059], + [-152.260568813999953, 58.388983466000141], + [-152.267038540999863, 58.388128973000121], + [-152.256784633999928, 58.372015692000062], + [-152.236073370999918, 58.360052802000141], + [-152.211903449999909, 58.353501695000048], + [-152.191273566999882, 58.353949286000145], + [-152.151682094999956, 58.385931708000143], + [-152.140736456999889, 58.392035223000121], + [-152.116810675999943, 58.401109117000132], + [-152.107655402999939, 58.389593817], + [-152.091867641999897, 58.380682684000149], + [-152.083200649999924, 58.373521226000108], + [-152.09508216099988, 58.367621161000088], + [-152.13609778599988, 58.302964585000055], + [-152.154164191999882, 58.261542059000035], + [-152.143544074999937, 58.23383209800015], + [-152.131947394999941, 58.237982489000089], + [-152.120920376999891, 58.255438544000143], + [-152.11266028599988, 58.277492580000128], + [-152.109364386999943, 58.295314846000039], + [-152.09992428299995, 58.311916408000073], + [-152.080759243999864, 58.316555080000015], + [-152.065622524999867, 58.306341864000061], + [-152.068430141999926, 58.278265692000062], + [-152.051625128999916, 58.289129950000145], + [-152.031320766999897, 58.306708075000174], + [-152.014149542999888, 58.32636139500012], + [-152.006947394999855, 58.343085028000147], + [-152.000803188999896, 58.351874091000028], + [-151.987049933999856, 58.348374742000047], + [-151.973011847999913, 58.339748440000122], + [-151.966013149999924, 58.33283112200003], + [-151.965891079999949, 58.320746161000116], + [-151.971180792999917, 58.309881903000147], + [-151.98582923099994, 58.291896877000013], + [-151.968820766999897, 58.284125067], + [-151.980905727999868, 58.253973700000088], + [-151.972238735999895, 58.237250067000062], + [-151.993031378999888, 58.225165106000148], + [-152.031361456999889, 58.209662177000141], + [-152.047922329999892, 58.196275132000139], + [-152.047067837999862, 58.195379950000145], + [-152.048410610999952, 58.189601955000072], + [-152.051136847999942, 58.182033596000124], + [-152.054798956999889, 58.175848700000145], + [-152.057484503999859, 58.173529364], + [-152.116810675999943, 58.147894598000121], + [-152.129994269999884, 58.166164455000015], + [-152.196400519999912, 58.185980536000116], + [-152.219227667999917, 58.203111070000048], + [-152.23265540299991, 58.246771552000055], + [-152.246164516999897, 58.268255927000084], + [-152.260202602999925, 58.257757880000113], + [-152.269032355999911, 58.263576565000065], + [-152.276560024999952, 58.264227606000119], + [-152.282663540999948, 58.259833075000031], + [-152.287546352999925, 58.250921942], + [-152.304392055999926, 58.257554429000052], + [-152.316477016999926, 58.249172268], + [-152.32453365799995, 58.233099677000112], + [-152.329090949999909, 58.216782945], + [-152.309681769999884, 58.214911200000031], + [-152.296742316999882, 58.207098700000031], + [-152.29462643099987, 58.197333075000088], + [-152.308054165999863, 58.189439195000105], + [-152.324330206999889, 58.190863348000093], + [-152.353830532999893, 58.205308335000055], + [-152.370065883999928, 58.203111070000048], + [-152.363880988999853, 58.193426825000088], + [-152.354318813999953, 58.189032294000114], + [-152.342355923999946, 58.188299872000087], + [-152.329090949999909, 58.189439195000105], + [-152.33531653599988, 58.173081773000106], + [-152.331125454999949, 58.165025132000082], + [-152.308054165999863, 58.155340887000122], + [-152.282541469999899, 58.138739325000145], + [-152.273874477999868, 58.134833075000145], + [-152.286854620999861, 58.130682684000121], + [-152.309519008999928, 58.135199286000088], + [-152.31883704299986, 58.131089585000112], + [-152.337269660999908, 58.110541083000086], + [-152.342762824999937, 58.106878973000121], + [-152.349232550999943, 58.109767971000153], + [-152.360422329999949, 58.124090887000037], + [-152.369740363999881, 58.127386786000088], + [-152.398426886999857, 58.124945380000142], + [-152.410715298999918, 58.125677802000084], + [-152.424387173999946, 58.131089585000112], + [-152.455067511999943, 58.137355861000074], + [-152.489369269999912, 58.12836334800015], + [-152.522165493999921, 58.10960521], + [-152.54820716099988, 58.086411851000079], + [-152.558176235999895, 58.100287177000055], + [-152.562245245999947, 58.111965236000131], + [-152.562936977999868, 58.178778387000179], + [-152.560902472999857, 58.196234442000147], + [-152.555043097999913, 58.209947007000082], + [-152.576649542999917, 58.206691799000126], + [-152.588246222999942, 58.197333075000088], + [-152.593495245999918, 58.182318427000084], + [-152.598622199999909, 58.144842841000141], + [-152.603138800999886, 58.132635809000149], + [-152.611887173999946, 58.120510158000073], + [-152.627064581999946, 58.103461005000113], + [-152.632394985999895, 58.094712632000139], + [-152.633615688999924, 58.087469794000029], + [-152.635935024999895, 58.080308335000083], + [-152.644398566999939, 58.072170315000065], + [-152.65367591099988, 58.069525458000086], + [-152.679554816999882, 58.066799221000011], + [-152.708078579999892, 58.052069403000118], + [-152.733265753999888, 58.053371486000017], + [-152.755848761999943, 58.063381252000099], + [-152.76732337099989, 58.079575914000046], + [-152.775013800999886, 58.063299872000115], + [-152.765817837999919, 58.022853908000073], + [-152.777536587999919, 58.000799872000172], + [-152.804921027999882, 57.991522528000033], + [-152.926828579999892, 58.014878648000106], + [-153.014352993999921, 58.045477606000034], + [-153.036813930999926, 58.058986721000011], + [-153.058298305999926, 58.078599351000079], + [-153.066354946999866, 58.097113348000093], + [-153.048451300999943, 58.106878973000121], + [-153.081166144999855, 58.111029364000061], + [-153.126820441999882, 58.10846588700015], + [-153.167469855999883, 58.111151434000035], + [-153.185047980999911, 58.131089585000112], + [-153.229603644999884, 58.16889069200009], + [-153.229562954999892, 58.182562567000033], + [-153.188465949999909, 58.219875393000066], + [-153.161813930999898, 58.219549872000144], + [-153.02802486899995, 58.196275132000139], + [-153.023508266999897, 58.192043361000017], + [-153.014230923999946, 58.178656317000119], + [-153.010609503999888, 58.175848700000145], + [-153.002390102999868, 58.178045966000141], + [-153.000436977999925, 58.18284739800005], + [-152.999216274999924, 58.187648830000128], + [-152.993234829999892, 58.189439195000105], + [-152.971750454999892, 58.185126044000029], + [-152.928659633999928, 58.17023346600017], + [-152.905100063999896, 58.168402411], + [-152.905100063999896, 58.175848700000145], + [-153.006906704999949, 58.213364976], + [-153.012928839999944, 58.222154039000046], + [-153.02704830599987, 58.229803778000175], + [-153.043080206999889, 58.235256252000013], + [-153.071034308999913, 58.240139065000093], + [-153.085072394999941, 58.247870184000092], + [-153.109934048999889, 58.27138906500015], + [-153.059152798999946, 58.298814195000105], + [-153.041696743999893, 58.305568752000127], + [-153.019479946999923, 58.307277736000131], + [-152.989572719999956, 58.304510809000092], + [-152.960886196999894, 58.298041083], + [-152.942005988999881, 58.288519598000093], + [-152.902333136999943, 58.279852606000091], + [-152.846547003999945, 58.28790924700003], + [-152.80300859299993, 58.288519598000093], + [-152.795358852999897, 58.287258205000072], + [-152.793283657999893, 58.286810614000089], + [-152.76732337099989, 58.257757880000113], + [-152.751820441999882, 58.272650458000058], + [-152.753529425999886, 58.285386460000112], + [-152.762155727999868, 58.298976955000072], + [-152.76732337099989, 58.316107489], + [-152.769113735999895, 58.332017320000134], + [-152.77485104099992, 58.337062893000152], + [-152.78538977799991, 58.341131903000118], + [-152.801462368999893, 58.353949286000145], + [-152.79047604099992, 58.353094794000143], + [-152.779774542999917, 58.353461005000057], + [-152.76976477799991, 58.355658270000148], + [-152.760487433999856, 58.360174872000115], + [-152.785104946999866, 58.370835679000137], + [-152.867380337999919, 58.394354559000092], + [-152.883371548999946, 58.408596096000011], + [-152.861887173999889, 58.414129950000031], + [-152.817372199999909, 58.413153387000065], + [-152.773508266999954, 58.417710679], + [-152.753651495999947, 58.43964264500012], + [-152.747670050999943, 58.451564846000153], + [-152.734242316999939, 58.45404694200009], + [-152.720285610999895, 58.451849677], + [-152.712717251999919, 58.449530341000028], + [-152.701893683999913, 58.44204336100016], + [-152.697499152999939, 58.434556382], + [-152.692982550999886, 58.432114976000051], + [-152.681630011999914, 58.43964264500012], + [-152.67414303299995, 58.450832424000126], + [-152.670602993999864, 58.463527736000103], + [-152.664784308999913, 58.475287177000084], + [-152.65062415299991, 58.483628648000135], + [-152.632923956999889, 58.484605210000112], + [-152.617421027999882, 58.478745835000083], + [-152.606800910999937, 58.468451239000146] + ] + ], + [ + [ + [-152.483021613999881, 58.480536200000145], + [-152.502023891999897, 58.473456122000087], + [-152.526437954999949, 58.47654857], + [-152.630604620999918, 58.507879950000031], + [-152.644398566999939, 58.51845937700007], + [-152.639149542999945, 58.528957424000154], + [-152.643015102999954, 58.53729889500012], + [-152.652455206999889, 58.543280341000028], + [-152.66429602799991, 58.546372789000102], + [-152.591867641999897, 58.555243231000148], + [-152.581735805999926, 58.56248607], + [-152.572621222999942, 58.580226955000072], + [-152.551218227999897, 58.590521552], + [-152.507272915999863, 58.600327867000132], + [-152.496652798999918, 58.604966539000074], + [-152.472523566999911, 58.620835679], + [-152.453684048999889, 58.628159898], + [-152.434641079999892, 58.628322658000158], + [-152.411081508999928, 58.631537177000112], + [-152.389841274999924, 58.636948960000055], + [-152.369577602999925, 58.638088283000101], + [-152.34898841099988, 58.628322658000158], + [-152.350819464999859, 58.620428778000175], + [-152.35020911399991, 58.61318594000015], + [-152.347482876999948, 58.606512762000094], + [-152.342762824999937, 58.600327867000132], + [-152.370350714999944, 58.575262762000037], + [-152.374867316999911, 58.56378815300009], + [-152.363270636999914, 58.551947333000115], + [-152.456044074999909, 58.50287506700009], + [-152.483021613999881, 58.480536200000145] + ] + ], + [ + [ + [-160.268045798999907, 58.638146242000104], + [-160.27718012099993, 58.636692727000181], + [-160.271296715999881, 58.651764529000118], + [-160.277877055999852, 58.665234125000111], + [-160.294265463999864, 58.671120751000032], + [-160.316259675999902, 58.683487176000042], + [-160.31415768099987, 58.689764716000028], + [-160.31415768099987, 58.698228257000082], + [-160.307632299999881, 58.705193458000124], + [-160.301547225999911, 58.708951698000035], + [-160.310747395999897, 58.715856506000179], + [-160.301242434999921, 58.729353976000155], + [-160.278065558999913, 58.718573309000149], + [-160.275987702999856, 58.704520917000181], + [-160.277449021999871, 58.691038961000132], + [-160.275867098999925, 58.679436258000166], + [-160.258737758999899, 58.678615627000013], + [-160.248158331999946, 58.67177969], + [-160.243845180999926, 58.662665106000091], + [-160.252449469999902, 58.651211367000101], + [-160.268045798999907, 58.638146242000104] + ] + ], + [ + [ + [-160.417185024999924, 58.681789455000072], + [-160.426136847999857, 58.680365302000112], + [-160.43309485599994, 58.684637762000122], + [-160.435536261999886, 58.691148179000109], + [-160.423695441999939, 58.724025783000016], + [-160.415353969999956, 58.738348700000088], + [-160.405997691999943, 58.751282330000052], + [-160.391468878999888, 58.73769765800013], + [-160.384592251999891, 58.730861721000124], + [-160.381947394999884, 58.726629950000088], + [-160.381459113999881, 58.721258856000063], + [-160.384226040999948, 58.710760809000178], + [-160.393015102999925, 58.699652411000145], + [-160.405344204999892, 58.689398505000113], + [-160.417185024999924, 58.681789455000072] + ] + ], + [ + [ + [-160.824211574999879, 58.654634656000113], + [-160.845091514999865, 58.634062308000139], + [-160.86057095599989, 58.614707383000095], + [-160.868467967999862, 58.592082448000113], + [-160.89785828499987, 58.570343310000155], + [-160.936059063999892, 58.559006034], + [-160.96625316399988, 58.549508364000118], + [-161.018937562999895, 58.558916075000027], + [-161.040547906999876, 58.55806141], + [-161.053562494999881, 58.550874314000069], + [-161.074125507999895, 58.54692394100006], + [-161.085978939999904, 58.553326076000147], + [-161.076547286999869, 58.572176387000113], + [-161.080416198999899, 58.580436518000013], + [-161.090067274999882, 58.589850651000106], + [-161.075424467999881, 58.600747761000051], + [-161.077818404999903, 58.611015747000081], + [-161.079486024999852, 58.629784047], + [-161.110178188999953, 58.651271877000127], + [-161.140311274999874, 58.668943513000087], + [-161.171902986999896, 58.690753703000055], + [-161.162094814999875, 58.690534864000156], + [-161.078029704999892, 58.639274569000108], + [-161.063710264999941, 58.676726219], + [-161.061675705999903, 58.700505074], + [-161.043844404999874, 58.702133704000104], + [-161.005209560999845, 58.716887322], + [-160.973087373999931, 58.731786746000083], + [-160.947643315999926, 58.737648466000152], + [-160.909536551999906, 58.745582714000093], + [-160.858243368999865, 58.747364926000117], + [-160.833857503999923, 58.75626412300015], + [-160.809399876999919, 58.765187682000047], + [-160.787576616999928, 58.773509584000081], + [-160.767007858999904, 58.775717184000044], + [-160.73915142099986, 58.797885165000068], + [-160.71224973199989, 58.804015864000164], + [-160.704106354999851, 58.813348607000179], + [-160.687786444999944, 58.818723910000031], + [-160.685923957999933, 58.810838610000147], + [-160.699522732999867, 58.792789023000111], + [-160.721063954999892, 58.767111383000142], + [-160.77263, 58.716292386000177], + [-160.800903451999943, 58.679913886000136], + [-160.824211574999879, 58.654634656000113] + ] + ], + [ + [ + [-152.013050910999937, 58.94529857000002], + [-152.01313229099992, 58.939846096000153], + [-152.042510545999903, 58.929754950000088], + [-152.050770636999914, 58.922715562000022], + [-152.055165167999917, 58.914292710000083], + [-152.065093553999901, 58.911281643000066], + [-152.074655727999868, 58.914292710000083], + [-152.075144008999871, 58.919663804000137], + [-152.070179816999939, 58.926540432000039], + [-152.063791469999899, 58.932481187000164], + [-152.061838344999956, 58.938096421000168], + [-152.062489386999914, 58.942775783000073], + [-152.060454881999874, 58.944403387000094], + [-152.047271287999934, 58.944240627000127], + [-152.044829881999874, 58.946397203000132], + [-152.041818813999896, 58.951564846000153], + [-152.035227016999897, 58.951686916000128], + [-152.013050910999937, 58.94529857000002] + ] + ], + [ + [ + [-152.273386196999894, 58.959418036000116], + [-152.253122524999867, 58.956691799000154], + [-152.157785610999952, 58.956691799000154], + [-152.157948370999918, 58.952337958000058], + [-152.159291144999884, 58.949286200000174], + [-152.164011196999923, 58.943019924000126], + [-152.176950649999924, 58.939113674000126], + [-152.200550910999851, 58.943101304000109], + [-152.212391730999911, 58.943019924000126], + [-152.221628383999871, 58.93854401200015], + [-152.239816860999952, 58.925279039000131], + [-152.249663865999878, 58.922512111000074], + [-152.24970455599987, 58.922512111000074], + [-152.33421790299991, 58.911932684000121], + [-152.363270636999914, 58.915716864000146], + [-152.363270636999914, 58.922512111000074], + [-152.34015865799995, 58.924790757000139], + [-152.327219204999949, 58.935044664000074], + [-152.323801235999923, 58.951117255000057], + [-152.329090949999909, 58.970892645000063], + [-152.309071417999917, 58.970404364000089], + [-152.273386196999894, 58.959418036000116] + ] + ], + [ + [ + [-151.646923563999877, 59.103935698000114], + [-151.662559555999906, 59.098189803000039], + [-151.678359566999859, 59.099919160000141], + [-151.699837802999923, 59.097939428000117], + [-151.713646687999926, 59.105835305000156], + [-151.721582178999881, 59.121897371000088], + [-151.70851436399991, 59.130720312], + [-151.687858947999928, 59.129656019000052], + [-151.670165641999944, 59.118080213999988], + [-151.643719647999916, 59.115749133000023], + [-151.646923563999877, 59.103935698000114] + ] + ], + [ + [ + [-151.428280631999883, 59.117301695000052], + [-151.438932717999904, 59.107286029000122], + [-151.459555899999884, 59.10901380899999], + [-151.481583517999923, 59.118187777000102], + [-151.508501224999918, 59.128566292000031], + [-151.500250539999911, 59.13732668800013], + [-151.465133178999849, 59.138190644000119], + [-151.44812698599992, 59.136439716000027], + [-151.433561007999884, 59.13529206300008], + [-151.438209260999884, 59.127182276000028], + [-151.428280631999883, 59.117301695000052] + ] + ], + [ + [ + [-151.788781505999907, 59.153052899000144], + [-151.800758342999927, 59.138892749000107], + [-151.853312335999931, 59.144766449000102], + [-151.893189972999892, 59.144364311000132], + [-151.888675805999867, 59.15718263100014], + [-151.858987185999865, 59.163867345000185], + [-151.816821979999958, 59.170664156000058], + [-151.788781505999907, 59.153052899000144] + ] + ], + [ + [ + [-150.699940558999913, 59.313910223000093], + [-150.731638149999895, 59.311509507000054], + [-150.761830206999889, 59.316799221000124], + [-150.779855923999946, 59.334051825000031], + [-150.746205206999917, 59.357855536000116], + [-150.723581508999956, 59.36603424700003], + [-150.714955206999946, 59.376857815000122], + [-150.704172329999949, 59.395453192000119], + [-150.681996222999885, 59.40517812700007], + [-150.653797980999911, 59.407212632], + [-150.626901821999923, 59.399847723], + [-150.608591274999867, 59.381170966000028], + [-150.655100063999896, 59.332993882000082], + [-150.677479620999918, 59.319769598000121], + [-150.699940558999913, 59.313910223000093] + ] + ], + [ + [ + [-153.405873175999915, 59.338568427], + [-153.498890753999888, 59.325425523000135], + [-153.524525519999941, 59.330267645], + [-153.535104946999923, 59.33722565300009], + [-153.54511471299989, 59.338934637000094], + [-153.552683071999923, 59.343085028000033], + [-153.555612758999956, 59.357611395000092], + [-153.550160285999937, 59.366888739000117], + [-153.538156704999892, 59.377101955000072], + [-153.525339321999951, 59.385239976], + [-153.517770962999919, 59.388617255], + [-153.504465298999889, 59.391750393000066], + [-153.476755337999919, 59.405422268], + [-153.463449673999889, 59.408514716000084], + [-153.39793860599994, 59.408514716000084], + [-153.357411261999914, 59.378119208000115], + [-153.354603644999884, 59.365179755000113], + [-153.376820441999939, 59.347723700000145], + [-153.405873175999915, 59.338568427] + ] + ], + [ + [ + [-146.340687628999888, 59.411444403000118], + [-146.358550584999932, 59.410101630000113], + [-146.358631964999915, 59.422430731000176], + [-146.323597785999937, 59.452134507000025], + [-146.313099738999938, 59.455755927000055], + [-146.308216925999886, 59.447088934000149], + [-146.322417772999898, 59.425848700000088], + [-146.340687628999888, 59.411444403000118] + ] + ], + [ + [ + [-150.302194790999863, 59.44916413], + [-150.303700324999909, 59.430487372000115], + [-150.314401821999951, 59.422186591000028], + [-150.321278449999852, 59.422349351], + [-150.325306769999941, 59.427476304000109], + [-150.328195766999954, 59.433539130000028], + [-150.331410285999908, 59.436428127000127], + [-150.338327602999925, 59.435248114000032], + [-150.349110480999911, 59.430243231000148], + [-150.355336066999882, 59.429632880000113], + [-150.379099087999862, 59.431382554000109], + [-150.385568813999896, 59.428656317000119], + [-150.396921352999954, 59.422186591000028], + [-150.415353969999899, 59.407131252000013], + [-150.426991339999915, 59.401678778000175], + [-150.443470831999889, 59.402289130000142], + [-150.423695441999882, 59.435980536000145], + [-150.410511847999913, 59.446275132000054], + [-150.334828253999916, 59.456976630000085], + [-150.306507941999882, 59.464260158000101], + [-150.294626430999926, 59.464585679000109], + [-150.293894008999899, 59.456976630000085], + [-150.302194790999863, 59.44916413] + ] + ], + [ + [ + [-144.578846808999913, 59.817775783000073], + [-144.605295376999891, 59.813177802000055], + [-144.552357550999943, 59.873236395000148], + [-144.53384355399993, 59.882066148000106], + [-144.509348110999895, 59.888983466000113], + [-144.442005988999881, 59.937323309000121], + [-144.392974412999905, 59.956610419000143], + [-144.341786261999857, 59.9845238300001], + [-144.308094855999855, 59.988755601000108], + [-144.245757615999878, 60.007554429000081], + [-144.208607550999886, 60.011786200000088], + [-144.213286912999877, 60.002264716000084], + [-144.220814581999946, 59.995794989000089], + [-144.23062089799987, 59.992377020000092], + [-144.242176886999914, 59.991359768], + [-144.37710527299987, 59.932359117000075], + [-144.403716600999928, 59.927191473000065], + [-144.412180141999954, 59.920355536000145], + [-144.418934699999909, 59.911525783000101], + [-144.427723761999857, 59.902533270000063], + [-144.554595506999902, 59.827093817000119], + [-144.578846808999913, 59.817775783000073] + ] + ], + [ + [ + [-147.995025193999908, 60.03266022300015], + [-148.081166144999884, 59.971665757000082], + [-148.112904425999943, 59.960842190000065], + [-148.142160610999952, 59.94672272300015], + [-148.155954555999955, 59.943548895000092], + [-148.244984503999888, 59.943548895000092], + [-148.229115363999938, 59.949367580000128], + [-148.196237758999928, 59.953355210000112], + [-148.182321743999864, 59.964056708000115], + [-148.18915768099987, 59.963446356000176], + [-148.203317837999919, 59.964341539000074], + [-148.210194464999915, 59.964056708000115], + [-148.205515102999897, 59.96946849199999], + [-148.20335852799991, 59.97284577], + [-148.199574347999885, 59.975246486000131], + [-148.18976803299995, 59.977687893000066], + [-148.18976803299995, 59.9845238300001], + [-148.197987433999941, 59.983954169000029], + [-148.214955206999917, 59.985052802000084], + [-148.223255988999881, 59.9845238300001], + [-148.223255988999881, 59.991359768], + [-148.202992316999882, 59.99555084800015], + [-148.186838344999899, 59.993150132], + [-148.172840949999852, 59.985663153000033], + [-148.159372524999867, 59.974269924000069], + [-148.14484615799995, 59.972398179000024], + [-148.10606848899991, 59.99209219000015], + [-148.078195766999954, 60.00104401200015], + [-148.032093878999945, 60.025458075000031], + [-148.026071743999921, 60.030829169000171], + [-148.020090298999889, 60.037787177000084], + [-148.013417120999947, 60.043931382000054], + [-148.005034959999875, 60.046576239000117], + [-147.993072068999879, 60.044582424000097], + [-147.990467902999853, 60.039496161000088], + [-147.995025193999908, 60.03266022300015] + ] + ], + [ + [ + [-147.981760219999899, 59.959051825000088], + [-148.035715298999889, 59.952582098000093], + [-148.046376105999911, 59.95709870000006], + [-148.035511847999942, 59.974269924000069], + [-148.007517055999926, 59.996242580000072], + [-147.947255011999857, 60.029038804], + [-147.891753709999904, 60.069037177000141], + [-147.876576300999915, 60.076361395000148], + [-147.861398891999926, 60.080755927000112], + [-147.846587693999879, 60.081244208000115], + [-147.829701300999886, 60.077866929], + [-147.819976365999935, 60.068915106000148], + [-147.82664954299986, 60.052801825000088], + [-147.843251105999911, 60.030462958000058], + [-147.867502407999922, 60.00885651200015], + [-147.89517167899993, 59.99042389500012], + [-147.938588019999884, 59.971909898000106], + [-147.981760219999899, 59.959051825000088] + ] + ], + [ + [ + [-147.953114386999914, 60.129461981000148], + [-147.953236456999889, 60.121649481000148], + [-147.914784308999884, 60.125474351000079], + [-147.899037238999938, 60.121975002000099], + [-147.881255662999934, 60.107367255000057], + [-147.896473761999914, 60.095607815000093], + [-147.918365037999877, 60.086004950000117], + [-147.963775193999936, 60.073919989], + [-148.019154425999943, 60.074652411000145], + [-148.044422980999883, 60.070298570000048], + [-148.059396938999896, 60.052801825000088], + [-148.050852016999897, 60.054266669000143], + [-148.032093878999945, 60.052801825000088], + [-148.093332485999952, 60.017767645], + [-148.124867316999882, 60.004136460000055], + [-148.14130611899995, 60.011786200000088], + [-148.13312740799995, 60.031073309000121], + [-148.109567837999919, 60.056301174000097], + [-148.080555792999917, 60.078192450000117], + [-148.045399542999945, 60.091782945000077], + [-148.018259243999921, 60.110581773000106], + [-148.001332160999851, 60.114813544000143], + [-147.998605923999889, 60.121161200000174], + [-147.975656704999892, 60.147894598000093], + [-147.970041469999899, 60.152736721000068], + [-147.966460740999935, 60.156561591000084], + [-147.95921790299991, 60.144964911000059], + [-147.953114386999914, 60.129461981000148] + ] + ], + [ + [ + [-152.558216925999886, 60.108343817000147], + [-152.580148891999897, 60.107245184000092], + [-152.611154751999919, 60.131048895000092], + [-152.62828528599988, 60.14862702000012], + [-152.635690883999928, 60.157945054000052], + [-152.638132290999891, 60.16730377800009], + [-152.632394985999895, 60.174790757000054], + [-152.62047278599988, 60.179266669000029], + [-152.604603644999941, 60.17861562700007], + [-152.58617102799991, 60.17206452], + [-152.569447394999884, 60.158758856000176], + [-152.563181118999921, 60.149969794000114], + [-152.558298305999955, 60.134995835000083], + [-152.558216925999886, 60.108343817000147] + ] + ], + [ + [ + [-148.081247524999952, 60.134995835000083], + [-148.08735104099992, 60.11823151200015], + [-148.090402798999946, 60.100246486000017], + [-148.099232550999886, 60.083482164000017], + [-148.113229946999951, 60.071234442000119], + [-148.131703253999888, 60.066473700000031], + [-148.137318488999881, 60.063544012000094], + [-148.159331834999875, 60.04315827000012], + [-148.159372524999867, 60.04315827000012], + [-148.168812628999888, 60.037746486000074], + [-148.258615688999896, 60.023138739000061], + [-148.286000128999888, 60.023993231000148], + [-148.313832160999937, 60.032294012000037], + [-148.287342902999853, 60.042669989000146], + [-148.219960089999944, 60.039780992000104], + [-148.18976803299995, 60.046576239000117], + [-148.213246222999913, 60.054266669000143], + [-148.299631313999896, 60.052801825000088], + [-148.299631313999896, 60.060248114000061], + [-148.271188930999898, 60.067206122000144], + [-148.215809699999909, 60.073675848000065], + [-148.18976803299995, 60.087551174000154], + [-148.263010219999899, 60.088690497000087], + [-148.285959438999896, 60.094387111000074], + [-148.27122962099989, 60.102972723000093], + [-148.140817837999862, 60.147894598000093], + [-148.118723110999895, 60.150295315000122], + [-148.114003058999884, 60.12909577000012], + [-148.101511196999866, 60.135687567000033], + [-148.088083462999862, 60.146714585000055], + [-148.077463344999927, 60.159979559000092], + [-148.069325324999909, 60.18695709800015], + [-148.060617641999926, 60.195135809000149], + [-148.049997524999895, 60.195705471000124], + [-148.040964321999866, 60.186590887000037], + [-148.051706508999899, 60.16893138200011], + [-148.081247524999952, 60.134995835000083] + ] + ], + [ + [ + [-147.472727016999897, 60.229559637000179], + [-147.491810675999886, 60.228827216000141], + [-147.494862433999856, 60.23712799700003], + [-147.492258266999954, 60.25259023600016], + [-147.500965949999937, 60.258368231000119], + [-147.49388587099989, 60.263128973000121], + [-147.467844204999892, 60.266669012000094], + [-147.450062628999945, 60.272284247000087], + [-147.444569464999915, 60.273098049000012], + [-147.438954230999911, 60.27334219000015], + [-147.366037563999896, 60.299017645000035], + [-147.360422329999892, 60.300726630000113], + [-147.349232550999886, 60.301703192], + [-147.343413865999906, 60.298732815000093], + [-147.343861456999889, 60.285101630000142], + [-147.347808397999898, 60.2735863300001], + [-147.370269334999875, 60.262844143000095], + [-147.472727016999897, 60.229559637000179] + ] + ], + [ + [ + [-147.114165818999879, 60.356675523000078], + [-147.120269334999875, 60.347601630000085], + [-147.011057094999927, 60.347601630000085], + [-147.026519334999847, 60.330755927000084], + [-147.107248501999862, 60.286200262000179], + [-147.080799933999884, 60.280340887000037], + [-146.922271287999877, 60.313462632000082], + [-146.922271287999877, 60.306626695000048], + [-146.92870032499988, 60.304836330000072], + [-146.933013475999871, 60.30141836100016], + [-146.937001105999855, 60.297186591000056], + [-146.942128058999884, 60.292954820000105], + [-146.970570441999882, 60.25918203300013], + [-147.010487433999856, 60.233710028000033], + [-147.233794725999871, 60.133124091000113], + [-147.328195766999926, 60.070257880000057], + [-147.371083136999914, 60.028876044000029], + [-147.376616990999935, 60.015529690000122], + [-147.369496222999885, 60.006781317000147], + [-147.358794725999928, 59.999660549000097], + [-147.353667772999927, 59.991359768], + [-147.367014126999948, 59.97284577], + [-147.427235480999911, 59.976629950000031], + [-147.452992316999939, 59.967474677000141], + [-147.483550584999875, 59.946966864000089], + [-147.487416144999884, 59.943548895000092], + [-147.490305141999897, 59.939195054], + [-147.478667772999927, 59.929754950000174], + [-147.456125454999921, 59.915594794000143], + [-147.453602667999917, 59.895900783000016], + [-147.468251105999911, 59.876776434000035], + [-147.492339647999927, 59.861802476], + [-147.518788214999915, 59.854193427000055], + [-147.601144985999952, 59.866766669000143], + [-147.643706834999932, 59.862616278000118], + [-147.668771938999896, 59.819281317000119], + [-147.68423417899993, 59.817084052000141], + [-147.716786261999914, 59.820013739000061], + [-147.800607876999891, 59.803290106000034], + [-147.840240037999934, 59.786525783000016], + [-147.861439581999917, 59.78245677300005], + [-147.878773566999911, 59.783148505], + [-147.915394660999937, 59.792669989], + [-147.915394660999937, 59.799546617000104], + [-147.898793097999885, 59.810207424000126], + [-147.894439256999874, 59.833807684000178], + [-147.886138475999928, 59.857611395000063], + [-147.85765540299991, 59.868475653000147], + [-147.825428839999859, 59.870794989000117], + [-147.793771938999896, 59.877752997000115], + [-147.76390540299991, 59.888495184000121], + [-147.737212693999879, 59.902533270000063], + [-147.760121222999885, 59.907660223000093], + [-147.790679490999906, 59.91095612200003], + [-147.80492102799991, 59.920355536000145], + [-147.77879798099994, 59.943548895000092], + [-147.752430792999945, 59.953843492000019], + [-147.695708787999877, 59.962144273000078], + [-147.66893469999988, 59.970892645000148], + [-147.674305792999917, 59.980292059000178], + [-147.682525193999936, 59.987046617000104], + [-147.703114386999857, 59.997503973000093], + [-147.680978969999899, 60.008734442], + [-147.533111131999902, 60.058579820000048], + [-147.515044725999871, 60.070135809000178], + [-147.424631313999896, 60.111232815000065], + [-147.380197719999899, 60.139593817], + [-147.387806769999941, 60.162665106000148], + [-147.374094204999892, 60.170558986000131], + [-147.342152472999885, 60.179754950000117], + [-147.329741990999878, 60.187201239], + [-147.303822394999884, 60.226874091000113], + [-147.295643683999856, 60.232163804], + [-147.285878058999913, 60.231024481000148], + [-147.265533006999931, 60.225897528000033], + [-147.254709438999953, 60.224676825000117], + [-147.246693488999881, 60.226874091000113], + [-147.228830532999922, 60.23623281500015], + [-147.201161261999914, 60.242173570000077], + [-147.19701087099989, 60.251206773], + [-147.202870245999918, 60.269110419000029], + [-147.203846808999913, 60.27464427300005], + [-147.206044074999909, 60.281561591000141], + [-147.20836341099988, 60.286566473], + [-147.209624803999958, 60.286200262000179], + [-147.207590298999946, 60.294989325000145], + [-147.204253709999932, 60.29791901200015], + [-147.200266079999949, 60.300116278000147], + [-147.196034308999913, 60.306626695000048], + [-147.191761847999885, 60.310248114000117], + [-147.184681769999941, 60.31354401200015], + [-147.178049282999893, 60.318589585], + [-147.175526495999861, 60.327093817000119], + [-147.179921027999939, 60.33201732], + [-147.198475714999944, 60.338934637000179], + [-147.202870245999918, 60.341376044000114], + [-147.189605272999898, 60.362209377000099], + [-147.155140753999888, 60.376450914000017], + [-147.11554928299995, 60.381659247000087], + [-147.086781378999888, 60.375555731000091], + [-147.106516079999949, 60.363918361000103], + [-147.114165818999879, 60.356675523000078] + ] + ], + [ + [ + [-148.014108852999897, 60.308335679000052], + [-148.018422003999888, 60.299790757000139], + [-148.042225714999887, 60.286566473], + [-148.073312954999892, 60.285142320000134], + [-148.104440883999871, 60.292873440000122], + [-148.12828528599988, 60.306626695000048], + [-148.135121222999885, 60.299790757000139], + [-148.127064581999946, 60.334947007], + [-148.075632290999948, 60.36937083500014], + [-148.014393683999913, 60.387925523000135], + [-147.977447068999879, 60.375555731000091], + [-147.983062303999873, 60.366441148000106], + [-148.004750128999859, 60.344468492000019], + [-148.006214972999913, 60.335638739000146], + [-148.014108852999897, 60.308335679000052] + ] + ], + [ + [ + [-145.119699673999946, 60.32440827000012], + [-145.12328040299991, 60.311753648000078], + [-145.136586066999939, 60.306626695000048], + [-145.145904100999957, 60.308905341000028], + [-145.163197394999884, 60.31867096600017], + [-145.181955532999922, 60.319769598], + [-145.202259894999941, 60.314642645], + [-145.211984829999892, 60.313462632000082], + [-145.233469204999892, 60.31732819200009], + [-145.261870897999927, 60.332668361000046], + [-145.284291144999941, 60.333929755000142], + [-145.284291144999941, 60.341376044000114], + [-145.174427863999881, 60.382391669000029], + [-145.11978105399993, 60.409816799000069], + [-145.095082160999937, 60.41632721600017], + [-145.092518683999913, 60.402167059000035], + [-145.099232550999886, 60.38886139500012], + [-145.114125128999916, 60.369940497000087], + [-145.11978105399993, 60.355047919000143], + [-145.119699673999946, 60.32440827000012] + ] + ], + [ + [ + [-166.102731899999952, 60.391994533000101], + [-166.092152472999913, 60.374660549000012], + [-166.080148891999897, 60.359320380000057], + [-166.061838344999927, 60.347601630000085], + [-166.067941860999895, 60.344671942000147], + [-166.070627407999893, 60.341620184000149], + [-166.072377081999889, 60.338080145000063], + [-166.075510219999956, 60.333929755000142], + [-166.051747199999852, 60.327948309000121], + [-165.988229946999951, 60.320624091000113], + [-165.921254035999851, 60.327093817000119], + [-165.897206183999913, 60.344427802000027], + [-165.886789516999926, 60.347601630000085], + [-165.810495571999894, 60.345892645000063], + [-165.787546352999897, 60.341376044000114], + [-165.779286261999914, 60.336981512000037], + [-165.766468878999888, 60.324652411000088], + [-165.760202602999925, 60.320949611000131], + [-165.74555416599992, 60.319037177000084], + [-165.718454555999898, 60.319525458000058], + [-165.70555579299986, 60.313462632000082], + [-165.726063605999911, 60.306626695000048], + [-165.684437628999859, 60.299790757000139], + [-165.686960415999863, 60.292873440000122], + [-165.688547329999892, 60.289984442], + [-165.691883917999917, 60.286200262000179], + [-165.679188605999883, 60.278509833000058], + [-165.685414191999939, 60.266831773000078], + [-165.700876430999955, 60.256089585000055], + [-165.715809699999909, 60.251410223000121], + [-165.718210415999948, 60.245550848000093], + [-165.705515102999868, 60.232367255000142], + [-165.678293423999889, 60.211086330000157], + [-165.721262173999946, 60.181586005], + [-165.732899542999945, 60.176336981000091], + [-165.724680141999954, 60.163885809000178], + [-165.711374477999925, 60.157049872000172], + [-165.695139126999891, 60.154730536], + [-165.678293423999889, 60.155829169000143], + [-165.682972785999908, 60.151068427000055], + [-165.687570766999926, 60.145209052000112], + [-165.691883917999917, 60.142157294000114], + [-165.691883917999917, 60.135321356000091], + [-165.682850714999915, 60.133856512000037], + [-165.679514126999891, 60.13182200700011], + [-165.67719479099992, 60.12815989800005], + [-165.671457485999952, 60.121649481000148], + [-165.681223110999895, 60.106756903000118], + [-165.693714972999913, 60.09320709800015], + [-165.726063605999911, 60.066473700000031], + [-165.691395636999943, 60.06777578300013], + [-165.67719479099992, 60.063177802], + [-165.66620846299989, 60.038763739000146], + [-165.653513149999924, 60.032904364], + [-165.623036261999857, 60.025458075000031], + [-165.630930141999954, 60.014797268000095], + [-165.63642330599987, 60.009670315000065], + [-165.643503383999928, 60.00495026200015], + [-165.643503383999928, 59.997503973000093], + [-165.628854946999923, 59.992905992000047], + [-165.613392706999889, 59.975653387000065], + [-165.602528449999909, 59.970892645000148], + [-165.58885657499988, 59.972601630000057], + [-165.557850714999944, 59.983058986000131], + [-165.541086391999926, 59.9845238300001], + [-165.553822394999884, 59.976507880000057], + [-165.567575649999895, 59.97011953300013], + [-165.578317837999919, 59.962551174000069], + [-165.582102016999954, 59.950995184000149], + [-165.569081183999856, 59.950995184000149], + [-165.559803839999915, 59.94940827000012], + [-165.554758266999869, 59.943548895000092], + [-165.554921027999939, 59.934637762000037], + [-165.558664516999954, 59.92963288], + [-165.56464596299989, 59.925523179000052], + [-165.571481899999895, 59.919338283000073], + [-165.598622199999909, 59.909654039000131], + [-165.692250128999945, 59.90298086100016], + [-165.715809699999909, 59.905991929000081], + [-165.727487758999899, 59.915757554000109], + [-165.742258266999897, 59.924221096000153], + [-165.754831508999956, 59.925116278000061], + [-165.760202602999925, 59.912543036000059], + [-165.771066860999895, 59.906968492000047], + [-165.864938930999898, 59.882757880000142], + [-165.883778449999909, 59.881008205000157], + [-165.927805141999926, 59.882066148000106], + [-165.944325324999909, 59.887437242000075], + [-165.958566860999923, 59.897528387000037], + [-165.973866339999887, 59.903509833000143], + [-165.99360104099992, 59.896307684000121], + [-165.963693813999924, 59.887884833000058], + [-165.979115363999881, 59.876166083000086], + [-166.010121222999885, 59.866644598000065], + [-166.027088995999861, 59.864691473000121], + [-166.04039466099988, 59.857611395000063], + [-166.122670050999943, 59.841131903000175], + [-166.132517055999955, 59.85822174700003], + [-166.187814907999865, 59.862250067], + [-166.246693488999938, 59.853908596000124], + [-166.26728268099987, 59.833685614], + [-166.259592251999948, 59.832709052000112], + [-166.215769008999899, 59.820013739000061], + [-166.157419399999895, 59.827460028000061], + [-166.134226040999863, 59.822333075000031], + [-166.11274166599992, 59.810858466000084], + [-166.094675258999928, 59.795599677000112], + [-166.081735805999926, 59.779038804000052], + [-166.104237433999913, 59.76585521], + [-166.144113735999895, 59.757961330000128], + [-166.182077602999897, 59.756293036000116], + [-166.199045376999862, 59.761664130000085], + [-166.205881313999896, 59.777899481000119], + [-166.222767706999889, 59.794745184000121], + [-166.244007941999882, 59.807847398], + [-166.275135870999947, 59.816351630000113], + [-166.298410610999866, 59.830511786000145], + [-166.311716274999895, 59.833685614], + [-166.329945441999882, 59.834906317000119], + [-166.406442837999862, 59.854803778000118], + [-166.438588019999941, 59.85822174700003], + [-166.470651821999923, 59.856634833], + [-166.500070766999897, 59.847967841000084], + [-166.506296352999954, 59.860174872000172], + [-166.521107550999943, 59.861029364000089], + [-166.555287238999938, 59.854193427000055], + [-166.613352016999897, 59.856390692000147], + [-166.630441860999923, 59.861029364000089], + [-166.670765753999888, 59.885443427000112], + [-166.68500729099992, 59.888902085000112], + [-166.726633266999869, 59.892401434000121], + [-166.748605923999889, 59.897609768], + [-166.787831183999913, 59.921128648000078], + [-167.020822719999899, 59.991359768], + [-167.00096594999988, 60.002346096000068], + [-166.993519660999908, 60.00495026200015], + [-167.011463995999947, 60.012274481000176], + [-167.028269008999956, 60.008937893000152], + [-167.044789191999939, 60.001654364000117], + [-167.062367316999882, 59.997503973000093], + [-167.060129360999895, 60.004584052000055], + [-167.060739712999947, 60.008124091000028], + [-167.062123175999943, 60.011867580000072], + [-167.062367316999882, 60.019273179000052], + [-167.074940558999856, 60.010077216000084], + [-167.079335089999944, 60.003404039000131], + [-167.085519985999923, 59.999212958], + [-167.103382941999882, 59.997503973000093], + [-167.121937628999888, 60.000718492000047], + [-167.15294348899991, 60.015814520000148], + [-167.167917446999951, 60.019273179000052], + [-167.189808722999885, 60.027777411000088], + [-167.21698971299989, 60.047756252000156], + [-167.241078253999916, 60.07050202], + [-167.254221157999893, 60.087551174000154], + [-167.260975714999915, 60.087551174000154], + [-167.267893032999893, 60.070298570000048], + [-167.286081508999899, 60.06549713700015], + [-167.306955532999865, 60.070013739000032], + [-167.321848110999923, 60.080755927000112], + [-167.321034308999913, 60.084377346000096], + [-167.321848110999923, 60.111070054000109], + [-167.323719855999883, 60.12099844], + [-167.328724738999938, 60.128607489000146], + [-167.343576626999891, 60.142157294000114], + [-167.436146613999881, 60.195379950000088], + [-167.452829555999926, 60.217230536000145], + [-167.436472133999899, 60.212062893000123], + [-167.421091274999952, 60.211737372000115], + [-167.342884894999855, 60.224269924000012], + [-167.332712368999921, 60.228461005000142], + [-167.321115688999896, 60.235419012000037], + [-167.304921027999939, 60.238836981000034], + [-167.288075324999937, 60.238714911000059], + [-167.274362758999928, 60.235296942000062], + [-167.258981899999867, 60.229559637000179], + [-167.246896938999868, 60.228257554], + [-167.158151821999923, 60.234523830000128], + [-166.873972133999871, 60.210638739000061], + [-166.820423956999861, 60.217596747000144], + [-166.794870571999866, 60.258856512000094], + [-166.797922329999892, 60.266831773000078], + [-166.80439205599987, 60.27073802300005], + [-166.807810024999895, 60.275458075000145], + [-166.801706508999899, 60.286200262000179], + [-166.79230709499987, 60.292303778000147], + [-166.760853644999941, 60.304429429000052], + [-166.72130286399991, 60.311102606000119], + [-166.667673305999926, 60.327704169000171], + [-166.636586066999911, 60.327093817000119], + [-166.597889777999853, 60.315130927], + [-166.577707485999923, 60.315252997000144], + [-166.568959113999881, 60.330511786000116], + [-166.566517706999917, 60.350490627000013], + [-166.558949347999885, 60.359442450000031], + [-166.459217902999853, 60.387152411000116], + [-166.421986456999889, 60.384344794000171], + [-166.390207485999923, 60.361273505000028], + [-166.394642706999889, 60.358221747000115], + [-166.399037238999881, 60.352240302], + [-166.403879360999952, 60.347601630000085], + [-166.379831508999928, 60.348944403000147], + [-166.308216925999886, 60.382391669000029], + [-166.185373501999919, 60.402167059000035], + [-166.189076300999886, 60.38564687700007], + [-166.173410610999895, 60.379380601000108], + [-166.151560024999952, 60.381170966000113], + [-166.136952277999939, 60.388576565000093], + [-166.134714321999951, 60.401556708000086], + [-166.140858527999939, 60.415594794000029], + [-166.157419399999895, 60.436957098000093], + [-166.131296352999925, 60.431463934000149], + [-166.119007941999882, 60.426214911000088], + [-166.108998175999915, 60.416489976000136], + [-166.116444464999887, 60.409654039000102], + [-166.102731899999952, 60.391994533000101] + ] + ], + [ + [ + [-146.541574673999889, 60.468573309000178], + [-146.544911261999914, 60.464911200000031], + [-146.445627407999893, 60.464911200000031], + [-146.423247850999957, 60.467922268000123], + [-146.401722785999937, 60.473334052000084], + [-146.379017706999889, 60.476060289000046], + [-146.353098110999895, 60.471136786000088], + [-146.362049933999913, 60.453802802], + [-146.361643032999893, 60.426214911000088], + [-146.366769985999923, 60.409654039000102], + [-146.323557094999927, 60.410711981000148], + [-146.238392706999946, 60.431626695000134], + [-146.15135657499988, 60.438788153000147], + [-146.129628058999913, 60.436224677000055], + [-146.120350714999944, 60.427069403000175], + [-146.129750128999888, 60.422837632000054], + [-146.174224412999877, 60.409491278000147], + [-146.188628709999875, 60.402167059000035], + [-146.093658006999931, 60.410345770000148], + [-146.078765428999873, 60.402167059000035], + [-146.085682745999861, 60.402655341000028], + [-146.090646938999924, 60.400620835], + [-146.094878709999875, 60.397894598000121], + [-146.09984290299991, 60.395982163999989], + [-146.183216925999886, 60.384222723], + [-146.188628709999875, 60.382391669000029], + [-146.192697719999899, 60.377346096000096], + [-146.193959113999938, 60.370754299000012], + [-146.194203253999888, 60.364650783000044], + [-146.19546464799987, 60.361273505000028], + [-146.22398841099988, 60.351385809000092], + [-146.251616990999878, 60.350287177000055], + [-146.305043097999913, 60.355047919000143], + [-146.333607550999886, 60.352240302], + [-146.493275519999941, 60.303778387000122], + [-146.553944464999915, 60.261216539000074], + [-146.578521287999934, 60.249904690000093], + [-146.600168423999918, 60.24518463700015], + [-146.621245897999927, 60.24868398600016], + [-146.648589647999927, 60.257879950000031], + [-146.67218990799995, 60.270941473], + [-146.682036912999877, 60.286200262000179], + [-146.65562903599988, 60.306789455000015], + [-146.490305141999954, 60.361273505000028], + [-146.504790818999879, 60.37042877800009], + [-146.567697719999927, 60.363226630000057], + [-146.593332485999895, 60.368109442000119], + [-146.579009568999908, 60.375555731000091], + [-146.599110480999855, 60.375474351000108], + [-146.615956183999856, 60.371079820000134], + [-146.647938605999855, 60.355047919000143], + [-146.613840298999946, 60.355047919000143], + [-146.655588344999899, 60.340643622000172], + [-146.70055091099988, 60.35480377800009], + [-146.722645636999857, 60.386216539000131], + [-146.695708787999905, 60.423325914000046], + [-146.660308397999898, 60.430161851000079], + [-146.65477454299986, 60.433905341000084], + [-146.652088995999918, 60.442206122000172], + [-146.645863410999937, 60.451646226], + [-146.634348110999895, 60.464911200000031], + [-146.612660285999937, 60.478094794000171], + [-146.58812415299991, 60.484035549000097], + [-146.530629035999908, 60.485419012000179], + [-146.530629035999908, 60.477972723], + [-146.536122199999937, 60.474839585000112], + [-146.539173956999946, 60.471828518000123], + [-146.541574673999889, 60.468573309000178] + ] + ], + [ + [ + [-147.689279751999891, 60.503729559000035], + [-147.682606574999909, 60.471136786000088], + [-147.65843665299991, 60.479966539000046], + [-147.645253058999856, 60.483099677000112], + [-147.634510870999918, 60.48167552300005], + [-147.627186652999939, 60.474432684000121], + [-147.628570115999935, 60.466986395000148], + [-147.634755011999886, 60.460882880000057], + [-147.641672329999892, 60.457464911000145], + [-147.641672329999892, 60.450628973000121], + [-147.633778449999909, 60.448635158000101], + [-147.614369269999884, 60.436957098000093], + [-147.629058397999898, 60.426174221000096], + [-147.634185350999928, 60.423325914000046], + [-147.662424282999893, 60.421210028000033], + [-147.710926886999857, 60.401800848000121], + [-147.737212693999879, 60.395982163999989], + [-147.71544348899991, 60.383286851000108], + [-147.69351152299987, 60.384711005000085], + [-147.671254035999937, 60.391791083000143], + [-147.648508266999897, 60.395982163999989], + [-147.625355597999885, 60.389593817000147], + [-147.631011522999927, 60.374823309000149], + [-147.662180141999954, 60.347601630000085], + [-147.6947322259999, 60.302801825000031], + [-147.738758917999917, 60.259833075000174], + [-147.738758917999917, 60.249986070000077], + [-147.710560675999943, 60.251410223000121], + [-147.723703579999892, 60.221380927000084], + [-147.741281704999949, 60.193589585000112], + [-147.765614386999914, 60.174383856000148], + [-147.798695441999939, 60.170111395000148], + [-147.796213344999899, 60.188055731000091], + [-147.811431443999879, 60.189357815000093], + [-147.830799933999913, 60.186916408000158], + [-147.840240037999934, 60.193670966000084], + [-147.792469855999883, 60.238348700000145], + [-147.798695441999939, 60.24518463700015], + [-147.822499152999939, 60.232367255000142], + [-147.85171464799987, 60.227932033000158], + [-147.881906704999892, 60.23045482], + [-147.908558722999913, 60.238348700000145], + [-147.903309699999937, 60.252875067], + [-147.895985480999911, 60.260321356000148], + [-147.867583787999905, 60.272528387000037], + [-147.877756313999953, 60.278265692000119], + [-147.898996548999946, 60.286932684000121], + [-147.908558722999913, 60.292954820000105], + [-147.870472785999937, 60.292425848000121], + [-147.822824673999861, 60.299139716000084], + [-147.780384894999884, 60.314846096000153], + [-147.757720506999931, 60.341376044000114], + [-147.784535285999937, 60.339178778000118], + [-147.833729620999918, 60.329413153000175], + [-147.860747850999871, 60.327093817000119], + [-147.872710740999935, 60.328924872000087], + [-147.874989386999886, 60.333400783000158], + [-147.870106574999909, 60.339056708000143], + [-147.860747850999871, 60.344468492000019], + [-147.84780839799987, 60.346421617000047], + [-147.820627407999893, 60.342759507], + [-147.806141730999911, 60.347601630000085], + [-147.846180792999945, 60.366278387000065], + [-147.860585089999915, 60.377386786000088], + [-147.847075975999928, 60.382391669000029], + [-147.820301886999943, 60.382798570000134], + [-147.801340298999946, 60.385891018], + [-147.786284959999932, 60.393988348000121], + [-147.771392381999874, 60.409654039000102], + [-147.785878058999913, 60.410549221000011], + [-147.821197068999936, 60.39948151200015], + [-147.840240037999934, 60.395982163999989], + [-147.812489386999943, 60.446234442000147], + [-147.792795376999891, 60.471747137000037], + [-147.771392381999874, 60.485419012000179], + [-147.772531704999892, 60.453924872000144], + [-147.776682094999956, 60.441717841000084], + [-147.785715298999946, 60.430812893], + [-147.72996985599994, 60.441392320000077], + [-147.710113084999847, 60.452582098000065], + [-147.720529751999948, 60.474554755], + [-147.723784959999875, 60.492905992000047], + [-147.708159959999904, 60.506781317000119], + [-147.689279751999891, 60.503729559000035] + ] + ], + [ + [ + [-152.03856360599994, 60.35040924700003], + [-152.061594204999892, 60.347601630000085], + [-152.072824673999889, 60.349758205000072], + [-152.083811001999891, 60.35443756700009], + [-152.089670376999891, 60.359116929000109], + [-152.085519985999895, 60.361273505000028], + [-152.037790493999921, 60.365708726], + [-152.027455206999889, 60.368109442000119], + [-152.021595831999889, 60.37620677300005], + [-152.021717902999939, 60.385321356000034], + [-152.023060675999943, 60.394273179000081], + [-152.020619269999884, 60.402167059000035], + [-152.01195227799991, 60.408189195000048], + [-151.990223761999914, 60.419094143000123], + [-151.98582923099994, 60.427069403000175], + [-151.980539516999954, 60.440415757], + [-151.971058722999885, 60.45209381700009], + [-151.967477993999893, 60.46580638200011], + [-151.979685024999952, 60.485419012000179], + [-151.953195766999897, 60.508490302000141], + [-151.943063930999926, 60.51162344], + [-151.921335415999863, 60.512111721000011], + [-151.904164191999939, 60.510565497000144], + [-151.884022589999915, 60.505682684000178], + [-151.866200324999909, 60.497300523000135], + [-151.85614986899995, 60.485419012000179], + [-151.869781053999901, 60.485419012000179], + [-151.869821743999893, 60.485419012000179], + [-151.879709438999896, 60.477362372000059], + [-151.891550258999956, 60.457709052], + [-151.897084113999881, 60.450628973000121], + [-151.908802863999881, 60.443589585000055], + [-151.918690558999884, 60.441310940000093], + [-151.929758266999897, 60.44025299700003], + [-151.944935675999886, 60.436957098000093], + [-151.96349036399991, 60.426174221000096], + [-151.978627081999889, 60.408270575000031], + [-151.98216712099989, 60.389471747000172], + [-151.966013149999924, 60.375555731000091], + [-152.03856360599994, 60.35040924700003] + ] + ], + [ + [ + [-172.533640102999897, 60.391506252000013], + [-172.503366665999891, 60.388576565000093], + [-172.410755988999938, 60.401678778000147], + [-172.379831508999871, 60.395982163999989], + [-172.297311977999868, 60.351345119000101], + [-172.297311977999868, 60.351304429000109], + [-172.284535285999937, 60.34259674700003], + [-172.225778774999924, 60.323635158000016], + [-172.208566860999923, 60.313462632000082], + [-172.22288977799991, 60.313706773000106], + [-172.263172980999883, 60.306626695000048], + [-172.278879360999952, 60.309800523000106], + [-172.303212042999917, 60.323960679000137], + [-172.366525844999956, 60.344468492000019], + [-172.38536536399991, 60.347601630000085], + [-172.424753383999899, 60.342474677000055], + [-172.474436001999891, 60.349839585000055], + [-172.50804602799991, 60.342962958000143], + [-172.540882941999911, 60.332505601000079], + [-172.571970180999926, 60.327093817000119], + [-172.599964972999942, 60.329820054], + [-172.625721808999884, 60.336981512000037], + [-172.674672003999945, 60.358140367000132], + [-172.686227993999864, 60.361639716000028], + [-172.711130337999919, 60.364935614000061], + [-172.722482876999891, 60.368109442000119], + [-172.735178188999953, 60.375474351000108], + [-172.751576300999943, 60.39276764500012], + [-172.763417120999918, 60.402167059000035], + [-172.783314581999917, 60.412339585], + [-173.004221157999893, 60.490179755000085], + [-173.057606574999937, 60.498439846000068], + [-173.043771938999924, 60.504339911], + [-173.037790493999921, 60.505845445000048], + [-173.041086391999954, 60.517157294000029], + [-173.04246985599994, 60.527573960000112], + [-173.041574673999946, 60.537298895000063], + [-173.037790493999921, 60.546820380000057], + [-173.036732550999858, 60.55377838700015], + [-173.038156704999921, 60.560370184000035], + [-173.037668423999946, 60.565375067000062], + [-173.030954555999898, 60.567328192000119], + [-173.021555141999869, 60.568101304000137], + [-173.013742641999897, 60.570135809000149], + [-173.003000454999864, 60.574164130000142], + [-172.952341274999895, 60.60097890800013], + [-172.925038214999915, 60.606675523000106], + [-172.914255337999919, 60.587836005000085], + [-172.926625128999945, 60.572821356000148], + [-172.921457485999952, 60.549627997000115], + [-172.906686977999954, 60.528265692000062], + [-172.890370245999918, 60.518947658000016], + [-172.876413540999863, 60.513495184000178], + [-172.811838344999899, 60.477972723], + [-172.533640102999897, 60.391506252000013] + ] + ], + [ + [ + [-146.096913214999887, 60.479681708], + [-146.294260219999899, 60.454779364000061], + [-146.332630988999938, 60.464911200000031], + [-146.317941860999923, 60.493841864000117], + [-146.305734829999949, 60.510158596000153], + [-146.286447719999899, 60.517320054], + [-146.120106574999909, 60.51947663], + [-146.093088344999956, 60.525783596000124], + [-146.10020911399991, 60.528631903000175], + [-146.120350714999944, 60.539374091000084], + [-146.034087693999936, 60.558294989000032], + [-145.949045376999891, 60.567328192000119], + [-145.949045376999891, 60.574164130000142], + [-145.956613735999952, 60.57705312700007], + [-145.961659308999884, 60.580511786000059], + [-145.969553188999953, 60.587836005000085], + [-145.85875403599988, 60.595607815000065], + [-145.805734829999864, 60.606187242000132], + [-145.757232225999871, 60.628729559000121], + [-145.749826626999891, 60.621323960000112], + [-145.770090298999918, 60.610419012000065], + [-145.777740037999934, 60.608303127000127], + [-145.75841223899991, 60.601874091000028], + [-145.749826626999891, 60.601467190000122], + [-145.756581183999941, 60.593207098000121], + [-145.764149542999888, 60.587103583000143], + [-145.773101365999935, 60.582953192], + [-145.783924933999913, 60.580389716000084], + [-145.871734178999873, 60.543890692000147], + [-145.913685675999886, 60.536810614000089], + [-145.962717251999948, 60.518947658000016], + [-146.014637824999909, 60.508937893000123], + [-146.06309973899991, 60.488267320000105], + [-146.096913214999887, 60.479681708] + ] + ], + [ + [ + [-173.05296790299991, 60.623928127000042], + [-173.058420376999948, 60.62128327000012], + [-173.068714972999857, 60.624212958000058], + [-173.104237433999941, 60.644842841000084], + [-173.113596157999893, 60.653021552], + [-173.111398891999897, 60.6642113300001], + [-173.093698696999866, 60.679836330000072], + [-173.071726040999863, 60.686224677000027], + [-173.062448696999923, 60.678534247000087], + [-173.062123175999886, 60.669623114000146], + [-173.060414191999882, 60.659165757000082], + [-173.062326626999948, 60.647894598000065], + [-173.064320441999882, 60.642523505000113], + [-173.054188605999911, 60.630560614000089], + [-173.05296790299991, 60.623928127000042] + ] + ], + [ + [ + [-147.406605597999885, 60.696275132000082], + [-147.385161912999848, 60.672552802000084], + [-147.374338344999956, 60.664862372000144], + [-147.364247199999909, 60.666327216000113], + [-147.3529353509999, 60.673773505], + [-147.338978644999941, 60.679348049000097], + [-147.324696417999917, 60.682806708], + [-147.31273352799991, 60.684027411000116], + [-147.325021938999953, 60.657171942000119], + [-147.339711066999882, 60.645575262000122], + [-147.359730597999942, 60.644476630000057], + [-147.387806769999941, 60.649237372000144], + [-147.402943488999938, 60.648382880000057], + [-147.449289516999897, 60.638128973000121], + [-147.477162238999881, 60.635646877000013], + [-147.461048956999889, 60.648342190000065], + [-147.454945441999882, 60.654933986000131], + [-147.449859178999873, 60.662909247000087], + [-147.474029100999871, 60.66111888200011], + [-147.497670050999915, 60.656683661000145], + [-147.487212693999936, 60.661281643000066], + [-147.449859178999873, 60.669745184000121], + [-147.448475714999915, 60.680975653000118], + [-147.455393032999893, 60.687811591000056], + [-147.466379360999952, 60.69082265800013], + [-147.477162238999881, 60.69017161699999], + [-147.466297980999855, 60.698065497000144], + [-147.428781704999949, 60.711371161000088], + [-147.42056230399993, 60.707098700000174], + [-147.413075324999909, 60.702053127000127], + [-147.406605597999885, 60.696275132000082] + ] + ], + [ + [ + [-147.936838344999899, 60.728827216000141], + [-147.92906653599988, 60.718166408000016], + [-147.925363735999923, 60.731878973000121], + [-147.919504360999895, 60.741644598000093], + [-147.909820115999935, 60.744818427000141], + [-147.881255662999934, 60.731512762000122], + [-147.86546790299991, 60.720119533000158], + [-147.852447068999908, 60.706732489000061], + [-147.847075975999928, 60.693996486000017], + [-147.857533331999946, 60.687201239000089], + [-147.922230597999857, 60.684027411000116], + [-147.923247850999928, 60.680853583000143], + [-147.924672003999888, 60.674221096000096], + [-147.928334113999938, 60.667141018000123], + [-147.935902472999885, 60.662909247000087], + [-147.941517706999889, 60.665106512000094], + [-147.966908331999917, 60.680324611000074], + [-148.012196417999917, 60.725002346000124], + [-147.994618292999917, 60.731350002000156], + [-147.97883053299995, 60.725978908000016], + [-147.963978644999884, 60.716620184000149], + [-147.94953365799995, 60.711371161000088], + [-147.96548417899993, 60.733832098000093], + [-147.969349738999853, 60.746649481000119], + [-147.960357225999928, 60.752346096000011], + [-147.949330206999889, 60.748724677000141], + [-147.942494269999884, 60.739976304000081], + [-147.936838344999899, 60.728827216000141] + ] + ], + [ + [ + [-148.107777472999913, 60.662909247000087], + [-148.12474524599989, 60.650539455000157], + [-148.140492316999939, 60.64866771], + [-148.155140753999945, 60.653998114000061], + [-148.16860917899993, 60.662909247000087], + [-148.168649868999921, 60.662909247000087], + [-148.194528774999924, 60.681463934000092], + [-148.222238735999923, 60.706122137000094], + [-148.230091925999915, 60.729722398000135], + [-148.196603969999956, 60.744818427000141], + [-148.211659308999884, 60.756048895000148], + [-148.21703040299991, 60.759100653000033], + [-148.158680792999917, 60.764715887000037], + [-148.14130611899995, 60.759100653000033], + [-148.124094204999949, 60.751125393000095], + [-148.111154751999948, 60.738104559000092], + [-148.110056118999893, 60.725327867000047], + [-148.12828528599988, 60.718166408000016], + [-148.12828528599988, 60.711371161000088], + [-148.108021613999881, 60.709702867000075], + [-148.098744269999912, 60.696844794000143], + [-148.099191860999895, 60.67914459800015], + [-148.107777472999913, 60.662909247000087] + ] + ], + [ + [ + [-146.734710765999921, 60.814519733000125], + [-146.765579556999882, 60.801955632], + [-146.796808535999901, 60.805938871000151], + [-146.81125463199993, 60.818283049000016], + [-146.820305752999928, 60.841693709000182], + [-146.806430064999915, 60.854186013000131], + [-146.775309757999935, 60.857094997000118], + [-146.761376255999892, 60.868210611000123], + [-146.761619617999884, 60.879249842000107], + [-146.738740584999931, 60.87107057600015], + [-146.712851457999875, 60.853251674000106], + [-146.704063325999897, 60.839485677000098], + [-146.718008542999883, 60.828393004000034], + [-146.734710765999921, 60.814519733000125] + ] + ], + [ + [ + [-147.136586066999882, 60.908270575000117], + [-147.135894334999932, 60.901312567000119], + [-147.127064581999889, 60.90232982], + [-147.119211391999897, 60.905666408000016], + [-147.119699673999889, 60.898138739000061], + [-147.131947394999941, 60.887681382], + [-147.158192511999857, 60.875474351000108], + [-147.152699347999942, 60.873521226000051], + [-147.131581183999913, 60.877997137000122], + [-147.121652798999946, 60.881781317000147], + [-147.112294074999909, 60.884426174000126], + [-147.107818162999934, 60.88735586100016], + [-147.10220292899993, 60.897691148000078], + [-147.097075975999928, 60.899644273000106], + [-147.094146287999877, 60.897935289000102], + [-147.078236456999889, 60.892767645], + [-147.076649542999945, 60.886908270000063], + [-147.083159959999932, 60.878485419000114], + [-147.104115363999881, 60.866156317000062], + [-147.139637824999852, 60.855617580000015], + [-147.16624915299991, 60.854925848000065], + [-147.182687954999892, 60.858221747000087], + [-147.190297003999945, 60.862982489], + [-147.185373501999891, 60.869452216000113], + [-147.182850714999859, 60.875718492000047], + [-147.189442511999943, 60.877508856000034], + [-147.209950324999909, 60.876410223000093], + [-147.216379360999895, 60.877101955000128], + [-147.221994594999899, 60.875433661000116], + [-147.219593878999888, 60.871405341000141], + [-147.229644334999932, 60.867824611000074], + [-147.253773566999854, 60.868109442000033], + [-147.310536261999914, 60.87445709800015], + [-147.318918423999889, 60.877264716000084], + [-147.318714972999942, 60.879624742000047], + [-147.310414191999939, 60.880804755000085], + [-147.303456183999856, 60.882717190000122], + [-147.298736131999874, 60.886623440000122], + [-147.290109829999949, 60.889308986000017], + [-147.277414516999897, 60.888128973000093], + [-147.266102667999917, 60.889227606000034], + [-147.256214972999885, 60.896673895], + [-147.246652798999889, 60.901800848000036], + [-147.233143683999913, 60.904689846000153], + [-147.226918097999885, 60.906805731000148], + [-147.215240037999877, 60.907294012000037], + [-147.212717251999948, 60.902044989000061], + [-147.217518683999941, 60.894680080000157], + [-147.214670376999891, 60.892482815000065], + [-147.205555792999917, 60.899074611000131], + [-147.194406704999892, 60.904242255000057], + [-147.180978969999899, 60.903143622000115], + [-147.175852016999897, 60.899969794000057], + [-147.180043097999913, 60.896633205000015], + [-147.177642381999874, 60.894354559000035], + [-147.168039516999897, 60.892523505000057], + [-147.142323370999947, 60.90916575700011], + [-147.136586066999882, 60.908270575000117] + ] + ], + [ + [ + [-148.032093878999945, 60.930405992000019], + [-147.967640753999945, 60.905585028000033], + [-147.940500454999921, 60.885809637000122], + [-147.943267381999874, 60.861558335000112], + [-147.919341600999928, 60.838324286], + [-147.912342902999939, 60.825425523], + [-147.915394660999937, 60.813137111000131], + [-147.92918860599994, 60.806341864], + [-147.942982550999943, 60.812201239000146], + [-147.955922003999859, 60.822211005000142], + [-147.966908331999917, 60.827378648000135], + [-148.008493618999893, 60.796332098000121], + [-148.023793097999942, 60.791205145], + [-148.087310350999928, 60.800116278000147], + [-148.08735104099992, 60.800116278000147], + [-148.116037563999896, 60.797552802000141], + [-148.127145962999919, 60.800604559000035], + [-148.135121222999885, 60.813137111000131], + [-148.136830206999889, 60.826361395000063], + [-148.134226040999891, 60.836818752000156], + [-148.130238410999937, 60.84662506700009], + [-148.12828528599988, 60.858099677000112], + [-148.111398891999897, 60.877508856000034], + [-148.08149166599992, 60.892035223000065], + [-148.069894985999895, 60.904242255000057], + [-148.107777472999913, 60.916815497000059], + [-148.107777472999913, 60.923000393], + [-148.089466925999943, 60.922430731000034], + [-148.032093878999945, 60.930405992000019] + ] + ], + [ + [ + [-150.227528449999852, 61.127183335000055], + [-150.265248175999943, 61.123439846000124], + [-150.276437954999949, 61.127386786000031], + [-150.259999152999939, 61.133124091000084], + [-150.245228644999884, 61.146063544000086], + [-150.231760219999899, 61.162909247000087], + [-150.22435462099989, 61.170396226000051], + [-150.210845506999931, 61.173041083000143], + [-150.184519008999928, 61.174261786000059], + [-150.177723761999886, 61.16136302300005], + [-150.196237758999899, 61.141302802], + [-150.227528449999852, 61.127183335000055] + ] + ], + [ + [ + [-165.946970180999898, 62.025702216000028], + [-165.944406704999892, 62.017971096000011], + [-165.947824673999889, 62.01593659100017], + [-165.956491665999891, 62.020086981000119], + [-165.963490363999881, 62.021795966000028], + [-165.968210415999891, 62.020697333000086], + [-165.973947719999956, 62.018744208000115], + [-165.980539516999926, 62.015611070000048], + [-165.985707160999937, 62.015366929000109], + [-165.989247199999909, 62.017971096000011], + [-165.99828040299991, 62.01850006700009], + [-166.009836391999954, 62.022935289000074], + [-166.008737758999899, 62.037258205000128], + [-165.99559485599994, 62.054266669000114], + [-165.982899542999888, 62.065904039000102], + [-165.972116665999891, 62.072170315000065], + [-165.966053839999887, 62.070379950000174], + [-165.97166907499988, 62.059515692], + [-165.976185675999943, 62.044582424000154], + [-165.961984829999921, 62.032904364000146], + [-165.948923305999955, 62.02952708500014], + [-165.946970180999898, 62.025702216000028] + ] + ], + [ + [ + [-164.567005988999881, 63.04629140800013], + [-164.583933071999923, 63.042059637000094], + [-164.599680141999897, 63.042792059000035], + [-164.611805792999888, 63.046698309000035], + [-164.611561652999939, 63.055894273000106], + [-164.596424933999941, 63.063218492000104], + [-164.586903449999852, 63.064439195000134], + [-164.577219204999892, 63.063218492000104], + [-164.563303188999924, 63.056219794000029], + [-164.567005988999881, 63.04629140800013] + ] + ], + [ + [ + [-169.782053188999868, 63.043402411], + [-169.777088995999918, 63.035060940000122], + [-169.85570227799991, 63.088690497000115], + [-169.880808071999923, 63.109564520000092], + [-169.93187415299991, 63.139146226000136], + [-169.927235480999883, 63.13869863500004], + [-169.868845180999898, 63.106146552000084], + [-169.809966600999928, 63.064642645000092], + [-169.790028449999909, 63.051662502000099], + [-169.782053188999868, 63.043402411] + ] + ], + [ + [ + [-169.508127407999865, 63.373358466000056], + [-169.440942859999922, 63.36353985600006], + [-169.489328579999921, 63.367824611000017], + [-169.512318488999881, 63.373765367000047], + [-169.529001430999926, 63.383368231000119], + [-169.508127407999865, 63.373358466000056] + ] + ], + [ + [ + [-170.38182532499988, 63.301418361000074], + [-170.296213344999899, 63.239406643000123], + [-170.369130011999914, 63.290594794000086], + [-170.449655727999868, 63.325100002000013], + [-170.707834438999924, 63.395209052000084], + [-170.485463019999884, 63.34467194200009], + [-170.38182532499988, 63.301418361000074] + ] + ], + [ + [ + [-171.029245571999923, 63.438666083000115], + [-170.784047003999888, 63.408514716000113], + [-170.975209113999938, 63.431219794000143], + [-171.058542446999951, 63.430121161], + [-171.072895484999947, 63.437325571000045], + [-171.029245571999923, 63.438666083000115] + ] + ], + [ + [ + [-171.070790167999917, 63.602484442000033], + [-171.074899868999864, 63.602240302000084], + [-171.08999589799987, 63.603908596000096], + [-171.070790167999917, 63.602484442000033] + ] + ], + [ + [ + [-171.144032355999883, 63.611761786000059], + [-171.090036587999862, 63.603908596000096], + [-171.157655715999908, 63.609736818000115], + [-171.144032355999883, 63.611761786000059] + ] + ], + [ + [ + [-162.382435675999915, 63.622992255000057], + [-162.340809699999852, 63.602484442000033], + [-162.341664191999882, 63.597072658000158], + [-162.344349738999938, 63.593695380000142], + [-162.348744269999912, 63.591498114000061], + [-162.354481574999909, 63.589422919000029], + [-162.358021613999881, 63.586615302], + [-162.360340949999937, 63.583889065000037], + [-162.363107876999891, 63.582098700000031], + [-162.368112758999928, 63.581976630000057], + [-162.349436001999948, 63.560492255000113], + [-162.347645636999857, 63.554754950000145], + [-162.359364386999857, 63.546210028000033], + [-162.373036261999914, 63.549750067000119], + [-162.384144660999937, 63.557766018000066], + [-162.388010219999927, 63.562201239000117], + [-162.498158331999946, 63.548529364], + [-162.614857550999943, 63.548529364], + [-162.626942511999914, 63.55068594], + [-162.648915167999945, 63.56000397300015], + [-162.678171352999868, 63.563666083], + [-162.717600063999953, 63.575181382000139], + [-162.676503058999856, 63.61151764500012], + [-162.666086391999897, 63.616766669000114], + [-162.633412238999938, 63.622626044000143], + [-162.621408657999922, 63.622992255000057], + [-162.610422329999949, 63.61920807500006], + [-162.602528449999909, 63.613714911000116], + [-162.593942837999862, 63.611232815000093], + [-162.580433722999885, 63.616766669000114], + [-162.584421352999868, 63.628485419000086], + [-162.556467251999948, 63.62982819200009], + [-162.482167120999918, 63.62189362200003], + [-162.461659308999884, 63.623683986000017], + [-162.443959113999881, 63.629461981000148], + [-162.436390753999945, 63.640326239000061], + [-162.428089972999857, 63.642157294000029], + [-162.409047003999888, 63.639349677000084], + [-162.374948696999951, 63.630438544000143], + [-162.382435675999915, 63.622992255000057] + ] + ], + [ + [ + [-171.672596808999856, 63.79633209800015], + [-171.652170376999891, 63.790432033000016], + [-171.63573157499988, 63.777289130000057], + [-171.625721808999913, 63.760728257], + [-171.636463995999918, 63.75409577000012], + [-171.645090298999918, 63.741848049000154], + [-171.649159308999884, 63.726874091000028], + [-171.646188930999955, 63.712347723000093], + [-171.633900519999912, 63.700384833000058], + [-171.616322394999884, 63.69354889500012], + [-171.446522589999887, 63.658636786000116], + [-171.40721594999988, 63.644110419000171], + [-171.429310675999858, 63.64451732], + [-171.46825110599994, 63.655015367000047], + [-171.489125128999916, 63.657700914000131], + [-171.504343227999897, 63.653265692000062], + [-171.530222133999899, 63.631293036000145], + [-171.543771938999868, 63.622992255000057], + [-171.543771938999868, 63.616766669000114], + [-171.529367641999897, 63.621649481000176], + [-171.518544074999909, 63.619696356000034], + [-171.508412238999853, 63.614650783000101], + [-171.495961066999939, 63.609930731000091], + [-171.487172003999888, 63.608954169000114], + [-171.343129035999908, 63.615301825000145], + [-171.310414191999882, 63.622992255000057], + [-171.325388149999924, 63.629706122000115], + [-171.342966274999924, 63.631659247000144], + [-171.379261847999942, 63.630438544000143], + [-171.379261847999942, 63.63666413], + [-171.159291144999941, 63.609808661000116], + [-171.164173956999917, 63.607733466000084], + [-171.168405727999925, 63.604885158000158], + [-171.171701626999891, 63.600897528000175], + [-171.173817511999886, 63.595648505], + [-171.125721808999913, 63.595648505], + [-171.112375454999892, 63.593491929], + [-171.096750454999921, 63.584173895000148], + [-171.087595180999926, 63.581976630000057], + [-170.975209113999938, 63.589422919000029], + [-170.977528449999909, 63.58612702], + [-170.97797604099992, 63.58502838700015], + [-170.978830532999893, 63.584295966000028], + [-170.98265540299991, 63.581976630000057], + [-170.936960415999891, 63.57168203300013], + [-170.888742641999954, 63.585394598000065], + [-170.840036587999919, 63.606105861000074], + [-170.773508266999926, 63.62051015800013], + [-170.721994594999956, 63.650864976000108], + [-170.662587042999888, 63.672512111000017], + [-170.64622962099989, 63.685044664000102], + [-170.624623175999886, 63.670599677000055], + [-170.595895962999919, 63.669663804000081], + [-170.496571417999917, 63.700100002000042], + [-170.47040768099987, 63.704087632], + [-170.440785285999937, 63.705511786000059], + [-170.428293423999918, 63.703436591000141], + [-170.401926235999923, 63.693996486000131], + [-170.389271613999938, 63.691839911000116], + [-170.337757941999882, 63.699286200000117], + [-170.310047980999883, 63.69867584800015], + [-170.297352667999917, 63.695542710000083], + [-170.27635657499988, 63.680853583000086], + [-170.266428188999896, 63.677679755000113], + [-170.25536048099994, 63.675685940000065], + [-170.241566535999937, 63.671372789000074], + [-170.188181118999893, 63.639105536000145], + [-170.167103644999884, 63.630438544000143], + [-170.110951300999858, 63.623195705000015], + [-170.082468227999954, 63.615179755000085], + [-170.067005988999938, 63.594142971000124], + [-170.052967902999882, 63.579413153000147], + [-170.049794074999909, 63.571478583], + [-170.052072719999899, 63.560614325000088], + [-170.055368618999921, 63.555405992000104], + [-170.05414791599992, 63.551581122000087], + [-170.042958136999886, 63.544745184000178], + [-170.038563605999911, 63.531927802000141], + [-170.053212042999917, 63.515773830000072], + [-170.07323157499988, 63.499335028000175], + [-170.084543423999889, 63.485825914000102], + [-170.068918423999889, 63.491359768000123], + [-170.051218227999868, 63.493719794000086], + [-169.953684048999946, 63.488714911000145], + [-169.891061977999925, 63.467352606000176], + [-169.847645636999886, 63.458075262000037], + [-169.755563930999898, 63.452337958000058], + [-169.774240688999896, 63.448187567000119], + [-169.820668097999942, 63.449448960000112], + [-169.843698696999923, 63.444891669000086], + [-169.782215949999937, 63.435370184000178], + [-169.657338019999941, 63.439642645], + [-169.597279425999943, 63.424383856000034], + [-169.579904751999948, 63.410793361000074], + [-169.565622524999952, 63.379055080000015], + [-169.549509243999893, 63.362941799000154], + [-169.521555141999954, 63.35297272300015], + [-169.481068488999938, 63.347398179000052], + [-169.440663214999887, 63.348049221000096], + [-169.412953253999888, 63.356675523000021], + [-169.424265102999868, 63.360663153000175], + [-169.436146613999938, 63.363226630000085], + [-169.325550910999908, 63.363104559000121], + [-169.291493292999917, 63.35932038], + [-169.262155727999897, 63.349269924000012], + [-169.205922003999888, 63.307318427000112], + [-169.186716274999952, 63.301459052000084], + [-169.123972133999956, 63.300604559000178], + [-169.092518683999941, 63.306057033000016], + [-169.070301886999886, 63.32135651200015], + [-169.102853969999956, 63.332709052000141], + [-169.143259243999921, 63.339056708000086], + [-169.221140102999868, 63.342474677], + [-169.221140102999868, 63.349269924000012], + [-169.070301886999886, 63.342474677], + [-169.007639126999891, 63.349269924000012], + [-168.99242102799991, 63.346869208000058], + [-168.961496548999889, 63.337144273000106], + [-168.715199347999885, 63.31195709800015], + [-168.686105923999889, 63.301459052000084], + [-168.699696417999945, 63.295599677000141], + [-168.727528449999909, 63.28733958500014], + [-168.74071204299986, 63.280991929000109], + [-168.717111782999922, 63.260891018000066], + [-168.728871222999913, 63.233832098000121], + [-168.775502081999917, 63.19159577], + [-168.811838344999899, 63.170111395000063], + [-168.850819464999887, 63.162827867000075], + [-168.951608852999954, 63.166001695000134], + [-169.00291907499988, 63.174302476000108], + [-169.018503383999871, 63.181341864000089], + [-169.039255337999862, 63.188055731000119], + [-169.283640102999925, 63.178290106000176], + [-169.331003383999956, 63.16494375200007], + [-169.287912563999924, 63.179836330000043], + [-169.265370245999947, 63.183539130000057], + [-169.187123175999943, 63.187445380000057], + [-169.159250454999892, 63.193752346000011], + [-169.14484615799995, 63.205877997000087], + [-169.287342902999853, 63.193304755000028], + [-169.351144985999895, 63.176214911000059], + [-169.412953253999888, 63.15070221600017], + [-169.399281378999945, 63.143215236000103], + [-169.399281378999945, 63.136948960000055], + [-169.415964321999894, 63.130357163999989], + [-169.445668097999913, 63.11318594000015], + [-169.504872199999909, 63.101141669000029], + [-169.526478644999912, 63.091376044000086], + [-169.53583736899995, 63.078599351000051], + [-169.541859503999859, 63.072088934000149], + [-169.569447394999884, 63.051947333000115], + [-169.577463344999927, 63.040757554000109], + [-169.578236456999946, 63.022650458], + [-169.571156378999888, 63.011379299000012], + [-169.54267330599987, 62.993597723000121], + [-169.559396938999896, 62.986517645000063], + [-169.597523566999882, 62.983872788999989], + [-169.61469479099992, 62.976223049000126], + [-169.636830206999889, 62.955796617000075], + [-169.64940344999988, 62.948431708000086], + [-169.66620846299989, 62.945217190000122], + [-169.70921790299991, 62.961493231000148], + [-169.731760219999899, 62.965887762000037], + [-169.755563930999898, 62.965643622000087], + [-169.747181769999941, 62.979885158000101], + [-169.746815558999913, 62.992173570000048], + [-169.752390102999925, 63.00324127800009], + [-169.761789516999954, 63.014105536000088], + [-169.73798580599987, 63.015936591000141], + [-169.716175910999908, 63.024847723000093], + [-169.705311652999939, 63.040187893000123], + [-169.71458899599989, 63.061265367000075], + [-169.722116665999948, 63.064764716000141], + [-169.742990688999896, 63.067206122000087], + [-169.751820441999882, 63.071844794000114], + [-169.77607174399995, 63.096014716000028], + [-169.817453579999892, 63.126776434000092], + [-169.866932745999918, 63.144476630000028], + [-169.974680141999897, 63.16494375200007], + [-169.974680141999897, 63.157456773000106], + [-170.024606899999924, 63.170640367000047], + [-170.039865688999896, 63.181341864000089], + [-170.049265102999925, 63.185207424000069], + [-170.071400519999912, 63.184393622000172], + [-170.080799933999941, 63.188177802], + [-170.084706183999913, 63.194769598000065], + [-170.08495032499988, 63.20042552300005], + [-170.08653723899991, 63.204413153000033], + [-170.094471808999884, 63.205877997000087], + [-170.113392706999889, 63.202785549000012], + [-170.145700649999924, 63.188706773000078], + [-170.159657355999883, 63.184759833000086], + [-170.184315558999884, 63.186224677000141], + [-170.236032680999926, 63.197455145000148], + [-170.262033657999893, 63.198431708000115], + [-170.255726691999854, 63.20917389500012], + [-170.244740363999881, 63.211655992000075], + [-170.232248501999891, 63.212836005], + [-170.221058722999885, 63.21954987200003], + [-170.218373175999886, 63.227932033000101], + [-170.216013149999924, 63.254706122000087], + [-170.217640753999888, 63.260484117000075], + [-170.222971157999922, 63.264797268000066], + [-170.228260870999918, 63.274155992000019], + [-170.234974738999853, 63.283514716000028], + [-170.244984503999945, 63.287787177000141], + [-170.261341925999943, 63.289129950000031], + [-170.329823370999918, 63.305853583000058], + [-170.41234290299991, 63.338690497000144], + [-170.444325324999909, 63.359198309000121], + [-170.596424933999913, 63.399155992000075], + [-170.663034633999899, 63.403876044000171], + [-170.666452602999897, 63.40615469000015], + [-170.668324347999885, 63.411037502000013], + [-170.671131964999915, 63.415920315000093], + [-170.677316860999895, 63.418158270000063], + [-170.77635657499988, 63.420558986000017], + [-170.796457485999923, 63.424383856000034], + [-170.807077602999954, 63.429754950000088], + [-170.822499152999882, 63.44525788], + [-170.831247524999952, 63.452337958000058], + [-170.844675258999956, 63.458563544000029], + [-170.856149868999893, 63.460353908000016], + [-171.083851691999911, 63.444891669000086], + [-171.083119269999884, 63.442938544000029], + [-171.082020636999914, 63.441229559000035], + [-171.079172329999892, 63.438177802000141], + [-171.121896938999896, 63.432196356000119], + [-171.140736456999946, 63.425238348000121], + [-171.156442837999919, 63.414740302000055], + [-171.183705206999889, 63.402289130000142], + [-171.252797003999916, 63.396063544000086], + [-171.28368079299986, 63.383368231000119], + [-171.290516730999883, 63.383368231000119], + [-171.294870571999866, 63.362046617000047], + [-171.325144008999871, 63.351223049000154], + [-171.361032680999955, 63.345282294000029], + [-171.382394985999923, 63.338690497000144], + [-171.407948370999918, 63.322577216000084], + [-171.439320441999939, 63.319769598000121], + [-171.557443813999896, 63.335028387000094], + [-171.558949347999857, 63.336737372000115], + [-171.572580532999893, 63.346177476000136], + [-171.578561977999925, 63.349269924000012], + [-171.586415167999917, 63.350490627000127], + [-171.612375454999892, 63.349269924000012], + [-171.626047329999921, 63.351385809000121], + [-171.654367641999869, 63.36078522300015], + [-171.70482337099989, 63.367824611000017], + [-171.735585089999887, 63.375921942000147], + [-171.759144660999937, 63.390326239000032], + [-171.821237758999871, 63.441717841000028], + [-171.827870245999918, 63.450751044000029], + [-171.829457160999851, 63.467678127000013], + [-171.841786261999914, 63.485174872000144], + [-171.847279425999943, 63.496975002000127], + [-171.851144985999923, 63.509588934000121], + [-171.852894660999937, 63.521185614000117], + [-171.85057532499988, 63.520656643000152], + [-171.845773891999897, 63.523749091000028], + [-171.840931769999884, 63.528794664000074], + [-171.83857174399995, 63.534247137000094], + [-171.839548305999926, 63.539862372000115], + [-171.845448370999947, 63.554754950000145], + [-171.841379360999895, 63.576971747000115], + [-171.837025519999912, 63.58340078300013], + [-171.828073696999866, 63.592515367000104], + [-171.819691535999908, 63.598374742000075], + [-171.809641079999949, 63.603949286000088], + [-171.801136847999913, 63.610663153000118], + [-171.797596808999913, 63.61985911699999], + [-171.800282355999911, 63.62604401200015], + [-171.805531378999888, 63.630764065000065], + [-171.809396938999896, 63.635158596000153], + [-171.807850714999944, 63.640326239000061], + [-171.800485805999955, 63.64447663], + [-171.779774542999945, 63.647894598], + [-171.770334438999924, 63.650864976000108], + [-171.751657680999955, 63.664048570000077], + [-171.747873501999948, 63.674994208000115], + [-171.749948696999951, 63.687445380000057], + [-171.749216274999924, 63.705511786000059], + [-171.727731899999895, 63.734523830000157], + [-171.720570441999854, 63.752671617000047], + [-171.732492641999897, 63.760728257], + [-171.735422329999921, 63.764837958000143], + [-171.738840298999918, 63.774074611000103], + [-171.740834113999881, 63.784247137000065], + [-171.739328579999921, 63.79120514500012], + [-171.728016730999911, 63.796128648000021], + [-171.715524868999921, 63.794256903000033], + [-171.703806118999921, 63.790838934000121], + [-171.694569464999859, 63.79120514500012], + [-171.672596808999856, 63.79633209800015] + ] + ], + [ + [ + [-168.048410610999895, 64.958929755], + [-168.078724738999881, 64.956854559000178], + [-168.096750454999892, 64.965399481000091], + [-168.087595180999926, 64.978827216000084], + [-168.065541144999912, 64.984849351000022], + [-168.035511847999885, 64.985296942], + [-168.027699347999885, 64.979925848000121], + [-168.026560024999924, 64.968085028000175], + [-168.048410610999895, 64.958929755] + ] + ], + [ + [ + [-168.899606899999895, 65.747626044000171], + [-168.909860805999926, 65.739569403000033], + [-168.926218227999925, 65.739894924000069], + [-168.942128058999941, 65.743719794000086], + [-168.951730923999918, 65.753159898], + [-168.942982550999943, 65.764715887000122], + [-168.920114712999947, 65.768866278000147], + [-168.90790768099987, 65.76829661699999], + [-168.902780727999954, 65.761542059000149], + [-168.899606899999895, 65.747626044000171] + ] + ], + [ + [ + [-167.827219204999864, 65.73859284100017], + [-167.843332485999952, 65.737779039000046], + [-167.848703579999892, 65.742824611000074], + [-167.833566860999895, 65.752875067000062], + [-167.819406704999892, 65.759344794000143], + [-167.777007615999878, 65.773016669000086], + [-167.751169399999867, 65.77676015800013], + [-167.738270636999943, 65.777167059000035], + [-167.743397589999859, 65.772528387000122], + [-167.760446743999921, 65.764634507000139], + [-167.780018683999884, 65.759588934000092], + [-167.794056769999941, 65.753973700000117], + [-167.808949347999885, 65.745510158000073], + [-167.827219204999864, 65.73859284100017] + ] + ], + [ + [ + [-167.662831183999913, 65.782049872000115], + [-167.65953528599988, 65.773016669000086], + [-167.639963344999899, 65.773423570000105], + [-167.695423956999889, 65.740912177000112], + [-167.71698971299989, 65.738226630000057], + [-167.730539516999954, 65.745672919000029], + [-167.723744269999912, 65.758124091000141], + [-167.719431118999921, 65.76894765800013], + [-167.718617316999911, 65.777818101], + [-167.703236456999861, 65.78538646000014], + [-167.670969204999921, 65.793687242000104], + [-167.670928514999929, 65.793727932000095], + [-167.566477016999897, 65.816636460000026], + [-167.556467251999919, 65.817368882000139], + [-167.572702602999868, 65.809230861000017], + [-167.647287563999896, 65.791327216000141], + [-167.662831183999913, 65.782049872000115] + ] + ], + [ + [ + [-167.211130337999947, 65.91274648600016], + [-167.226022915999891, 65.909125067], + [-167.239491339999887, 65.90924713700015], + [-167.232045050999915, 65.917914130000057], + [-166.869862433999913, 66.036078192000119], + [-166.859486456999917, 66.039740302000084], + [-166.839792446999894, 66.043605861000074], + [-166.835804816999911, 66.041815497000087], + [-166.863148566999882, 66.027980861000103], + [-166.987172003999888, 65.983547268000066], + [-167.027048305999926, 65.974676825000031], + [-167.10883541599992, 65.948553778000175], + [-167.125843878999888, 65.939886786000088], + [-167.123605923999889, 65.939032294000086], + [-167.13023841099988, 65.936590887000037], + [-167.164906378999945, 65.931708075000174], + [-167.211130337999947, 65.91274648600016] + ] + ], + [ + [ + [-166.733143683999856, 66.067816473000065], + [-166.800526495999861, 66.051499742000047], + [-166.795399542999945, 66.058294989000089], + [-166.762766079999892, 66.071193752000099], + [-166.322214321999951, 66.192857164000046], + [-166.283518032999922, 66.200628973000121], + [-166.28347734299993, 66.200628973000121], + [-166.187082485999923, 66.210272528000118], + [-166.225412563999953, 66.201849677000055], + [-166.249867316999911, 66.192938544000029], + [-166.273182745999918, 66.186835028000033], + [-166.313547329999864, 66.18260325700011], + [-166.386545376999891, 66.160711981000176], + [-166.468861456999917, 66.145900783000016], + [-166.486520962999919, 66.140285549000012], + [-166.504709438999924, 66.132513739], + [-166.546701626999919, 66.122748114000061], + [-166.59703528599988, 66.104803778000118], + [-166.686634894999941, 66.084784247000144], + [-166.733143683999856, 66.067816473000065] + ] + ], + [ + [ + [-166.127878383999928, 66.225816148000106], + [-166.147409633999928, 66.220363674000069], + [-166.156117316999911, 66.226263739], + [-166.147409633999928, 66.235419012000094], + [-166.127512173999918, 66.243801174000154], + [-166.088531053999844, 66.256170966000084], + [-166.053944464999944, 66.262030341000028], + [-166.041818813999953, 66.259995835], + [-166.04710852799991, 66.254828192], + [-166.103098110999866, 66.238836981000091], + [-166.127878383999928, 66.225816148000106] + ] + ], + [ + [ + [-165.964466925999943, 66.264471747000144], + [-166.010365363999938, 66.257717190000122], + [-166.006214972999885, 66.26691315300009], + [-165.982980923999889, 66.281073309000035], + [-165.970041469999956, 66.286688544000029], + [-165.864328579999921, 66.316880601000136], + [-165.864287889999929, 66.316880601000136], + [-165.814645962999919, 66.326361395000148], + [-165.814035610999866, 66.322455145000148], + [-165.873158331999889, 66.300116278000118], + [-165.897206183999913, 66.294134833], + [-165.943674282999865, 66.271185614000032], + [-165.964466925999943, 66.264471747000144] + ] + ], + [ + [ + [-165.533762173999918, 66.39862702000012], + [-165.601389126999891, 66.376654364], + [-165.626332160999908, 66.377630927000084], + [-165.635487433999884, 66.374497789000102], + [-165.647653774999867, 66.368719794000057], + [-165.680531378999859, 66.359320380000113], + [-165.697743292999888, 66.356838283000101], + [-165.704579230999911, 66.361721096000068], + [-165.690866665999863, 66.370754299000069], + [-165.488718227999954, 66.40900299700003], + [-165.48969479099992, 66.408677476], + [-165.495187954999949, 66.406398830000015], + [-165.533762173999918, 66.39862702000012] + ] + ], + [ + [ + [-165.423939574999935, 66.421332099000054], + [-165.4886930159999, 66.409009622000141], + [-165.484771287999877, 66.410305080000015], + [-165.448312954999892, 66.418768622000144], + [-165.423939574999935, 66.421332099000054] + ] + ], + [ + [ + [-165.381662563999924, 66.425685940000065], + [-165.423039482999911, 66.421448993000141], + [-165.342640753999859, 66.436712958], + [-165.378366665999891, 66.428900458000115], + [-165.381662563999924, 66.425685940000065] + ] + ], + [ + [ + [-165.322702602999868, 66.440415757000054], + [-165.34262798899988, 66.436715109000104], + [-165.32640540299991, 66.440252997000087], + [-165.322702602999868, 66.440415757000054] + ] + ], + [ + [ + [-165.262074347999913, 66.444281317000062], + [-165.320849656999854, 66.440581937000118], + [-165.042092698999909, 66.493518053000017], + [-164.763335740999935, 66.546454169000114], + [-164.752023891999954, 66.545477606000034], + [-164.745961066999939, 66.540920315000093], + [-164.758249477999897, 66.538031317000062], + [-164.77122962099989, 66.536607163999989], + [-164.777414516999954, 66.534491278000175], + [-164.783151821999923, 66.531927802000084], + [-164.795358852999925, 66.529120184000121], + [-164.831613735999923, 66.52855052300005], + [-164.844349738999881, 66.524725653000033], + [-164.850453253999859, 66.517645575000174], + [-164.857858852999954, 66.511419989000117], + [-164.862131313999953, 66.509019273000078], + [-164.866566535999937, 66.507025458000115], + [-164.882923956999946, 66.504828192000147], + [-164.929310675999915, 66.504828192000147], + [-165.062611456999861, 66.479681708000058], + [-165.123727993999921, 66.477932033000073], + [-165.140980597999942, 66.473822333000115], + [-165.181467251999948, 66.458563544000143], + [-165.262074347999913, 66.444281317000062] + ] + ], + [ + [ + [-163.17406165299991, 69.56329987200003], + [-163.176258917999917, 69.482245184000092], + [-163.184641079999892, 69.511053778000033], + [-163.189076300999943, 69.539943752000127], + [-163.191151495999861, 69.546535549000012], + [-163.185373501999891, 69.61025625200007], + [-163.185332811999899, 69.61025625200007], + [-163.17162024599989, 69.657782294000171], + [-163.152902798999918, 69.678290106000034], + [-163.136219855999883, 69.682521877000127], + [-163.129099087999919, 69.681545315000065], + [-163.152536587999919, 69.668117580000072], + [-163.167917446999923, 69.638495184000035], + [-163.174183722999885, 69.60447825700011], + [-163.170033331999946, 69.577866929000081], + [-163.17406165299991, 69.56329987200003] + ] + ], + [ + [ + [-141.396636522999927, 69.705877997000059], + [-141.385121222999885, 69.694525458000058], + [-141.412912563999868, 69.705064195000134], + [-141.472564256999959, 69.720770575000088], + [-141.58421790299991, 69.76642487200003], + [-141.645415818999936, 69.774562893000152], + [-141.713449673999918, 69.793280341000028], + [-141.765736456999917, 69.799750067000119], + [-141.800282355999911, 69.809149481000034], + [-141.857980923999889, 69.815090236000074], + [-141.898426886999914, 69.824896552], + [-141.80923417899993, 69.821926174000097], + [-141.528635219999899, 69.760321356000034], + [-141.423085089999915, 69.721869208000143], + [-141.408802863999938, 69.714992580000128], + [-141.396636522999927, 69.705877997000059] + ] + ], + [ + [ + [-163.095448370999918, 69.731390692000119], + [-163.129099087999919, 69.701971747000144], + [-163.055775519999884, 69.804510809000121], + [-163.030140753999916, 69.832912502000127], + [-162.999948696999923, 69.855780341000141], + [-162.841135219999956, 69.934759833000086], + [-162.877919074999852, 69.901678778000033], + [-163.011789516999869, 69.83234284100017], + [-163.042185024999924, 69.801581122000087], + [-163.095448370999918, 69.731390692000119] + ] + ], + [ + [ + [-162.737172003999945, 69.978094794000143], + [-162.806345180999926, 69.948391018000038], + [-162.728138800999915, 69.998602606000091], + [-162.702056443999879, 70.022040106000176], + [-162.701771613999938, 70.022324937000022], + [-162.677357550999886, 70.044134833000058], + [-162.641794399999895, 70.065578518], + [-162.600819464999887, 70.082831122000115], + [-162.559925910999937, 70.092433986000074], + [-162.556467251999948, 70.090277411000088], + [-162.606068488999881, 70.069240627000156], + [-162.675363735999923, 70.029486395000148], + [-162.699330206999889, 69.999741929000137], + [-162.737172003999945, 69.978094794000143] + ] + ], + [ + [ + [-162.539133266999954, 70.113714911000059], + [-162.559925910999937, 70.106024481000034], + [-162.50328528599988, 70.161281643000152], + [-162.484527147999898, 70.17316315300009], + [-162.308542446999923, 70.241278387000037], + [-162.162709113999881, 70.269924221000011], + [-162.343739386999886, 70.220200914000102], + [-162.491037563999896, 70.153876044000143], + [-162.509877081999946, 70.140814520000092], + [-162.539133266999954, 70.113714911000059] + ] + ], + [ + [ + [-161.88813229099992, 70.353949286000059], + [-161.551136847999885, 70.325995184000035], + [-161.837839321999951, 70.343410549000012], + [-161.912098761999857, 70.339911200000117], + [-161.977121548999918, 70.312160549000126], + [-161.969960089999887, 70.321234442000119], + [-161.943063930999898, 70.339585679], + [-161.88813229099992, 70.353949286000059] + ] + ], + [ + [ + [-149.236276821999951, 70.553290106000034], + [-148.994577602999897, 70.492905992000104], + [-148.971669074999909, 70.493841864], + [-148.943348761999943, 70.50018952000012], + [-148.922922329999892, 70.501450914000131], + [-148.894357876999891, 70.496405341000084], + [-148.81969153599988, 70.46979401200015], + [-148.822092251999891, 70.468695380000028], + [-148.912220831999946, 70.488592841000113], + [-148.950388149999924, 70.486273505000142], + [-148.979115363999881, 70.480902411000088], + [-149.015695766999897, 70.484930731000148], + [-149.194040493999921, 70.536932684000121], + [-149.25438391799986, 70.545599677000112], + [-149.31318111899995, 70.544867255000085], + [-149.303822394999941, 70.547837632], + [-149.277414516999926, 70.552679755000085], + [-149.236276821999951, 70.553290106000034] + ] + ], + [ + [ + [-156.434803839999944, 71.40648021], + [-156.398264126999891, 71.39350006700009], + [-156.371652798999861, 71.380316473000121], + [-156.400135870999861, 71.377427476000108], + [-156.458485480999855, 71.395168361000103], + [-156.488352016999954, 71.393988348000065], + [-156.55211341099988, 71.364976304], + [-156.588815883999899, 71.358343817000119], + [-156.604440883999871, 71.353664455000015], + [-156.572214321999923, 71.336371161], + [-156.556467251999891, 71.324693101000108], + [-156.549794074999909, 71.308986721000124], + [-156.534250454999921, 71.30011627800009], + [-156.433705206999889, 71.292181708000115], + [-156.447336391999954, 71.276800848], + [-156.443308071999866, 71.268377997000059], + [-156.428415493999921, 71.264960028000033], + [-156.237009243999921, 71.269191799000154], + [-156.141061977999925, 71.256496486000103], + [-156.097360805999926, 71.243801174000126], + [-156.107858852999925, 71.227240302000055], + [-156.110951300999886, 71.223334052000055], + [-156.059193488999881, 71.220648505], + [-156.04271399599989, 71.215887762000094], + [-156.057932094999956, 71.204494533000044], + [-156.110951300999886, 71.182318427000055], + [-156.110951300999886, 71.174872137000179], + [-156.072336391999926, 71.176703192000062], + [-156.034128383999871, 71.182847398000135], + [-155.999338344999899, 71.194525458000115], + [-155.971018032999893, 71.212795315], + [-155.959909633999928, 71.218247789000046], + [-155.944894985999923, 71.220363674000154], + [-155.931711391999869, 71.217027085000112], + [-155.92601477799991, 71.206244208000115], + [-155.916005011999914, 71.196478583000086], + [-155.893137173999889, 71.19855377800009], + [-155.851511196999923, 71.209662177000112], + [-155.800892706999946, 71.208807684000035], + [-155.624745245999918, 71.183539130000085], + [-155.596791144999884, 71.169989325000117], + [-155.573435024999867, 71.150376695000048], + [-155.556101040999891, 71.127101955000128], + [-155.551503058999856, 71.10089752800009], + [-155.566639777999853, 71.081529038999989], + [-155.593739386999886, 71.069728908000016], + [-155.64000403599988, 71.063137111000131], + [-155.653920050999858, 71.056830145], + [-155.679921027999939, 71.041449286000059], + [-155.689279751999891, 71.039048570000105], + [-155.709095831999889, 71.038316148], + [-155.717152472999942, 71.034613348000121], + [-155.720651821999923, 71.029282945], + [-155.728016730999911, 71.01105377800009], + [-155.744699673999946, 71.004461981000119], + [-155.765370245999861, 70.999986070000048], + [-155.806507941999939, 70.996771552], + [-155.812936977999954, 70.994614976], + [-155.823353644999941, 70.98525625200007], + [-155.830759243999921, 70.983099677000055], + [-156.072092251999891, 70.973944403000175], + [-156.097360805999926, 70.968817450000145], + [-156.104725714999915, 70.968817450000145], + [-156.079213019999941, 70.962388414000046], + [-156.053171352999954, 70.962388414000046], + [-156.028635219999956, 70.958929755000057], + [-156.007923956999946, 70.942124742000047], + [-156.047230597999942, 70.929429429], + [-156.145008917999917, 70.932684637000037], + [-156.187326626999919, 70.921698309000149], + [-156.154286261999857, 70.919094143000066], + [-156.087228969999899, 70.92698802300005], + [-156.056345180999926, 70.921698309000149], + [-156.066354946999923, 70.916978257000054], + [-156.097360805999926, 70.908026434000035], + [-156.067941860999952, 70.902492580000015], + [-156.004831508999928, 70.90912506700009], + [-155.981271938999896, 70.894354559000092], + [-155.994862433999856, 70.88690827000012], + [-155.982248501999891, 70.87641022300015], + [-155.953195766999897, 70.865423895], + [-155.940297003999888, 70.852769273000106], + [-155.953684048999889, 70.846340236000017], + [-155.968617316999939, 70.842352606000034], + [-155.981190558999913, 70.83673737200003], + [-155.987497524999952, 70.82542552300005], + [-155.985788540999948, 70.815252997000115], + [-155.972767706999889, 70.80149974199999], + [-155.967600063999868, 70.791327216000141], + [-155.97093665299991, 70.779689846000124], + [-155.978260870999918, 70.767279364], + [-155.978098110999952, 70.759670315000065], + [-155.923939581999889, 70.766506252000099], + [-155.909047003999916, 70.771226304], + [-155.899362758999956, 70.784491278000033], + [-155.912831183999941, 70.790513414000131], + [-155.922800258999928, 70.799953518000152], + [-155.926218227999925, 70.81183502800009], + [-155.919789191999939, 70.82542552300005], + [-155.891428188999896, 70.836655992000047], + [-155.808908657999893, 70.830715236000046], + [-155.775827602999925, 70.836004950000088], + [-155.750599738999881, 70.844224351000022], + [-155.72040768099987, 70.846096096000068], + [-155.691232876999919, 70.841131903000118], + [-155.658762173999946, 70.824164130000142], + [-155.650827602999868, 70.828680731000091], + [-155.647043423999946, 70.835882880000113], + [-155.649159308999856, 70.839748440000122], + [-155.655140753999888, 70.842962958], + [-155.660227016999897, 70.850531317000147], + [-155.663929816999939, 70.85936107000002], + [-155.665964321999866, 70.866400458000058], + [-155.645578579999892, 70.86806875200007], + [-155.603138800999915, 70.846177476000051], + [-155.577137824999909, 70.845933335000026], + [-155.542429165999863, 70.866400458000058], + [-155.534616665999863, 70.877264716000141], + [-155.533192511999914, 70.885931708000058], + [-155.536203579999892, 70.904608466000028], + [-155.535715298999918, 70.92568594000015], + [-155.531076626999891, 70.941799221000039], + [-155.51789303299995, 70.95213450700011], + [-155.468088344999956, 70.960435289000102], + [-155.405873175999886, 70.996771552], + [-155.390329555999955, 71.00287506700009], + [-155.344431118999864, 71.01105377800009], + [-155.331898566999882, 71.016017971000124], + [-155.308583136999886, 71.028753973], + [-155.296009894999884, 71.031561591000141], + [-155.274973110999952, 71.02558014500012], + [-155.243723110999895, 70.997137762000122], + [-155.217152472999942, 70.990545966000056], + [-155.191721157999922, 70.995062567], + [-155.182077602999954, 71.006822007000082], + [-155.184885219999899, 71.023179429], + [-155.196726040999863, 71.041449286000059], + [-155.217152472999942, 71.056463934000178], + [-155.267323370999918, 71.072943427000084], + [-155.289173956999889, 71.08612702000012], + [-155.26923580599987, 71.099107164000102], + [-155.209665493999864, 71.122992255], + [-155.18614661399991, 71.127101955000128], + [-155.163075324999852, 71.119818427000112], + [-155.124012824999909, 71.090236721000068], + [-155.097401495999947, 71.08612702000012], + [-155.103138800999915, 71.104234117000132], + [-155.101633266999869, 71.119859117000104], + [-155.104969855999911, 71.132310289000131], + [-155.125314907999893, 71.140773830000072], + [-155.109323696999894, 71.150376695000048], + [-155.089670376999948, 71.154933986000103], + [-155.06969153599988, 71.15326569200009], + [-155.052683071999894, 71.144191799000069], + [-155.04320227799991, 71.130926825000145], + [-155.045643683999913, 71.121771552000084], + [-155.052479620999947, 71.11261627800009], + [-155.056467251999919, 71.099798895000063], + [-155.053049282999893, 71.087713934000149], + [-155.039784308999884, 71.063055731000148], + [-155.039377407999893, 71.05573151200015], + [-155.05443274599989, 71.045233466000084], + [-155.086740688999896, 71.031154690000122], + [-155.097401495999947, 71.017279364000061], + [-155.065012173999946, 71.012111721000153], + [-155.039011196999951, 71.017401434000035], + [-155.021717902999853, 71.032294012000179], + [-155.013539191999882, 71.064113674000012], + [-155.004587368999921, 71.083482164000131], + [-155.001820441999882, 71.092962958000143], + [-155.005441860999923, 71.107163804000052], + [-155.012806769999941, 71.113348700000031], + [-155.011097785999937, 71.115912177000112], + [-154.987538214999859, 71.119696356000148], + [-154.971669074999937, 71.120062567000062], + [-154.918934699999852, 71.11347077], + [-154.906849738999938, 71.107163804000052], + [-154.894276495999947, 71.095200914000102], + [-154.87958736899995, 71.088202216000056], + [-154.860910610999895, 71.096380927000055], + [-154.839955206999946, 71.101263739000117], + [-154.808176235999895, 71.095933335000055], + [-154.775257941999882, 71.083970445000105], + [-154.725819464999944, 71.055121161], + [-154.631214972999942, 71.031561591000141], + [-154.608143683999884, 71.020982164000017], + [-154.600168423999918, 71.012884833000058], + [-154.59711666599992, 71.000474351000051], + [-154.601999477999897, 70.992132880000085], + [-154.613270636999886, 70.981634833], + [-154.625843878999888, 70.97260163], + [-154.64325924399995, 70.96572500200007], + [-154.647206183999913, 70.958197333000115], + [-154.649159308999884, 70.949367580000072], + [-154.65172278599988, 70.942124742000047], + [-154.662464972999885, 70.925523179], + [-154.668202277999882, 70.920599677000112], + [-154.679676886999914, 70.91425202], + [-154.712880011999914, 70.90558502800009], + [-154.788685675999886, 70.896307684000064], + [-154.810007290999948, 70.880682684000149], + [-154.699818488999881, 70.886216538999989], + [-154.675974087999862, 70.876939195000134], + [-154.66771399599989, 70.871527411000088], + [-154.631214972999942, 70.852769273000106], + [-154.63031979099992, 70.848863023000135], + [-154.632150844999899, 70.836249091000141], + [-154.631214972999942, 70.832261460000083], + [-154.590280727999925, 70.82542552300005], + [-154.538807745999918, 70.826157945], + [-154.435170050999886, 70.83926015800013], + [-154.384226040999891, 70.839748440000122], + [-154.309071417999888, 70.830796617000104], + [-154.270822719999956, 70.819037177000112], + [-154.247670050999886, 70.798773505000113], + [-154.256703253999888, 70.789129950000145], + [-154.247873501999948, 70.782416083], + [-154.230336066999911, 70.778387762000037], + [-154.213571743999893, 70.777044989000146], + [-154.171742316999882, 70.781642971000096], + [-154.130970831999889, 70.791327216000141], + [-154.042103644999884, 70.833644924000154], + [-153.985340949999909, 70.846909898], + [-153.940134243999864, 70.881903387000179], + [-153.918690558999913, 70.894354559000092], + [-153.893545934333702, 70.89838258214543], + [-153.893544074999852, 70.898382880000057], + [-153.514027472999885, 70.88690827000012], + [-153.448963995999918, 70.899481512000122], + [-153.379831508999928, 70.900091864000061], + [-153.35680091099988, 70.902777411000059], + [-153.302438930999926, 70.928656317000062], + [-153.255686001999891, 70.932766018], + [-153.164865688999896, 70.927883205000128], + [-153.148793097999885, 70.924750067000062], + [-153.131174282999893, 70.91111888200011], + [-153.117054816999939, 70.908026434000035], + [-153.10688229099992, 70.906927802], + [-153.086740688999953, 70.902289130000057], + [-153.075795050999886, 70.90119049700003], + [-153.069528774999924, 70.903021552], + [-153.052683071999923, 70.911525783000044], + [-153.041696743999893, 70.91425202], + [-152.955677863999881, 70.908026434000035], + [-152.942697719999899, 70.903387762000094], + [-152.935251430999926, 70.892564195000105], + [-152.928537563999896, 70.879950262000037], + [-152.917551235999923, 70.869818427000084], + [-152.903146938999953, 70.863959052000141], + [-152.884592251999948, 70.859076239000061], + [-152.865589972999942, 70.857001044000143], + [-152.84984290299991, 70.85960521000014], + [-152.840646938999896, 70.86806875200007], + [-152.838205532999893, 70.877427476000108], + [-152.833078579999892, 70.884711005000113], + [-152.815744594999899, 70.88690827000012], + [-152.807810024999924, 70.883856512000037], + [-152.799020962999947, 70.877183335000083], + [-152.784413214999915, 70.862982489000061], + [-152.773793097999885, 70.855658270000063], + [-152.747019008999871, 70.843451239000089], + [-152.714914516999897, 70.821030992000075], + [-152.696888800999886, 70.821193752000127], + [-152.657460089999915, 70.845933335000026], + [-152.673085089999915, 70.866644598], + [-152.694081183999913, 70.876939195000134], + [-152.719105597999942, 70.880357164000046], + [-152.746815558999913, 70.880682684000149], + [-152.712513800999886, 70.890366929000109], + [-152.545847133999928, 70.887518622000087], + [-152.32750403599988, 70.856878973000065], + [-152.219227667999917, 70.818019924000069], + [-152.219227667999917, 70.812445380000057], + [-152.274159308999913, 70.799994208000143], + [-152.37547766799986, 70.749253648], + [-152.430897589999944, 70.743557033000101], + [-152.430897589999944, 70.736029364000146], + [-152.415231899999867, 70.731146552000084], + [-152.413400844999899, 70.722113348000065], + [-152.421335415999948, 70.713324286], + [-152.434641079999892, 70.709377346000011], + [-152.477772589999915, 70.705511786], + [-152.500843878999945, 70.699204820000077], + [-152.514108852999868, 70.68891022300015], + [-152.509144660999937, 70.663885809000035], + [-152.482167120999861, 70.641791083000058], + [-152.447946743999893, 70.626044012000094], + [-152.253407355999911, 70.599514065000122], + [-152.155222133999928, 70.603216864000089], + [-152.10383053299995, 70.598781643], + [-152.075266079999949, 70.579046942000062], + [-152.107533331999889, 70.574937242000104], + [-152.166737433999884, 70.582586981000148], + [-152.41734778599988, 70.586737372000087], + [-152.456735805999955, 70.581732489000146], + [-152.517201300999886, 70.592718817], + [-152.544992641999954, 70.590155341000084], + [-152.580555792999917, 70.582953192000062], + [-152.612741665999948, 70.572211005000057], + [-152.630116339999915, 70.558539130000113], + [-152.618031378999945, 70.555812893000152], + [-152.585764126999891, 70.558539130000113], + [-152.572621222999942, 70.556708075000031], + [-152.547311977999897, 70.547796942], + [-152.53453528599988, 70.544867255000085], + [-152.507557745999918, 70.545314846000068], + [-152.456166144999884, 70.555853583000143], + [-151.969105597999913, 70.57160065300009], + [-151.848703579999892, 70.558539130000113], + [-151.760365363999938, 70.566717841000028], + [-151.733265753999888, 70.558539130000113], + [-151.748768683999913, 70.554999091000028], + [-151.761463995999861, 70.548163153000118], + [-151.784169074999909, 70.52753327], + [-151.803212042999917, 70.518744208000115], + [-151.847645636999914, 70.523016669000029], + [-151.869821743999893, 70.517645575000174], + [-151.847849087999862, 70.509751695000105], + [-151.79039466099988, 70.502386786000031], + [-151.886301235999895, 70.492865302000112], + [-151.943308071999866, 70.48045482], + [-151.979685024999952, 70.448716539000131], + [-151.736439581999946, 70.435614325000145], + [-151.454172329999892, 70.438950913999989], + [-151.407826300999886, 70.426906643000066], + [-151.352487758999928, 70.426418361000103], + [-151.331654425999943, 70.417954820000048], + [-151.315866665999891, 70.409125067], + [-151.278757290999863, 70.399725653000147], + [-151.24360104099992, 70.379299221000011], + [-151.222279425999943, 70.375718492000132], + [-151.17711341099988, 70.37978750200007], + [-151.17711341099988, 70.387193101000079], + [-151.199045376999919, 70.401800848000093], + [-151.208811001999862, 70.422430731000119], + [-151.202951626999919, 70.440741278000175], + [-151.177723761999857, 70.448716539000131], + [-150.979115363999938, 70.456122137000122], + [-150.972889777999853, 70.458400783000101], + [-150.959095831999946, 70.467189846000153], + [-150.951161261999886, 70.46979401200015], + [-150.862416144999941, 70.46979401200015], + [-150.854929165999948, 70.472479559000035], + [-150.840891079999892, 70.480698960000112], + [-150.835072394999855, 70.482855536000116], + [-150.812489386999886, 70.481146552000112], + [-150.765695766999897, 70.472235419000086], + [-150.74510657499988, 70.476629950000174], + [-150.773793097999942, 70.484930731000148], + [-150.78612219999988, 70.492254950000145], + [-150.793527798999889, 70.503322658000101], + [-150.619089321999923, 70.510728257], + [-150.608998175999886, 70.509670315000122], + [-150.590077277999853, 70.504584052], + [-150.581247524999895, 70.503322658000101], + [-150.567372199999909, 70.505031643], + [-150.540231899999895, 70.511460679000109], + [-150.526600714999944, 70.510728257], + [-150.513132290999948, 70.503892320000077], + [-150.507028774999867, 70.494370835000055], + [-150.502268032999893, 70.48456452000012], + [-150.49250240799995, 70.476629950000174], + [-150.464100714999915, 70.479925848], + [-150.419992641999897, 70.491929429000137], + [-150.379383917999917, 70.497015692000062], + [-150.361520962999947, 70.47972239800005], + [-150.369089321999894, 70.467352606000119], + [-150.416737433999856, 70.421372789000074], + [-150.416737433999856, 70.414536851000051], + [-150.383778449999909, 70.416083075000088], + [-150.253041144999941, 70.442084052000055], + [-150.119130011999943, 70.442857163999989], + [-149.889719204999949, 70.512762762000094], + [-149.868641730999911, 70.512030341000084], + [-149.811634894999884, 70.496161200000145], + [-149.784616665999948, 70.497992255000113], + [-149.724720831999917, 70.510728257], + [-149.567087368999893, 70.510728257], + [-149.514352993999921, 70.52277252800009], + [-149.488514777999882, 70.523016669000029], + [-149.463978644999884, 70.510728257], + [-149.469593878999859, 70.504055080000043], + [-149.475819464999915, 70.499904690000093], + [-149.482980923999861, 70.497788804000081], + [-149.491322394999941, 70.497056382000054], + [-149.383778449999909, 70.48818594], + [-149.354115363999881, 70.497056382000054], + [-149.368397589999887, 70.503322658000101], + [-149.344471808999913, 70.510077216000028], + [-149.044504360999952, 70.468573309000035], + [-149.015858527999853, 70.459662177], + [-148.992298956999917, 70.448716539000131], + [-148.979440883999899, 70.439520575000145], + [-148.972157355999883, 70.433050848000065], + [-148.964548305999926, 70.429266669000029], + [-148.95067298099994, 70.428208726], + [-148.917469855999911, 70.440619208], + [-148.902902798999889, 70.441839911000116], + [-148.825510219999899, 70.41828034100017], + [-148.795847133999871, 70.414536851000051], + [-148.721018032999893, 70.422023830000015], + [-148.682443813999924, 70.420111395000148], + [-148.652780727999897, 70.404364325000088], + [-148.641061977999897, 70.399725653000147], + [-148.586984829999921, 70.394110419000171], + [-148.551380988999881, 70.38410065300009], + [-148.518177863999938, 70.369208075000031], + [-148.50413977799991, 70.356390692], + [-148.500965949999909, 70.339911200000117], + [-148.511830206999889, 70.318345445000105], + [-148.381418423999889, 70.312486070000048], + [-148.340565558999941, 70.318345445000105], + [-148.257394985999895, 70.354478257000139], + [-148.223255988999881, 70.359320380000113], + [-148.150746222999885, 70.356431382], + [-148.118967251999919, 70.348334052000055], + [-148.064808722999885, 70.318833726], + [-148.053089972999885, 70.314683335000055], + [-148.038929816999939, 70.312160549000126], + [-148.02318274599989, 70.313177802], + [-148.008534308999884, 70.316839911000059], + [-147.993723110999895, 70.318101304000052], + [-147.977447068999879, 70.312160549000126], + [-147.984283006999902, 70.304673570000077], + [-147.962228969999899, 70.301418361000017], + [-147.88805091099988, 70.312160549000126], + [-147.865874803999901, 70.311224677000055], + [-147.842762824999937, 70.307521877000013], + [-147.819935675999943, 70.300685940000093], + [-147.798695441999939, 70.290432033000158], + [-147.80679277299987, 70.286363023000106], + [-147.81187903599988, 70.281887111000131], + [-147.819813605999855, 70.269924221000011], + [-147.810414191999939, 70.268052476000051], + [-147.801625128999888, 70.265285549000069], + [-147.793365037999877, 70.261460679000081], + [-147.785715298999946, 70.256903387000122], + [-147.794016079999921, 70.246039130000142], + [-147.798898891999897, 70.240912177000112], + [-147.806141730999911, 70.236476955000128], + [-147.782785610999923, 70.227932033000044], + [-147.679595506999902, 70.212225653000147], + [-147.416493292999917, 70.202297268000066], + [-147.23696855399993, 70.181219794000029], + [-147.231434699999909, 70.181789455000015], + [-147.221506313999924, 70.187730210000112], + [-147.21711178299995, 70.188666083000115], + [-147.211537238999938, 70.185858466000141], + [-147.20091712099989, 70.177394924000041], + [-147.196034308999913, 70.174953518000095], + [-147.123687303999958, 70.167547919000086], + [-146.880686001999891, 70.174953518000095], + [-146.876820441999882, 70.190171617000075], + [-146.848784959999875, 70.193426825000117], + [-146.741118943999879, 70.192328192000062], + [-146.433257615999935, 70.182440497000144], + [-146.230580206999946, 70.186021226000108], + [-146.082630988999881, 70.15566640800013], + [-145.983143683999913, 70.153876044000143], + [-145.967762824999852, 70.156927802000055], + [-145.940012173999889, 70.166164455000015], + [-145.928578253999945, 70.167547919000086], + [-145.88914954299986, 70.152411200000088], + [-145.872670050999886, 70.152818101000108], + [-145.880197719999927, 70.174953518000095], + [-145.840443488999938, 70.167425848000121], + [-145.771229620999947, 70.134100653000033], + [-145.713286912999877, 70.123195705000072], + [-145.654855923999889, 70.098578192000062], + [-145.613189256999931, 70.088812567000119], + [-145.599680141999954, 70.080755927], + [-145.613880988999881, 70.07135651200015], + [-145.59780839799987, 70.07135651200015], + [-145.587717251999919, 70.07526276200015], + [-145.572336391999897, 70.085598049000069], + [-145.558257615999935, 70.090480861000131], + [-145.547474738999938, 70.092352606000091], + [-145.52049719999988, 70.092433986000074], + [-145.500965949999909, 70.086004950000174], + [-145.471180792999888, 70.057806708], + [-145.455637173999889, 70.051459052000055], + [-145.426909959999932, 70.048163153000033], + [-145.368519660999937, 70.033636786], + [-145.339222785999937, 70.03034088700015], + [-145.215402798999889, 70.044012762000094], + [-145.215402798999889, 70.037176825000174], + [-145.236154751999891, 70.030707098000065], + [-145.301380988999881, 69.999660549000154], + [-145.274891730999911, 69.99306875200007], + [-145.153920050999915, 70.003078518000066], + [-144.941558397999955, 69.977972723000065], + [-144.886463995999918, 69.995266018000066], + [-144.871571417999945, 69.997992255000142], + [-144.825103318999908, 69.986476955000015], + [-144.706450975999957, 69.976019598000121], + [-144.590158657999893, 69.982814846000153], + [-144.564930792999917, 69.989406643000123], + [-144.509266730999911, 70.019964911000059], + [-144.3861384759999, 70.044012762000094], + [-144.1869197259999, 70.043605861000074], + [-144.15453040299991, 70.048407294000171], + [-144.140370245999861, 70.061346747000172], + [-144.129546678999873, 70.067694403000118], + [-144.105132615999935, 70.064398505000085], + [-144.079253709999932, 70.055365302000055], + [-144.064035610999952, 70.044012762000094], + [-144.069325324999909, 70.036281643000066], + [-144.071115688999896, 70.030462958000115], + [-144.069325324999909, 70.024603583000086], + [-144.064035610999952, 70.016750393], + [-144.068918423999889, 70.009914455000072], + [-144.070423956999946, 70.004055080000128], + [-144.071441209999932, 69.989406643000123], + [-144.057118292999917, 69.998480536000116], + [-144.04328365799995, 70.015122788999989], + [-144.023060675999915, 70.051459052000055], + [-144.047352667999917, 70.064764716000084], + [-144.057199673999918, 70.073431708000086], + [-144.064035610999952, 70.085598049000069], + [-144.017445441999911, 70.092596747000144], + [-144.002552863999881, 70.089016018000066], + [-143.982736782999837, 70.078802802000141], + [-143.975453253999945, 70.077866929000052], + [-143.962635870999918, 70.079087632000082], + [-143.954741990999935, 70.078802802000141], + [-143.931019660999937, 70.071030992000047], + [-143.918934699999909, 70.07135651200015], + [-143.913807745999918, 70.082180080000157], + [-143.905588344999899, 70.088609117000075], + [-143.886545376999891, 70.089178778000033], + [-143.85171464799987, 70.085598049000069], + [-143.824859178999873, 70.089300848], + [-143.770578579999835, 70.104437567], + [-143.742502407999837, 70.106024481000034], + [-143.694081183999941, 70.092433986000074], + [-143.674387173999889, 70.090399481000148], + [-143.576527472999942, 70.09393952000012], + [-143.564361131999959, 70.098578192000062], + [-143.560454881999874, 70.106878973000121], + [-143.563954230999855, 70.115952867000047], + [-143.564198370999918, 70.123358466000028], + [-143.550689256999931, 70.126613674000069], + [-143.545521613999938, 70.123032945000105], + [-143.526193813999896, 70.102362372000087], + [-143.510568813999924, 70.096665757000025], + [-143.358143683999913, 70.106146552000112], + [-143.354115363999938, 70.105617580000128], + [-143.352528449999909, 70.101874091000084], + [-143.31676184799997, 70.055650132], + [-143.29751542899993, 70.043402411000116], + [-143.276356574999909, 70.051459052000055], + [-143.289906378999973, 70.06313711100016], + [-143.302479620999861, 70.07941315300009], + [-143.307972785999908, 70.098049221000096], + [-143.300282355999883, 70.116644598000093], + [-143.277088995999947, 70.120998440000065], + [-143.235666469999842, 70.118231512000122], + [-143.166493292999945, 70.106024481000034], + [-143.154611782999893, 70.100083726000108], + [-143.144683397999898, 70.09369538], + [-143.133778449999909, 70.088364976000108], + [-143.118723110999895, 70.085598049000069], + [-143.036488410999937, 70.092433986000074], + [-143.023060675999943, 70.08982982], + [-143.013539191999939, 70.083482164000046], + [-142.998890753999945, 70.068264065000065], + [-142.984120245999947, 70.062933661000031], + [-142.963612433999913, 70.062648830000072], + [-142.942738410999937, 70.065985419000114], + [-142.926909959999875, 70.07135651200015], + [-142.933745897999927, 70.078802802000141], + [-142.87954667899993, 70.074042059000035], + [-142.650746222999885, 70.019029038999989], + [-142.600819464999859, 70.013128973000121], + [-142.596099412999934, 70.00389232], + [-142.611643032999865, 69.975734768000095], + [-142.597645636999914, 69.971502997000172], + [-142.581776495999861, 69.969916083000143], + [-142.566314256999931, 69.972235419000086], + [-142.553863084999932, 69.979437567000119], + [-142.538482225999871, 69.985012111000131], + [-142.518177863999881, 69.981878973000065], + [-142.481271938999924, 69.96954987200003], + [-142.491607225999928, 69.972560940000122], + [-142.502064581999917, 69.973537502000013], + [-142.512562628999973, 69.972560940000122], + [-142.522816535999908, 69.96954987200003], + [-142.496896938999896, 69.953843492000047], + [-142.437814907999893, 69.948960679], + [-142.412953253999945, 69.934759833000086], + [-142.418568488999938, 69.931463934000035], + [-142.421050584999961, 69.928208726], + [-142.422759568999965, 69.924750067], + [-142.42601477799991, 69.920477606000176], + [-142.397450324999909, 69.92096588700015], + [-142.384103969999899, 69.91933828300013], + [-142.371408657999837, 69.91425202000012], + [-142.377430792999945, 69.904933986000074], + [-142.376128709999932, 69.899155992000104], + [-142.369496222999885, 69.895453192000062], + [-142.343861456999917, 69.888495184000178], + [-142.333363410999937, 69.887762762000065], + [-142.324289516999841, 69.885239976000136], + [-142.293690558999913, 69.863104559000149], + [-142.270904100999928, 69.856024481000091], + [-142.107329881999959, 69.848944403000033], + [-142.04946855399993, 69.834865627000099], + [-142.0423884759999, 69.804388739000146], + [-142.015126105999911, 69.796291408000016], + [-141.988189256999931, 69.792669989000061], + [-141.963693813999896, 69.795721747000144], + [-141.943430141999897, 69.807806708000058], + [-141.920562303999873, 69.815375067], + [-141.891184048999889, 69.808823960000112], + [-141.837025519999912, 69.790757554], + [-141.653309699999937, 69.762152411000116], + [-141.573801235999838, 69.730169989000117], + [-141.524728969999899, 69.718085028000118], + [-141.501210089999915, 69.708807684000149], + [-141.48412024599989, 69.697577216000141], + [-141.440337693999936, 69.661078192], + [-141.412912563999868, 69.650376695], + [-141.291086391999869, 69.634019273000078], + [-141.267241990999878, 69.644517320000048], + [-141.246245897999927, 69.66095612200003], + [-141.220611131999959, 69.674058335000026], + [-141.248036261999914, 69.680894273000106], + [-141.267933722999913, 69.682114976000051], + [-141.29149329299986, 69.68585846600017], + [-141.316232876999834, 69.68773021000014], + [-141.316232876999834, 69.694525458000058], + [-141.015207485999895, 69.654201565], + [-141.006459113999938, 69.65127187700007], + [-141.005563930999926, 69.650946356000148], + [-141.005548637108888, 69.650941218272649], + [-141.005471151, 69.505164286000181], + [-141.005393636999969, 69.359385071000148], + [-141.005316121999954, 69.213605856000143], + [-141.005290283999841, 69.067826640000149], + [-141.00523860699991, 68.922047425000059], + [-141.005161092999913, 68.776268209000037], + [-141.005083577999983, 68.630488994000032], + [-141.005006062999968, 68.484709779000028], + [-141.004928548999942, 68.338982239000032], + [-141.004851033999927, 68.193203023000095], + [-141.004773518999912, 68.04742380800009], + [-141.004747681999902, 67.901644593000086], + [-141.004696004999971, 67.75581370100015], + [-141.004618489999956, 67.610086162000172], + [-141.00454097599993, 67.464281108000151], + [-141.004463460999915, 67.318476054000044], + [-141.0043859459999, 67.172722677000039], + [-141.004308431999789, 67.026917624000035], + [-141.004230916999859, 66.881138408000098], + [-141.004205077999927, 66.735410868000102], + [-141.004153401999929, 66.589579976], + [-141.004075887999818, 66.443774923], + [-141.003998372999888, 66.298021546000157], + [-141.003920857999873, 66.152268169000152], + [-141.003843343999847, 66.006514791000157], + [-141.003765828999917, 65.860735576000152], + [-141.003688313999817, 65.714956361000148], + [-141.003636638999893, 65.56917714500004], + [-141.0036108, 65.423372091000132], + [-141.003533284999776, 65.277567037000111], + [-141.003455769999846, 65.131787821], + [-141.003378255999905, 64.986008606], + [-141.003300740999805, 64.840229391], + [-141.003223225999875, 64.694501851999988], + [-141.003145711999963, 64.548670960000081], + [-141.003094034999947, 64.402891744000058], + [-141.003068197999937, 64.257112529000054], + [-141.002990681999904, 64.111281637000118], + [-141.002913167999907, 63.965502422000114], + [-141.002835653999966, 63.819774883000107], + [-141.002758137999933, 63.674099020000043], + [-141.002680623999936, 63.528268128000107], + [-141.00260311, 63.382488912000028], + [-141.002551432999894, 63.236658020000093], + [-141.002525593999906, 63.090878805000088], + [-141.002448079999965, 62.945099590000055], + [-141.002370565999854, 62.799320374000061], + [-141.002293049999935, 62.653592835000055], + [-141.002215536, 62.507761943000119], + [-141.002138021999883, 62.361982728000115], + [-141.002060505999964, 62.21622935000012], + [-141.002008830999955, 62.0703726200001], + [-141.001982991999938, 61.924619243000095], + [-141.001905477999912, 61.7788658650001], + [-141.001827962999812, 61.633086650000095], + [-141.001750447999882, 61.487333272000072], + [-141.001672933999942, 61.341579896000084], + [-141.001595418999841, 61.195826518000089], + [-141.001517903999911, 61.049969788000126], + [-141.0014403899998, 60.904216411000149], + [-141.00136287499987, 60.758411357000128], + [-141.00128536, 60.612683818000122], + [-141.001207845999943, 60.466878765000118], + [-141.001156168999927, 60.321073710000107], + [-140.994929159999913, 60.304382223000161], + [-140.97955542099993, 60.295803935000137], + [-140.90914628099992, 60.283659973000127], + [-140.768457195, 60.25926869700011], + [-140.660505127999954, 60.240510153000017], + [-140.533742838999927, 60.218547669000046], + [-140.518704996999929, 60.22387034100008], + [-140.506664388999866, 60.236324361000172], + [-140.475322631999944, 60.276476950000173], + [-140.46279109799994, 60.289137675000021], + [-140.447804932999873, 60.294460348000158], + [-140.424111287999835, 60.293168437000119], + [-140.324970052999902, 60.267536927000052], + [-140.169243123999877, 60.22722931], + [-140.0157899579998, 60.187386780000068], + [-139.967756713999933, 60.188368632000149], + [-139.916932943999939, 60.207850647000143], + [-139.826318319, 60.256478170000051], + [-139.728417317999913, 60.309033102000129], + [-139.679815632999805, 60.326809795000074], + [-139.628345907999915, 60.334096171000127], + [-139.517965047999922, 60.336731670000134], + [-139.413992065999878, 60.339212138000121], + [-139.262192545999937, 60.342777812000108], + [-139.101608033, 60.346601868000121], + [-139.079464680999877, 60.341020813000014], + [-139.068690145999938, 60.322055563000063], + [-139.07318599499979, 60.299834697000122], + [-139.113467773999929, 60.226815898], + [-139.149615438999945, 60.161186829000073], + [-139.183230956999978, 60.100156963000174], + [-139.182145752999986, 60.073388570000091], + [-139.112305054999808, 60.031375631000074], + [-139.060206621999953, 60.000058906], + [-139.05161108499982, 59.994892070000063], + [-139.003758707999907, 59.977218730000075], + [-138.842424886999879, 59.937686259000131], + [-138.74258601899993, 59.913191631000174], + [-138.704888061999895, 59.898463847000173], + [-138.697188273999927, 59.89370961600018], + [-138.692098144999932, 59.886888326000033], + [-138.654348510999966, 59.805497945000113], + [-138.637450317999878, 59.784052226000185], + [-138.599209757999802, 59.753821513000062], + [-138.488880574999826, 59.696357321000065], + [-138.363616902999979, 59.631141663000122], + [-138.219543009999938, 59.556004130000034], + [-138.067614298999956, 59.476990865000161], + [-137.910569621999798, 59.395187073000116], + [-137.758305013999916, 59.315915426000103], + [-137.611363077999897, 59.239330954000181], + [-137.594180664999925, 59.225274964000064], + [-137.582088378999941, 59.206568096000083], + [-137.549299683999834, 59.134531149000011], + [-137.521006836999845, 59.072364401000115], + [-137.484394084999906, 58.991904196000135], + [-137.50775183199994, 58.93996938100004], + [-137.508759521999821, 58.914906312000042], + [-137.48687455299978, 58.900075175000026], + [-137.453465738999796, 58.899144999000058], + [-137.423105835999934, 58.907723287000081], + [-137.338098104999943, 58.95547231100015], + [-137.281899983999779, 58.987149964000153], + [-137.172345947999816, 59.027147523000124], + [-137.062367316999882, 59.067572333], + [-137.04710852799991, 59.073309638000168], + [-136.942282471, 59.111070048000116], + [-136.840815796999834, 59.148173727000099], + [-136.785496175999896, 59.157217102000075], + [-136.671911377999834, 59.150809225000117], + [-136.613491170999964, 59.154219870000148], + [-136.569488688999911, 59.172151591000116], + [-136.484791015999804, 59.253800355000024], + [-136.483550781999952, 59.257469381000121], + [-136.466549235999935, 59.287803447000059], + [-136.467091837999988, 59.384490052000118], + [-136.467556925999816, 59.461642965000081], + [-136.415958007999905, 59.452237854000131], + [-136.366839559999846, 59.449550680000087], + [-136.319994872999928, 59.45905914300009], + [-136.275036377999811, 59.486447653000127], + [-136.244728149999958, 59.528202210000174], + [-136.258474081999907, 59.556107483000133], + [-136.299350138999898, 59.575744528000186], + [-136.35032894, 59.592384339000105], + [-136.258499918999917, 59.621581523000046], + [-136.145406046999881, 59.63682607], + [-136.02686031099978, 59.652845765000123], + [-135.923817505999978, 59.66674672500001], + [-135.830954955999943, 59.693256734000116], + [-135.6412507739999, 59.747361960000106], + [-135.482759155999929, 59.792475484000178], + [-135.465137492999929, 59.789684957000119], + [-135.404391845999839, 59.753304749000122], + [-135.34579077199993, 59.731032207000069], + [-135.25987870299997, 59.698217672000069], + [-135.221896524999948, 59.675273336000132], + [-135.192027547999942, 59.647109680000156], + [-135.157791910999947, 59.62328684500001], + [-135.106683919999853, 59.613158265000052], + [-135.087873698999942, 59.606543681000161], + [-135.032941650999817, 59.57310902900015], + [-135.018523926, 59.559363099000123], + [-135.016198486999969, 59.543446757000098], + [-135.01947994, 59.493165589000157], + [-135.023252319999983, 59.477145895000021], + [-135.037489176999941, 59.461591289000168], + [-135.078597778999921, 59.438336894000045], + [-135.095754353999894, 59.418854879000051], + [-134.993254150999917, 59.381906230000126], + [-135.004829671999971, 59.367126770000098], + [-135.014441488999978, 59.351520488000162], + [-135.016198486999969, 59.336172587000092], + [-134.979973307999927, 59.297415263000161], + [-134.957829955999898, 59.2809821580001], + [-134.93243099, 59.270646872], + [-134.83946508799994, 59.258141174000102], + [-134.743450277999955, 59.245118714000157], + [-134.70551977599996, 59.2401061], + [-134.692083902999912, 59.235248515000151], + [-134.682859660999895, 59.223001201000145], + [-134.671439169, 59.193752340000103], + [-134.660380412999984, 59.18129832000001], + [-134.610771038, 59.14455637600004], + [-134.582788248999918, 59.128846741000146], + [-134.556717489999926, 59.123058980000096], + [-134.509071818999871, 59.12280059900003], + [-134.477575032999823, 59.114945781000088], + [-134.4510133469999, 59.09789255800014], + [-134.398019165999813, 59.051952210000152], + [-134.387167114999954, 59.036862692000071], + [-134.385590983999919, 59.018827616000166], + [-134.39938859199998, 58.974954326000145], + [-134.343423014999871, 58.96885650600008], + [-134.329651244999923, 58.963017070000106], + [-134.320039428999905, 58.952681784], + [-134.32314001499995, 58.949167786000046], + [-134.330323038999893, 58.94534373], + [-134.333036051999954, 58.934129945000151], + [-134.327403320999906, 58.916456604000146], + [-134.316938843999964, 58.903795878000111], + [-134.222190104999925, 58.84271433500011], + [-134.108837850999919, 58.808246155000134], + [-133.98310909099996, 58.769902242000128], + [-133.871229614999777, 58.735899150000094], + [-133.83112870399998, 58.718019104000135], + [-133.79640214099993, 58.693421123000135], + [-133.700077270999941, 58.599370016000094], + [-133.626283325999907, 58.546401673], + [-133.547063354999892, 58.505577291000023], + [-133.463089151999782, 58.462220764000122], + [-133.392240763999922, 58.403878072000097], + [-133.430119588999901, 58.372097067000041], + [-133.415030069999915, 58.330549215000147], + [-133.374567423999906, 58.290965068], + [-133.25726192299993, 58.210298157000082], + [-133.165587931999937, 58.147304586000175], + [-133.142126831999974, 58.120587870000023], + [-133.094842895999932, 58.033099670000141], + [-133.075154174999966, 58.007881571999988], + [-132.993350382999949, 57.941916606000163], + [-132.917153483999925, 57.880499166000092], + [-132.832119913999918, 57.791564026000017], + [-132.709440063999807, 57.663303122000158], + [-132.629057372999966, 57.579277242000117], + [-132.552447062999931, 57.499075420000125], + [-132.455734619999873, 57.420992330000118], + [-132.362303629999985, 57.345699768000074], + [-132.304684407999929, 57.280354919000118], + [-132.230993815999909, 57.196819967000025], + [-132.276365722999913, 57.148890076], + [-132.341219645999956, 57.080392965000087], + [-132.162289998999938, 57.050317281000034], + [-132.0318586839999, 57.028406474000164], + [-132.107383789999915, 56.858752747000054], + [-131.871558390999951, 56.793459575000114], + [-131.865873983999904, 56.785708110000101], + [-131.872411051999876, 56.772969869000136], + [-131.882617147999952, 56.759146424], + [-131.887965657999899, 56.747958476000164], + [-131.886027791999965, 56.737054749], + [-131.880705118999913, 56.728838196000154], + [-131.864788777999905, 56.713490296000018], + [-131.838976400999798, 56.682277731000013], + [-131.830423950999943, 56.664759420000152], + [-131.826574055999913, 56.644605610999989], + [-131.832103434999908, 56.603367818000081], + [-131.825592203999946, 56.593342591000138], + [-131.799108032999953, 56.587658183000102], + [-131.692292846999919, 56.58507436100011], + [-131.585891072999914, 56.595047913000101], + [-131.560362914999985, 56.594066061000049], + [-131.536436727999899, 56.585229391000141], + [-131.491659098999918, 56.560166321000125], + [-131.345699015999969, 56.503270569000065], + [-131.215603597999916, 56.452550151000096], + [-131.100546020999957, 56.407669169000101], + [-131.016933553999934, 56.387050273000099], + [-130.839089111999897, 56.372451681000129], + [-130.760334229999899, 56.345192363000123], + [-130.645767579, 56.261941631000113], + [-130.602256022999967, 56.247058818000156], + [-130.495518351999863, 56.232434388000101], + [-130.472289795999956, 56.224889628000042], + [-130.458052938999884, 56.21065277100017], + [-130.4279255779999, 56.143964335000149], + [-130.418158732999927, 56.129701640000079], + [-130.403973551999798, 56.121898499000153], + [-130.290311239999909, 56.100969544000165], + [-130.243156495, 56.092391256000141], + [-130.211246297999935, 56.089962464000067], + [-130.116755941999941, 56.105646261000132], + [-130.094328369999857, 56.10148630800002], + [-130.07153906299996, 56.08412302699999], + [-130.039318807999905, 56.045520732000014], + [-130.026632242999966, 56.024100851000085], + [-130.0190099699999, 56.002215882000044], + [-130.014694987999917, 55.963251852000056], + [-130.016787882999893, 55.918913473000103], + [-130.019611704999932, 55.907977949000085], + [-130.019618444449407, 55.90795184963342], + [-130.022816535999908, 55.901353257000139], + [-130.049387173999946, 55.87140534100017], + [-130.104725714999944, 55.825262762000065], + [-130.136626756999959, 55.806463934000092], + [-130.148833787999934, 55.795355536000059], + [-130.163482225999928, 55.771144924000069], + [-130.16730709499987, 55.766262111000103], + [-130.170806443999936, 55.759833075000088], + [-130.173654751999891, 55.749497788999989], + [-130.170806443999936, 55.740952867000075], + [-130.163807745999861, 55.73456452000012], + [-130.160064256999931, 55.727118231000148], + [-130.167388475999928, 55.715399481000176], + [-130.155913865999906, 55.700140692], + [-130.142893032999922, 55.689520575000145], + [-130.13182532499988, 55.676581122000144], + [-130.126454230999911, 55.653998114000089], + [-130.128570115999935, 55.636419989000146], + [-130.135121222999913, 55.619126695000048], + [-130.153146938999839, 55.585109768000123], + [-130.148671027999882, 55.578192450000031], + [-130.146880662999877, 55.569322007000082], + [-130.14696204299986, 55.547186591000113], + [-130.112172003999945, 55.509344794000143], + [-130.101673956999946, 55.481146552], + [-130.09508216099988, 55.472113348000065], + [-130.065419074999937, 55.446112372000087], + [-130.057525193999965, 55.43488190300009], + [-130.052561001999919, 55.414007880000113], + [-130.054310675999915, 55.366644598000093], + [-130.050119594999899, 55.345445054], + [-130.03929602799991, 55.330755927], + [-129.98924719999988, 55.284002997000115], + [-130.031239386999857, 55.264349677000055], + [-130.050038214999915, 55.252875067000033], + [-130.067494269999941, 55.238999742000132], + [-130.078236456999974, 55.23379140800013], + [-130.100493943999936, 55.230292059000035], + [-130.104725714999944, 55.225653387000122], + [-130.10570227799991, 55.211127020000063], + [-130.109120245999918, 55.200751044000171], + [-130.115793423999975, 55.19159577], + [-130.126454230999911, 55.180975653000147], + [-130.151966925999915, 55.163275458000143], + [-130.159982876999862, 55.153713283000158], + [-130.167591925999886, 55.129584052000141], + [-130.173695441999882, 55.117743231000176], + [-130.200266079999835, 55.104152736000131], + [-130.211781378999973, 55.084133205000157], + [-130.228871222999913, 55.043850002000099], + [-130.238677537999934, 55.034409898000078], + [-130.261341925999886, 55.022894598000121], + [-130.269846157999837, 55.016546942], + [-130.275705532999893, 55.006984768000038], + [-130.286366339999915, 54.983221747000115], + [-130.294341600999957, 54.971869208000143], + [-130.326568162999905, 54.952093817000119], + [-130.335560675999943, 54.938706773000106], + [-130.365386522999927, 54.907294012000179], + [-130.385243292999917, 54.896551825000174], + [-130.430816209999875, 54.881252346000011], + [-130.48875891799986, 54.844183661], + [-130.58031165299991, 54.806382554000137], + [-130.604603644999941, 54.802150783000016], + [-130.602528449999937, 54.814520575000145], + [-130.568430141999841, 54.841498114000117], + [-130.560943162999962, 54.851385809000035], + [-130.567209438999924, 54.854396877000127], + [-130.578277147999955, 54.853583075000117], + [-130.585113084999875, 54.851996161000088], + [-130.606516079999921, 54.83860911699999], + [-130.671457485999895, 54.772040106000091], + [-130.680775519999941, 54.765448309000121], + [-130.691273566999911, 54.762640692000062], + [-130.703724738999938, 54.765448309000121], + [-130.718413865999935, 54.773016669000143], + [-130.728871222999913, 54.784125067], + [-130.728505011999914, 54.797430731000119], + [-130.713286912999934, 54.803778387000037], + [-130.690785285999937, 54.806789455000128], + [-130.677845831999917, 54.814520575000145], + [-130.691273566999911, 54.834947007000139], + [-130.705148891999897, 54.850490627000127], + [-130.715809699999909, 54.868231512000037], + [-130.723540818999936, 54.887396552], + [-130.728505011999914, 54.907294012000179], + [-130.728830532999922, 54.917181708], + [-130.726877407999893, 54.93878815300009], + [-130.728505011999914, 54.948187567000119], + [-130.73412024599989, 54.956732489000146], + [-130.743560350999928, 54.966294664000131], + [-130.752512173999946, 54.969387111000017], + [-130.756459113999938, 54.957831122000087], + [-130.754383917999917, 54.892767645000148], + [-130.750233527999853, 54.872503973000121], + [-130.738758917999917, 54.853949286000116], + [-130.734038865999906, 54.843085028000147], + [-130.735951300999943, 54.831529039000131], + [-130.745187954999835, 54.821722723000093], + [-130.75609290299991, 54.819525458], + [-130.767201300999943, 54.823391018], + [-130.776926235999895, 54.831529039000131], + [-130.788889126999919, 54.803941148000106], + [-130.806630011999914, 54.778753973000121], + [-130.831898566999939, 54.765366929000137], + [-130.866322394999884, 54.773179429000109], + [-130.918324347999942, 54.802923895000148], + [-130.934234178999873, 54.824448960000055], + [-130.927805141999869, 54.851996161000088], + [-130.931996222999885, 54.85342031500015], + [-130.942005988999881, 54.858872789000017], + [-130.933420376999891, 54.880194403000147], + [-130.941761847999942, 54.895331122000144], + [-130.955189581999946, 54.90936920800003], + [-130.96190344999988, 54.927720445000077], + [-130.941232876999862, 54.925360419000114], + [-130.932687954999835, 54.94017161699999], + [-130.93968665299991, 54.958929755000142], + [-130.965321417999888, 54.968085028000118], + [-130.974029100999871, 54.981756903000147], + [-130.982248501999891, 54.991115627000099], + [-130.992909308999913, 54.99542877800009], + [-131.009388800999886, 54.99827708500014], + [-131.009673631999931, 55.005357164000017], + [-130.996652798999946, 55.023382880000113], + [-130.986968553999873, 55.043524481000148], + [-130.971018032999893, 55.061224677000055], + [-130.949696417999917, 55.073797919000143], + [-130.901234503999916, 55.083441473000121], + [-130.85415605399993, 55.103094794000171], + [-130.832142706999889, 55.105292059000149], + [-130.821156378999945, 55.100246486000131], + [-130.817372199999909, 55.092352606000148], + [-130.815663214999915, 55.08421458500014], + [-130.811105923999975, 55.078599351000051], + [-130.799549933999941, 55.076849677000055], + [-130.763335740999935, 55.078680731000034], + [-130.753325975999928, 55.081976630000057], + [-130.744211391999869, 55.083156643000095], + [-130.731516079999892, 55.079820054000052], + [-130.720326300999972, 55.08100006700009], + [-130.712473110999895, 55.106634833000058], + [-130.705067511999914, 55.118841864000117], + [-130.687570766999869, 55.140082098000036], + [-130.648833787999934, 55.172512111000017], + [-130.566029425999886, 55.223334052000055], + [-130.473459438999896, 55.310126044000143], + [-130.461577928999958, 55.331854559000035], + [-130.480132615999963, 55.330755927], + [-130.492502407999893, 55.323472398000078], + [-130.502308722999942, 55.315252997000172], + [-130.523548956999917, 55.307359117000104], + [-130.552561001999891, 55.287746486000131], + [-130.561268683999913, 55.280259507000082], + [-130.594146287999877, 55.225653387000122], + [-130.615467902999853, 55.199530341000141], + [-130.668446417999888, 55.18040599199999], + [-130.694203253999945, 55.161200262000037], + [-130.759917772999927, 55.09699127800009], + [-130.774281378999888, 55.092515367000132], + [-130.791167772999898, 55.099066473], + [-130.79751542899993, 55.108465887000037], + [-130.805409308999913, 55.136297919000086], + [-130.811105923999975, 55.146877346000124], + [-130.842762824999852, 55.137274481000148], + [-130.852040167999917, 55.133205471000011], + [-130.883168097999885, 55.108954169000029], + [-130.890207485999895, 55.105292059000149], + [-130.970814581999917, 55.085435289000074], + [-130.996652798999946, 55.085394598000065], + [-131.015736456999917, 55.093573309000178], + [-131.038238084999932, 55.108384507000054], + [-131.057036912999962, 55.126288153000118], + [-131.064930792999917, 55.143459377000127], + [-131.065297003999945, 55.186224677000141], + [-131.057606574999909, 55.19867584800015], + [-131.001942511999914, 55.240139065000065], + [-130.979807094999927, 55.251369533000158], + [-130.958485480999855, 55.256089585000083], + [-130.956776495999861, 55.260484117000047], + [-130.938303188999839, 55.287095445], + [-130.924712693999879, 55.294012762000094], + [-130.910227016999841, 55.294989325000145], + [-130.879994269999941, 55.29026927300005], + [-130.632150844999899, 55.291001695], + [-130.622181769999884, 55.2931175800001], + [-130.612456834999932, 55.297064520000092], + [-130.656809048999975, 55.315741278000147], + [-130.669422980999855, 55.328517971000011], + [-130.646595831999946, 55.338609117000075], + [-130.65640214799987, 55.352280992000104], + [-130.670399542999917, 55.349920966000141], + [-130.712391730999911, 55.320868231000176], + [-130.726307745999918, 55.31464264500012], + [-130.833851691999911, 55.304388739], + [-130.861887173999918, 55.312160549000097], + [-130.873158331999917, 55.342027085000083], + [-130.886789516999869, 55.451605536000116], + [-130.873524542999917, 55.534125067000119], + [-130.866322394999884, 55.550279038999989], + [-130.873158331999917, 55.622951565000065], + [-130.878529425999972, 55.636379299000154], + [-130.902170376999891, 55.665716864000061], + [-130.907297329999921, 55.68187083500014], + [-130.904042120999861, 55.690252997000087], + [-130.890207485999895, 55.700384833000143], + [-130.886789516999869, 55.708563544000143], + [-130.889881964999944, 55.715277411], + [-130.904042120999861, 55.72748444200009], + [-130.91466223899991, 55.746893622000087], + [-130.949940558999941, 55.771144924000069], + [-130.96190344999988, 55.783026434000121], + [-130.928130662999877, 55.800238348000121], + [-130.920399542999888, 55.810451565000065], + [-130.934559699999909, 55.818426825000031], + [-130.940663214999915, 55.816799221000011], + [-130.968739386999914, 55.804754950000088], + [-130.983469204999892, 55.805650132], + [-130.996408657999893, 55.810532945000048], + [-131.006703253999916, 55.815863348000121], + [-131.013417120999947, 55.818426825000031], + [-131.022368943999879, 55.826727606000119], + [-131.061512824999909, 55.876776434000035], + [-131.077626105999911, 55.888495184000121], + [-131.133859829999892, 55.920843817000119], + [-131.131418423999946, 55.924546617000075], + [-131.126372850999928, 55.934515692000062], + [-131.146311001999891, 55.934800523000021], + [-131.165191209999932, 55.940578518000066], + [-131.176828579999835, 55.95197174700003], + [-131.174794074999909, 55.969305731000119], + [-131.196400519999912, 55.971421617000132], + [-131.184925910999965, 55.986721096000096], + [-131.140044725999928, 56.017035223000065], + [-131.044422980999883, 56.058050848000065], + [-131.052845831999946, 56.057318427000141], + [-131.07860266799986, 56.058050848000065], + [-131.068023240999935, 56.071926174000069], + [-131.009673631999931, 56.112616278000147], + [-131.063303188999896, 56.095933335000112], + [-131.085682745999918, 56.086167710000083], + [-131.106516079999892, 56.071682033000016], + [-131.124989386999914, 56.050441799000126], + [-131.136097785999965, 56.041327216000141], + [-131.165516730999855, 56.033270575000117], + [-131.192250128999945, 56.014553127000127], + [-131.290272589999887, 55.988348700000117], + [-131.303334113999938, 55.98167552300005], + [-131.314768032999922, 55.972642320000048], + [-131.341867641999841, 55.960923570000048], + [-131.371205206999946, 55.968573309000178], + [-131.397287563999924, 55.987616278000175], + [-131.414377407999865, 56.010199286000145], + [-131.433094855999911, 55.997544663999989], + [-131.458973761999943, 55.984686591000141], + [-131.483021613999966, 55.979437567000062], + [-131.49632727799991, 55.989732163999989], + [-131.564116990999906, 55.947007554000081], + [-131.589426235999866, 55.941351630000085], + [-131.618723110999895, 55.942694403000175], + [-131.627308722999885, 55.941351630000085], + [-131.63149980399993, 55.938299872000087], + [-131.634592251999891, 55.933986721000096], + [-131.638172980999883, 55.929999091000113], + [-131.655344204999892, 55.924994208000058], + [-131.680409308999913, 55.910467841000028], + [-131.70335852799991, 55.90436432500006], + [-131.725412563999896, 55.891099351000108], + [-131.735910610999866, 55.886704820000134], + [-131.753732876999834, 55.885077216000113], + [-131.786122199999937, 55.887396552000084], + [-131.804798956999917, 55.886704820000134], + [-131.817372199999909, 55.883002020000092], + [-131.841460740999935, 55.870306708000115], + [-131.853179490999935, 55.86627838700015], + [-131.869374152999853, 55.865383205000157], + [-131.885365363999966, 55.86627838700015], + [-131.900624152999939, 55.86546458500014], + [-131.914662238999881, 55.859442450000031], + [-131.893299933999913, 55.855373440000093], + [-131.825306769999941, 55.831488348], + [-131.777943488999938, 55.825384833000115], + [-131.76585852799991, 55.816880601], + [-131.763824022999898, 55.797349351000108], + [-131.774240688999896, 55.77049388200011], + [-131.782785610999895, 55.753892320000077], + [-131.790516730999911, 55.742743231000063], + [-131.808420376999891, 55.72947825700011], + [-131.825266079999892, 55.725490627000127], + [-131.866851365999935, 55.729071356000119], + [-131.832102016999897, 55.696966864000146], + [-131.827707485999895, 55.667873440000065], + [-131.847971157999922, 55.641913153000175], + [-131.88731848899991, 55.619208075000031], + [-131.884632941999939, 55.613674221000011], + [-131.882435675999943, 55.604193427000112], + [-131.880523240999878, 55.598700262000179], + [-132.004017706999889, 55.667629299000126], + [-131.994740363999938, 55.657049872000172], + [-131.968495245999918, 55.633490302000112], + [-131.963042772999898, 55.622951565000065], + [-131.953480597999885, 55.611517645000035], + [-131.936268683999884, 55.598089911000116], + [-131.928944464999887, 55.58930084800015], + [-131.948801235999895, 55.591945705000128], + [-131.948801235999895, 55.585109768000123], + [-131.934641079999864, 55.576971747000115], + [-131.926014777999853, 55.563625393], + [-131.923695441999882, 55.547267971000096], + [-131.928334113999938, 55.530462958000086], + [-131.934071417999917, 55.526597398000078], + [-131.943267381999959, 55.523382880000113], + [-131.951893683999856, 55.517564195000048], + [-131.955637173999889, 55.506252346000068], + [-131.96141516799986, 55.501044012000179], + [-131.974436001999862, 55.504828192], + [-131.996571417999917, 55.516791083000143], + [-132.134632941999968, 55.565171617000047], + [-132.171620245999918, 55.588527736000131], + [-132.185292120999947, 55.615627346000068], + [-132.211903449999909, 55.698065497000087], + [-132.226551886999914, 55.715399481000176], + [-132.244455532999865, 55.722967841000028], + [-132.261545376999891, 55.739650783000158], + [-132.266184048999946, 55.756293036000031], + [-132.24673417899993, 55.763861395000063], + [-132.227365688999924, 55.757757880000085], + [-132.188710089999859, 55.730292059000035], + [-132.167876756999874, 55.722845770000148], + [-132.177357550999886, 55.751776434000149], + [-132.182199673999946, 55.776841539000046], + [-132.176869269999912, 55.794867255000085], + [-132.168853318999936, 55.802313544000143], + [-132.140614386999914, 55.804754950000088], + [-132.073597785999908, 55.802801825000145], + [-132.058664516999869, 55.804754950000088], + [-132.046213344999842, 55.817287502000099], + [-132.053944464999944, 55.828314520000148], + [-132.086008266999926, 55.845770575000088], + [-132.070179816999882, 55.862860419000143], + [-132.049631313999839, 55.878363348000065], + [-132.036040818999879, 55.893784898], + [-132.041330532999893, 55.910956122000115], + [-132.056304490999906, 55.930365302000112], + [-132.056874152999882, 55.944525458000143], + [-132.04360917899993, 55.954657294000114], + [-132.017079230999883, 55.961859442000119], + [-131.968373175999943, 55.958685614000061], + [-131.955637173999889, 55.961859442000119], + [-131.949818488999938, 55.972113348000065], + [-131.953724738999938, 55.992824611000074], + [-131.945057745999947, 55.996568101000108], + [-131.943511522999927, 56.006903387000122], + [-131.963042772999898, 56.071682033000016], + [-131.963042772999898, 56.157375393000095], + [-131.950306769999941, 56.166693427000141], + [-131.888742641999897, 56.183823960000083], + [-131.813791469999927, 56.195990302000055], + [-131.698394334999932, 56.196234442], + [-131.599029100999928, 56.178656317000062], + [-131.579497850999928, 56.179103908000158], + [-131.558420376999834, 56.188381252000013], + [-131.529286261999857, 56.214016018000095], + [-131.513417120999947, 56.222072658000016], + [-131.489491339999887, 56.222479559000121], + [-131.513335740999963, 56.229315497000059], + [-131.537831183999913, 56.225409247000144], + [-131.586333787999962, 56.208889065000065], + [-131.613840298999889, 56.205145575000031], + [-131.637928839999915, 56.206366278000147], + [-131.688710089999887, 56.216294664000046], + [-131.876820441999939, 56.223089911000088], + [-131.907826300999943, 56.232733466000141], + [-131.959339972999942, 56.294501044000143], + [-131.965240037999877, 56.310777085], + [-131.971302863999966, 56.35643138200011], + [-131.980132615999935, 56.365912177000112], + [-132.00609290299991, 56.367254950000117], + [-132.060658331999889, 56.381008205000128], + [-132.077015753999916, 56.381903387000037], + [-132.089019334999932, 56.376776434000121], + [-132.105091925999915, 56.373724677000112], + [-132.143788214999859, 56.388739325000145], + [-132.154896613999881, 56.380194403000033], + [-132.161040818999965, 56.380194403000033], + [-132.185292120999947, 56.428697007], + [-132.188384568999936, 56.451849677000141], + [-132.203277147999898, 56.471258856000148], + [-132.236154751999891, 56.483099677000112], + [-132.284006313999896, 56.493475653000118], + [-132.289418097999942, 56.498480536000145], + [-132.337147589999915, 56.523749091000113], + [-132.344878709999932, 56.528998114000089], + [-132.349720831999889, 56.536932684000149], + [-132.352894660999965, 56.552069403000147], + [-132.350209113999881, 56.579413153000118], + [-132.337798631999959, 56.60179271000014], + [-132.305043097999942, 56.640204169000143], + [-132.329823370999918, 56.639146226], + [-132.371693488999938, 56.624212958000058], + [-132.447417772999898, 56.607163804], + [-132.476877407999893, 56.60447825700011], + [-132.520008917999917, 56.627671617000047], + [-132.540191209999932, 56.63149648600016], + [-132.550038214999944, 56.638983466000028], + [-132.538441535999937, 56.661322333000058], + [-132.521962042999945, 56.674953518], + [-132.503325975999957, 56.678371486000017], + [-132.456532355999883, 56.674994208], + [-132.468739386999857, 56.691880601], + [-132.487294074999852, 56.698675848000121], + [-132.509022589999915, 56.702093817000119], + [-132.530995245999947, 56.708563544000029], + [-132.47948157499988, 56.742824611000103], + [-132.462717251999862, 56.756903387000037], + [-132.462635870999861, 56.76483795800003], + [-132.414906378999916, 56.784857489000089], + [-132.412220831999946, 56.792303778000147], + [-132.413807745999861, 56.801255601], + [-132.412464972999885, 56.808905341000113], + [-132.400949673999946, 56.812201239000146], + [-132.379302537999934, 56.812323309000121], + [-132.369496222999942, 56.814113674000012], + [-132.359689907999893, 56.818426825000117], + [-132.378407355999855, 56.826483466000141], + [-132.398671027999882, 56.824896552000112], + [-132.418202277999853, 56.816839911000088], + [-132.434803839999915, 56.805365302000112], + [-132.432728644999884, 56.793524481000148], + [-132.452951626999919, 56.788031317000147], + [-132.477853969999842, 56.785101630000113], + [-132.490061001999834, 56.781154690000122], + [-132.497181769999969, 56.761297919000029], + [-132.514800584999904, 56.755438544000086], + [-132.537098761999943, 56.758124091000141], + [-132.673207160999937, 56.802801825000031], + [-132.761382615999935, 56.845770575000174], + [-132.774647589999859, 56.856512762000094], + [-132.778228318999936, 56.862046617000104], + [-132.782622850999928, 56.875230210000055], + [-132.784820115999906, 56.879828192], + [-132.790923631999902, 56.885443427], + [-132.844715949999852, 56.913153387000179], + [-132.856556769999912, 56.914536851000079], + [-132.860422329999921, 56.91885000200007], + [-132.859527147999927, 56.937648830000015], + [-132.863677537999962, 56.941880601000136], + [-132.877919074999852, 56.946722723000036], + [-132.896555141999841, 56.958075262000179], + [-132.913197394999884, 56.971625067000147], + [-132.922027147999955, 56.982855536000059], + [-132.895497199999909, 56.989243882000082], + [-132.881581183999913, 56.991115627000127], + [-132.86742102799991, 56.989691473000065], + [-132.852121548999946, 56.974025783000101], + [-132.841053839999915, 56.967718817000062], + [-132.829579230999855, 56.972967841000141], + [-132.811756964999887, 56.974188544000143], + [-132.786203579999892, 56.967596747000087], + [-132.767689581999974, 56.969671942], + [-132.771229620999861, 56.997137762000065], + [-132.809803839999915, 57.05565013200011], + [-132.80874589799987, 57.065375067000062], + [-132.799549933999913, 57.06972890800013], + [-132.792836066999939, 57.079046942], + [-132.790842251999919, 57.088446356000119], + [-132.79539954299986, 57.092718817000119], + [-132.805531378999916, 57.090480861000131], + [-132.831166144999884, 57.078436591000028], + [-132.839466925999943, 57.072821356000034], + [-132.861073370999861, 57.036363023000078], + [-132.877674933999913, 57.021307684000149], + [-132.897816535999937, 57.027533270000035], + [-132.921620245999947, 57.042792059000178], + [-132.945708787999877, 57.046820380000057], + [-132.983509894999941, 57.044907945], + [-132.993804490999935, 57.047756252000127], + [-133.0423884759999, 57.069240627000156], + [-133.066477016999926, 57.076727606000034], + [-133.079701300999943, 57.082749742000132], + [-133.093006964999887, 57.086493231000148], + [-133.112619594999842, 57.088324286000145], + [-133.131906704999892, 57.087388414000074], + [-133.144195115999935, 57.082749742000132], + [-133.149769660999937, 57.081488348000121], + [-133.157866990999878, 57.08295319200009], + [-133.165191209999875, 57.086004950000174], + [-133.168446417999917, 57.089585679000052], + [-133.166330532999922, 57.096828518000066], + [-133.161691860999895, 57.101874091000113], + [-133.154774542999917, 57.106390692000062], + [-133.150502081999974, 57.116115627000013], + [-133.144602016999841, 57.122503973000121], + [-133.141997850999928, 57.129584052], + [-133.147938605999883, 57.141099351000136], + [-133.121083136999914, 57.144273179], + [-133.136301235999895, 57.161078192], + [-133.167551235999838, 57.169623114000117], + [-133.1888728509999, 57.147935289000046], + [-133.175282355999855, 57.147935289000046], + [-133.175282355999855, 57.141099351000136], + [-133.211496548999946, 57.141994533000044], + [-133.220366990999935, 57.147650458000115], + [-133.209380662999934, 57.161037502000013], + [-133.216623501999891, 57.170965887000122], + [-133.225941535999937, 57.174994208], + [-133.235707160999965, 57.173814195000077], + [-133.244130011999914, 57.168443101000108], + [-133.25035559799997, 57.133693752000127], + [-133.266468878999945, 57.113185940000093], + [-133.290109829999892, 57.101996161000088], + [-133.317005988999938, 57.102484442000062], + [-133.363596157999893, 57.128363348000093], + [-133.42357337099989, 57.145331122000144], + [-133.445912238999938, 57.147935289000046], + [-133.453033006999874, 57.151109117000104], + [-133.476144985999923, 57.165228583000143], + [-133.486887173999946, 57.168443101000108], + [-133.520578579999835, 57.172308661000031], + [-133.538156704999892, 57.176459052000055], + [-133.551991339999859, 57.181463934000092], + [-133.551991339999859, 57.188299872000115], + [-133.530018683999856, 57.19135163], + [-133.504750128999888, 57.203436591000113], + [-133.488636847999942, 57.220892645000063], + [-133.494007941999882, 57.239813544000086], + [-133.505116339999915, 57.25120677300005], + [-133.502674933999884, 57.253729559000149], + [-133.495025193999936, 57.256170966000113], + [-133.49058997299997, 57.26776764500012], + [-133.485096808999856, 57.277004299000069], + [-133.471913214999915, 57.281887111000131], + [-133.442209438999896, 57.284491278000147], + [-133.254790818999936, 57.281073309000035], + [-133.18211829299986, 57.305609442000062], + [-133.176096157999865, 57.30878327000012], + [-133.169545050999972, 57.315904038999989], + [-133.162220831999946, 57.319281317], + [-133.107289191999882, 57.319281317], + [-133.086293097999942, 57.322495835000055], + [-133.058420376999891, 57.331854559000178], + [-133.037668423999889, 57.346828518000123], + [-133.038075324999909, 57.367092190000122], + [-133.051096157999893, 57.366278387000122], + [-133.099273240999935, 57.339300848000065], + [-133.120676235999895, 57.33234284100017], + [-133.178700324999852, 57.33234284100017], + [-133.190337693999965, 57.330471096000011], + [-133.21157792899993, 57.321926174000097], + [-133.223703579999835, 57.319281317], + [-133.241118943999908, 57.32037995000006], + [-133.27196204299986, 57.330023505000113], + [-133.288238084999904, 57.33234284100017], + [-133.391468878999916, 57.335150458000115], + [-133.419504360999838, 57.343939520000092], + [-133.442128058999913, 57.358954169000114], + [-133.456450975999871, 57.380764065000065], + [-133.420806443999936, 57.394842841000113], + [-133.402902798999946, 57.399400132000054], + [-133.356678839999859, 57.40228913], + [-133.344797329999921, 57.405422268000066], + [-133.339751756999874, 57.411769924000097], + [-133.335519985999866, 57.42877838700015], + [-133.335926886999857, 57.438177802000084], + [-133.3431697259999, 57.442206122000144], + [-133.35179602799991, 57.440008856000148], + [-133.368519660999937, 57.43065013200011], + [-133.378244594999899, 57.428534247000115], + [-133.403920050999943, 57.433172919000057], + [-133.414458787999905, 57.432806708000115], + [-133.425404425999943, 57.42511627800009], + [-133.437408006999874, 57.423529364000061], + [-133.454213019999884, 57.431789455000157], + [-133.470285610999895, 57.443589585000112], + [-133.500396287999905, 57.476019598000121], + [-133.50454667899993, 57.486802476000136], + [-133.50487219999988, 57.503607489000146], + [-133.49742591099988, 57.53156159100017], + [-133.492543097999942, 57.538641669000029], + [-133.476918097999942, 57.552069403000033], + [-133.439035610999895, 57.569484768000095], + [-133.348866339999887, 57.575913804000109], + [-133.313099738999938, 57.592962958000058], + [-133.333851691999939, 57.596014716000141], + [-133.416127081999917, 57.595282294000029], + [-133.439076300999886, 57.589544989000146], + [-133.460845506999959, 57.579901434000178], + [-133.532948370999861, 57.572455145], + [-133.591420050999943, 57.574611721000011], + [-133.605091925999972, 57.579291083000115], + [-133.648548956999917, 57.617132880000057], + [-133.658802863999938, 57.620917059000092], + [-133.658070441999939, 57.632757880000057], + [-133.64663652299987, 57.687201239000146], + [-133.648264126999891, 57.702826239000117], + [-133.635731574999909, 57.708156643], + [-133.622141079999835, 57.71002838700015], + [-133.593006964999887, 57.709662177000055], + [-133.585519985999895, 57.710923570000077], + [-133.572865363999938, 57.716050523000078], + [-133.566314256999931, 57.716498114000061], + [-133.560414191999939, 57.713853257], + [-133.548329230999911, 57.704779364000089], + [-133.532704230999911, 57.700018622000087], + [-133.522816535999937, 57.693182684000149], + [-133.507964647999955, 57.678941148000078], + [-133.494984503999945, 57.672064520000148], + [-133.442209438999896, 57.668117580000072], + [-133.210438605999911, 57.588934637000094], + [-133.168446417999917, 57.579291083000115], + [-133.158599412999905, 57.573146877000127], + [-133.137928839999915, 57.555609442], + [-133.130930141999897, 57.552069403000033], + [-133.111398891999841, 57.544989325000145], + [-133.069488084999932, 57.512681382000139], + [-133.045521613999881, 57.503607489000146], + [-133.034291144999969, 57.504136460000112], + [-133.020334438999896, 57.507066148000135], + [-133.008534308999941, 57.511867580000128], + [-133.003977016999897, 57.517889716000028], + [-133.012115037999905, 57.521226304000052], + [-133.081857876999891, 57.53733958500014], + [-133.099598761999857, 57.550970770000092], + [-133.127512173999889, 57.579291083000115], + [-133.155425584999932, 57.5997582050001], + [-133.164784308999884, 57.612534898000135], + [-133.162220831999946, 57.627142645000148], + [-133.182728644999941, 57.623765367000132], + [-133.21226966099988, 57.627142645000148], + [-133.238880988999938, 57.63662344000015], + [-133.25035559799997, 57.651678778000175], + [-133.360259568999936, 57.682359117000075], + [-133.397694464999887, 57.709418036000031], + [-133.417591925999972, 57.719387111000103], + [-133.468983527999882, 57.727443752000127], + [-133.499989386999914, 57.737616278000175], + [-133.528920050999915, 57.750921942], + [-133.545806443999908, 57.764308986000017], + [-133.552316860999895, 57.792303778000033], + [-133.558176235999838, 57.889634507000025], + [-133.551991339999859, 57.915106512000094], + [-133.53929602799991, 57.917425848000065], + [-133.49058997299997, 57.908270575000088], + [-133.429107225999928, 57.908270575000088], + [-133.398548956999974, 57.903957424000097], + [-133.343129035999908, 57.884751695000134], + [-133.313099738999938, 57.880316473000065], + [-133.304514126999834, 57.881781317000119], + [-133.288441535999937, 57.887396552000112], + [-133.278309699999909, 57.887844143000038], + [-133.267567511999914, 57.885077216000141], + [-133.24429277299987, 57.876125393000123], + [-133.142486131999931, 57.854722398], + [-133.124094204999892, 57.857123114000117], + [-133.132232225999928, 57.865220445000048], + [-133.185699022999927, 57.889553127000042], + [-133.206288214999859, 57.894680080000128], + [-133.554310675999943, 57.929429429], + [-133.572865363999938, 57.92405833500014], + [-133.584584113999938, 57.910834052], + [-133.593006964999887, 57.887844143000038], + [-133.591297980999883, 57.881537177000084], + [-133.589833136999914, 57.867580471000011], + [-133.592640753999945, 57.857896226000051], + [-133.603871222999942, 57.86420319200009], + [-133.610747850999871, 57.87010325700011], + [-133.626088019999941, 57.879868882000054], + [-133.634592251999862, 57.887844143000038], + [-133.640126105999883, 57.867905992000132], + [-133.625965949999852, 57.828680731000119], + [-133.634592251999862, 57.805243231000034], + [-133.661366339999859, 57.786444403000175], + [-133.686350063999896, 57.790716864], + [-133.708566860999838, 57.808294989000117], + [-133.742258266999841, 57.845038153000033], + [-133.803089972999942, 57.898504950000145], + [-133.808420376999834, 57.904974677000055], + [-133.811634894999884, 57.91303131700009], + [-133.81273352799991, 57.925034898000106], + [-133.819081183999856, 57.932806708000115], + [-133.861154751999919, 57.956732489000089], + [-133.809803839999915, 57.985337632000054], + [-133.792225714999887, 57.990220445000134], + [-133.774891730999911, 57.988836981000063], + [-133.764068162999877, 57.980698960000112], + [-133.753732876999891, 57.968939520000148], + [-133.737619594999899, 57.956732489000089], + [-133.718129035999937, 57.946356512000179], + [-133.701812303999901, 57.940008856000063], + [-133.691395636999914, 57.942043361000074], + [-133.689198370999918, 57.956732489000089], + [-133.697580532999893, 57.989976304], + [-133.692046678999958, 58.001939195000105], + [-133.669341600999928, 58.011379299000126], + [-133.669341600999928, 58.017523505000028], + [-133.731841600999928, 58.019517320000048], + [-133.755482550999972, 58.030096747000087], + [-133.764963344999899, 58.062241929000052], + [-133.748646613999938, 58.078192450000145], + [-133.717600063999839, 58.09784577000012], + [-133.698231574999909, 58.115952867000132], + [-133.717152472999942, 58.127386786000088], + [-133.717152472999942, 58.134833075000145], + [-133.695179816999939, 58.139105536000059], + [-133.685047980999883, 58.142808335000112], + [-133.674916144999941, 58.147894598000121], + [-133.682362433999913, 58.155340887000122], + [-133.700266079999864, 58.148504950000088], + [-133.758127407999893, 58.134833075000145], + [-133.758127407999893, 58.127386786000088], + [-133.741688605999883, 58.119696356000148], + [-133.748646613999938, 58.106105861000017], + [-133.810129360999838, 58.044745184000092], + [-133.813343878999888, 58.028998114000146], + [-133.79906165299991, 58.011379299000126], + [-133.864369269999969, 57.986965236000074], + [-133.884673631999874, 57.984035549000154], + [-133.908680792999917, 57.983872789000017], + [-133.91844641799986, 57.985663153000175], + [-133.929432745999918, 57.990220445000134], + [-133.934071417999945, 57.993638414000131], + [-133.939076300999886, 58.000677802000027], + [-133.943023240999878, 58.003892320000077], + [-133.949574347999942, 58.006089585000055], + [-133.964955206999889, 58.009100653000147], + [-133.970366990999935, 58.011379299000126], + [-133.976226365999878, 58.020086981000119], + [-133.976470506999931, 58.028998114000146], + [-133.978016730999883, 58.035834052000084], + [-133.987416144999912, 58.038641669000029], + [-134.001291469999899, 58.039496161000116], + [-134.010853644999969, 58.042873440000122], + [-134.016428188999896, 58.049994208], + [-134.018177863999881, 58.062241929000052], + [-134.023426886999857, 58.071356512000065], + [-134.035633917999945, 58.072333075000031], + [-134.04946855399993, 58.070705471000011], + [-134.059722459999961, 58.072170315000065], + [-134.063832160999937, 58.079169012000037], + [-134.072824673999946, 58.113185940000065], + [-134.057443813999896, 58.111029364000061], + [-134.048451300999972, 58.113836981000119], + [-134.044789191999939, 58.119859117000132], + [-134.045480923999946, 58.127386786000088], + [-134.051421678999901, 58.134588934000121], + [-134.071888800999943, 58.146185614000117], + [-134.080230272999927, 58.155340887000122], + [-134.083485480999883, 58.163763739000061], + [-134.085926886999914, 58.174953518000066], + [-134.087066209999932, 58.186590887000179], + [-134.086415167999917, 58.196275132000139], + [-134.081613735999895, 58.208197333000086], + [-134.074818488999966, 58.214544989000032], + [-134.067128058999856, 58.220363674000069], + [-134.059722459999961, 58.230414130000142], + [-134.057036912999877, 58.239976304000109], + [-134.058013475999957, 58.247870184000092], + [-134.059885219999927, 58.255560614000117], + [-134.059722459999961, 58.264593817000119], + [-134.061268683999913, 58.268215236000103], + [-134.06493079299986, 58.273138739000146], + [-134.067697719999927, 58.278876044000029], + [-134.066558397999898, 58.285101630000085], + [-134.059396938999839, 58.288641669000143], + [-134.031849738999938, 58.285101630000085], + [-134.010365363999881, 58.29433828300013], + [-133.99083411399991, 58.305568752000127], + [-133.982411261999857, 58.315619208000115], + [-133.982533331999946, 58.320868231000091], + [-133.986724412999962, 58.325344143000066], + [-133.99083411399991, 58.33283112200003], + [-134.005848761999943, 58.372381903000175], + [-134.009999152999882, 58.392238674000097], + [-134.004505988999938, 58.408596096000011], + [-133.996937628999888, 58.412420966000028], + [-133.972523566999939, 58.418036200000117], + [-133.962961391999869, 58.422186591000141], + [-133.951771613999938, 58.432766018], + [-133.949777798999918, 58.43964264500012], + [-133.951039191999939, 58.44635651200015], + [-133.949859178999901, 58.456366278000147], + [-133.920074022999898, 58.497544664000102], + [-133.8763728509999, 58.510443427000141], + [-133.771799282999893, 58.51845937700007], + [-133.771799282999893, 58.52464427300005], + [-133.887806769999941, 58.52464427300005], + [-133.933908657999893, 58.518947658000158], + [-133.95962480399993, 58.512640692000119], + [-133.976633266999897, 58.504828192000119], + [-133.982411261999857, 58.487616278000118], + [-133.974680141999841, 58.449896552000141], + [-133.987416144999912, 58.442694403000118], + [-134.010161912999934, 58.439764716000084], + [-134.050363735999838, 58.426092841000141], + [-134.072824673999946, 58.422186591000141], + [-134.072824673999946, 58.414780992000075], + [-134.051828579999892, 58.408392645000148], + [-134.04710852799991, 58.389593817], + [-134.052886522999955, 58.367254950000174], + [-134.063140428999873, 58.350246486000017], + [-134.080962693999936, 58.337713934000092], + [-134.125070766999841, 58.318670966000113], + [-134.141672329999892, 58.305568752000127], + [-134.14712480399993, 58.284979559000121], + [-134.131743943999908, 58.273138739000146], + [-134.11107337099989, 58.263128973000065], + [-134.100697394999884, 58.247788804000109], + [-134.104359503999945, 58.239488023000135], + [-134.112863735999895, 58.232082424000154], + [-134.144927537999934, 58.20990631700009], + [-134.157866990999935, 58.204291083000086], + [-134.172230597999942, 58.202337958000143], + [-134.190093553999901, 58.203111070000048], + [-134.241607225999871, 58.214300848000065], + [-134.441070115999935, 58.32151927300005], + [-134.46043860599994, 58.326605536000088], + [-134.471302863999938, 58.330877997000087], + [-134.489816860999838, 58.349676825000031], + [-134.497954881999931, 58.353949286000145], + [-134.55321204299986, 58.353949286000145], + [-134.569162563999896, 58.356146552000141], + [-134.597320115999935, 58.365464585], + [-134.611236131999931, 58.367621161000088], + [-134.62173417899993, 58.363959052000141], + [-134.625843878999945, 58.356634833000115], + [-134.630197719999842, 58.351467190000122], + [-134.641346808999856, 58.353949286000145], + [-134.644886847999942, 58.36229075700011], + [-134.647694464999915, 58.376044012000037], + [-134.654449022999927, 58.386419989000117], + [-134.669911261999857, 58.384711005000113], + [-134.68455969999988, 58.379339911000088], + [-134.718861456999946, 58.37425364800005], + [-134.734771287999934, 58.373765367000075], + [-134.756174282999893, 58.381537177000055], + [-134.767323370999918, 58.400336005000113], + [-134.771595831999946, 58.42401764500012], + [-134.774566209999932, 58.475897528000033], + [-134.782866990999935, 58.493068752000156], + [-134.799549933999856, 58.50299713700015], + [-134.826975063999896, 58.510972398000106], + [-134.826975063999896, 58.51845937700007], + [-134.822661912999905, 58.519476630000142], + [-134.819976365999935, 58.520941473], + [-134.817534959999904, 58.522691148000021], + [-134.813872850999928, 58.52464427300005], + [-134.847238735999923, 58.535223700000088], + [-134.874989386999914, 58.553127346000153], + [-134.897572394999969, 58.575669664000046], + [-134.934966600999928, 58.623277085000112], + [-134.975656704999892, 58.658921617000075], + [-134.991444464999944, 58.682928778000118], + [-134.960764126999862, 58.667547919000171], + [-134.945139126999891, 58.66331614800005], + [-134.930002407999893, 58.669256903000175], + [-134.926828579999892, 58.664862372000087], + [-134.920643683999913, 58.660345770000148], + [-134.915679490999878, 58.655585028000061], + [-134.920765753999888, 58.678290106000091], + [-134.932728644999941, 58.697943427000141], + [-134.940541144999941, 58.716131903000033], + [-134.925852016999926, 58.754950262000065], + [-134.933990037999934, 58.777411200000145], + [-134.946115688999839, 58.79975006700009], + [-134.950428839999944, 58.820054429], + [-134.962025519999941, 58.814927476000079], + [-134.974436001999891, 58.812445380000142], + [-134.986683722999942, 58.81370677300005], + [-134.99819902299987, 58.820054429], + [-135.005482550999886, 58.807766018000123], + [-135.02603105399993, 58.79315827], + [-135.032378709999875, 58.785345770000035], + [-135.030100063999896, 58.776068427000055], + [-135.022572394999941, 58.768744208000058], + [-135.019886847999942, 58.761053778000033], + [-135.032378709999875, 58.751166083000115], + [-135.028309699999909, 58.744370835], + [-135.025542772999955, 58.737534898], + [-135.0521541009999, 58.752386786000145], + [-135.104644334999932, 58.809515692000119], + [-135.143625454999835, 58.833889065000093], + [-135.149037238999966, 58.843695380000113], + [-135.145985480999883, 58.857123114], + [-135.128570115999935, 58.895209052], + [-135.145659959999961, 58.906439520000092], + [-135.156117316999939, 58.922796942], + [-135.161284959999932, 58.943304755000057], + [-135.16270911399991, 58.967230536000116], + [-135.166900193999936, 58.990790106000148], + [-135.177398240999935, 59.004624742000075], + [-135.190785285999937, 59.016058661000116], + [-135.203684048999946, 59.032375393000152], + [-135.206613735999866, 59.040594794000143], + [-135.21117102799991, 59.066555080000128], + [-135.222727016999926, 59.093898830000015], + [-135.224191860999895, 59.104681708000115], + [-135.229603644999941, 59.125881252000013], + [-135.272572394999884, 59.183172919000143], + [-135.300282355999883, 59.211574611000074], + [-135.334706183999913, 59.238918361000131], + [-135.361805792999917, 59.270819403000147], + [-135.367543097999913, 59.312933661000116], + [-135.339711066999939, 59.400824286000088], + [-135.331695115999906, 59.451564846000124], + [-135.348296678999958, 59.470607815000122], + [-135.359486456999974, 59.456976630000085], + [-135.389271613999881, 59.374945380000057], + [-135.401112433999941, 59.319891669000114], + [-135.414377407999893, 59.300604559000149], + [-135.436431443999965, 59.312933661000116], + [-135.46703040299991, 59.305731512000179], + [-135.527902798999889, 59.31972890800013], + [-135.553781704999892, 59.319769598000121], + [-135.53384355399993, 59.310003973], + [-135.482004360999923, 59.295111395000148], + [-135.460926886999914, 59.282171942000119], + [-135.430246548999889, 59.2521019550001], + [-135.427642381999902, 59.247992255000142], + [-135.426258917999917, 59.241603908000044], + [-135.422759568999936, 59.237860419000086], + [-135.415109829999892, 59.234076239000061], + [-135.398752407999893, 59.230861721000011], + [-135.383900519999941, 59.222967841000056], + [-135.359527147999955, 59.21377187700007], + [-135.354562954999921, 59.206773179], + [-135.351958787999934, 59.196682033000016], + [-135.334055141999869, 59.161444403000175], + [-135.336537238999881, 59.162787177000055], + [-135.33934485599994, 59.159165757000025], + [-135.341175910999908, 59.153509833000115], + [-135.340891079999892, 59.14842357], + [-135.336781378999945, 59.143988348000036], + [-135.317250128999945, 59.131415106000034], + [-135.310292120999861, 59.121975002000013], + [-135.306996222999942, 59.111070054000137], + [-135.306385870999861, 59.099269924000069], + [-135.307362433999941, 59.086981512000094], + [-135.319569464999915, 59.101548570000134], + [-135.360747850999871, 59.113755601000108], + [-135.378407355999911, 59.124212958], + [-135.386626756999902, 59.138820705000015], + [-135.391184048999833, 59.170111395000063], + [-135.395497199999937, 59.183172919000143], + [-135.423329230999911, 59.205064195], + [-135.470448370999918, 59.225490627000156], + [-135.519642706999917, 59.236517645], + [-135.553781704999892, 59.230414130000113], + [-135.538644985999895, 59.215277411000116], + [-135.48485266799986, 59.183172919000143], + [-135.473378058999913, 59.17072174700003], + [-135.452137824999937, 59.14154694200009], + [-135.436431443999965, 59.127997137000122], + [-135.401966925999943, 59.111639716000113], + [-135.384592251999891, 59.10089752800009], + [-135.374989386999886, 59.086981512000094], + [-135.377552863999881, 59.070013739000117], + [-135.385609503999945, 59.053168036000116], + [-135.388335740999906, 59.03782786699999], + [-135.374989386999886, 59.02558014500012], + [-135.384836391999897, 59.016058661000116], + [-135.387521938999896, 59.006293036000088], + [-135.383900519999941, 58.997544664000102], + [-135.374989386999886, 58.991400458000115], + [-135.386341925999943, 58.975165106000176], + [-135.385812954999892, 58.954331773000106], + [-135.377186652999882, 58.936346747000172], + [-135.364409959999932, 58.928697007000139], + [-135.328195766999897, 58.919745184000121], + [-135.320952928999901, 58.915716864000146], + [-135.320790167999917, 58.904689846000096], + [-135.333363410999937, 58.887193101000051], + [-135.330637173999861, 58.877834377000013], + [-135.295969204999892, 58.835150458], + [-135.231027798999889, 58.771673895000092], + [-135.242176886999914, 58.747870184000178], + [-135.240589972999885, 58.730169989000089], + [-135.22996985599994, 58.715236721000124], + [-135.168446417999888, 58.645738023000106], + [-135.16270911399991, 58.634507554000109], + [-135.18114173099994, 58.624497789000046], + [-135.208729620999861, 58.620510158000158], + [-135.226185675999943, 58.612290757000054], + [-135.21422278599988, 58.589789130000085], + [-135.168446417999888, 58.544501044000143], + [-135.152902798999975, 58.519761460000083], + [-135.145497199999909, 58.515366929], + [-135.142241990999935, 58.510972398000106], + [-135.141672329999892, 58.506333726], + [-135.143177863999938, 58.495550848000093], + [-135.142241990999935, 58.491115627000013], + [-135.136382615999906, 58.483587958000143], + [-135.111195441999939, 58.459784247000144], + [-135.099680141999897, 58.443793036000059], + [-135.05728105399993, 58.351548570000105], + [-135.053863084999904, 58.332668361000074], + [-135.052845831999946, 58.309271552], + [-135.056955532999893, 58.298773505000113], + [-135.066802537999905, 58.30097077], + [-135.079213019999941, 58.305609442000119], + [-135.090687628999973, 58.30215078300013], + [-135.093251105999911, 58.295233466000056], + [-135.093820766999869, 58.264593817000119], + [-135.092396613999881, 58.254461981000176], + [-135.09007727799991, 58.248846747000172], + [-135.089670376999919, 58.244208075000145], + [-135.093820766999869, 58.237250067000062], + [-135.102447068999936, 58.232245184000121], + [-135.135161912999877, 58.219427802000084], + [-135.145619269999969, 58.216782945], + [-135.173085089999915, 58.21893952], + [-135.309559699999909, 58.252142645], + [-135.350453253999945, 58.276800848], + [-135.381581183999856, 58.310939846000011], + [-135.402943488999938, 58.353949286000145], + [-135.411691860999895, 58.385199286000116], + [-135.415923631999931, 58.394964911000059], + [-135.445871548999889, 58.422064520000092], + [-135.45531165299991, 58.446275132], + [-135.467518683999884, 58.467352606000091], + [-135.484934048999833, 58.483954169000143], + [-135.505360480999911, 58.483628648000135], + [-135.514149542999888, 58.465521552000112], + [-135.498361782999837, 58.445461330000072], + [-135.475819464999944, 58.426499742000075], + [-135.464426235999895, 58.411688544000086], + [-135.459828253999945, 58.388332424000097], + [-135.46312415299991, 58.378119208000058], + [-135.47801673099994, 58.373765367000075], + [-135.494130011999914, 58.375677802000112], + [-135.507069464999915, 58.380682684000149], + [-135.532622850999928, 58.394964911000059], + [-135.5931697259999, 58.419989325000145], + [-135.627512173999861, 58.426255601000108], + [-135.652455206999974, 58.418524481000091], + [-135.676584438999896, 58.406683661000145], + [-135.886708136999857, 58.379380601000079], + [-135.909413214999915, 58.381293036000116], + [-135.909494594999899, 58.395086981000034], + [-135.902170376999891, 58.421616929], + [-135.8900447259999, 58.448472398000078], + [-135.875884568999965, 58.46320221600017], + [-135.894683397999927, 58.463324286000145], + [-135.950347459999932, 58.456366278000147], + [-135.950347459999932, 58.46320221600017], + [-135.936675584999904, 58.463120835], + [-135.925852016999897, 58.467718817000119], + [-135.915516730999911, 58.473700262000037], + [-135.903187628999945, 58.477484442000062], + [-135.888661261999914, 58.477606512000037], + [-135.847971157999922, 58.470038153000175], + [-135.860463019999941, 58.49103424700003], + [-135.856597459999932, 58.499457098000065], + [-135.846750454999892, 58.507757880000057], + [-135.841135219999899, 58.528387762000179], + [-135.845285610999838, 58.546535549000069], + [-135.85610917899993, 58.559271552000141], + [-135.871693488999938, 58.567694403000175], + [-135.889556443999908, 58.573065497000059], + [-135.889556443999908, 58.579901434000149], + [-135.820668097999942, 58.600327867000132], + [-135.833729620999918, 58.60374583500014], + [-135.873646613999881, 58.608547268000123], + [-135.882069464999915, 58.61058177300005], + [-135.88695227799991, 58.612534898000106], + [-135.93968665299991, 58.681301174000097], + [-135.955067511999943, 58.69464752800009], + [-135.978342251999862, 58.696600653000147], + [-135.973866339999915, 58.701564846000011], + [-135.968332485999895, 58.711249091000141], + [-135.964019334999961, 58.716457424000154], + [-135.97435462099989, 58.729071356000034], + [-135.991322394999941, 58.745184637000094], + [-136.009348110999895, 58.758978583000115], + [-136.023019985999923, 58.764837958000058], + [-136.032093878999916, 58.771877346000124], + [-136.057525193999936, 58.803697007000082], + [-136.073882615999935, 58.8126488300001], + [-136.06029212099989, 58.825913804000109], + [-135.963124152999882, 58.862046617000075], + [-135.945871548999889, 58.870794989000146], + [-135.92983964799987, 58.881537177000055], + [-135.936634894999912, 58.864081122000087], + [-135.917836066999939, 58.863348700000145], + [-135.758615688999896, 58.888373114000061], + [-135.773019985999895, 58.90452708500014], + [-135.798085089999859, 58.912665106000148], + [-135.935454881999874, 58.916245835000112], + [-135.964019334999961, 58.922512111000074], + [-135.958648240999935, 58.91327545800003], + [-135.950754360999838, 58.908270575000145], + [-135.92983964799987, 58.902044989], + [-135.94359290299991, 58.892035223000121], + [-136.013824022999927, 58.858710028000033], + [-136.02993730399993, 58.855292059000035], + [-136.046538865999963, 58.861029364], + [-136.047678188999896, 58.868719794000029], + [-136.051096157999922, 58.873439846000124], + [-136.054107225999928, 58.878729559000092], + [-136.054066535999937, 58.888373114000061], + [-136.050445115999963, 58.896063544000086], + [-136.03734290299991, 58.9142113300001], + [-136.032948370999918, 58.922512111000074], + [-136.056467251999891, 58.930121161000031], + [-136.076893683999941, 58.946519273000106], + [-136.092355923999889, 58.966294664000046], + [-136.101185675999943, 58.983954169000143], + [-136.104074673999861, 58.998032945], + [-136.103911912999905, 59.00726959800015], + [-136.105865037999934, 59.015204169000029], + [-136.114857550999943, 59.02558014500012], + [-136.1263728509999, 59.032538153000118], + [-136.141713019999941, 59.037095445000048], + [-136.157378709999932, 59.037583726000136], + [-136.17007402299987, 59.032375393000152], + [-136.154855923999889, 59.023098049000097], + [-136.142445441999968, 59.007025458000115], + [-136.138783331999946, 58.989813544000086], + [-136.149647589999915, 58.977118231000034], + [-136.140980597999913, 58.954820054], + [-136.166574673999889, 58.942613023000106], + [-136.202381964999915, 58.934068101], + [-136.224720831999946, 58.922512111000074], + [-136.152658657999922, 58.932684637000122], + [-136.117787238999881, 58.933294989000089], + [-136.101185675999943, 58.915716864000146], + [-136.116525844999899, 58.909572658000158], + [-136.122303839999944, 58.908270575000145], + [-136.122303839999944, 58.902044989], + [-136.10415605399993, 58.89524974199999], + [-136.097523566999968, 58.876857815000122], + [-136.099924282999922, 58.853745835], + [-136.108631964999915, 58.833156643000152], + [-136.133290167999917, 58.806097723], + [-136.136586066999939, 58.795884507000082], + [-136.137115037999934, 58.786200262000122], + [-136.140126105999911, 58.782171942000147], + [-136.147043423999918, 58.778062242000104], + [-136.159535285999937, 58.768255927000084], + [-136.209706183999913, 58.750799872000115], + [-136.269113735999866, 58.764146226000108], + [-136.382394985999838, 58.806463934000035], + [-136.382394985999838, 58.8126488300001], + [-136.313588019999969, 58.809515692000119], + [-136.27757727799991, 58.812974351000108], + [-136.25951087099989, 58.826320705000128], + [-136.28774980399993, 58.825628973000093], + [-136.375843878999945, 58.833156643000152], + [-136.425892706999974, 58.824448960000055], + [-136.452015753999945, 58.824367580000072], + [-136.475209113999966, 58.83657461100016], + [-136.492990688999868, 58.864081122000087], + [-136.507923956999889, 58.904445705000157], + [-136.510812954999835, 58.942572333000115], + [-136.492258266999926, 58.963446356000091], + [-136.492258266999926, 58.970892645000063], + [-136.526193813999896, 58.96759674700003], + [-136.544097459999932, 58.957424221000096], + [-136.574126756999874, 58.915716864000146], + [-136.639312303999901, 58.967230536000116], + [-136.67398027299987, 59.002752997000087], + [-136.693104620999947, 59.017971096000068], + [-136.711984829999892, 59.02558014500012], + [-136.608265753999973, 58.908270575000145], + [-136.63345292899993, 58.891791083000086], + [-136.65770423099994, 58.89874909100017], + [-136.681467251999834, 58.914007880000142], + [-136.705148891999869, 58.922512111000074], + [-136.717844204999921, 58.923814195000077], + [-136.734771287999905, 58.927435614000117], + [-136.751291469999899, 58.932847398], + [-136.77672278599988, 58.948391018000095], + [-136.827381964999859, 58.956691799000154], + [-136.841420050999915, 58.96181875200007], + [-136.875843878999945, 58.983954169000143], + [-136.917551235999895, 59.001939195], + [-136.946359829999835, 59.022609768], + [-137.013010219999899, 59.052801825000117], + [-137.032215949999852, 59.067490953000018], + [-137.046091274999952, 59.069037177000055], + [-137.059478318999936, 59.063706773], + [-137.06391354099992, 59.055405992000104], + [-137.062977667999945, 59.04389069200009], + [-137.0502009759999, 59.038560289000102], + [-137.029042120999918, 59.033677476000051], + [-137.008046027999853, 59.021714585000112], + [-136.971424933999913, 58.991400458000115], + [-136.929310675999972, 58.968329169000171], + [-136.911244269999941, 58.954331773000106], + [-136.9037166009999, 58.932440497000172], + [-136.917958136999914, 58.920070705000128], + [-137.013010219999899, 58.922512111000074], + [-137.030506964999859, 58.912909247000087], + [-137.064198370999861, 58.874090887000179], + [-137.085316535999965, 58.869533596000124], + [-137.102447068999908, 58.858547268000066], + [-137.129709438999896, 58.833156643000152], + [-137.129709438999896, 58.826320705000128], + [-137.108957485999895, 58.82876211100016], + [-137.086903449999909, 58.837836005000057], + [-137.066314256999874, 58.850653387000094], + [-137.033314581999917, 58.878241278000118], + [-137.01496334499987, 58.887884833000086], + [-136.994699673999861, 58.893377997000115], + [-136.895863410999937, 58.892401434000035], + [-136.841704881999931, 58.882513739000117], + [-136.828195766999897, 58.877508856000176], + [-136.8177791009999, 58.870672919000171], + [-136.812489386999914, 58.862127997000144], + [-136.811431443999936, 58.854641018000066], + [-136.809193488999966, 58.847398179000052], + [-136.800119594999899, 58.839992580000072], + [-136.79149329299986, 58.854315497000144], + [-136.777007615999935, 58.865668036000116], + [-136.758859829999921, 58.872788804000081], + [-136.739247199999852, 58.874090887000179], + [-136.72752844999988, 58.870428778000033], + [-136.698312954999835, 58.853583075000031], + [-136.674549933999941, 58.85285065300009], + [-136.663726365999935, 58.851019598000036], + [-136.653309699999852, 58.843695380000113], + [-136.643055792999917, 58.839789130000113], + [-136.626128709999932, 58.838446356000034], + [-136.609038865999906, 58.839748440000122], + [-136.587554490999963, 58.848334052000141], + [-136.577300584999932, 58.84398021000014], + [-136.567290818999936, 58.836859442], + [-136.557362433999856, 58.833156643000152], + [-136.540598110999838, 58.829331773000135], + [-136.484771287999934, 58.799627997000115], + [-136.495432094999899, 58.784491278000118], + [-136.51187089799987, 58.780462958000143], + [-136.530506964999859, 58.780910549000126], + [-136.547474738999938, 58.779120184000149], + [-136.54002844999988, 58.771673895000092], + [-136.565907355999883, 58.785956122000172], + [-136.58885657499988, 58.808905341000141], + [-136.614857550999943, 58.825425523000135], + [-136.64989173099994, 58.820054429], + [-136.643055792999917, 58.806463934000035], + [-136.628041144999884, 58.805568752000127], + [-136.574126756999874, 58.779120184000149], + [-136.583159959999875, 58.773749091000084], + [-136.593373175999943, 58.771185614], + [-136.604318813999896, 58.770697333], + [-136.615793423999833, 58.771673895000092], + [-136.563303188999896, 58.760687567000119], + [-136.543934699999852, 58.751166083000115], + [-136.529042120999918, 58.751166083000115], + [-136.522613084999904, 58.747748114000117], + [-136.51968339799987, 58.74095286699999], + [-136.522328253999945, 58.735581773000135], + [-136.525868292999945, 58.730373440000122], + [-136.52574622299997, 58.723822333000058], + [-136.520497199999909, 58.71084219000015], + [-136.515858527999853, 58.702378648000106], + [-136.506825324999852, 58.697902736000131], + [-136.48851477799991, 58.696600653000147], + [-136.476673956999946, 58.692328192000147], + [-136.452626105999911, 58.673488674000012], + [-136.437611456999946, 58.669256903000175], + [-136.451771613999881, 58.689195054000081], + [-136.472401495999918, 58.70343659100017], + [-136.491037563999896, 58.720160223], + [-136.499094204999835, 58.747748114000117], + [-136.491851365999935, 58.749212958000086], + [-136.383859829999892, 58.725083726000051], + [-136.375559048999833, 58.720160223], + [-136.368397589999887, 58.711127020000092], + [-136.353911912999934, 58.701849677000141], + [-136.342600063999868, 58.691555080000015], + [-136.344838019999941, 58.679185288999989], + [-136.355336066999911, 58.671454169000171], + [-136.396636522999955, 58.655585028000061], + [-136.456654425999943, 58.623277085000112], + [-136.488636847999942, 58.613511460000083], + [-136.519520636999914, 58.620835679], + [-136.52574622299997, 58.613999742000075], + [-136.487782355999855, 58.595404364000061], + [-136.475209113999966, 58.592922268000152], + [-136.463856574999909, 58.596502997000115], + [-136.430775519999941, 58.620835679], + [-136.401193813999896, 58.625718492000047], + [-136.377268032999837, 58.617743231000091], + [-136.354400193999936, 58.60618724199999], + [-136.327748175999886, 58.600327867000132], + [-136.334624803999901, 58.608587958000115], + [-136.35220292899993, 58.6212425800001], + [-136.35570227799991, 58.628322658000158], + [-136.351918097999885, 58.638495184000092], + [-136.343617316999939, 58.642157294000143], + [-136.33433997299997, 58.642279364000117], + [-136.327748175999886, 58.641302802000055], + [-136.317128058999856, 58.637437242000047], + [-136.309071417999917, 58.631822007000139], + [-136.301747199999909, 58.629217841000141], + [-136.293039516999926, 58.634507554000109], + [-136.297189907999893, 58.647121486000103], + [-136.297840949999909, 58.658270575000031], + [-136.293039516999926, 58.669256903000175], + [-136.280506964999915, 58.660223700000174], + [-136.183176235999866, 58.613999742000075], + [-136.183176235999866, 58.607163804000052], + [-136.192372199999909, 58.607082424000069], + [-136.198638475999871, 58.605536200000031], + [-136.211048956999889, 58.600327867000132], + [-136.202219204999835, 58.594305731000034], + [-136.177561001999862, 58.573065497000059], + [-136.160878058999913, 58.571682033000158], + [-136.14281165299991, 58.573553778000033], + [-136.12824459499987, 58.570746161000088], + [-136.122303839999944, 58.55573151200015], + [-136.127552863999938, 58.551947333000115], + [-136.139068162999962, 58.55206940300009], + [-136.15062415299991, 58.548895575000031], + [-136.155832485999895, 58.535467841000141], + [-136.162749803999873, 58.526190497000087], + [-136.179066535999908, 58.52334219000015], + [-136.211048956999889, 58.52464427300005], + [-136.19859778599988, 58.508978583000086], + [-136.180287238999938, 58.507554429000024], + [-136.14281165299991, 58.51845937700007], + [-136.131906704999921, 58.519517320000134], + [-136.082508917999945, 58.516424872000144], + [-136.082183397999927, 58.511379299000012], + [-136.087391730999911, 58.504706122000144], + [-136.088205532999837, 58.497992255000113], + [-136.085560675999943, 58.491400458000143], + [-136.084299282999837, 58.484686591000084], + [-136.080677863999966, 58.479559637000179], + [-136.07079016799986, 58.477484442000062], + [-136.062326626999919, 58.474269924000012], + [-136.060658331999889, 58.466498114], + [-136.061390753999945, 58.457342841000028], + [-136.060210740999906, 58.449530341000028], + [-136.036203579999892, 58.397894598000093], + [-136.026722785999937, 58.388128973000121], + [-136.057281053999873, 58.359523830000157], + [-136.076283331999889, 58.345607815000093], + [-136.098052537999934, 58.339667059000149], + [-136.127512173999833, 58.336493231000091], + [-136.186838344999899, 58.322414455000128], + [-136.272816535999908, 58.312974351000136], + [-136.287505662999905, 58.318182684000035], + [-136.283314581999974, 58.329738674000154], + [-136.272084113999966, 58.341253973000093], + [-136.265695766999869, 58.346502997000172], + [-136.272450324999909, 58.35960521000014], + [-136.327748175999886, 58.408596096000011], + [-136.329741990999935, 58.380519924000012], + [-136.343088344999842, 58.37616608300003], + [-136.409291144999941, 58.393459377000013], + [-136.459055141999897, 58.41689687700007], + [-136.481678839999859, 58.422186591000141], + [-136.489409959999875, 58.426011460000083], + [-136.498646613999938, 58.441310940000122], + [-136.505930141999869, 58.442694403000118], + [-136.513498501999891, 58.436183986000017], + [-136.510365363999938, 58.42792389500012], + [-136.499094204999835, 58.414780992000075], + [-136.500314907999865, 58.385077216000141], + [-136.515126105999911, 58.38031647300015], + [-136.537505662999934, 58.382513739000146], + [-136.561146613999881, 58.373765367000075], + [-136.55223548099994, 58.37128327000012], + [-136.546009894999884, 58.366644598], + [-136.541127081999917, 58.362209377000127], + [-136.536610480999855, 58.360174872000115], + [-136.524973110999866, 58.35814036699999], + [-136.506988084999932, 58.348944403000118], + [-136.499094204999835, 58.346502997000172], + [-136.480336066999882, 58.346869208], + [-136.480865037999962, 58.352362372000115], + [-136.486195441999939, 58.362616278000061], + [-136.481678839999859, 58.377590236000074], + [-136.47329667899993, 58.385443427000055], + [-136.466664191999939, 58.386542059000092], + [-136.444447394999884, 58.381293036000116], + [-136.417103644999912, 58.381293036000116], + [-136.410064256999931, 58.379339911000088], + [-136.406727667999917, 58.37498607], + [-136.405018683999913, 58.370306708000058], + [-136.402902798999889, 58.367621161000088], + [-136.377674933999941, 58.359198309000035], + [-136.365712042999917, 58.352362372000115], + [-136.361968553999873, 58.340236721000124], + [-136.361927863999881, 58.316107489], + [-136.370594855999883, 58.299546617000047], + [-136.39122473899991, 58.302557684000035], + [-136.434193488999938, 58.319159247000087], + [-136.492827928999901, 58.314439195], + [-136.512766079999892, 58.319159247000087], + [-136.518788214999887, 58.324286200000117], + [-136.522613084999904, 58.331122137000037], + [-136.527455206999974, 58.337103583000143], + [-136.536610480999855, 58.339667059000149], + [-136.550648566999911, 58.34064362200003], + [-136.562814907999893, 58.343736070000105], + [-136.573882615999935, 58.349188544000143], + [-136.584706183999913, 58.357082424000126], + [-136.598947719999927, 58.359035549000069], + [-136.620513475999928, 58.353908596000153], + [-136.65672766799986, 58.339667059000149], + [-136.574777798999833, 58.28213125200007], + [-136.566029425999943, 58.277980861000131], + [-136.56069902299987, 58.271307684000178], + [-136.561146613999881, 58.257757880000113], + [-136.567290818999936, 58.249335028000147], + [-136.591867641999897, 58.227443752000127], + [-136.598378058999856, 58.223049221000124], + [-136.633412238999938, 58.227728583000058], + [-136.639312303999901, 58.226752020000092], + [-136.650990363999881, 58.220526434000035], + [-136.664784308999913, 58.220363674000069], + [-136.67870032499988, 58.224310614000146], + [-136.690825975999871, 58.230414130000142], + [-136.706939256999931, 58.247992255000085], + [-136.711415167999917, 58.268866278000033], + [-136.700754360999895, 58.284165757], + [-136.671009894999941, 58.285101630000085], + [-136.671742316999882, 58.290106512000122], + [-136.675119594999899, 58.301255601000051], + [-136.677235480999911, 58.305568752000127], + [-136.69383704299986, 58.299302476], + [-136.71108964799987, 58.297796942000147], + [-136.725249803999901, 58.301947333000086], + [-136.732492641999926, 58.312974351000136], + [-136.740223761999943, 58.306301174000069], + [-136.750559048999861, 58.300441799000126], + [-136.761870897999927, 58.297308661000059], + [-136.772775844999899, 58.298732815000122], + [-136.783599412999905, 58.306382554000052], + [-136.779611782999922, 58.312201239000032], + [-136.772206183999941, 58.318264065], + [-136.772775844999899, 58.326605536000088], + [-136.788156704999835, 58.332709052000055], + [-136.826242641999926, 58.318996486000131], + [-136.84911048099994, 58.326605536000088], + [-136.843251105999911, 58.331000067000062], + [-136.833119269999941, 58.34198639500012], + [-136.827381964999859, 58.346502997000172], + [-136.836537238999938, 58.36041901200015], + [-136.847523566999911, 58.372748114], + [-136.860503709999904, 58.382391669000171], + [-136.875843878999945, 58.388128973000121], + [-136.878041144999941, 58.363348700000174], + [-136.89012610599994, 58.349676825000031], + [-136.903635219999927, 58.350816148000078], + [-136.909982876999862, 58.370672919000171], + [-136.921009894999884, 58.388983466000141], + [-136.947499152999882, 58.400702216000028], + [-136.979359503999888, 58.406887111000103], + [-137.006825324999937, 58.408596096000011], + [-137.022775844999842, 58.407171942000119], + [-137.067616339999859, 58.394964911000059], + [-137.07835852799991, 58.393255927000055], + [-137.112294074999937, 58.394964911000059], + [-137.131418423999889, 58.40131256700009], + [-137.19790605399993, 58.442694403000118], + [-137.260080532999837, 58.456366278000147], + [-137.300038214999887, 58.4747582050001], + [-137.321888800999943, 58.48065827000012], + [-137.340443488999938, 58.49477773600016], + [-137.348215298999833, 58.497992255000113], + [-137.362538214999915, 58.50018952], + [-137.471424933999913, 58.554388739000061], + [-137.518544074999909, 58.564764716000141], + [-137.562814907999893, 58.590887762000122], + [-137.58836829299986, 58.600327867000132], + [-137.620757615999963, 58.602606512000094], + [-137.631459113999881, 58.60618724199999], + [-137.622466600999957, 58.613999742000075], + [-137.606841600999871, 58.617743231000091], + [-137.570464647999898, 58.617987372000144], + [-137.554269985999838, 58.620835679], + [-137.513824022999927, 58.642523505000057], + [-137.499623175999886, 58.648138739000061], + [-137.48412024599989, 58.649888414000074], + [-137.451975063999924, 58.650091864000117], + [-137.43814042899993, 58.655585028000061], + [-137.457671678999901, 58.672267971000096], + [-137.469471808999884, 58.679592190000093], + [-137.479115363999938, 58.682928778000118], + [-137.49543209499987, 58.680365302000112], + [-137.521636522999898, 58.665350653000175], + [-137.537464972999942, 58.661810614], + [-137.56663977799991, 58.658840236000103], + [-137.642974412999934, 58.634507554000109], + [-137.670643683999913, 58.633246161000116], + [-137.677845831999946, 58.646429755000057], + [-137.683176235999923, 58.666489976000108], + [-137.704741990999935, 58.68634674700003], + [-137.86961829299986, 58.765773830000128], + [-137.893137173999833, 58.782212632000139], + [-137.902170376999834, 58.786444403000147], + [-137.914784308999913, 58.790513414000102], + [-137.926096157999893, 58.795721747000115], + [-137.93097896999987, 58.803045966000028], + [-137.929554816999882, 58.815741278000175], + [-137.924061652999882, 58.834621486000017], + [-137.924183722999942, 58.847398179000052], + [-137.944243943999908, 58.888128973000121], + [-137.984364386999914, 58.919989325000145], + [-138.184885219999899, 59.02558014500012], + [-138.250803188999868, 59.047837632000082], + [-138.281158006999931, 59.06240469], + [-138.287912563999868, 59.080755927000055], + [-138.362660285999965, 59.079779364000089], + [-138.398915167999888, 59.083319403000147], + [-138.431263800999886, 59.093817450000031], + [-138.398671027999939, 59.09284088700015], + [-138.383208787999934, 59.094794012000094], + [-138.36978105399993, 59.101263739], + [-138.428456183999941, 59.111232815], + [-138.559396938999839, 59.106187242000075], + [-138.61001542899993, 59.127997137000122], + [-138.540435350999928, 59.122463283000101], + [-138.506947394999969, 59.124701239000089], + [-138.492746548999889, 59.138495184000178], + [-138.493763800999943, 59.14931875200007], + [-138.494781053999901, 59.152736721000096], + [-138.483062303999901, 59.165228583], + [-138.472889777999853, 59.170599677000055], + [-138.446522589999859, 59.176092841000084], + [-138.43809973899991, 59.183172919000143], + [-138.449086066999968, 59.19163646], + [-138.558257615999906, 59.180894273000078], + [-138.583119269999941, 59.171128648000135], + [-138.596058722999942, 59.168890692000147], + [-138.628570115999935, 59.168890692000147], + [-138.643869594999899, 59.16681549700003], + [-138.653635219999927, 59.163967190000093], + [-138.641184048999918, 59.153998114], + [-138.630482550999886, 59.142238674000041], + [-138.656076626999891, 59.157700914000046], + [-138.688343878999888, 59.176988023], + [-138.72679602799991, 59.191107489000032], + [-138.769846157999837, 59.199855861000074], + [-138.814035610999895, 59.214667059000149], + [-138.838286912999905, 59.228216864000117], + [-138.981678839999915, 59.274847723000121], + [-139.205881313999924, 59.319769598000121], + [-139.184193488999938, 59.32526276200015], + [-139.138091600999928, 59.310248114000146], + [-139.116525844999899, 59.312933661000116], + [-139.154123501999891, 59.336004950000174], + [-139.164906378999916, 59.340236721000011], + [-139.182118292999917, 59.341253973000065], + [-139.201730923999889, 59.33978913], + [-139.220122850999928, 59.340318101], + [-139.233794725999957, 59.347723700000145], + [-139.236927863999938, 59.360052802000112], + [-139.230295376999891, 59.368231512000122], + [-139.226877407999893, 59.374660549000126], + [-139.240061001999919, 59.381170966000028], + [-139.253325975999928, 59.381415106000148], + [-139.271595831999917, 59.378119208000115], + [-139.287709113999881, 59.372137762000122], + [-139.29466712099989, 59.364732164000131], + [-139.303700324999909, 59.350531317000119], + [-139.325754360999895, 59.355780341000113], + [-139.352894660999908, 59.368109442000147], + [-139.377512173999889, 59.374945380000057], + [-139.408029751999834, 59.378363348000065], + [-139.446278449999909, 59.387600002000127], + [-139.482655402999882, 59.400620835000112], + [-139.507557745999918, 59.415961005000085], + [-139.42796790299991, 59.40155670800003], + [-139.389149542999917, 59.382269598000065], + [-139.36546790299991, 59.38027578300013], + [-139.341664191999911, 59.38499583500014], + [-139.322580532999922, 59.395453192000119], + [-139.36392167899993, 59.410711981000091], + [-139.386382615999935, 59.41510651200015], + [-139.404855923999889, 59.412258205000128], + [-139.423451300999972, 59.406968492000047], + [-139.443511522999927, 59.407660223], + [-139.46312415299991, 59.412420966000084], + [-139.507557745999918, 59.429632880000113], + [-139.524728969999842, 59.440375067000119], + [-139.534250454999835, 59.443833726000108], + [-139.596913214999915, 59.456976630000085], + [-139.857004360999838, 59.546291408000016], + [-139.835845506999931, 59.558905341000084], + [-139.765777147999955, 59.547837632000054], + [-139.733509894999941, 59.552476304], + [-139.735910610999866, 59.556382554000081], + [-139.740305141999841, 59.566799221000068], + [-139.719593878999945, 59.565985419000143], + [-139.703439907999893, 59.570217190000065], + [-139.690297003999916, 59.579738674000069], + [-139.678863084999961, 59.594671942000119], + [-139.668853318999879, 59.584377346000011], + [-139.65758216099988, 59.575506903000147], + [-139.644886847999942, 59.572739976], + [-139.630441860999895, 59.580471096000011], + [-139.637847459999961, 59.587307033000016], + [-139.622954881999902, 59.595363674000154], + [-139.575795050999915, 59.614569403000118], + [-139.591379360999895, 59.622544664000074], + [-139.579213019999941, 59.639593817000119], + [-139.527170376999891, 59.678045966000028], + [-139.480051235999895, 59.704413153000118], + [-139.473378058999913, 59.717596747000172], + [-139.537953253999973, 59.757025458000143], + [-139.545074022999927, 59.764797268000152], + [-139.562082485999895, 59.772365627000099], + [-139.572010870999918, 59.790187893000066], + [-139.582630988999938, 59.827460028000061], + [-139.608713344999899, 59.863592841000084], + [-139.621083136999943, 59.890285549000012], + [-139.613352016999926, 59.902533270000063], + [-139.602284308999913, 59.906805731000176], + [-139.582386847999885, 59.925604559000035], + [-139.572377081999917, 59.929877020000148], + [-139.559071417999888, 59.931708075000117], + [-139.545765753999945, 59.936672268000066], + [-139.521839972999913, 59.950995184000149], + [-139.492502407999893, 59.984564520000092], + [-139.473215298999861, 59.993597723], + [-139.448882615999878, 59.981105861000074], + [-139.430002407999865, 59.96503327], + [-139.371001756999931, 59.929877020000148], + [-139.305165167999945, 59.864691473000121], + [-139.302357550999886, 59.848293361000017], + [-139.333607550999943, 59.813421942], + [-139.343088344999899, 59.786525783000016], + [-139.342884894999941, 59.773260809000178], + [-139.335601365999906, 59.738104559000121], + [-139.341908331999861, 59.726752020000148], + [-139.34203040299991, 59.720404364000117], + [-139.326730923999861, 59.715725002000013], + [-139.318592902999939, 59.711086330000072], + [-139.311390753999916, 59.705389716000084], + [-139.308338995999918, 59.700262762000179], + [-139.303130662999934, 59.680731512000094], + [-139.277658657999922, 59.646185614], + [-139.267323370999918, 59.621405341000028], + [-139.28661048099994, 59.620550848000121], + [-139.310902472999942, 59.616278387000122], + [-139.332346157999865, 59.609564520000063], + [-139.343088344999899, 59.600897528000175], + [-139.289906378999973, 59.576157945000105], + [-139.270741339999915, 59.572984117000132], + [-139.259755011999857, 59.579046942000119], + [-139.226389126999891, 59.621405341000028], + [-139.234852667999917, 59.633368231000148], + [-139.261626756999931, 59.659165757], + [-139.267323370999918, 59.666083075000088], + [-139.266997850999871, 59.698065497000087], + [-139.268869594999842, 59.715073960000055], + [-139.274159308999913, 59.731268622000115], + [-139.279693162999934, 59.736273505000142], + [-139.286488410999965, 59.73818594], + [-139.292225714999944, 59.742580471000096], + [-139.29466712099989, 59.755194403000147], + [-139.291330532999865, 59.760199286000031], + [-139.275746222999942, 59.775783596000011], + [-139.270741339999915, 59.779038804000052], + [-139.263335740999935, 59.785793361000074], + [-139.279611782999865, 59.81972890800013], + [-139.280384894999884, 59.833685614], + [-139.264637824999909, 59.841620184000149], + [-139.173695441999968, 59.850816148000135], + [-139.036366339999859, 59.846869208000058], + [-139.010975714999915, 59.842474677000084], + [-138.969593878999916, 59.816717841000028], + [-138.945301886999914, 59.807114976000051], + [-138.92007402299987, 59.804999091000141], + [-138.897368943999936, 59.813177802000055], + [-138.91051184799997, 59.812689520000063], + [-138.922596808999884, 59.813910223000093], + [-138.945179816999939, 59.820013739000061], + [-139.013783331999889, 59.857611395000063], + [-139.028309699999909, 59.861517645000063], + [-139.218739386999943, 59.871039130000057], + [-139.239003058999856, 59.878322658000073], + [-139.321197068999936, 59.938706773000021], + [-139.355295376999862, 59.94940827000012], + [-139.368316209999932, 59.963324286], + [-139.37954667899993, 59.979193427000112], + [-139.390248175999943, 59.991359768], + [-139.412424282999922, 60.001898505000085], + [-139.462066209999932, 60.011786200000088], + [-139.483306443999936, 60.022406317000119], + [-139.507232225999871, 60.046535549000126], + [-139.520904100999928, 60.051499742000019], + [-139.54165605399993, 60.046576239000117], + [-139.542958136999914, 60.037298895000092], + [-139.579945441999939, 60.007310289000131], + [-139.589466925999943, 59.987941799000012], + [-139.584380662999934, 59.96515534100017], + [-139.584828253999945, 59.955064195000105], + [-139.5931697259999, 59.950995184000149], + [-139.626128709999961, 59.949448960000112], + [-139.658355272999927, 59.943548895000092], + [-139.705962693999879, 59.921779690000037], + [-139.735218878999945, 59.89923737200003], + [-139.794422980999911, 59.854193427000055], + [-139.849029100999871, 59.819403387000094], + [-139.958241339999915, 59.794623114000146], + [-140.042713995999861, 59.76972077], + [-140.137074347999942, 59.739935614], + [-140.254221157999922, 59.710150458], + [-140.32274329299986, 59.701239325000145], + [-140.501210089999859, 59.705226955000128], + [-140.617014126999862, 59.708482163999989], + [-140.689808722999913, 59.718451239000061], + [-140.762684699999937, 59.728338934000178], + [-140.863148566999882, 59.745550848], + [-141.009836391999841, 59.790432033000016], + [-141.115223761999857, 59.809475002000013], + [-141.274159308999884, 59.849188544000114], + [-141.352284308999913, 59.864081122000172], + [-141.428537563999839, 59.872137762000094], + [-141.454009568999936, 59.882066148000106], + [-141.468169725999871, 59.903062242000047], + [-141.457630988999938, 59.91673411699999], + [-141.434925910999965, 59.925116278000061], + [-141.412424282999893, 59.929877020000148], + [-141.434559699999852, 59.919663804000109], + [-141.445139126999891, 59.912339585], + [-141.454009568999936, 59.902533270000063], + [-141.438099738999938, 59.896185614000146], + [-141.413197394999884, 59.899969794000143], + [-141.353179490999878, 59.920152085], + [-141.346791144999969, 59.924872137000094], + [-141.338734503999945, 59.928412177000084], + [-141.314320441999882, 59.931463934000178], + [-141.284087693999879, 59.939764716000141], + [-141.275257941999939, 59.943548895000092], + [-141.267323370999861, 59.955552476000022], + [-141.262115037999962, 59.973944403000061], + [-141.260121222999942, 59.994208075000145], + [-141.261586066999882, 60.011786200000088], + [-141.267893032999922, 60.029038804], + [-141.278065558999884, 60.044094143], + [-141.292225714999915, 60.056586005000113], + [-141.310047980999883, 60.066473700000031], + [-141.303130662999962, 60.065863348000065], + [-141.282093878999945, 60.066473700000031], + [-141.305043097999942, 60.086330471000124], + [-141.346424933999856, 60.098781643000152], + [-141.379546678999873, 60.113918361000131], + [-141.377674933999913, 60.142157294000114], + [-141.44351152299987, 60.135687567000033], + [-141.474720831999889, 60.126125393000123], + [-141.477609829999892, 60.111070054000109], + [-141.455067511999914, 60.078436591000141], + [-141.447173631999931, 60.073919989], + [-141.431711391999897, 60.072211005], + [-141.419748501999891, 60.067572333000086], + [-141.399403449999909, 60.052801825000088], + [-141.385894334999932, 60.034816799000154], + [-141.392933722999885, 60.022040106000119], + [-141.414214647999955, 60.014349677], + [-141.472523566999968, 60.009019273000135], + [-141.613880988999938, 59.96906159100017], + [-141.673491990999963, 59.96112702], + [-141.732655402999882, 59.963120835000055], + [-141.893950975999928, 60.007554429000081], + [-141.969105597999942, 60.028143622000087], + [-142.104156053999901, 60.035305080000128], + [-142.197743292999917, 60.052801825000088], + [-142.351633266999926, 60.067694403000147], + [-142.487416144999884, 60.075913804000052], + [-142.63963782499988, 60.102443752000013], + [-142.798491990999906, 60.112372137000094], + [-142.982289191999968, 60.092474677000112], + [-143.19579016799986, 60.067694403000147], + [-143.463937954999892, 60.052801825000088], + [-143.60960852799991, 60.04946523600016], + [-143.74868730399993, 60.025458075000031], + [-143.863189256999931, 60.000392971000124], + [-143.918609178999873, 59.997015692], + [-144.042388475999928, 60.027980861000131], + [-144.10570227799991, 60.031683661000088], + [-144.249623175999886, 60.032294012000037], + [-144.133208787999934, 60.039740302000112], + [-144.031361456999889, 60.034084377000127], + [-144.002552863999881, 60.039740302000112], + [-144.020090298999889, 60.061428127000099], + [-144.050770636999914, 60.079657294000171], + [-144.205474412999905, 60.145168361000017], + [-144.219146287999934, 60.14862702000012], + [-144.239084438999924, 60.149603583], + [-144.25255286399991, 60.154608466000028], + [-144.24087480399993, 60.165513414000102], + [-144.205637173999889, 60.18305084800015], + [-144.197499152999939, 60.184149481000091], + [-144.190541144999884, 60.186590887000037], + [-144.187570766999954, 60.193670966000084], + [-144.190093553999958, 60.201646226000051], + [-144.196441209999875, 60.205633856000034], + [-144.204497850999928, 60.205308335], + [-144.212025519999884, 60.200506903000118], + [-144.246571417999888, 60.188910223], + [-144.347564256999931, 60.201117255000085], + [-144.386789516999954, 60.196763413999989], + [-144.373117641999897, 60.1837425800001], + [-144.448557094999956, 60.176336981000091], + [-144.463490363999881, 60.179348049000012], + [-144.47883053299995, 60.186712958], + [-144.485829230999911, 60.19594961100016], + [-144.475493943999908, 60.204250393000152], + [-144.490712042999888, 60.216253973000065], + [-144.517323370999918, 60.210028387000094], + [-144.546986456999889, 60.19745514500012], + [-144.571115688999896, 60.190619208], + [-144.601470506999959, 60.196437893000152], + [-144.658111131999931, 60.215399481000148], + [-144.688384568999936, 60.224676825000117], + [-144.674224412999934, 60.22654857], + [-144.66185462099989, 60.224066473000065], + [-144.653146938999896, 60.220363674000012], + [-144.640004035999937, 60.217230536000145], + [-144.642160610999952, 60.222479559000035], + [-144.660511847999885, 60.24518463700015], + [-144.694650844999899, 60.272528387000037], + [-144.736317511999943, 60.284409898], + [-144.746449347999913, 60.289536851000108], + [-144.755930141999897, 60.296210028000147], + [-144.769886847999885, 60.302679755000057], + [-144.784047003999888, 60.30597565300009], + [-144.794260219999956, 60.303208726000051], + [-144.80890865799995, 60.294419663999989], + [-144.819650844999956, 60.297267971000039], + [-144.828765428999958, 60.303127346000068], + [-144.838693813999953, 60.303208726000051], + [-144.848947719999899, 60.300726630000113], + [-144.865101691999939, 60.304388739000061], + [-144.872792120999861, 60.303208726000051], + [-144.890126105999855, 60.292954820000105], + [-144.905262824999852, 60.293198960000055], + [-144.916574673999946, 60.294745184000092], + [-144.927479620999918, 60.298773505000085], + [-144.941639777999939, 60.306626695000048], + [-144.934478318999879, 60.31639232], + [-144.916371222999885, 60.326157945000134], + [-144.88963782499988, 60.35024648600016], + [-144.887033657999893, 60.355047919000143], + [-144.889963344999899, 60.363267320000048], + [-144.896392381999902, 60.365790106000148], + [-144.903065558999856, 60.366197007000082], + [-144.906890428999873, 60.368109442000119], + [-144.914540167999917, 60.381170966000113], + [-144.912464972999885, 60.387030341000141], + [-144.900705532999893, 60.395982163999989], + [-144.886545376999891, 60.401556708000086], + [-144.870716925999943, 60.403225002000099], + [-144.838002081999917, 60.402167059000035], + [-144.838002081999917, 60.409654039000102], + [-144.86070716099988, 60.418524481000148], + [-144.84203040299991, 60.436183986000074], + [-144.790842251999948, 60.464911200000031], + [-144.794260219999956, 60.475978908000158], + [-144.794097459999875, 60.491156317000147], + [-144.798410610999895, 60.499212958000086], + [-144.832142706999889, 60.477118231000091], + [-144.853179490999906, 60.469875393000066], + [-144.873117641999897, 60.471177476000079], + [-144.887033657999893, 60.485419012000179], + [-144.879058397999927, 60.495917059000064], + [-144.870187954999892, 60.501857815000065], + [-144.860951300999915, 60.506293036000145], + [-144.846180792999917, 60.516791083000115], + [-144.836048956999889, 60.522406317000119], + [-144.831776495999861, 60.525783596000124], + [-144.83067786399991, 60.530991929000137], + [-144.832020636999914, 60.538031317], + [-144.832346157999922, 60.544175523], + [-144.828358527999853, 60.546820380000057], + [-144.817534959999875, 60.551825262000094], + [-144.815256313999896, 60.563137111000103], + [-144.818755662999877, 60.584133205000128], + [-144.816070115999878, 60.595038153000118], + [-144.809234178999873, 60.603338934000178], + [-144.790842251999948, 60.61513906500015], + [-144.768462693999908, 60.625148830000128], + [-144.762806769999941, 60.630194403000175], + [-144.756092902999882, 60.643052476], + [-144.757069464999944, 60.65253327], + [-144.761341925999886, 60.663560289000046], + [-144.760609503999945, 60.672756252000042], + [-144.746449347999913, 60.67658112200003], + [-144.716542120999918, 60.671861070000134], + [-144.688547329999892, 60.663641669000029], + [-144.661203579999949, 60.660101630000057], + [-144.633168097999942, 60.669745184000121], + [-144.617909308999856, 60.680365302000055], + [-144.613677537999934, 60.687323309000149], + [-144.61266028599988, 60.697699286000145], + [-144.616037563999896, 60.713934637000094], + [-144.622792120999918, 60.717027085000083], + [-144.633859829999864, 60.71385325700011], + [-144.705393032999893, 60.703802802000141], + [-144.733143683999884, 60.695217190000122], + [-144.756092902999882, 60.684027411000116], + [-144.77179928299995, 60.66893138200011], + [-144.786000128999945, 60.650702216000028], + [-144.803293423999946, 60.635321356000176], + [-144.855865037999877, 60.622056382000054], + [-144.869781053999958, 60.60569896000014], + [-144.87913977799991, 60.585516669000114], + [-144.89321855399993, 60.567328192000119], + [-144.912098761999857, 60.557359117000132], + [-144.974273240999878, 60.537014065000122], + [-144.999663865999906, 60.533189195000105], + [-145.019520636999914, 60.526434637000179], + [-145.040435350999871, 60.510565497000144], + [-145.072010870999861, 60.477972723], + [-145.096994594999899, 60.444281317], + [-145.114003058999941, 60.429429429000137], + [-145.1634822259999, 60.417141018000066], + [-145.235910610999952, 60.368109442000119], + [-145.269520636999857, 60.357082424000069], + [-145.305246548999889, 60.35578034100017], + [-145.38914954299986, 60.362534898000106], + [-145.40265865799995, 60.366278387000065], + [-145.415191209999847, 60.371893622000144], + [-145.436838344999927, 60.386419989000089], + [-145.468495245999918, 60.391750393000152], + [-145.482289191999911, 60.395982163999989], + [-145.489369269999884, 60.40326569200009], + [-145.498890753999888, 60.423529364], + [-145.504017706999889, 60.430812893], + [-145.51695716099988, 60.436021226000108], + [-145.550038214999915, 60.441351630000085], + [-145.572580532999922, 60.451117255000113], + [-145.672838770999931, 60.458159912], + [-145.731615806999912, 60.465277009000104], + [-145.804504175999909, 60.454449026000091], + [-145.866063674999936, 60.44766242600015], + [-145.938753640999948, 60.456066151000059], + [-145.941558397999927, 60.471136786000088], + [-145.922678188999896, 60.479966539000046], + [-145.880034959999875, 60.48769765800013], + [-145.863392706999917, 60.495306708], + [-145.846831834999875, 60.50722890800013], + [-145.771799282999922, 60.542425848000093], + [-145.681304490999878, 60.608099677], + [-145.674672003999888, 60.618231512000037], + [-145.666371222999913, 60.635321356000176], + [-145.647816535999908, 60.645209052], + [-145.62913977799991, 60.652736721000153], + [-145.620025193999936, 60.662909247000087], + [-145.629017706999861, 60.67914459800015], + [-145.652088995999918, 60.675116278000175], + [-145.691761847999942, 60.656683661000145], + [-145.844593878999888, 60.62103913], + [-145.880197719999927, 60.628729559000121], + [-145.838002081999889, 60.639837958000143], + [-145.81773841099988, 60.649603583000086], + [-145.805043097999942, 60.662909247000087], + [-145.824208136999886, 60.664862372000144], + [-145.861398891999897, 60.65648021], + [-145.880197719999927, 60.662909247000087], + [-145.855539516999954, 60.67658112200003], + [-145.845285610999895, 60.685532945000077], + [-145.839182094999927, 60.697699286000145], + [-145.857167120999861, 60.695054429000052], + [-145.882232225999957, 60.686224677000027], + [-145.904652472999885, 60.673570054000137], + [-145.925770636999886, 60.645209052], + [-145.952381964999915, 60.638128973000121], + [-146.003651495999861, 60.635646877000013], + [-145.994130011999857, 60.64915599199999], + [-145.982777472999885, 60.65721263200011], + [-145.955230272999955, 60.669745184000121], + [-145.943430141999897, 60.678290106000034], + [-145.924672003999945, 60.696844794000143], + [-145.914296027999939, 60.703924872000115], + [-145.93879146999987, 60.708197333000115], + [-145.965484178999901, 60.697821356000119], + [-145.99233964799987, 60.683742580000072], + [-146.017323370999918, 60.67658112200003], + [-146.04430091099988, 60.67308177300005], + [-146.197743292999945, 60.636542059000092], + [-146.238758917999945, 60.634711005000113], + [-146.256906704999949, 60.646185614000061], + [-146.25804602799991, 60.648830471000153], + [-146.260609503999888, 60.650702216000028], + [-146.263172980999911, 60.65371328300013], + [-146.26431230399993, 60.659816799000012], + [-146.261301235999952, 60.662583726000079], + [-146.246001756999874, 60.663804429], + [-146.239857550999886, 60.666327216000113], + [-146.23070227799991, 60.673163153000033], + [-146.117298956999861, 60.721380927000084], + [-146.081288214999915, 60.726385809000121], + [-146.070301886999914, 60.73065827000012], + [-146.062123175999943, 60.738023179000109], + [-146.058908657999893, 60.748602606000148], + [-146.053089972999913, 60.752630927000141], + [-146.026112433999856, 60.744818427000141], + [-146.017933722999857, 60.752346096000011], + [-146.020375128999888, 60.757961330000015], + [-146.037749803999958, 60.779608466000084], + [-146.032215949999852, 60.788397528000147], + [-146.031117316999911, 60.794745184000092], + [-146.037749803999958, 60.800116278000147], + [-146.043446417999945, 60.80101146000014], + [-146.050404425999943, 60.800848700000174], + [-146.056385870999947, 60.799302476000136], + [-146.058908657999893, 60.796332098000121], + [-146.069325324999852, 60.778387762000179], + [-146.093495245999861, 60.762884833000058], + [-146.14085852799991, 60.744818427000141], + [-146.166981574999852, 60.740708726], + [-146.182199673999946, 60.744045315000122], + [-146.18187415299991, 60.753119208000115], + [-146.161284959999875, 60.766546942000119], + [-146.208566860999952, 60.760728257000054], + [-146.222482876999919, 60.755764065], + [-146.232289191999939, 60.74746328300013], + [-146.240305141999897, 60.737250067], + [-146.249826626999891, 60.728664455000072], + [-146.264027472999885, 60.725002346000124], + [-146.295562303999901, 60.726304429000137], + [-146.306792772999927, 60.732082424000097], + [-146.312123175999886, 60.744818427000141], + [-146.309966600999871, 60.758246161000145], + [-146.302357550999943, 60.765326239], + [-146.292591925999886, 60.770900783000016], + [-146.284250454999921, 60.779608466000084], + [-146.313099738999938, 60.77167389500012], + [-146.352528449999909, 60.733710028000118], + [-146.389149542999945, 60.721991278000033], + [-146.417225714999944, 60.706773179000052], + [-146.425689256999874, 60.700832424000126], + [-146.438384568999879, 60.695990302000141], + [-146.482289191999882, 60.686957098000121], + [-146.493723110999952, 60.687160549000097], + [-146.517567511999914, 60.698065497000144], + [-146.549916144999941, 60.701402085], + [-146.644195115999935, 60.697699286000145], + [-146.652088995999918, 60.700018622000115], + [-146.653635219999956, 60.705755927], + [-146.652984178999873, 60.712469794000029], + [-146.65477454299986, 60.718166408000016], + [-146.662912563999896, 60.725002346000124], + [-146.695708787999905, 60.744818427000141], + [-146.678578253999888, 60.752752997000115], + [-146.660511847999942, 60.749986070000048], + [-146.642974412999905, 60.741197007], + [-146.627430792999917, 60.731146552000112], + [-146.620838995999918, 60.752427476], + [-146.615793423999889, 60.761175848000065], + [-146.607004360999923, 60.766546942000119], + [-146.591135219999899, 60.765204169000029], + [-146.562611456999889, 60.75096263200011], + [-146.534535285999908, 60.759222723], + [-146.506703253999945, 60.744370835000055], + [-146.493723110999952, 60.748602606000148], + [-146.491525844999956, 60.760891018000123], + [-146.505116339999915, 60.768622137000037], + [-146.524159308999913, 60.772406317000062], + [-146.53807532499988, 60.772772528000175], + [-146.515695766999954, 60.780096747000172], + [-146.491607225999928, 60.779282945000077], + [-146.445627407999893, 60.772772528000175], + [-146.426625128999888, 60.774888413999989], + [-146.38609778599988, 60.784328518], + [-146.343332485999952, 60.788885809000064], + [-146.262847459999875, 60.810858466000141], + [-146.19546464799987, 60.820542710000112], + [-146.19546464799987, 60.827378648000135], + [-146.22789466099988, 60.831691799000126], + [-146.237538214999915, 60.841009833000086], + [-146.226144985999895, 60.850409247000115], + [-146.19546464799987, 60.854681708000115], + [-146.093088344999956, 60.841009833000086], + [-146.223459438999896, 60.892645575000031], + [-146.253773566999882, 60.885728257000139], + [-146.281361456999889, 60.859320380000142], + [-146.317250128999888, 60.836737372000172], + [-146.358306443999879, 60.822333075000117], + [-146.401519334999875, 60.820542710000112], + [-146.401519334999875, 60.827378648000135], + [-146.396107550999943, 60.831244208000143], + [-146.393137173999918, 60.835435288999989], + [-146.387277798999889, 60.84788646], + [-146.511463995999918, 60.818589585000083], + [-146.558583136999914, 60.827378648000135], + [-146.554595506999874, 60.845445054000052], + [-146.566802537999934, 60.853664455000157], + [-146.586048956999889, 60.852972723000036], + [-146.603260870999918, 60.844427802], + [-146.619130011999914, 60.831040757], + [-146.628285285999908, 60.827297268000152], + [-146.630970831999889, 60.83478424700003], + [-146.627430792999917, 60.854681708000115], + [-146.609974738999938, 60.864203192000119], + [-146.607004360999923, 60.868353583000058], + [-146.611398891999897, 60.87714264500012], + [-146.620838995999918, 60.883775132], + [-146.631947394999884, 60.888006903000118], + [-146.641102667999917, 60.889471747000172], + [-146.655262824999852, 60.886297919000114], + [-146.668446417999917, 60.880926825000145], + [-146.683501756999931, 60.879828192], + [-146.703195766999869, 60.889471747000172], + [-146.704660610999923, 60.892279364000117], + [-146.716867641999897, 60.909979559000121], + [-146.723866339999887, 60.916083075000117], + [-146.730458136999857, 60.919338283000158], + [-146.735422329999892, 60.923895575000088], + [-146.73729407499988, 60.933823960000026], + [-146.75328528599988, 60.955023505], + [-146.753163214999915, 60.96430084800015], + [-146.729847785999908, 60.964544989], + [-146.714711066999911, 60.959784247000087], + [-146.691273566999939, 60.94725169500002], + [-146.604969855999911, 60.937160549000126], + [-146.585845506999931, 60.944728908000073], + [-146.618804490999906, 60.955023505], + [-146.666086391999954, 60.963446356000148], + [-146.699818488999853, 60.976874091000141], + [-146.692290818999879, 61.002427476000136], + [-146.685292120999918, 61.01166413], + [-146.672759568999908, 61.032700914000131], + [-146.662220831999946, 61.040269273000078], + [-146.64354407499988, 61.04205963700015], + [-146.590931769999941, 61.032904364000089], + [-146.572824673999946, 61.026597398000135], + [-146.57046464799987, 61.030707098000093], + [-146.566477016999897, 61.041571356000148], + [-146.565419074999852, 61.046535549000041], + [-146.611236131999874, 61.053452867000104], + [-146.632923956999946, 61.05955638200011], + [-146.647938605999855, 61.073797919000114], + [-146.55687415299991, 61.085923570000105], + [-146.283762173999946, 61.08144765800013], + [-146.236439581999889, 61.094305731000148], + [-146.277984178999873, 61.122748114000089], + [-146.300119594999956, 61.132513739000117], + [-146.325795050999915, 61.136460679000109], + [-146.381459113999938, 61.134588934000035], + [-146.43195553299995, 61.139471747000115], + [-146.493804490999935, 61.13418203300013], + [-146.585845506999931, 61.136460679000109], + [-146.609445766999954, 61.130764065000122], + [-146.631662563999924, 61.119086005000113], + [-146.675282355999911, 61.088080145], + [-146.720570441999939, 61.064886786000088], + [-146.815541144999884, 61.031805731000034], + [-146.85399329299986, 61.005560614], + [-146.871327277999853, 60.98517487200003], + [-146.890939907999922, 60.972072658000158], + [-146.911366339999915, 60.962103583000058], + [-146.94871985599994, 60.949652411000145], + [-146.97671464799987, 60.945786851000136], + [-147.004872199999852, 60.947943427000141], + [-147.031564907999893, 60.957709052000084], + [-146.993967251999891, 60.983384507000139], + [-146.978830532999893, 60.998724677], + [-146.983754035999937, 61.005560614], + [-147.004790818999879, 61.006659247000144], + [-147.011057094999927, 61.005560614], + [-147.015695766999954, 61.002183335], + [-147.016753709999904, 60.998114325000031], + [-147.016916469999956, 60.994330145], + [-147.018462693999908, 60.991888739000061], + [-147.03416907499988, 60.981634833000143], + [-147.044300910999937, 60.977932033000101], + [-147.058827277999853, 60.978216864000117], + [-147.048573370999918, 60.992173570000105], + [-147.042591925999943, 61.00291575700011], + [-147.047230597999942, 61.009833075000117], + [-147.090199347999913, 61.015773830000128], + [-147.100656704999892, 61.015285549000154], + [-147.11945553299995, 61.002875067000119], + [-147.148264126999891, 60.991888739000061], + [-147.150542772999927, 60.976385809000149], + [-147.145375128999945, 60.963324286000088], + [-147.145863410999937, 60.954291083000058], + [-147.165272589999915, 60.950873114000061], + [-147.185292120999918, 60.953680731000119], + [-147.199126756999902, 60.961981512000179], + [-147.207102016999954, 60.97597890800013], + [-147.209624803999958, 60.995591539000102], + [-147.20726477799991, 61.00869375200007], + [-147.205148891999897, 61.014593817000033], + [-147.210519985999952, 61.013413804], + [-147.254383917999917, 60.993963934000178], + [-147.264271613999938, 60.991888739000061], + [-147.278431769999941, 61.004380601000079], + [-147.287912563999953, 61.007025458000058], + [-147.292225714999944, 60.995591539000102], + [-147.287505662999848, 60.984930731000176], + [-147.265288865999878, 60.967922268], + [-147.25812740799995, 60.957709052000084], + [-147.257313605999911, 60.937892971000068], + [-147.268910285999851, 60.930243231000034], + [-147.31273352799991, 60.930405992000019], + [-147.305816209999904, 60.923000393], + [-147.343088344999899, 60.89948151200015], + [-147.364613410999908, 60.89126211100016], + [-147.374134894999884, 60.899074611000131], + [-147.382964647999955, 60.91396719], + [-147.403960740999878, 60.912787177000084], + [-147.429025844999899, 60.905585028000033], + [-147.449859178999873, 60.902533270000148], + [-147.437896287999934, 60.926906643], + [-147.380970831999917, 60.985663153000118], + [-147.400257941999854, 60.99095286699999], + [-147.416818813999924, 60.980292059000149], + [-147.432606574999852, 60.965318101000108], + [-147.449574347999942, 60.957709052000084], + [-147.460031704999921, 60.965765692000033], + [-147.451730923999946, 60.983710028000147], + [-147.435536261999886, 61.002386786000145], + [-147.422596808999884, 61.012355861000131], + [-147.451730923999946, 61.010931708000058], + [-147.468861456999889, 61.000474351], + [-147.494252081999889, 60.967962958], + [-147.509755011999914, 60.925726630000085], + [-147.522694464999915, 60.90753815300009], + [-147.542062954999949, 60.91331614800005], + [-147.545480923999946, 60.985663153000118], + [-147.53856360599994, 61.004217841000113], + [-147.529693162999905, 61.016669012000037], + [-147.525502081999889, 61.030585028000118], + [-147.532460089999859, 61.053941148000106], + [-147.521717902999939, 61.059759833000058], + [-147.490874803999873, 61.069403387000037], + [-147.483998175999886, 61.073797919000114], + [-147.485910610999923, 61.083726304000109], + [-147.49388587099989, 61.088080145], + [-147.503732876999891, 61.090399481000148], + [-147.511341925999943, 61.094305731000148], + [-147.521351691999939, 61.108587958000058], + [-147.527251756999874, 61.124741929000109], + [-147.525257941999939, 61.139390367000132], + [-147.511341925999943, 61.149562893000066], + [-147.524891730999911, 61.154445705000128], + [-147.54328365799995, 61.157049872000144], + [-147.561146613999938, 61.155910549000012], + [-147.573394334999875, 61.149562893000066], + [-147.578846808999913, 61.136297919000143], + [-147.573231574999909, 61.12759023600016], + [-147.564361131999874, 61.120347398000135], + [-147.559722459999875, 61.111639716000141], + [-147.566151495999861, 61.08722565300009], + [-147.581857876999919, 61.059230861000074], + [-147.60179602799991, 61.036200262000122], + [-147.620920376999891, 61.026597398000135], + [-147.64000403599988, 61.024359442000147], + [-147.658599412999877, 61.019476630000085], + [-147.665272589999915, 61.014593817000033], + [-147.648508266999897, 61.012355861000131], + [-147.620757615999935, 61.013983466000141], + [-147.614369269999884, 61.012355861000131], + [-147.607411261999914, 61.003363348], + [-147.610178188999896, 60.998846747000144], + [-147.61656653599988, 60.995998440000037], + [-147.620594855999855, 60.991888739000061], + [-147.623158331999889, 60.986558335], + [-147.632232225999957, 60.977972723000093], + [-147.634185350999928, 60.97479889500012], + [-147.630482550999886, 60.966701565], + [-147.62169348899991, 60.964585679], + [-147.61164303299995, 60.96430084800015], + [-147.60383053299995, 60.961167710000083], + [-147.600087042999917, 60.949855861000103], + [-147.605620897999927, 60.923651434000149], + [-147.600697394999884, 60.909979559000121], + [-147.596791144999884, 60.885687567000147], + [-147.599029100999928, 60.869086005], + [-147.610666469999956, 60.861558335000112], + [-147.664662238999881, 60.85830312700007], + [-147.68195553299995, 60.864691473], + [-147.666086391999926, 60.900458075000031], + [-147.68504798099994, 60.898586330000157], + [-147.712147589999859, 60.891180731000176], + [-147.730458136999914, 60.889471747000172], + [-147.732777472999885, 60.900091864000032], + [-147.727202928999873, 60.91815827000012], + [-147.716460740999878, 60.935695705000072], + [-147.703114386999857, 60.944728908000073], + [-147.703114386999857, 60.950873114000061], + [-147.727650519999884, 60.947577216000028], + [-147.769439256999931, 60.929144598000093], + [-147.785715298999946, 60.930405992000019], + [-147.788644985999895, 60.926703192000147], + [-147.790191209999932, 60.923773505000113], + [-147.792469855999883, 60.916815497000059], + [-147.770130988999881, 60.911444403000175], + [-147.777740037999877, 60.898871161], + [-147.812977667999917, 60.87579987200003], + [-147.777088995999947, 60.867010809000149], + [-147.771392381999874, 60.864935614000146], + [-147.766835089999915, 60.861883856000148], + [-147.757801886999914, 60.853664455000157], + [-147.7513728509999, 60.845038153000147], + [-147.754628058999941, 60.841009833000086], + [-147.763824022999927, 60.83893463700015], + [-147.783314581999889, 60.829535223000121], + [-147.795562303999958, 60.827378648000135], + [-147.870187954999892, 60.837713934000064], + [-147.886097785999937, 60.845200914000102], + [-147.898793097999885, 60.855943101000136], + [-147.908558722999913, 60.868353583000058], + [-147.91698157499988, 60.888169664000074], + [-147.922230597999857, 60.895697333000115], + [-147.930816209999875, 60.904201565000065], + [-147.938099738999881, 60.908758856000091], + [-148.019846157999865, 60.94163646], + [-148.038929816999939, 60.944728908000073], + [-148.050404425999886, 60.950140692000119], + [-148.034291144999941, 60.962347723], + [-147.997914191999939, 60.981919663999989], + [-147.999501105999883, 60.987616278000147], + [-148.002145962999862, 60.990139065000065], + [-148.00263424399995, 60.992865302000141], + [-147.997914191999939, 60.999335028000061], + [-147.988840298999946, 61.004868882000054], + [-147.966420050999943, 61.007961330000128], + [-147.956939256999931, 61.012355861000131], + [-147.94469153599988, 61.026597398000135], + [-147.92906653599988, 61.053778387000037], + [-147.915394660999937, 61.067572333000058], + [-147.929839647999898, 61.072739976000051], + [-147.935902472999885, 61.073797919000114], + [-147.918080206999917, 61.094305731000148], + [-147.883941209999932, 61.119370835000055], + [-147.84593665299991, 61.140570380000057], + [-147.816395636999943, 61.149562893000066], + [-147.804758266999954, 61.155218817000062], + [-147.772857225999928, 61.182033596000068], + [-147.757720506999931, 61.191107489000061], + [-147.716175910999937, 61.201849677000084], + [-147.702137824999909, 61.213202216000141], + [-147.710560675999943, 61.232082424000069], + [-147.73696855399993, 61.215562242000104], + [-147.751047329999892, 61.212591864], + [-147.765207485999895, 61.218451239000117], + [-147.723215298999918, 61.255926825000145], + [-147.713368292999888, 61.273098049000097], + [-147.730458136999914, 61.279852606000034], + [-147.748036261999857, 61.276068427], + [-147.762196417999888, 61.264960028000175], + [-147.785715298999946, 61.238959052], + [-147.833485480999911, 61.19757721600017], + [-147.843739386999914, 61.191107489000061], + [-147.873280402999882, 61.181870835], + [-147.908680792999888, 61.160142320000134], + [-147.963775193999936, 61.114732164000046], + [-147.998524542999917, 61.062689520000092], + [-148.020985480999911, 61.037420966000028], + [-148.049427863999938, 61.026597398000135], + [-148.07201087099989, 61.024400132000139], + [-148.079904751999891, 61.026597398000135], + [-148.086252407999893, 61.031398830000043], + [-148.093820766999954, 61.044175523000078], + [-148.113352016999926, 61.061835028000175], + [-148.121896938999953, 61.075995184000092], + [-148.131906704999949, 61.088324286000145], + [-148.14875240799995, 61.094305731000148], + [-148.139963344999956, 61.112860419000171], + [-148.145944790999891, 61.117905992000104], + [-148.160145636999914, 61.11469147300015], + [-148.196115688999896, 61.102362372000087], + [-148.258615688999896, 61.094305731000148], + [-148.278391079999949, 61.088934637000094], + [-148.305165167999917, 61.077093817000147], + [-148.390573696999866, 61.067287502000013], + [-148.409494594999899, 61.060126044000171], + [-148.397165493999921, 61.055365302000084], + [-148.372629360999923, 61.052232164000102], + [-148.361073370999918, 61.046535549000041], + [-148.371286587999919, 61.040594794000086], + [-148.391428188999896, 61.024115302000112], + [-148.398915167999917, 61.016058661000088], + [-148.407907680999955, 61.010931708000058], + [-148.449818488999881, 60.999335028000061], + [-148.449818488999881, 60.991888739000061], + [-148.41034908799989, 60.986395575000031], + [-148.375599738999938, 60.999212958000086], + [-148.313832160999937, 61.040269273000078], + [-148.279489712999862, 61.054999091000141], + [-148.227650519999884, 61.070990302000055], + [-148.177723761999914, 61.076605536000059], + [-148.14875240799995, 61.060126044000171], + [-148.163807745999947, 61.055812893000066], + [-148.166940883999928, 61.046454169000057], + [-148.166818813999953, 61.034613348000093], + [-148.17235266799986, 61.023260809000092], + [-148.207142706999917, 60.981919663999989], + [-148.218373175999915, 60.972479559000149], + [-148.251942511999943, 60.954738674000069], + [-148.264841274999867, 60.950873114000061], + [-148.28172766799986, 60.953680731000119], + [-148.313588019999884, 60.969794012000179], + [-148.333119269999884, 60.971380927000112], + [-148.325876430999926, 60.961127020000092], + [-148.289051886999857, 60.933823960000026], + [-148.281198696999866, 60.920599677000055], + [-148.286000128999888, 60.913397528000033], + [-148.296701626999891, 60.906927802000112], + [-148.306467251999948, 60.895697333000115], + [-148.308176235999952, 60.880194403000118], + [-148.305775519999884, 60.864691473], + [-148.307199673999889, 60.852728583000086], + [-148.320423956999889, 60.84788646], + [-148.338734503999888, 60.850043036], + [-148.375111456999946, 60.859361070000134], + [-148.395822719999956, 60.861558335000112], + [-148.348215298999889, 60.833929755000113], + [-148.332875128999916, 60.819403387000179], + [-148.354237433999884, 60.813137111000131], + [-148.383371548999946, 60.817043361000131], + [-148.428334113999938, 60.835272528000118], + [-148.457264777999939, 60.841009833000086], + [-148.523426886999914, 60.840399481000034], + [-148.586374477999954, 60.830471096000124], + [-148.703684048999889, 60.792669989000061], + [-148.670114712999862, 60.785467841000056], + [-148.635080532999893, 60.79360586100016], + [-148.600046352999897, 60.806341864], + [-148.566477016999954, 60.813137111000131], + [-148.55992591099988, 60.811102606000091], + [-148.551462368999921, 60.80206940300009], + [-148.54633541599992, 60.800116278000147], + [-148.537953253999888, 60.800930080000157], + [-148.476307745999918, 60.814276434000149], + [-148.460153774999867, 60.81240469], + [-148.449818488999881, 60.800116278000147], + [-148.488026495999918, 60.790513414000074], + [-148.57835852799991, 60.781724351000108], + [-148.611195441999911, 60.762884833000058], + [-148.623605923999946, 60.752386786], + [-148.650868292999917, 60.73737213700015], + [-148.662709113999881, 60.725002346000124], + [-148.677723761999914, 60.700344143000123], + [-148.688710089999859, 60.689398505000085], + [-148.703684048999889, 60.684027411000116], + [-148.703684048999889, 60.67658112200003], + [-148.667469855999911, 60.674505927000112], + [-148.655873175999886, 60.67658112200003], + [-148.643666144999884, 60.682033596000068], + [-148.621327277999853, 60.695135809000035], + [-148.59825598899991, 60.699611721000011], + [-148.589588995999918, 60.704738674000041], + [-148.583200649999895, 60.712347723000065], + [-148.580799933999941, 60.721584377000042], + [-148.578928188999896, 60.735785223000121], + [-148.573597785999908, 60.739935614000089], + [-148.564890102999925, 60.740790106000176], + [-148.552845831999917, 60.744818427000141], + [-148.52953040299991, 60.757025458000115], + [-148.510202602999868, 60.763495184000121], + [-148.489979620999861, 60.766099351000108], + [-148.464100714999944, 60.766546942000119], + [-148.453073696999923, 60.768622137000037], + [-148.440012173999946, 60.777573960000055], + [-148.43305416599992, 60.779608466000084], + [-148.374704555999926, 60.779608466000084], + [-148.374704555999926, 60.772772528000175], + [-148.38837643099987, 60.772772528000175], + [-148.38837643099987, 60.766546942000119], + [-148.378854946999866, 60.764227606000148], + [-148.370961066999911, 60.759751695], + [-148.364938930999898, 60.75324127800009], + [-148.361073370999918, 60.744818427000141], + [-148.385487433999941, 60.739691473000121], + [-148.395090298999918, 60.734686591000084], + [-148.401966925999943, 60.725002346000124], + [-148.401112433999913, 60.715806382000054], + [-148.395090298999918, 60.68952057500006], + [-148.398915167999917, 60.684027411000116], + [-148.426340298999889, 60.679510809000149], + [-148.434519008999899, 60.66742584800015], + [-148.429921027999853, 60.628729559000121], + [-148.420114712999919, 60.634955145000063], + [-148.395822719999956, 60.656683661000145], + [-148.382679816999882, 60.661688544000086], + [-148.370432094999927, 60.663804429], + [-148.358754035999937, 60.66742584800015], + [-148.347401495999861, 60.67658112200003], + [-148.342518683999913, 60.703314520000148], + [-148.308420376999891, 60.73456452000012], + [-148.264637824999909, 60.760809637000037], + [-148.230702277999853, 60.772772528000175], + [-148.230702277999853, 60.766546942000119], + [-148.24828040299991, 60.754380601000136], + [-148.256214972999885, 60.737982489000117], + [-148.254953579999949, 60.718573309000121], + [-148.244984503999888, 60.697699286000145], + [-148.237131313999896, 60.68854401200015], + [-148.218983527999882, 60.673285223], + [-148.210194464999915, 60.662909247000087], + [-148.20641028599988, 60.653509833000086], + [-148.205922003999888, 60.645453192000147], + [-148.204172329999892, 60.637518622000172], + [-148.196603969999956, 60.628729559000121], + [-148.206288214999915, 60.620550848], + [-148.219186977999925, 60.614081122000087], + [-148.23371334499987, 60.609808661], + [-148.248117641999954, 60.608303127000127], + [-148.315256313999896, 60.549709377000099], + [-148.336984829999892, 60.540594794000114], + [-148.361073370999918, 60.546820380000057], + [-148.361073370999918, 60.553045966000028], + [-148.36351477799991, 60.562323309000178], + [-148.416452602999868, 60.559230861000103], + [-148.429921027999853, 60.570746161000116], + [-148.43968665299991, 60.587062893000152], + [-148.462473110999923, 60.589300848000121], + [-148.488474087999919, 60.582220770000063], + [-148.524484829999892, 60.560003973000036], + [-148.599476691999939, 60.529689846000124], + [-148.655873175999886, 60.498439846000068], + [-148.66942298099994, 60.488226630000113], + [-148.684763149999895, 60.47211334800015], + [-148.689890102999897, 60.45722077], + [-148.672596808999913, 60.450628973000121], + [-148.651478644999884, 60.457180080000015], + [-148.615305141999954, 60.485744533000101], + [-148.557932094999956, 60.504339911], + [-148.51414954299986, 60.528469143], + [-148.47020423099994, 60.546210028000118], + [-148.429921027999853, 60.539374091000084], + [-148.427072719999927, 60.528876044000029], + [-148.409047003999888, 60.524562893000038], + [-148.385935024999924, 60.522528387000179], + [-148.367868618999921, 60.518947658000016], + [-148.38154049399995, 60.505845445000048], + [-148.348500128999888, 60.509466864000032], + [-148.341542120999918, 60.506659247000144], + [-148.351144985999895, 60.495306708], + [-148.35883541599992, 60.483791408000158], + [-148.348378058999913, 60.480658270000092], + [-148.329904751999891, 60.483221747000087], + [-148.313221808999856, 60.488836981000176], + [-148.276600714999944, 60.494940497000172], + [-148.268503383999928, 60.472886460000083], + [-148.263783331999917, 60.451076565000122], + [-148.237538214999887, 60.457464911000145], + [-148.224720831999946, 60.469142971000124], + [-148.223622199999909, 60.478338934000121], + [-148.227853969999927, 60.488348700000088], + [-148.230702277999853, 60.502142645], + [-148.232858852999868, 60.505804755000057], + [-148.236643032999893, 60.509914455000015], + [-148.238352016999897, 60.515204169000086], + [-148.234120245999861, 60.522365627000127], + [-148.228464321999894, 60.525620835000083], + [-148.213246222999913, 60.532416083], + [-148.210194464999915, 60.536322333], + [-148.205922003999888, 60.546332098000093], + [-148.195912238999938, 60.554510809000178], + [-148.184559699999937, 60.557806708000115], + [-148.176096157999893, 60.553045966000028], + [-148.173654751999891, 60.539984442000147], + [-148.17711341099988, 60.525336005000142], + [-148.183461066999882, 60.512762762000065], + [-148.18976803299995, 60.505845445000048], + [-148.166371222999857, 60.501613674000126], + [-148.154611782999893, 60.525132554], + [-148.148304816999939, 60.557766018000123], + [-148.14130611899995, 60.580389716000084], + [-148.130848761999886, 60.587225653000118], + [-148.093820766999954, 60.603583075000031], + [-148.083607550999915, 60.60488515800013], + [-148.069162563999953, 60.585923570000105], + [-148.060007290999863, 60.57802969000015], + [-148.045765753999888, 60.574164130000142], + [-148.066843227999897, 60.539374091000084], + [-148.055165167999888, 60.541245835000055], + [-148.033395962999919, 60.551459052], + [-148.025257941999911, 60.553045966000028], + [-148.011789516999926, 60.547796942000147], + [-148.00682532499988, 60.540676174000097], + [-148.004261847999885, 60.532782294000114], + [-147.997914191999939, 60.525783596000124], + [-147.984974738999938, 60.521551825000117], + [-147.970773891999926, 60.518947658000016], + [-147.959828253999945, 60.512762762000065], + [-147.956939256999931, 60.498439846000068], + [-147.96226966099988, 60.491888739000089], + [-147.973703579999949, 60.485296942], + [-147.986968553999873, 60.480169989], + [-147.997914191999939, 60.477972723], + [-147.984730597999885, 60.462225653000061], + [-147.963734503999945, 60.46417877800009], + [-147.944406704999921, 60.4688988300001], + [-147.935902472999885, 60.46116771], + [-147.941883917999917, 60.443060614000089], + [-147.957020636999914, 60.436102606000091], + [-147.997914191999939, 60.436957098000093], + [-147.995350714999915, 60.421535549000154], + [-148.012399868999893, 60.410711981000148], + [-148.036854620999918, 60.404282945000048], + [-148.056263800999943, 60.402167059000035], + [-148.085560675999858, 60.419094143000123], + [-148.097035285999908, 60.419378973000065], + [-148.08735104099992, 60.395982163999989], + [-148.110910610999895, 60.39948151200015], + [-148.156442837999947, 60.414943752000099], + [-148.182321743999864, 60.416489976000136], + [-148.170847133999928, 60.409613348000121], + [-148.135080532999893, 60.379339911000116], + [-148.12828528599988, 60.368109442000119], + [-148.142445441999882, 60.355210679000109], + [-148.169789191999882, 60.352850653000147], + [-148.198557094999899, 60.356390692000119], + [-148.21703040299991, 60.361273505000028], + [-148.216175910999937, 60.379706122000059], + [-148.233509894999912, 60.384751695000077], + [-148.254587368999921, 60.378973700000117], + [-148.264841274999867, 60.364691473000036], + [-148.259755011999943, 60.348537502000156], + [-148.247303839999915, 60.34902578300013], + [-148.231678839999944, 60.353094794000086], + [-148.21703040299991, 60.347601630000085], + [-148.215158657999865, 60.321926174000012], + [-148.240915493999921, 60.29767487200003], + [-148.276234503999945, 60.279608466000113], + [-148.310373501999948, 60.270412502000127], + [-148.32005774599989, 60.260972398000106], + [-148.330026821999866, 60.258856512000094], + [-148.338734503999888, 60.26243724199999], + [-148.353586391999926, 60.279974677000112], + [-148.361073370999918, 60.286200262000179], + [-148.379709438999896, 60.287420966000084], + [-148.39085852799991, 60.277411200000117], + [-148.393055792999917, 60.26496002800009], + [-148.384958462999862, 60.258856512000094], + [-148.367543097999885, 60.253892320000048], + [-148.364450649999924, 60.242254950000145], + [-148.370798305999926, 60.228461005000142], + [-148.38154049399995, 60.217230536000145], + [-148.398142055999926, 60.209173895], + [-148.415231899999952, 60.204413153000118], + [-148.430897589999915, 60.197658596000068], + [-148.442982550999943, 60.1837425800001], + [-148.408680792999888, 60.186102606000063], + [-148.37523352799991, 60.192775783000101], + [-148.343373175999886, 60.203314520000063], + [-148.313832160999937, 60.217230536000145], + [-148.258127407999922, 60.251776434000064], + [-148.225819464999915, 60.260402736000131], + [-148.18976803299995, 60.251410223000121], + [-148.18976803299995, 60.24518463700015], + [-148.229074673999946, 60.242254950000145], + [-148.264841274999867, 60.232163804], + [-148.247181769999855, 60.226385809000121], + [-148.204090949999909, 60.220160223000065], + [-148.18976803299995, 60.211086330000157], + [-148.185617641999897, 60.196519273000135], + [-148.191354946999866, 60.183417059000149], + [-148.210194464999915, 60.155829169000143], + [-148.187611456999946, 60.165513414000102], + [-148.160145636999914, 60.213080145], + [-148.14130611899995, 60.232163804], + [-148.132679816999854, 60.234198309000121], + [-148.118845180999955, 60.234523830000128], + [-148.105946417999917, 60.230861721000096], + [-148.100331183999941, 60.220933335], + [-148.102528449999909, 60.209133205000015], + [-148.108347133999871, 60.201117255000085], + [-148.164906378999888, 60.149074611000017], + [-148.18883216099988, 60.134751695000134], + [-148.216745571999894, 60.12909577000012], + [-148.278635219999899, 60.127264716000141], + [-148.298573370999861, 60.136460679000137], + [-148.285959438999896, 60.162665106000148], + [-148.303049282999922, 60.164007880000057], + [-148.322987433999913, 60.172593492000075], + [-148.333119269999884, 60.170111395000148], + [-148.367868618999921, 60.11823151200015], + [-148.373036261999914, 60.086737372000059], + [-148.387928839999887, 60.058498440000065], + [-148.411610480999911, 60.038560288999989], + [-148.442982550999943, 60.032294012000037], + [-148.442982550999943, 60.025458075000031], + [-148.407460089999859, 60.018052476000136], + [-148.401966925999943, 60.015529690000122], + [-148.403879360999895, 60.007066148], + [-148.406931118999893, 60.003241278000147], + [-148.407582160999937, 59.999579169000114], + [-148.401966925999943, 59.991359768], + [-148.435373501999891, 59.959295966000028], + [-148.451364712999919, 59.955023505000113], + [-148.470936652999882, 59.970892645000148], + [-148.49901282499988, 60.013251044000143], + [-148.51805579299986, 60.028509833000115], + [-148.546009894999884, 60.032294012000037], + [-148.534413214999887, 60.013128973000065], + [-148.535511847999942, 59.997015692], + [-148.546986456999889, 59.984849351000108], + [-148.566477016999954, 59.977687893000066], + [-148.54784094999988, 59.969631252000127], + [-148.561756964999944, 59.95709870000006], + [-148.645578579999949, 59.92316315300009], + [-148.655873175999886, 59.923041083000115], + [-148.66576087099989, 59.931138414000046], + [-148.66454016799986, 59.939764716000141], + [-148.657460089999915, 59.946966864000089], + [-148.649647589999915, 59.950995184000149], + [-148.665231899999924, 59.955796617000047], + [-148.680287238999938, 59.954738674000097], + [-148.695261196999951, 59.951727606000176], + [-148.710519985999923, 59.950995184000149], + [-148.723011847999942, 59.953843492000019], + [-148.745106574999909, 59.962144273000078], + [-148.758900519999941, 59.964056708000115], + [-148.787831183999913, 59.958563544000114], + [-148.844186977999897, 59.937201239000146], + [-148.874989386999857, 59.937323309000121], + [-148.892323370999947, 59.945990302000112], + [-148.926014777999853, 59.971502997000115], + [-148.95067298099994, 59.977687893000066], + [-149.002023891999954, 59.967271226], + [-149.023182745999861, 59.967678127000099], + [-149.01899166599992, 59.9845238300001], + [-149.074777798999946, 59.96946849199999], + [-149.10688229099992, 59.96898021], + [-149.12140865799995, 59.991359768], + [-149.109486456999889, 60.002752997000172], + [-149.054392055999926, 60.037746486000074], + [-149.038807745999947, 60.052801825000088], + [-149.070139126999891, 60.060939846000011], + [-149.103098110999895, 60.058091539000074], + [-149.134755011999943, 60.047512111000017], + [-149.192738410999937, 60.014105536000145], + [-149.200184699999909, 60.008368231000176], + [-149.205189581999946, 59.99823639500012], + [-149.20641028599988, 59.987616278000175], + [-149.208851691999882, 59.977972723], + [-149.217600063999896, 59.970892645000148], + [-149.218617316999939, 59.955308335000055], + [-149.233957485999895, 59.939886786000116], + [-149.244496222999942, 59.926092841000028], + [-149.231271938999896, 59.915594794000143], + [-149.240834113999881, 59.902736721000124], + [-149.257883266999954, 59.888251044000171], + [-149.275257941999939, 59.877264716000028], + [-149.285878058999884, 59.874660549000041], + [-149.293080206999889, 59.887640692000119], + [-149.290598110999895, 59.924994208000086], + [-149.299672003999888, 59.947170315000122], + [-149.300404425999915, 59.956366278000118], + [-149.299509243999921, 59.974269924000069], + [-149.304880337999862, 59.977850653000033], + [-149.31611080599987, 59.979437567000062], + [-149.326039191999882, 59.984320380000142], + [-149.327463344999956, 59.997503973000093], + [-149.321400519999855, 60.00104401200015], + [-149.298329230999911, 60.006537177], + [-149.293324347999942, 60.011786200000088], + [-149.30016028599988, 60.023138739000061], + [-149.315174933999913, 60.025051174000012], + [-149.341135219999899, 60.022406317000119], + [-149.354115363999881, 60.090969143000066], + [-149.362863735999952, 60.111273505000057], + [-149.383656378999945, 60.12238190300009], + [-149.408680792999945, 60.123724677000084], + [-149.429880337999947, 60.114813544000143], + [-149.436227993999864, 60.103216864000117], + [-149.442005988999938, 60.083400783000016], + [-149.444406704999892, 60.062892971000153], + [-149.440744594999927, 60.049709377000013], + [-149.423044399999924, 60.022406317000119], + [-149.418527798999889, 60.018052476000136], + [-149.38890540299991, 59.997503973000093], + [-149.41828365799995, 59.991278387000037], + [-149.432484503999945, 59.986151434000121], + [-149.444162563999953, 59.977687893000066], + [-149.448801235999895, 59.96808502800009], + [-149.452626105999883, 59.945054429000137], + [-149.457834438999896, 59.937323309000121], + [-149.472157355999855, 59.931586005000142], + [-149.484079555999926, 59.932928778000033], + [-149.496449347999942, 59.936468817000119], + [-149.512440558999941, 59.937323309000121], + [-149.526966925999886, 59.932114976000108], + [-149.554636196999866, 59.91347890800013], + [-149.563669399999895, 59.909409898], + [-149.576852993999921, 59.897609768], + [-149.60614986899995, 59.845526434000149], + [-149.625070766999897, 59.833685614], + [-149.627878383999928, 59.828314520000148], + [-149.620350714999859, 59.816595770000063], + [-149.608469204999921, 59.804877020000063], + [-149.598093227999925, 59.799546617000104], + [-149.586171027999882, 59.789374091000141], + [-149.580677863999853, 59.786525783000016], + [-149.571237758999928, 59.785101630000142], + [-149.539743618999921, 59.786525783000016], + [-149.546498175999886, 59.774725653000147], + [-149.548898891999897, 59.766099351000051], + [-149.54832923099994, 59.758978583], + [-149.546579555999926, 59.751776434000149], + [-149.530100063999953, 59.73826732], + [-149.522653774999867, 59.727972723000065], + [-149.526722785999937, 59.717596747000172], + [-149.537546352999925, 59.716498114000117], + [-149.550974087999919, 59.723211981000148], + [-149.57323157499988, 59.738104559000121], + [-149.588083462999919, 59.742254950000145], + [-149.635935024999952, 59.744940497000059], + [-149.600534633999956, 59.766302802], + [-149.594960089999944, 59.772202867000132], + [-149.60187740799995, 59.782700914000102], + [-149.618275519999941, 59.784572658000073], + [-149.636789516999954, 59.783880927000112], + [-149.649606899999895, 59.786525783000016], + [-149.644968227999868, 59.801947333000143], + [-149.671986456999917, 59.817084052000141], + [-149.666696743999921, 59.830552476000136], + [-149.660023566999882, 59.840399481000148], + [-149.645090298999946, 59.873928127000099], + [-149.642160610999923, 59.885484117000104], + [-149.65009518099987, 59.912258205000015], + [-149.670277472999913, 59.939846096000124], + [-149.696970180999926, 59.95978424700003], + [-149.724720831999917, 59.964056708000115], + [-149.740834113999881, 59.948472398000135], + [-149.738596157999893, 59.890855210000083], + [-149.748890753999916, 59.864691473000121], + [-149.765939907999893, 59.839667059000121], + [-149.776966925999943, 59.835353908000016], + [-149.799794074999937, 59.841131903000175], + [-149.829945441999882, 59.856675523], + [-149.846994594999899, 59.858343817], + [-149.868112758999928, 59.847967841000084], + [-149.855091925999943, 59.843166408000016], + [-149.841135219999899, 59.83519114800005], + [-149.792551235999923, 59.799750067000062], + [-149.769113735999952, 59.786525783000016], + [-149.750355597999885, 59.704657294000143], + [-149.75263424399995, 59.682847398000106], + [-149.746083136999857, 59.667181708000143], + [-149.75654049399995, 59.662054755000113], + [-149.774362758999928, 59.664862372000172], + [-149.789865688999953, 59.67324453300013], + [-149.808542446999923, 59.687445380000142], + [-149.813954230999855, 59.693019924000154], + [-149.806223110999952, 59.710109768], + [-149.807240363999938, 59.717596747000172], + [-149.821481899999924, 59.725490627000127], + [-149.857045050999886, 59.733587958000058], + [-149.871815558999884, 59.741522528000033], + [-149.911569790999863, 59.773993231000119], + [-149.919911261999943, 59.779038804000052], + [-149.963002081999889, 59.783351955000157], + [-150.018666144999884, 59.798529364000146], + [-150.031686977999868, 59.799261786000059], + [-150.038563605999883, 59.792547919000029], + [-150.040638800999886, 59.77562083500014], + [-149.97797604099992, 59.751776434000149], + [-149.972727016999926, 59.746405341000113], + [-149.960886196999951, 59.72748444200009], + [-149.951975063999924, 59.723089911], + [-149.927357550999915, 59.721136786000145], + [-149.916493292999917, 59.717596747000172], + [-149.957468227999954, 59.669826565000122], + [-150.002674933999913, 59.64203522300015], + [-150.01268469999988, 59.628241278000147], + [-150.031198696999894, 59.637111721000096], + [-150.042347785999908, 59.649481512000037], + [-150.060495571999923, 59.676662502000127], + [-150.074655727999925, 59.685532945], + [-150.097727016999897, 59.695542710000083], + [-150.119252081999917, 59.700344143000066], + [-150.128773566999911, 59.693426825000145], + [-150.120676235999895, 59.680975653000061], + [-150.104685024999867, 59.67210521], + [-150.09312903599988, 59.662054755000113], + [-150.098378058999941, 59.645575262000037], + [-150.106922980999855, 59.62982819200009], + [-150.107126430999926, 59.614935614000117], + [-150.100209113999938, 59.602728583000058], + [-150.087839321999866, 59.594671942000119], + [-150.110300258999871, 59.580023505000028], + [-150.122670050999915, 59.575018622000144], + [-150.135609503999945, 59.572984117000132], + [-150.150217251999948, 59.576320705000157], + [-150.167469855999855, 59.591376044000171], + [-150.17719479099992, 59.594671942000119], + [-150.198353644999912, 59.586981512000094], + [-150.199452277999853, 59.568833726], + [-150.189401821999866, 59.548081773000021], + [-150.17719479099992, 59.532049872000115], + [-150.236887173999889, 59.533840236000103], + [-150.256784633999871, 59.52610911699999], + [-150.245472785999908, 59.497870184000121], + [-150.279733852999868, 59.496405341000141], + [-150.29124915299991, 59.492865302000084], + [-150.326242641999897, 59.475978908000073], + [-150.347971157999893, 59.469956773], + [-150.369862433999913, 59.46946849199999], + [-150.389475063999896, 59.477443752000127], + [-150.38227291599992, 59.479234117000132], + [-150.369862433999913, 59.483872789000074], + [-150.361520962999947, 59.484808661000145], + [-150.375843878999945, 59.495184637000037], + [-150.383249477999925, 59.497870184000121], + [-150.369821743999921, 59.502020575000145], + [-150.35570227799991, 59.504461981000091], + [-150.343332485999952, 59.508856512000179], + [-150.334828253999916, 59.518377997000172], + [-150.349924282999922, 59.518744208], + [-150.357492641999897, 59.52570221600017], + [-150.358876105999855, 59.535874742000132], + [-150.355336066999882, 59.546291408000016], + [-150.344797329999921, 59.55556875200007], + [-150.315297003999945, 59.563910223000121], + [-150.303456183999884, 59.569891669000143], + [-150.294667120999918, 59.58234284100017], + [-150.294667120999918, 59.592108466000113], + [-150.295847133999928, 59.601060289000046], + [-150.290476040999891, 59.611151434000092], + [-150.270090298999889, 59.626898505000057], + [-150.266346808999856, 59.635931708000058], + [-150.273386196999923, 59.649359442000062], + [-150.250721808999884, 59.667710679000109], + [-150.229074673999889, 59.695502020000092], + [-150.22435462099989, 59.715399481000176], + [-150.252268032999922, 59.710150458], + [-150.278797980999911, 59.692084052000084], + [-150.354359503999888, 59.602280992000047], + [-150.379587368999864, 59.587551174000069], + [-150.393177863999938, 59.576727606000148], + [-150.424265102999925, 59.532049872000115], + [-150.465199347999942, 59.494452216000113], + [-150.469309048999889, 59.478176174000069], + [-150.479481574999937, 59.467352606000176], + [-150.492746548999889, 59.465765692000147], + [-150.506174282999893, 59.477443752000127], + [-150.501576300999943, 59.494289455000128], + [-150.541940883999899, 59.515285549000097], + [-150.553334113999881, 59.535711981000148], + [-150.545114712999947, 59.550441799000154], + [-150.505848761999943, 59.581854559000178], + [-150.49250240799995, 59.600897528000175], + [-150.530100063999924, 59.601874091000141], + [-150.616688605999911, 59.564398505000113], + [-150.656971808999856, 59.552476304], + [-150.656971808999856, 59.546291408000016], + [-150.637440558999913, 59.541205145000092], + [-150.614328579999949, 59.528753973000065], + [-150.593576626999948, 59.513006903000118], + [-150.581247524999895, 59.497870184000121], + [-150.580515102999954, 59.481919664000102], + [-150.593576626999948, 59.474107164000102], + [-150.636463995999918, 59.463120835000055], + [-150.636463995999918, 59.456976630000085], + [-150.614369269999941, 59.450425523000021], + [-150.604725714999859, 59.445013739000146], + [-150.609323696999894, 59.438666083000115], + [-150.629709438999896, 59.429632880000113], + [-150.653065558999884, 59.423895575000031], + [-150.728627081999889, 59.422186591000028], + [-150.733957485999952, 59.414780992000047], + [-150.742624477999925, 59.3985863300001], + [-150.754628058999856, 59.382391669000143], + [-150.769968227999925, 59.374945380000057], + [-150.788278774999867, 59.371486721000068], + [-150.84906979099992, 59.34369538], + [-150.856271938999953, 59.339260158000044], + [-150.863880988999881, 59.335516669000086], + [-150.917673305999926, 59.326564846000068], + [-150.917307094999927, 59.317084052000055], + [-150.908762173999889, 59.302639065], + [-150.886341925999886, 59.275051174000097], + [-150.89195716099988, 59.257513739000146], + [-150.93110104099992, 59.248236395000092], + [-150.965891079999892, 59.234442450000174], + [-150.958607550999886, 59.203680731000091], + [-150.996571417999888, 59.226548570000105], + [-151.011545376999919, 59.241644598000036], + [-151.00951087099989, 59.255194403000175], + [-150.996408657999922, 59.268133856000176], + [-150.998036261999943, 59.272650458000143], + [-151.008168097999885, 59.274400132000139], + [-151.020090298999946, 59.278753973000121], + [-151.034982876999891, 59.292466539000046], + [-151.042551235999952, 59.297186591000141], + [-151.05418860599994, 59.299261786000088], + [-151.065988735999895, 59.295884507000054], + [-151.078358527999853, 59.28925202], + [-151.092477993999893, 59.285101630000057], + [-151.121693488999938, 59.29393138200011], + [-151.176625128999916, 59.301011460000083], + [-151.228708462999947, 59.316351630000113], + [-151.243478969999956, 59.318426825000145], + [-151.258046027999853, 59.317694403000118], + [-151.273304816999939, 59.312933661000116], + [-151.257639126999862, 59.298407294000171], + [-151.235910610999895, 59.296535549000012], + [-151.213124152999853, 59.296942450000117], + [-151.194528774999867, 59.28937409100017], + [-151.180978969999899, 59.279364325000088], + [-151.129953579999892, 59.258286851000079], + [-151.109201626999919, 59.253363348], + [-151.09935462099989, 59.248968817000119], + [-151.095163540999863, 59.241278387000094], + [-151.097238735999895, 59.232611395], + [-151.102731899999924, 59.22467682500006], + [-151.110340949999852, 59.218939520000063], + [-151.146311001999919, 59.209540106000063], + [-151.161610480999883, 59.207709052000084], + [-151.182606574999909, 59.217433986000017], + [-151.211862758999956, 59.22329336100016], + [-151.222116665999891, 59.224188544000143], + [-151.274606899999924, 59.221625067000147], + [-151.29442298099994, 59.224188544000143], + [-151.349191860999895, 59.24209219], + [-151.372914191999882, 59.246527411000088], + [-151.389108852999925, 59.25531647300015], + [-151.396839972999942, 59.258286851000079], + [-151.409616665999891, 59.260077216000141], + [-151.417836066999882, 59.259100653000175], + [-151.501291469999899, 59.234686591000028], + [-151.51976477799991, 59.224188544000143], + [-151.50804602799991, 59.221177476000051], + [-151.48570716099988, 59.21954987200003], + [-151.472604946999923, 59.216701565000093], + [-151.489084438999896, 59.199652411000116], + [-151.516713019999912, 59.196763414000102], + [-151.575306769999941, 59.203680731000091], + [-151.601267055999926, 59.201727606000148], + [-151.613962368999921, 59.19749583500014], + [-151.615956183999941, 59.189398505000028], + [-151.60383053299995, 59.182033596000011], + [-151.576283331999917, 59.18821849199999], + [-151.568104620999918, 59.175767320000077], + [-151.682810024999867, 59.163031317], + [-151.741525844999899, 59.167141018000152], + [-151.766794399999924, 59.193101304000052], + [-151.760365363999938, 59.209702867000104], + [-151.758615688999924, 59.219712632], + [-151.763376430999926, 59.224188544000143], + [-151.840280727999925, 59.213446356000034], + [-151.867909308999913, 59.213690497000087], + [-151.893137173999889, 59.220648505000085], + [-151.91075598899991, 59.237860419000086], + [-151.894846157999893, 59.238104559000035], + [-151.886667446999894, 59.241603908000044], + [-151.887155727999868, 59.248358466000141], + [-151.897084113999881, 59.258286851000079], + [-151.90648352799991, 59.261460679000137], + [-151.944935675999886, 59.265082098000093], + [-151.961781378999888, 59.270656643], + [-151.977162238999938, 59.279364325000088], + [-151.986683722999942, 59.292792059000178], + [-151.98582923099994, 59.312933661000116], + [-151.976429816999911, 59.325425523000135], + [-151.959462042999945, 59.337347723000065], + [-151.925038214999915, 59.353908596000124], + [-151.896595831999889, 59.35956452000012], + [-151.815174933999913, 59.353908596000124], + [-151.835397915999948, 59.367580471000068], + [-151.881296352999925, 59.385321356000148], + [-151.900217251999948, 59.398871161000116], + [-151.894032355999883, 59.412827867000104], + [-151.864206508999871, 59.426906643000123], + [-151.807728644999884, 59.443833726000108], + [-151.74828040299991, 59.445624091000113], + [-151.718251105999855, 59.450873114], + [-151.705311652999853, 59.466864325000088], + [-151.689076300999915, 59.480292059000178], + [-151.651844855999911, 59.485907294000086], + [-151.46821041599992, 59.478094794000086], + [-151.441517706999889, 59.466864325000088], + [-151.423166469999956, 59.453924872000087], + [-151.400624152999882, 59.445135809000121], + [-151.382191535999937, 59.444769598], + [-151.37633216099988, 59.456976630000085], + [-151.390004035999937, 59.473781643000095], + [-151.440419074999852, 59.493638414000102], + [-151.451486782999893, 59.508124091000141], + [-151.441477016999897, 59.532212632000082], + [-151.417469855999883, 59.546291408000016], + [-151.36274166599992, 59.55996328300013], + [-151.34125729099992, 59.56118398600016], + [-151.291696743999864, 59.55609772300015], + [-151.273304816999939, 59.55996328300013], + [-151.26630611899995, 59.571193752000156], + [-151.265207485999895, 59.584662177000141], + [-151.258859829999892, 59.596136786000088], + [-151.236073370999947, 59.600897528000175], + [-151.19477291599992, 59.597601630000142], + [-151.174143032999893, 59.600083726000079], + [-151.174020962999919, 59.611151434000092], + [-151.200266079999949, 59.631781317000119], + [-151.20136471299989, 59.641180731000148], + [-151.18455969999988, 59.655503648000135], + [-151.170969204999921, 59.661810614000089], + [-151.141794399999867, 59.670355536], + [-151.129953579999892, 59.676662502000127], + [-151.120432094999899, 59.687160549000012], + [-151.107411261999914, 59.710679429000081], + [-151.098947719999899, 59.720689195000048], + [-151.075144008999899, 59.737697658000016], + [-150.992787238999881, 59.779038804000052], + [-151.023508266999954, 59.795558986000046], + [-151.066273566999939, 59.79677969000015], + [-151.109120245999918, 59.786525783000016], + [-151.154489712999919, 59.759955145000063], + [-151.212513800999886, 59.744940497000059], + [-151.381337042999917, 59.674953518000123], + [-151.417307094999899, 59.669826565000122], + [-151.430978969999956, 59.666205145000063], + [-151.44953365799995, 59.657416083], + [-151.465769008999899, 59.646307684000149], + [-151.472604946999923, 59.635687567000119], + [-151.464670376999948, 59.62592194200009], + [-151.446359829999892, 59.618150132], + [-151.430368618999893, 59.612494208], + [-151.425729946999951, 59.61151764500012], + [-151.410511847999885, 59.607733466000084], + [-151.430653449999909, 59.611802476000051], + [-151.746937628999945, 59.682847398000106], + [-151.780832485999895, 59.692206122000144], + [-151.831369594999899, 59.716213283000101], + [-151.871774868999921, 59.749457098], + [-151.882883266999954, 59.786525783000016], + [-151.877064581999917, 59.79677969000015], + [-151.848703579999892, 59.820013739000061], + [-151.841867641999954, 59.83128489800005], + [-151.83141028599988, 59.855454820000077], + [-151.739125128999945, 59.988226630000142], + [-151.733265753999888, 60.008368231000176], + [-151.724964972999913, 60.024888414000046], + [-151.706044074999909, 60.041693427000055], + [-151.465443488999881, 60.187689520000092], + [-151.429636196999951, 60.216376044000057], + [-151.403269008999956, 60.252427476], + [-151.390614386999886, 60.299790757000139], + [-151.393177863999881, 60.344427802000027], + [-151.390248175999886, 60.359442450000031], + [-151.376047329999949, 60.371812242000075], + [-151.362009243999921, 60.377752997000087], + [-151.348500128999945, 60.380926825000145], + [-151.317982550999886, 60.382391669000029], + [-151.305978969999899, 60.386948960000055], + [-151.301869269999941, 60.398016669000114], + [-151.300648566999911, 60.423325914000046], + [-151.282948370999918, 60.487860419000114], + [-151.280751105999911, 60.508978583000115], + [-151.282785610999952, 60.537054755000113], + [-151.289499477999897, 60.550767320000048], + [-151.321766730999911, 60.574164130000142], + [-151.333851691999939, 60.592189846000068], + [-151.35496985599994, 60.639634507], + [-151.377797003999945, 60.658270575000174], + [-151.39586341099988, 60.678941148], + [-151.411732550999886, 60.702093817000119], + [-151.417307094999899, 60.718166408000016], + [-151.396921352999925, 60.738023179000109], + [-151.323801235999952, 60.739081122000172], + [-151.297556118999921, 60.748602606000148], + [-151.276071743999893, 60.767279364000146], + [-151.253000454999949, 60.775336005000085], + [-151.071481899999924, 60.785345770000063], + [-151.043690558999884, 60.796332098000121], + [-151.02607174399995, 60.810044664000046], + [-150.763254360999895, 60.926703192000147], + [-150.603260870999918, 60.978501695000077], + [-150.45250403599988, 61.03424713700015], + [-150.38703365799995, 61.047267971000153], + [-150.334828253999916, 61.032863674000097], + [-150.322214321999923, 61.014593817000033], + [-150.310007290999863, 60.989447333000115], + [-150.293894008999899, 60.967271226000079], + [-150.258493618999893, 60.954575914000102], + [-150.236520962999862, 60.940415757000082], + [-150.225290493999864, 60.937241929000109], + [-150.043771938999896, 60.916815497000059], + [-149.977853969999927, 60.938788153000147], + [-149.930775519999941, 60.944728908000073], + [-149.850168423999889, 60.973863023000135], + [-149.824045376999948, 60.978216864000117], + [-149.752919074999909, 60.973822333000143], + [-149.71703040299991, 60.967515367000104], + [-149.68309485599994, 60.957709052000084], + [-149.638661261999914, 60.939642645000063], + [-149.621693488999881, 60.937241929000109], + [-149.526112433999884, 60.937241929000109], + [-149.507069464999887, 60.934027411000059], + [-149.467274542999917, 60.919907945000134], + [-149.126088019999855, 60.88361237200003], + [-149.103586391999954, 60.878078518], + [-149.090687628999945, 60.872056382], + [-149.078114386999857, 60.863755601000108], + [-149.059030727999868, 60.856350002000127], + [-149.039621548999889, 60.852443752000127], + [-149.025827602999954, 60.854681708000115], + [-149.06086178299995, 60.897284247000144], + [-149.111643032999893, 60.928615627000013], + [-149.16930091099988, 60.946966864000061], + [-149.225046352999954, 60.950873114000061], + [-149.334055141999926, 60.930324611000017], + [-149.357899542999917, 60.933823960000026], + [-149.378041144999941, 60.946966864000061], + [-149.483713344999899, 60.982407945000077], + [-149.516346808999941, 60.988592841000028], + [-149.617990688999896, 60.994614976000136], + [-149.783151821999894, 61.045355536], + [-149.829172329999949, 61.073431708], + [-149.909047003999859, 61.094305731000148], + [-150.067331508999928, 61.155747789000046], + [-150.057362433999913, 61.172308661000116], + [-150.038197394999884, 61.193060614000032], + [-150.015614386999914, 61.206366278000033], + [-149.995310024999895, 61.200751044000029], + [-149.97594153599988, 61.19847239800005], + [-149.944813605999883, 61.207709052000112], + [-149.914133266999897, 61.22134023600016], + [-149.895985480999883, 61.232082424000069], + [-149.889963344999899, 61.240423895000148], + [-149.875559048999889, 61.273098049000097], + [-149.868885870999947, 61.28253815300009], + [-149.810658331999946, 61.33136627800009], + [-149.796742316999939, 61.339016018000123], + [-149.781686977999925, 61.340725002000127], + [-149.766590949999909, 61.340236721000153], + [-149.75263424399995, 61.341294664000102], + [-149.730580206999861, 61.351874091000141], + [-149.704213019999884, 61.384222723000065], + [-149.683420376999891, 61.399359442000062], + [-149.655710415999891, 61.40900299700003], + [-149.32001705599987, 61.479152736000103], + [-149.279530402999939, 61.481634833000115], + [-149.261057094999899, 61.48663971600017], + [-149.24555416599992, 61.498968817000119], + [-149.278553839999859, 61.506537177000055], + [-149.416859503999888, 61.498968817000119], + [-149.403187628999945, 61.505804755000142], + [-149.428171352999925, 61.513169664000131], + [-149.64867102799991, 61.48818594], + [-149.757394985999952, 61.453355210000083], + [-149.795602993999921, 61.424505927000055], + [-149.814645962999919, 61.414211330000128], + [-149.861887173999889, 61.395941473000065], + [-149.879709438999953, 61.38613515800013], + [-149.897409633999928, 61.371283270000063], + [-149.911000128999888, 61.352687893000066], + [-149.919748501999891, 61.310370184000149], + [-149.927845831999889, 61.28929271000014], + [-149.938913540999948, 61.271226304000109], + [-149.95063229099992, 61.259426174000154], + [-149.98375403599988, 61.24632396], + [-150.280506964999915, 61.25995514500012], + [-150.293894008999899, 61.265611070000105], + [-150.30565344999988, 61.275213934000092], + [-150.309763149999924, 61.281439520000063], + [-150.314401821999951, 61.281642971000011], + [-150.327992316999911, 61.273098049000097], + [-150.32469641799986, 61.272162177000027], + [-150.323190883999928, 61.266262111000074], + [-150.324086066999911, 61.258693752000042], + [-150.327992316999911, 61.252590236000131], + [-150.334584113999881, 61.250921942000119], + [-150.450550910999937, 61.252590236000131], + [-150.499623175999886, 61.261664130000142], + [-150.541737433999941, 61.286566473000065], + [-150.560658331999861, 61.323675848000093], + [-150.540272589999887, 61.369289455000128], + [-150.563099738999881, 61.36542389500012], + [-150.587106899999924, 61.351996161000116], + [-150.600534633999928, 61.332424221000153], + [-150.584950324999937, 61.294623114], + [-150.604237433999884, 61.29132721600017], + [-150.633615688999896, 61.298651434000178], + [-150.656971808999856, 61.314032294000114], + [-150.691273566999939, 61.277533270000063], + [-150.730905727999954, 61.253973700000117], + [-150.891550258999871, 61.214300848], + [-150.947743292999888, 61.211004950000145], + [-150.957590298999889, 61.20791250200007], + [-150.975290493999921, 61.194240627000127], + [-150.989084438999896, 61.191107489000061], + [-151.001535610999923, 61.190008856000119], + [-151.028553839999887, 61.182562567000147], + [-151.039906378999945, 61.177435614000117], + [-151.060902472999885, 61.163275458], + [-151.128163214999915, 61.094183661], + [-151.140370245999918, 61.078192450000088], + [-151.15477454299986, 61.064439195], + [-151.17711341099988, 61.053941148000106], + [-151.243641730999911, 61.03925202], + [-151.31086178299995, 61.032863674000097], + [-151.32359778599988, 61.029689846000039], + [-151.349558071999894, 61.01557038], + [-151.362375454999921, 61.012355861000131], + [-151.437814907999865, 61.019842841000084], + [-151.476144985999895, 61.01703522300015], + [-151.52245032499988, 61.008612372000087], + [-151.566761847999942, 60.994533596000153], + [-151.612782355999883, 60.965277411000116], + [-151.646229620999918, 60.950995184000035], + [-151.681223110999952, 60.928656317], + [-151.725046352999897, 60.924465236000074], + [-151.746937628999945, 60.916815497000059], + [-151.752145962999919, 60.898138739000061], + [-151.795277472999942, 60.868963934000121], + [-151.807728644999884, 60.84788646], + [-151.806263800999886, 60.837469794000114], + [-151.80101477799991, 60.82831452000012], + [-151.71776282499988, 60.743068752000156], + [-151.711374477999954, 60.725734768000066], + [-151.746286587999862, 60.718166408000016], + [-151.779733852999925, 60.72406647300015], + [-151.840687628999945, 60.751125393000095], + [-151.869821743999893, 60.759100653000033], + [-151.867746548999889, 60.75462474199999], + [-151.864369269999941, 60.743312893000095], + [-151.862375454999892, 60.738674221000068], + [-151.910104946999866, 60.731105861000017], + [-151.931507941999911, 60.725287177000055], + [-151.96430416599992, 60.703436591000028], + [-152.013050910999937, 60.680731512000179], + [-152.031198696999923, 60.67658112200003], + [-152.044545050999943, 60.675726630000142], + [-152.051380988999881, 60.673163153000033], + [-152.061594204999892, 60.662909247000087], + [-152.062733527999939, 60.66046784100017], + [-152.101307745999918, 60.613836981000148], + [-152.109364386999943, 60.608303127000127], + [-152.120961066999882, 60.603583075000031], + [-152.143137173999946, 60.597560940000122], + [-152.171254035999937, 60.580877997000087], + [-152.23289954299986, 60.559881903000061], + [-152.23290106700415, 60.559880906006711], + [-152.315500454999949, 60.505845445000048], + [-152.329579230999911, 60.492499091000056], + [-152.340077277999853, 60.476141669000029], + [-152.343373175999886, 60.457424221000153], + [-152.335926886999914, 60.436957098000093], + [-152.317575649999867, 60.420558986000074], + [-152.294504360999895, 60.412787177], + [-152.245920376999948, 60.402167059000035], + [-152.245920376999948, 60.395982163999989], + [-152.368112758999871, 60.357855536], + [-152.397409633999899, 60.333929755000142], + [-152.400380011999914, 60.326808986000074], + [-152.403920050999886, 60.309800523000106], + [-152.40766354099992, 60.303208726000051], + [-152.415964321999894, 60.297756252000013], + [-152.467762824999909, 60.282294012000179], + [-152.512644008999928, 60.274603583000058], + [-152.53453528599988, 60.265692450000031], + [-152.596302863999881, 60.228461005000142], + [-152.616159633999956, 60.224269924000012], + [-152.633981899999924, 60.229885158000016], + [-152.651844855999911, 60.238959052000112], + [-152.671742316999911, 60.24518463700015], + [-152.805531378999945, 60.235093492000104], + [-152.84984290299991, 60.24518463700015], + [-152.840891079999949, 60.256048895000063], + [-152.824940558999941, 60.256577867000132], + [-152.806019660999937, 60.25299713700015], + [-152.787831183999941, 60.251410223000121], + [-152.787831183999941, 60.258856512000094], + [-152.83954830599987, 60.268377997000115], + [-152.863596157999893, 60.26581452], + [-152.890817837999919, 60.251410223000121], + [-152.898548956999917, 60.275376695], + [-152.89781653599988, 60.295152085000112], + [-152.905588344999899, 60.308539130000113], + [-152.938588019999941, 60.313462632000082], + [-153.012196417999917, 60.313462632000082], + [-153.048451300999943, 60.30963776200015], + [-153.08263098899991, 60.299790757000139], + [-153.105458136999914, 60.285589911000116], + [-153.103627081999946, 60.277085679], + [-153.086984829999892, 60.277329820000134], + [-153.065256313999953, 60.289536851000108], + [-153.037953253999945, 60.299383856000034], + [-152.996896938999953, 60.300848700000088], + [-152.956613735999895, 60.293890692], + [-152.931833462999919, 60.278713283000016], + [-152.929758266999897, 60.270249742000075], + [-152.933461066999939, 60.253119208000143], + [-152.931833462999919, 60.24518463700015], + [-152.922718878999916, 60.237209377000013], + [-152.897409633999871, 60.227362372000087], + [-152.862660285999937, 60.207709052000141], + [-152.76732337099989, 60.190619208], + [-152.742868618999921, 60.17470937700007], + [-152.732533331999946, 60.170111395000148], + [-152.724313930999926, 60.169338283000044], + [-152.706532355999855, 60.17121002800009], + [-152.698435024999924, 60.170111395000148], + [-152.683054165999891, 60.162827867000132], + [-152.676625128999888, 60.157945054000052], + [-152.681630011999914, 60.155829169000143], + [-152.686268683999941, 60.151597398000135], + [-152.684437628999888, 60.142482815000122], + [-152.677805141999897, 60.133368231000148], + [-152.667958136999886, 60.12909577000012], + [-152.657907680999926, 60.126369533000073], + [-152.590280727999954, 60.092230536000059], + [-152.578561977999868, 60.081203518000123], + [-152.57860266799986, 60.070135809000178], + [-152.597971157999893, 60.042669989000146], + [-152.610951300999886, 60.0333519550001], + [-152.630116339999915, 60.032294012000037], + [-152.630116339999915, 60.025458075000031], + [-152.626332160999908, 60.024155992000132], + [-152.617136196999923, 60.019273179000052], + [-152.664784308999913, 59.994696356000034], + [-152.677927212999862, 59.9845238300001], + [-152.69013424399995, 59.966986395000148], + [-152.704579230999911, 59.930650132000054], + [-152.718861456999889, 59.915594794000143], + [-152.737904425999886, 59.908392645000035], + [-152.808298305999898, 59.896307684000121], + [-152.831166144999912, 59.887396552000084], + [-152.842884894999884, 59.884222723], + [-152.856678839999915, 59.882066148000106], + [-152.905466274999924, 59.886216539000046], + [-152.914418097999942, 59.885484117000104], + [-152.934803839999915, 59.879624742000075], + [-153.021188930999926, 59.888902085000112], + [-153.046009894999884, 59.886664130000142], + [-153.091908331999889, 59.876898505], + [-153.229725714999859, 59.868475653000147], + [-153.243356899999924, 59.862453518000152], + [-153.262033657999893, 59.848456122000087], + [-153.279164191999939, 59.832342841000113], + [-153.28807532499988, 59.820013739000061], + [-153.256540493999864, 59.82123444200009], + [-153.226429816999939, 59.828680731000148], + [-153.196400519999884, 59.832709052000112], + [-153.150827602999925, 59.819647528000147], + [-153.13768469999988, 59.821478583000115], + [-153.125233527999853, 59.82526276200015], + [-153.059274868999921, 59.833644924000012], + [-153.013864712999919, 59.832342841000113], + [-153.005686001999919, 59.827053127000127], + [-153.000070766999926, 59.813177802000055], + [-153.000070766999926, 59.800360419000114], + [-153.005238410999937, 59.792710679], + [-153.011341925999915, 59.785956122000144], + [-153.01923580599987, 59.762844143], + [-153.044422980999855, 59.722357489000061], + [-153.055287238999938, 59.710150458], + [-153.079294399999895, 59.70136139500012], + [-153.139475063999953, 59.686916408000073], + [-153.151560024999952, 59.67324453300013], + [-153.166249152999853, 59.664007880000085], + [-153.199818488999881, 59.654201565000122], + [-153.236643032999893, 59.647894598], + [-153.260812954999892, 59.649359442000062], + [-153.267689581999889, 59.656683661000059], + [-153.278309699999909, 59.676906643000095], + [-153.28807532499988, 59.682847398000106], + [-153.307443813999896, 59.681830145000148], + [-153.315988735999895, 59.67206452], + [-153.314808722999885, 59.660874742000019], + [-153.305124477999925, 59.655503648000135], + [-153.301014777999882, 59.652411200000145], + [-153.306467251999919, 59.645575262000037], + [-153.317209438999924, 59.6388207050001], + [-153.329050258999871, 59.635687567000119], + [-153.34601803299995, 59.636908270000148], + [-153.391102667999917, 59.649359442000062], + [-153.399118618999864, 59.650458075000117], + [-153.42524166599992, 59.649359442000062], + [-153.42524166599992, 59.655503648000135], + [-153.409128383999956, 59.663560288999989], + [-153.399037238999881, 59.67210521], + [-153.358957485999866, 59.720770575000031], + [-153.345407680999898, 59.725531317000119], + [-153.322214321999866, 59.717596747000172], + [-153.336374477999897, 59.730536200000174], + [-153.381459113999881, 59.741400458000058], + [-153.45258541599992, 59.792669989], + [-153.451527472999942, 59.775458075000174], + [-153.45445716099988, 59.761542059000092], + [-153.453928188999896, 59.746893622000087], + [-153.442616339999915, 59.72748444200009], + [-153.445423956999946, 59.716782945000048], + [-153.465443488999938, 59.674627997000115], + [-153.473011847999885, 59.662339585000055], + [-153.49071204299986, 59.650091864], + [-153.513172980999883, 59.641791083000115], + [-153.537098761999943, 59.637152411000088], + [-153.559030727999954, 59.635687567000119], + [-153.57323157499988, 59.642157294000029], + [-153.598622199999909, 59.672756252000127], + [-153.610829230999883, 59.682847398000106], + [-153.604115363999938, 59.68740469000015], + [-153.601185675999915, 59.688788153000033], + [-153.596547003999888, 59.689683335000112], + [-153.596547003999888, 59.697170315], + [-153.622670050999943, 59.69521719000015], + [-153.62596594999988, 59.684759833000058], + [-153.621449347999913, 59.670111395000063], + [-153.623890753999945, 59.655503648000135], + [-153.642933722999942, 59.64834219], + [-153.69562740799995, 59.644680080000128], + [-153.70641028599988, 59.631984768000095], + [-153.620432094999956, 59.628241278000147], + [-153.612172003999888, 59.626695054000109], + [-153.570383266999954, 59.609116929000081], + [-153.566029425999943, 59.609279690000122], + [-153.569284633999899, 59.594671942000119], + [-153.586415167999917, 59.567450262000122], + [-153.621937628999888, 59.555243231000034], + [-153.791818813999896, 59.54291413], + [-153.811879035999851, 59.556138414000131], + [-153.833607550999915, 59.559637762000122], + [-153.855783657999893, 59.555609442000062], + [-153.877145962999947, 59.546291408000016], + [-153.839914516999954, 59.54437897300015], + [-153.811512824999937, 59.538275458000058], + [-153.786936001999919, 59.527533270000148], + [-153.741078253999945, 59.497748114000146], + [-153.725778774999867, 59.482245184000035], + [-153.724720831999917, 59.466050523], + [-153.747385219999899, 59.45010000200007], + [-153.751454230999911, 59.440252997000144], + [-153.780222133999871, 59.433986721000011], + [-153.843576626999919, 59.429632880000113], + [-153.896595831999946, 59.432196356000119], + [-153.912464972999885, 59.429632880000113], + [-153.921498175999886, 59.424261786000059], + [-153.93573971299989, 59.40839264500012], + [-153.945993618999921, 59.402289130000142], + [-154.027943488999938, 59.388617255], + [-154.035104946999894, 59.389349677000141], + [-154.047556118999921, 59.3946800800001], + [-154.055856899999895, 59.395453192000119], + [-154.060780402999939, 59.393255927000112], + [-154.071522589999859, 59.383937893000095], + [-154.076364712999919, 59.381170966000028], + [-154.094715949999909, 59.378851630000057], + [-154.145253058999913, 59.381170966000028], + [-154.111643032999893, 59.360052802000112], + [-154.066232876999891, 59.348334052000112], + [-154.022653774999867, 59.35146719], + [-153.994455532999893, 59.374945380000057], + [-153.984852667999917, 59.370550848000093], + [-153.974680141999897, 59.368109442000147], + [-153.964182094999899, 59.367254950000145], + [-153.953439907999893, 59.368150132000139], + [-153.953439907999893, 59.361314195000105], + [-154.027211066999911, 59.341701565000065], + [-154.11192786399991, 59.304877020000092], + [-154.127756313999953, 59.29417552300005], + [-154.140207485999866, 59.281683661000145], + [-154.145253058999913, 59.26821523600016], + [-154.149891730999911, 59.235337632000082], + [-154.144357876999891, 59.224066473000093], + [-154.123524542999917, 59.224188544000143], + [-154.130848761999914, 59.208156643000066], + [-154.146311001999948, 59.202541408000158], + [-154.186227993999921, 59.203680731000091], + [-154.17943274599989, 59.183539130000057], + [-154.19749915299991, 59.173163153000147], + [-154.225290493999864, 59.169378973000121], + [-154.247670050999886, 59.168890692000147], + [-154.228464321999923, 59.162665106000091], + [-154.220326300999943, 59.161444403000175], + [-154.229481574999909, 59.155707098], + [-154.239491339999887, 59.15159739800005], + [-154.250111456999946, 59.149237372000087], + [-154.261301235999952, 59.14842357], + [-154.252878383999899, 59.130519924000126], + [-154.235056118999921, 59.127590236000017], + [-154.193063930999926, 59.134751695000048], + [-154.177316860999895, 59.129787502000013], + [-154.171945766999926, 59.118597723000093], + [-154.176991339999944, 59.107123114000146], + [-154.192453579999892, 59.101263739], + [-154.182932094999899, 59.095526434000035], + [-154.178781704999949, 59.093817450000031], + [-154.178781704999949, 59.086981512000094], + [-154.198353644999912, 59.07697174700003], + [-154.199818488999881, 59.055853583000115], + [-154.187326626999862, 59.034979559000035], + [-154.165109829999892, 59.02558014500012], + [-154.140370245999918, 59.031154690000122], + [-154.121083136999914, 59.044378973000065], + [-154.103220180999926, 59.060248114], + [-154.082590298999889, 59.07330963700015], + [-154.021962042999917, 59.083929755000113], + [-153.894764777999853, 59.065619208000058], + [-153.836130337999919, 59.066555080000128], + [-153.81586666599992, 59.072455145000063], + [-153.808094855999911, 59.073797919000143], + [-153.711537238999881, 59.070746161000059], + [-153.688791469999927, 59.063666083], + [-153.668690558999884, 59.052679755000142], + [-153.651804165999891, 59.038560289000102], + [-153.632883266999897, 59.017320054000137], + [-153.623890753999945, 59.011297919000029], + [-153.583078579999892, 59.000555731000119], + [-153.572702602999897, 58.994818427000141], + [-153.560902472999942, 58.990708726], + [-153.541574673999889, 58.989406643000095], + [-153.522328253999859, 58.990708726], + [-153.510609503999888, 58.994818427000141], + [-153.497425910999937, 59.003485419000029], + [-153.487172003999888, 59.002508856000148], + [-153.466867641999897, 58.991400458000115], + [-153.427235480999855, 58.98118724199999], + [-153.415028449999909, 58.97402578300013], + [-153.380686001999948, 58.940659898000078], + [-153.369984503999916, 58.936183986000017], + [-153.33930416599992, 58.936183986000017], + [-153.331613735999895, 58.933783270000063], + [-153.332264777999939, 58.928208726000051], + [-153.335642055999955, 58.921454169000114], + [-153.335886196999923, 58.915716864000146], + [-153.322621222999885, 58.894476630000057], + [-153.312855597999942, 58.889064846000011], + [-153.294911261999886, 58.888373114000061], + [-153.294911261999886, 58.881537177000055], + [-153.309071417999917, 58.877346096000124], + [-153.363148566999882, 58.874090887000179], + [-153.349964972999942, 58.868353583], + [-153.334299282999893, 58.866115627000042], + [-153.270822719999956, 58.871405341000084], + [-153.259470180999898, 58.868882554], + [-153.264149542999917, 58.857367255000142], + [-153.289133266999926, 58.844142971000011], + [-153.338368292999917, 58.855047919000086], + [-153.363148566999882, 58.847398179000052], + [-153.377552863999881, 58.829046942], + [-153.395212368999864, 58.782171942000147], + [-153.408192511999857, 58.761135158000016], + [-153.424672003999859, 58.744370835], + [-153.43883216099988, 58.733587958], + [-153.527658657999922, 58.696600653000147], + [-153.56025143099987, 58.694769598000065], + [-153.576120571999923, 58.690863348000093], + [-153.582875128999945, 58.679185288999989], + [-153.590280727999925, 58.658596096000153], + [-153.60875403599988, 58.644435940000122], + [-153.633127407999922, 58.63495514500012], + [-153.690663214999915, 58.621568101000108], + [-153.795521613999938, 58.613999742000075], + [-153.863758917999945, 58.619818427000112], + [-153.899403449999909, 58.616685289000046], + [-153.912464972999885, 58.600327867000132], + [-153.910227016999897, 58.592718817], + [-153.906076626999948, 58.588120835000055], + [-153.899769660999908, 58.586249091000084], + [-153.904286261999857, 58.579901434000149], + [-153.91270911399991, 58.5685082050001], + [-153.918894008999871, 58.556097723000065], + [-153.929636196999894, 58.540838934000092], + [-153.929514126999919, 58.537909247000172], + [-153.930856899999924, 58.535630601000108], + [-153.93919837099989, 58.53204987200003], + [-153.946278449999937, 58.532660223000093], + [-153.954335089999887, 58.535874742000047], + [-153.963327602999897, 58.53729889500012], + [-153.973337368999893, 58.53204987200003], + [-153.961252407999893, 58.528509833000058], + [-153.932362433999856, 58.523993231000091], + [-153.925526495999947, 58.51845937700007], + [-153.930124477999868, 58.511542059000178], + [-153.942372199999852, 58.502915757000082], + [-153.956654425999943, 58.495266018000152], + [-153.967111782999922, 58.491115627000013], + [-154.001332160999908, 58.491115627000013], + [-154.042347785999908, 58.496079820000048], + [-154.081654425999915, 58.49518463700015], + [-154.110463019999941, 58.477484442000062], + [-154.096424933999913, 58.467718817000119], + [-154.080067511999886, 58.436712958], + [-154.068918423999889, 58.422186591000141], + [-154.067087368999893, 58.417425848000065], + [-154.068959113999881, 58.41303131700009], + [-154.069203253999888, 58.409857489000032], + [-154.062367316999882, 58.408596096000011], + [-154.031686977999868, 58.408596096000011], + [-154.020741339999915, 58.404282945000105], + [-154.008046027999853, 58.394964911000059], + [-154.000233527999853, 58.38556549700003], + [-154.004343227999925, 58.381293036000116], + [-154.015248175999886, 58.379543361000046], + [-154.06187903599988, 58.36456940300009], + [-154.088571743999921, 58.360744533000073], + [-154.190052863999938, 58.360744533000073], + [-154.196848110999952, 58.354966539000102], + [-154.191029425999886, 58.352118231000176], + [-154.194813605999911, 58.346584377000156], + [-154.206654425999886, 58.339667059000149], + [-154.217600063999953, 58.336615302000055], + [-154.243397589999887, 58.334621486000017], + [-154.300119594999956, 58.320379950000117], + [-154.318714972999857, 58.310736395000148], + [-154.322743292999917, 58.298732815000122], + [-154.364369269999884, 58.285101630000085], + [-154.355783657999893, 58.2794457050001], + [-154.351389126999891, 58.27138906500015], + [-154.353505011999914, 58.263332424000041], + [-154.364369269999884, 58.257757880000113], + [-154.353098110999895, 58.255438544000143], + [-154.343820766999954, 58.259466864000117], + [-154.334421352999925, 58.266017971000011], + [-154.322743292999917, 58.27138906500015], + [-154.308338995999947, 58.27342357], + [-154.281361456999889, 58.274155992000104], + [-154.268137173999861, 58.278265692000062], + [-154.27196204299986, 58.295640367000047], + [-154.253529425999943, 58.29987213700015], + [-154.206654425999886, 58.298732815000122], + [-154.202992316999939, 58.302069403000147], + [-154.199208136999914, 58.308294989000117], + [-154.194040493999921, 58.314846096000011], + [-154.186227993999921, 58.319159247000087], + [-154.171376105999855, 58.321763414000102], + [-154.165394660999937, 58.319159247000087], + [-154.161122199999909, 58.313137111000103], + [-154.121327277999939, 58.279730536000116], + [-154.151722785999908, 58.270982164000046], + [-154.206044074999909, 58.267564195000048], + [-154.247670050999886, 58.257757880000113], + [-154.187611456999889, 58.250677802000055], + [-154.165394660999937, 58.239406643000152], + [-154.165720180999955, 58.216782945], + [-154.188059048999889, 58.198187567], + [-154.221180792999917, 58.191392320000077], + [-154.255604620999861, 58.19399648600016], + [-154.281809048999889, 58.203111070000048], + [-154.289255337999862, 58.200018622000172], + [-154.302316860999952, 58.196275132000139], + [-154.287546352999868, 58.181586005000142], + [-154.235788540999948, 58.155340887000122], + [-154.227162238999938, 58.141058661000116], + [-154.246774868999921, 58.126410223], + [-154.280344204999949, 58.133042710000083], + [-154.337025519999912, 58.162095445000048], + [-154.349110480999911, 58.145086981000176], + [-154.345448370999861, 58.133368231000091], + [-154.335764126999891, 58.122219143000066], + [-154.32957923099994, 58.106878973000121], + [-154.336008266999954, 58.085394598], + [-154.352772589999859, 58.08222077000012], + [-154.370065883999871, 58.090643622000087], + [-154.386463995999861, 58.117621161000145], + [-154.405995245999947, 58.127997137000037], + [-154.427805141999897, 58.136419989], + [-154.443186001999948, 58.144476630000113], + [-154.44823157499988, 58.151434637000122], + [-154.451283331999889, 58.160142320000105], + [-154.452748175999943, 58.169623114], + [-154.453114386999943, 58.178900458000058], + [-154.458363410999937, 58.187730210000112], + [-154.470529751999919, 58.194240627000013], + [-154.494089321999866, 58.203111070000048], + [-154.467722133999871, 58.147040106000034], + [-154.460397915999863, 58.115057684000035], + [-154.469838019999884, 58.089829820000077], + [-154.499134894999884, 58.08779531500015], + [-154.577015753999888, 58.125718492000075], + [-154.610788540999863, 58.120550848000065], + [-154.605905727999897, 58.113755601000136], + [-154.553415493999921, 58.083075262000037], + [-154.553049282999922, 58.079575914000046], + [-154.545643683999941, 58.071112372000115], + [-154.551950649999867, 58.052313544000143], + [-154.566273566999882, 58.033514716000113], + [-154.583119269999884, 58.024969794000086], + [-154.631214972999942, 58.031195380000142], + [-154.64476477799991, 58.035467841000141], + [-154.648304816999882, 58.045477606000034], + [-154.648386196999951, 58.057033596000068], + [-154.65172278599988, 58.065985419000086], + [-154.669911261999886, 58.072333075000031], + [-154.69273841099988, 58.068915106000119], + [-154.715687628999888, 58.058905341000028], + [-154.734242316999882, 58.045477606000034], + [-154.737904425999943, 58.039455471000124], + [-154.741403774999924, 58.025091864000061], + [-154.747303839999859, 58.017523505000028], + [-154.755563930999955, 58.012600002000127], + [-154.766916469999927, 58.008246161000059], + [-154.778879360999952, 58.005072333], + [-154.788889126999948, 58.003892320000077], + [-154.810414191999882, 58.008124091000084], + [-154.856271938999953, 58.026922919000029], + [-154.881052212999919, 58.031195380000142], + [-154.973866339999915, 58.031195380000142], + [-155.023142055999926, 58.025580145000148], + [-155.040150519999884, 58.017238674000069], + [-155.028513149999895, 58.003892320000077], + [-155.044992641999897, 57.976385809000035], + [-155.063465949999909, 57.962388414000074], + [-155.088612433999884, 57.957424221000011], + [-155.125314907999893, 57.956732489000089], + [-155.076730923999946, 57.916164455000157], + [-155.068674282999893, 57.897365627000013], + [-155.097401495999947, 57.880316473000065], + [-155.137928839999859, 57.873114325000031], + [-155.255075649999952, 57.880316473000065], + [-155.224436001999948, 57.85814036699999], + [-155.220285610999895, 57.850287177000112], + [-155.227243618999921, 57.842108466000113], + [-155.243397589999859, 57.836859442000119], + [-155.275217251999891, 57.833197333000058], + [-155.308216925999886, 57.838812567000062], + [-155.325510219999956, 57.839544989], + [-155.336984829999892, 57.833197333000058], + [-155.334665493999921, 57.826483466000028], + [-155.309681769999941, 57.798407294000114], + [-155.345651821999894, 57.805324611000017], + [-155.358102993999921, 57.805243231000034], + [-155.358102993999921, 57.798407294000114], + [-155.33617102799991, 57.790716864], + [-155.312082485999866, 57.775213934000178], + [-155.29914303299995, 57.756822007000139], + [-155.31029212099989, 57.74042389500012], + [-155.321278449999937, 57.736558335000112], + [-155.351185675999915, 57.730536200000031], + [-155.375436977999925, 57.728338934000035], + [-155.38536536399991, 57.726141669000057], + [-155.394398566999911, 57.725734768000123], + [-155.405873175999886, 57.729559637000065], + [-155.433420376999891, 57.745794989], + [-155.490101691999882, 57.762884833000143], + [-155.504872199999852, 57.764308986000017], + [-155.529367641999897, 57.772365627000127], + [-155.55109615799995, 57.788031317000119], + [-155.574777798999889, 57.798814195000105], + [-155.605091925999858, 57.79222239800005], + [-155.61742102799991, 57.780666408000016], + [-155.628163214999915, 57.762884833000143], + [-155.635731574999852, 57.743353583000058], + [-155.638620571999894, 57.726467190000065], + [-155.62791907499988, 57.708156643], + [-155.588612433999856, 57.689642645000092], + [-155.590809699999852, 57.675523179000052], + [-155.611805792999917, 57.665838934000092], + [-155.703195766999954, 57.648260809000149], + [-155.761830206999889, 57.648260809000149], + [-155.771433071999866, 57.644720770000092], + [-155.760080532999893, 57.637152411000116], + [-155.734201626999891, 57.627142645000148], + [-155.732614712999947, 57.621649481000119], + [-155.734486456999917, 57.615952867000047], + [-155.738107876999891, 57.611029364000089], + [-155.741647915999948, 57.607326565000122], + [-155.735544399999867, 57.594671942000062], + [-155.738392706999889, 57.572007554000109], + [-155.734201626999891, 57.558823960000055], + [-155.741647915999948, 57.552069403000033], + [-155.79320227799991, 57.544582424000154], + [-155.805734829999921, 57.547919012000179], + [-155.810129360999895, 57.555731512000179], + [-155.811838344999899, 57.564927476000051], + [-155.816151495999918, 57.572495835], + [-155.825876430999955, 57.579250393000123], + [-155.831532355999855, 57.579575914000074], + [-155.847767706999889, 57.562567450000088], + [-155.861805792999945, 57.558905341000141], + [-155.904042120999861, 57.556545315000093], + [-155.912953253999916, 57.548285223], + [-155.924183722999913, 57.531398830000015], + [-155.950062628999916, 57.534369208000115], + [-155.97870846299989, 57.547919012000179], + [-156.020456508999928, 57.576808986000103], + [-156.034047003999888, 57.571437893000123], + [-156.034006313999896, 57.555609442], + [-156.015370245999918, 57.53839752800009], + [-156.015370245999918, 57.53156159100017], + [-156.082142706999861, 57.537176825000174], + [-156.104725714999915, 57.53156159100017], + [-156.091257290999948, 57.519435940000065], + [-156.051136847999942, 57.517889716000028], + [-156.04271399599989, 57.507310288999989], + [-156.042917446999923, 57.489691473000065], + [-156.04149329299986, 57.474839585], + [-156.035511847999942, 57.463568427000027], + [-156.022206183999913, 57.456447658000158], + [-156.060658331999946, 57.430243231000119], + [-156.112741665999863, 57.447170315], + [-156.167591925999886, 57.473618882000082], + [-156.214588995999918, 57.476263739000061], + [-156.221872524999924, 57.468329169000114], + [-156.226063605999855, 57.456854559000149], + [-156.228260870999918, 57.442206122000144], + [-156.238758917999917, 57.436957098000065], + [-156.268259243999893, 57.429632880000057], + [-156.30882727799991, 57.42487213700015], + [-156.338856574999852, 57.41543203300013], + [-156.471628383999928, 57.339789130000057], + [-156.493723110999895, 57.338324286], + [-156.520741339999859, 57.333075262000094], + [-156.544626430999926, 57.322699286], + [-156.55724036399991, 57.305609442000062], + [-156.554636196999923, 57.281683661], + [-156.536488410999908, 57.279120184000092], + [-156.39195716099988, 57.314846096000124], + [-156.354847785999851, 57.31134674700003], + [-156.344349738999881, 57.311835028000118], + [-156.34833736899995, 57.300482489000146], + [-156.339955206999889, 57.285305080000157], + [-156.344349738999881, 57.270900783000101], + [-156.349191860999952, 57.270412502000013], + [-156.350290493999921, 57.272162177], + [-156.350046352999954, 57.274969794000143], + [-156.351185675999886, 57.277655341000028], + [-156.357370571999866, 57.25214264500012], + [-156.384022589999915, 57.240545966000028], + [-156.447377081999946, 57.229925848000065], + [-156.447377081999946, 57.223089911000059], + [-156.430897589999944, 57.22272370000006], + [-156.410593227999925, 57.218654690000093], + [-156.39325924399995, 57.210638739000146], + [-156.385935024999952, 57.198879299000154], + [-156.380970831999889, 57.19367096600017], + [-156.358102993999893, 57.190497137000094], + [-156.351185675999886, 57.188299872000115], + [-156.346018032999893, 57.177801825000031], + [-156.349069790999891, 57.173325913999989], + [-156.354847785999851, 57.170355536000059], + [-156.35802161399991, 57.164740302000055], + [-156.375925258999871, 57.143255927000141], + [-156.460642055999955, 57.125637111000017], + [-156.488352016999954, 57.113836981000034], + [-156.470570441999882, 57.10150788], + [-156.453602667999888, 57.086493231000148], + [-156.470814581999889, 57.07916901200015], + [-156.48180091099988, 57.086004950000174], + [-156.489003058999913, 57.096421617000075], + [-156.495187954999892, 57.099554755000142], + [-156.502064581999889, 57.089585679000052], + [-156.50328528599988, 57.063218492000047], + [-156.508859829999892, 57.05174388200011], + [-156.523060675999915, 57.04584381700009], + [-156.542795376999948, 57.045396226], + [-156.562611456999889, 57.048163153000033], + [-156.577097133999928, 57.05174388200011], + [-156.589955206999946, 57.057074286000088], + [-156.625477667999917, 57.079046942], + [-156.631703253999888, 57.072821356000034], + [-156.625477667999917, 57.058579820000134], + [-156.645375128999916, 57.058579820000134], + [-156.565378383999928, 57.004543361000131], + [-156.549794074999909, 56.982855536000059], + [-156.574208136999886, 56.983221747000172], + [-156.657053188999896, 56.997951565000065], + [-156.668283657999893, 56.998521226000136], + [-156.678334113999881, 57.000189520000148], + [-156.686960415999891, 57.003973700000145], + [-156.691151495999918, 57.009182033000158], + [-156.704335089999859, 57.031236070000048], + [-156.708729620999947, 57.033392645000063], + [-156.715565558999856, 57.038072007000082], + [-156.724436001999919, 57.042792059000178], + [-156.776356574999909, 57.05174388200011], + [-156.784779425999943, 57.049139716000113], + [-156.791493292999917, 57.042669989000032], + [-156.794911261999914, 57.034654039000074], + [-156.793080206999946, 57.027533270000035], + [-156.78648841099988, 57.023016669000143], + [-156.776682094999927, 57.017889716000141], + [-156.767526821999923, 57.011786200000145], + [-156.762684699999852, 57.003973700000145], + [-156.76341712099989, 56.992010809000035], + [-156.769154425999886, 56.986883856000119], + [-156.776722785999908, 56.983465887000122], + [-156.783192511999914, 56.976629950000088], + [-156.786203579999921, 56.967759507000054], + [-156.787953253999916, 56.951076565], + [-156.789987758999928, 56.941880601000136], + [-156.797556118999893, 56.924261786000116], + [-156.809437628999945, 56.906683661000088], + [-156.824452277999853, 56.897284247000144], + [-156.841501430999926, 56.903998114], + [-156.88935299399995, 56.952093817000062], + [-156.904530402999939, 56.961818752000042], + [-156.927438930999926, 56.970526434000092], + [-156.949289516999897, 56.976223049000097], + [-156.961293097999885, 56.976629950000088], + [-156.951527472999885, 56.966498114000146], + [-156.946726040999863, 56.954575914000102], + [-156.94749915299991, 56.943304755000028], + [-156.95445716099988, 56.935044664000102], + [-156.950021938999896, 56.930080471000068], + [-156.944691535999937, 56.919989325000088], + [-156.94086666599992, 56.914536851000079], + [-156.953317837999947, 56.911078192000062], + [-156.996083136999943, 56.907700914000046], + [-157.030466274999895, 56.890082098000121], + [-157.040150519999855, 56.887274481000176], + [-157.050363735999895, 56.878159898], + [-157.078439907999893, 56.837103583000086], + [-157.091664191999939, 56.825832424000097], + [-157.112741665999948, 56.830511786000031], + [-157.169789191999854, 56.854641018000123], + [-157.190988735999952, 56.849676825000174], + [-157.183583136999857, 56.84202708500014], + [-157.162464972999942, 56.831284898000135], + [-157.147816535999937, 56.815130927000084], + [-157.159982876999919, 56.791083075000031], + [-157.189401821999923, 56.776271877000156], + [-157.215199347999942, 56.780340887000122], + [-157.23924719999988, 56.791489976000136], + [-157.286854620999861, 56.80170319200009], + [-157.305897589999944, 56.811590887000179], + [-157.365427212999862, 56.851467190000065], + [-157.391957160999937, 56.863226630000142], + [-157.419667120999918, 56.867377020000092], + [-157.443918423999918, 56.856512762000094], + [-157.459665493999864, 56.846421617000132], + [-157.465891079999921, 56.84003327], + [-157.468454555999926, 56.828924872000172], + [-157.463815883999928, 56.815822658000016], + [-157.452707485999895, 56.810939846000124], + [-157.439198370999918, 56.809149481000148], + [-157.427438930999926, 56.805365302000112], + [-157.417551235999895, 56.796779690000037], + [-157.408802863999938, 56.785467841000028], + [-157.404245571999894, 56.773749091000141], + [-157.406320766999897, 56.763739325000145], + [-157.412220831999946, 56.768947658000158], + [-157.419504360999952, 56.773138739000089], + [-157.427113410999908, 56.775295315000093], + [-157.433949347999913, 56.774318752000013], + [-157.438343878999888, 56.77073802300005], + [-157.444284633999928, 56.764634507000054], + [-157.448435024999867, 56.758937893000066], + [-157.447336391999926, 56.756903387000037], + [-157.462473110999923, 56.756577867000104], + [-157.509103969999927, 56.763739325000145], + [-157.531931118999921, 56.752264716000028], + [-157.55223548099994, 56.730414130000085], + [-157.573435024999924, 56.716620184000149], + [-157.598744269999884, 56.729641018000152], + [-157.605580206999889, 56.722154038999989], + [-157.59516354099992, 56.717596747000059], + [-157.58653723899991, 56.71234772300015], + [-157.580637173999889, 56.70538971600017], + [-157.578236456999946, 56.695461330000157], + [-157.570790167999945, 56.702337958000086], + [-157.557850714999944, 56.685532945000077], + [-157.535389777999939, 56.677557684000092], + [-157.48578854099992, 56.674994208], + [-157.480580206999946, 56.670640367000104], + [-157.463124152999853, 56.65143463700015], + [-157.457875128999888, 56.647040106000148], + [-157.455189581999889, 56.64321523600016], + [-157.462595180999898, 56.634507554000081], + [-157.473825649999895, 56.625433661000059], + [-157.482655402999939, 56.62034739800005], + [-157.512440558999856, 56.620103257000025], + [-157.583811001999948, 56.631293036000116], + [-157.608713344999899, 56.623480536000116], + [-157.63377844999988, 56.611151434000178], + [-157.664662238999938, 56.611395575000117], + [-157.694162563999896, 56.620306708000058], + [-157.715443488999881, 56.633978583], + [-157.750803188999896, 56.674261786000059], + [-157.772897915999863, 56.68439362200003], + [-157.80418860599994, 56.678127346000068], + [-157.837717251999891, 56.665920315], + [-157.848255988999938, 56.657660223], + [-157.861561652999853, 56.652289130000057], + [-157.897897915999948, 56.654852606000148], + [-157.91344153599988, 56.653876044000086], + [-157.932687954999892, 56.642808335000055], + [-157.965524868999921, 56.612372137000094], + [-157.982370571999923, 56.606105861000131], + [-158.033273891999926, 56.59870026200015], + [-158.038807745999918, 56.596991278000147], + [-158.044504360999923, 56.592962958000086], + [-158.048898891999897, 56.587632554000109], + [-158.050607876999891, 56.582220770000063], + [-158.055124477999954, 56.578558661000116], + [-158.085397915999948, 56.578802802000055], + [-158.105213995999861, 56.572211005], + [-158.118763800999943, 56.562892971000124], + [-158.127634243999893, 56.549505927000141], + [-158.133168097999885, 56.530340887000179], + [-158.075021938999953, 56.538316148000135], + [-157.963612433999941, 56.569973049000012], + [-157.881947394999941, 56.570624091000141], + [-157.868967251999948, 56.569037177000112], + [-157.858835415999891, 56.565130927000112], + [-157.84992428299995, 56.555568752000127], + [-157.848093227999868, 56.546372789000074], + [-157.847279425999886, 56.537176825000088], + [-157.841420050999915, 56.527289130000085], + [-157.836903449999852, 56.51650625200007], + [-157.842966274999952, 56.507310289000102], + [-157.862538214999915, 56.493475653000118], + [-157.877145962999947, 56.478216864000146], + [-157.884144660999937, 56.476141669000029], + [-157.899769660999937, 56.475734768], + [-157.956532355999883, 56.48261139500012], + [-158.067982550999886, 56.511908270000148], + [-158.12633216099988, 56.516669012000037], + [-158.152902798999946, 56.513251044000029], + [-158.165028449999909, 56.507391669000086], + [-158.167917446999951, 56.496893622000115], + [-158.158680792999917, 56.489203192], + [-158.131906704999892, 56.496161200000088], + [-158.12633216099988, 56.486639716000084], + [-158.138295050999915, 56.465521552000084], + [-158.166330532999922, 56.458929755], + [-158.221913214999859, 56.462103583000058], + [-158.248972133999899, 56.457505601000136], + [-158.261586066999882, 56.45799388200011], + [-158.273752407999893, 56.46580638200011], + [-158.282053188999953, 56.46995677300005], + [-158.318104620999918, 56.475734768], + [-158.338693813999953, 56.475409247000087], + [-158.355051235999952, 56.471136786000088], + [-158.415720180999926, 56.446478583000086], + [-158.43101966099988, 56.438055731000034], + [-158.442982550999886, 56.428045966000141], + [-158.455311652999853, 56.41429271000014], + [-158.471424933999913, 56.400295315000065], + [-158.508493618999921, 56.37836334800015], + [-158.523548956999861, 56.365912177000112], + [-158.518259243999893, 56.360744533000044], + [-158.509958462999919, 56.345404364000089], + [-158.541086391999897, 56.342474677000055], + [-158.576771613999938, 56.330267645000092], + [-158.609811977999897, 56.313910223000065], + [-158.632801886999886, 56.298244533000101], + [-158.646433071999923, 56.270656643000066], + [-158.620106574999909, 56.256170966000028], + [-158.537220831999889, 56.249823309000092], + [-158.544422980999911, 56.25975169500002], + [-158.553537563999924, 56.267279364000061], + [-158.561268683999913, 56.275458075000145], + [-158.564564581999889, 56.287339585000112], + [-158.560495571999923, 56.299302476000051], + [-158.550852016999954, 56.308172919000086], + [-158.472971157999865, 56.342759507], + [-158.448190883999899, 56.340521552000027], + [-158.44163977799991, 56.311916408000044], + [-158.432687954999892, 56.317531643000123], + [-158.423695441999882, 56.320624091000113], + [-158.414987758999871, 56.321030992000104], + [-158.40693111899995, 56.318752346000124], + [-158.410227016999897, 56.312974351], + [-158.414377407999922, 56.298244533000101], + [-158.372751430999955, 56.318752346000124], + [-158.345448370999861, 56.325588283000158], + [-158.335926886999886, 56.323431708000058], + [-158.322214321999951, 56.314113674000012], + [-158.314768032999893, 56.311916408000044], + [-158.258737758999928, 56.305080471000011], + [-158.227284308999913, 56.296332098000121], + [-158.208241339999915, 56.283921617000104], + [-158.225900844999956, 56.268784898000106], + [-158.24775143099987, 56.255682684000035], + [-158.272287563999896, 56.246527411000059], + [-158.309803839999915, 56.24087148600016], + [-158.335316535999937, 56.231512762000037], + [-158.348866339999887, 56.229315497000059], + [-158.362131313999896, 56.23065827000012], + [-158.386586066999882, 56.235988674000097], + [-158.400705532999893, 56.236151434000149], + [-158.394764777999853, 56.228176174000012], + [-158.398304816999939, 56.220770575000117], + [-158.406442837999862, 56.212591864000032], + [-158.414377407999922, 56.202053127000156], + [-158.399891730999883, 56.205715236000103], + [-158.384388800999886, 56.213080145], + [-158.369211391999897, 56.217474677000084], + [-158.326405402999882, 56.200384833000143], + [-158.323109503999945, 56.19354889500012], + [-158.345448370999861, 56.181545315], + [-158.318308071999951, 56.17470937700007], + [-158.288156704999949, 56.185370184000121], + [-158.258290167999945, 56.200873114000117], + [-158.206044074999937, 56.21775950700011], + [-158.176950649999867, 56.234849351000051], + [-158.147328253999945, 56.245794989000117], + [-158.119496222999885, 56.236151434000149], + [-158.150624152999853, 56.229559637000179], + [-158.160755988999938, 56.225897528000033], + [-158.167836066999882, 56.22003815300009], + [-158.174020962999947, 56.212062893000123], + [-158.181223110999895, 56.205023505000057], + [-158.198312954999921, 56.199204820000105], + [-158.214344855999911, 56.185980536000059], + [-158.221913214999859, 56.181545315], + [-158.234323696999894, 56.180568752000042], + [-158.245594855999883, 56.182440497000087], + [-158.257191535999908, 56.182277736000046], + [-158.270334438999953, 56.17470937700007], + [-158.262888149999867, 56.167914130000057], + [-158.289662238999881, 56.161607164000102], + [-158.324045376999948, 56.15912506700009], + [-158.352040167999945, 56.150702216000028], + [-158.359730597999885, 56.126898505000142], + [-158.382394985999923, 56.135931708000058], + [-158.387766079999892, 56.152411200000031], + [-158.387521938999953, 56.169867255], + [-158.393259243999921, 56.181545315], + [-158.409657355999911, 56.180812893000066], + [-158.420765753999945, 56.16624583500014], + [-158.423288540999863, 56.147202867000047], + [-158.414377407999922, 56.133124091000113], + [-158.433461066999911, 56.132310288999989], + [-158.44163977799991, 56.133124091000113], + [-158.428171352999925, 56.113348700000174], + [-158.412302212999919, 56.094875393000152], + [-158.40758216099988, 56.078436591000141], + [-158.427967902999882, 56.064846096000011], + [-158.442087368999921, 56.085028387000037], + [-158.445749477999954, 56.094956773000135], + [-158.44163977799991, 56.106431382000082], + [-158.454294399999895, 56.109361070000105], + [-158.49970455599987, 56.106431382000082], + [-158.503244594999956, 56.101629950000088], + [-158.492990688999924, 56.090725002000013], + [-158.469593878999945, 56.071682033000016], + [-158.487009243999921, 56.059637762000094], + [-158.484608527999882, 56.042914130000085], + [-158.469309048999918, 56.032049872000087], + [-158.454172329999921, 56.040676174000097], + [-158.456898566999882, 56.043524481000034], + [-158.458729620999861, 56.046861070000077], + [-158.462147589999859, 56.051214911000059], + [-158.43407141799986, 56.042914130000085], + [-158.422800258999871, 56.023993231000148], + [-158.427561001999891, 56.006537177], + [-158.447865363999881, 56.002752997000172], + [-158.460194464999915, 56.009995835], + [-158.483631964999915, 56.032375393000038], + [-158.496286587999862, 56.037543036000116], + [-158.511057094999956, 56.033840236000074], + [-158.512074347999913, 56.022935289000102], + [-158.505197719999899, 56.009222723000065], + [-158.496286587999862, 55.996568101000108], + [-158.512562628999888, 55.995998440000122], + [-158.533640102999925, 56.004461981000176], + [-158.554758266999954, 56.017645575000031], + [-158.571400519999884, 56.030707098], + [-158.509958462999919, 56.051214911000059], + [-158.509958462999919, 56.058050848000065], + [-158.567453579999892, 56.047105210000112], + [-158.585642055999898, 56.040676174000097], + [-158.600941535999851, 56.040432033000158], + [-158.604685024999867, 56.052313544000114], + [-158.597238735999895, 56.066107489000032], + [-158.578846808999856, 56.071682033000016], + [-158.578846808999856, 56.078517971000124], + [-158.601918097999942, 56.08673737200003], + [-158.601551886999914, 56.100572007000139], + [-158.585519985999923, 56.113674221000011], + [-158.561146613999881, 56.11945221600017], + [-158.559885219999956, 56.124090887000094], + [-158.549305792999917, 56.146185614000089], + [-158.544056769999912, 56.153631903000147], + [-158.539865688999896, 56.154689846000011], + [-158.528065558999913, 56.152818101000051], + [-158.519154425999886, 56.154364325000088], + [-158.514759894999884, 56.153265692000147], + [-158.511301235999895, 56.153225002000156], + [-158.509958462999919, 56.157375393000095], + [-158.510202602999925, 56.16624583500014], + [-158.509958462999919, 56.167914130000057], + [-158.489003058999856, 56.176703192000119], + [-158.478871222999885, 56.183823960000083], + [-158.479237433999913, 56.191473700000088], + [-158.490589972999885, 56.195868231000176], + [-158.565907355999855, 56.195013739000089], + [-158.639637824999909, 56.202053127000156], + [-158.627674933999856, 56.185858466000084], + [-158.607777472999885, 56.178208726000079], + [-158.564564581999889, 56.167914130000057], + [-158.591175910999908, 56.152777411000059], + [-158.611887173999918, 56.135158596000124], + [-158.634592251999862, 56.120062567000119], + [-158.667591925999943, 56.112616278000147], + [-158.661447719999956, 56.131089585000083], + [-158.668202277999882, 56.145941473000121], + [-158.68333899599989, 56.152777411000059], + [-158.702341274999867, 56.147406317], + [-158.691883917999917, 56.136460679000137], + [-158.688832160999908, 56.125637111000131], + [-158.692616339999915, 56.115423895], + [-158.702341274999867, 56.106431382000082], + [-158.670114712999919, 56.098781643000152], + [-158.660633917999917, 56.092352606000034], + [-158.667591925999943, 56.078517971000124], + [-158.666330532999922, 56.061712958000115], + [-158.732248501999862, 56.045396226000108], + [-158.715402798999861, 56.030707098], + [-158.696522589999915, 56.028713283000158], + [-158.676014777999882, 56.030462958000058], + [-158.658070441999939, 56.028957424000012], + [-158.647084113999881, 56.017035223000065], + [-158.647084113999881, 55.999945380000113], + [-158.657541469999956, 55.990790106000034], + [-158.688059048999889, 55.982326565], + [-158.688059048999889, 55.976141669000029], + [-158.682565883999956, 55.974798895000148], + [-158.673044399999952, 55.970851955000157], + [-158.667591925999943, 55.969305731000119], + [-158.682932094999899, 55.95840078300013], + [-158.712025519999941, 55.954046942000147], + [-158.742909308999913, 55.955389716000028], + [-158.763783331999889, 55.961859442000119], + [-158.756418423999889, 55.967474677000141], + [-158.747914191999939, 55.971747137000065], + [-158.738718227999954, 55.974676825000174], + [-158.728993292999917, 55.976141669000029], + [-158.728993292999917, 55.982326565], + [-158.739125128999888, 55.992580471000124], + [-158.745554165999891, 56.001450913999989], + [-158.756540493999921, 56.007879950000088], + [-158.780506964999915, 56.010199286000145], + [-158.785104946999923, 56.007066148000078], + [-158.793690558999941, 55.992905992000047], + [-158.801014777999939, 55.989732163999989], + [-158.815378383999928, 55.991522528000175], + [-158.823109503999945, 55.996405341000141], + [-158.835804816999882, 56.013617255000057], + [-158.859445766999926, 56.012925523000106], + [-158.888254360999952, 55.98383209800015], + [-158.928293423999889, 55.920843817000119], + [-158.934519008999928, 55.920843817000119], + [-158.942331508999928, 55.931626695000134], + [-158.956776495999918, 55.936224677000084], + [-158.973866339999944, 55.936509507000025], + [-159.006296352999925, 55.9317894550001], + [-159.014108852999925, 55.929144598], + [-159.020741339999915, 55.924627997000144], + [-159.023752407999893, 55.916937567000119], + [-159.020130988999938, 55.910589911], + [-159.014271613999881, 55.906805731000176], + [-159.010202602999925, 55.907171942], + [-159.010935024999867, 55.901678778000147], + [-159.010243292999917, 55.897202867000104], + [-159.013905402999882, 55.894110419000114], + [-159.02757727799991, 55.892889716000084], + [-159.035471157999893, 55.894273179000081], + [-159.040394660999851, 55.897691148], + [-159.044789191999939, 55.902329820000105], + [-159.071481899999952, 55.920599677], + [-159.083811001999891, 55.92601146000014], + [-159.099313930999926, 55.928290106000091], + [-159.113636847999885, 55.926174221000096], + [-159.145008917999917, 55.916815497000144], + [-159.160715298999889, 55.914618231000148], + [-159.172434048999889, 55.911281643000123], + [-159.187001105999911, 55.896307684000092], + [-159.201649542999917, 55.892889716000084], + [-159.266713019999884, 55.889227606000063], + [-159.294260219999899, 55.879339911000116], + [-159.31867428299995, 55.859442450000031], + [-159.332834438999896, 55.877386786000088], + [-159.355905727999925, 55.879461981000091], + [-159.380848761999857, 55.87140534100017], + [-159.400624152999882, 55.859442450000031], + [-159.411081508999956, 55.842515367000047], + [-159.41633053299995, 55.802150783000101], + [-159.421701626999891, 55.790472723], + [-159.439076300999886, 55.7892113300001], + [-159.45555579299986, 55.801336981000176], + [-159.468698696999923, 55.818345445000048], + [-159.475697394999912, 55.831488348], + [-159.478830532999893, 55.846014716000141], + [-159.478830532999893, 55.86359284100017], + [-159.475697394999912, 55.882310289000046], + [-159.469553188999924, 55.900336005000085], + [-159.489450649999924, 55.900132554000109], + [-159.518177863999881, 55.896470445000077], + [-159.544992641999897, 55.889634507000054], + [-159.55890865799995, 55.87986888200011], + [-159.555287238999881, 55.865668036], + [-159.525257941999939, 55.836574611000131], + [-159.517933722999942, 55.821844794000057], + [-159.516794399999895, 55.811224677], + [-159.511708136999886, 55.793443101000108], + [-159.510487433999856, 55.783026434000121], + [-159.509348110999923, 55.778265692000119], + [-159.504709438999896, 55.771185614000061], + [-159.503651495999918, 55.766913153000147], + [-159.505848761999914, 55.760891018000152], + [-159.510812954999892, 55.758002020000035], + [-159.515736456999946, 55.756048895000063], + [-159.517933722999942, 55.75299713700015], + [-159.530100063999924, 55.739813544000029], + [-159.552601691999911, 55.721380927], + [-159.564442511999857, 55.704291083000143], + [-159.544626430999955, 55.694891669000029], + [-159.547474738999881, 55.683823960000083], + [-159.547963019999884, 55.673895575000174], + [-159.549427863999938, 55.664984442000147], + [-159.555165167999917, 55.657049872000172], + [-159.558583136999914, 55.653794664000131], + [-159.562123175999915, 55.649115302000112], + [-159.565134243999921, 55.646551825000117], + [-159.569162563999896, 55.64472077000012], + [-159.580189581999946, 55.642157294000029], + [-159.585560675999886, 55.639715887000179], + [-159.602162238999938, 55.627630927], + [-159.619862433999941, 55.611151434000092], + [-159.630686001999948, 55.593573309000149], + [-159.626535610999895, 55.578273830000015], + [-159.721058722999942, 55.567084052], + [-159.743234829999892, 55.572007554000052], + [-159.730213995999918, 55.579982815], + [-159.708973761999914, 55.597723700000117], + [-159.695423956999861, 55.605536200000088], + [-159.727121548999918, 55.603989976000051], + [-159.756906704999949, 55.598700262000179], + [-159.741688605999855, 55.613267320000105], + [-159.711293097999885, 55.619330145], + [-159.679798956999889, 55.616685289000102], + [-159.661325649999952, 55.605536200000088], + [-159.640817837999919, 55.612982489000089], + [-159.642282680999955, 55.620306708000086], + [-159.639393683999913, 55.626654364000032], + [-159.632923956999917, 55.63117096600017], + [-159.623402472999942, 55.632879950000174], + [-159.617014126999891, 55.635199286000116], + [-159.624745245999918, 55.640285549000154], + [-159.657541469999927, 55.652289130000085], + [-159.693308071999951, 55.660345770000035], + [-159.709706183999856, 55.667629299000126], + [-159.691273566999939, 55.67902252800009], + [-159.633371548999918, 55.701117255000085], + [-159.650095180999926, 55.711127020000063], + [-159.658029751999919, 55.718329169000086], + [-159.664540167999917, 55.735052802000112], + [-159.671498175999886, 55.736273505000142], + [-159.678578253999859, 55.736517645000092], + [-159.681752081999917, 55.742743231000063], + [-159.67796790299991, 55.752020575000088], + [-159.650746222999885, 55.786810614000146], + [-159.626210089999887, 55.804510809000149], + [-159.62523352799991, 55.812689520000063], + [-159.640817837999919, 55.825262762000065], + [-159.657053188999953, 55.832342841000113], + [-159.701852993999864, 55.843817450000145], + [-159.830393032999922, 55.852728583], + [-159.845773891999954, 55.851223049000126], + [-159.854685024999924, 55.841620184000149], + [-159.860544399999924, 55.818426825000031], + [-159.853382941999911, 55.803900458], + [-159.851389126999891, 55.794745184000121], + [-159.856800910999908, 55.790472723], + [-159.90461178299995, 55.783026434000121], + [-159.923085089999859, 55.789496161000116], + [-159.955270962999919, 55.815659898000078], + [-159.976633266999897, 55.818426825000031], + [-159.976633266999897, 55.810980536000059], + [-159.968942837999862, 55.806789455000043], + [-159.967111782999893, 55.801703192], + [-159.969186977999925, 55.786810614000146], + [-159.973133917999888, 55.777492580000015], + [-159.982492641999926, 55.777167059000178], + [-160.009592251999948, 55.785874742000075], + [-160.017770962999862, 55.791815497000087], + [-160.02672278599988, 55.796942450000088], + [-160.038075324999852, 55.797349351000108], + [-160.043649868999864, 55.792792059000149], + [-160.052113410999908, 55.776271877000099], + [-160.058542446999923, 55.770005601000136], + [-160.030873175999943, 55.735541083000115], + [-160.033558722999913, 55.726223049000069], + [-160.065378383999928, 55.722845770000148], + [-160.088002081999889, 55.728420315000065], + [-160.096669074999909, 55.728013414000046], + [-160.100168423999889, 55.719142971000011], + [-160.095651821999923, 55.714178778000147], + [-160.065378383999928, 55.701117255000085], + [-160.096913214999944, 55.700751044000143], + [-160.11078854099992, 55.703802802000055], + [-160.123727993999921, 55.71198151200015], + [-160.130482550999886, 55.720404364000117], + [-160.13524329299986, 55.728013414000046], + [-160.142160610999895, 55.733791408000016], + [-160.155384894999912, 55.736517645000092], + [-160.149891730999883, 55.72101471600017], + [-160.143137173999946, 55.688788153000033], + [-160.133656378999945, 55.674465236000131], + [-160.164051886999914, 55.657131252000156], + [-160.238718227999925, 55.664740302], + [-160.25719153599988, 55.653998114000089], + [-160.25719153599988, 55.646551825000117], + [-160.349964972999885, 55.646551825000117], + [-160.396229620999861, 55.653021552000112], + [-160.419422980999911, 55.653876044000114], + [-160.442128058999856, 55.646551825000117], + [-160.425485805999926, 55.634711005000142], + [-160.366403774999867, 55.612982489000089], + [-160.366403774999867, 55.605536200000088], + [-160.39085852799991, 55.599432684000121], + [-160.435170050999886, 55.576849677000141], + [-160.456410285999851, 55.578273830000015], + [-160.455433722999885, 55.563299872000172], + [-160.45380611899995, 55.557359117000047], + [-160.448963995999861, 55.550279038999989], + [-160.457508917999917, 55.54295482], + [-160.464222785999937, 55.529282945000048], + [-160.468576626999948, 55.515082098000121], + [-160.470041469999899, 55.506252346000068], + [-160.477528449999852, 55.494614976000079], + [-160.495187954999892, 55.486151434000035], + [-160.531483527999882, 55.475816148000106], + [-160.548532680999926, 55.489081122000144], + [-160.582997199999852, 55.540716864], + [-160.593332485999952, 55.564113674000097], + [-160.59540768099987, 55.589097398000106], + [-160.598947719999956, 55.60610586100016], + [-160.613474087999919, 55.605536200000088], + [-160.627919074999852, 55.59080638200011], + [-160.64093990799995, 55.570257880000057], + [-160.657419399999924, 55.551988023], + [-160.682687954999892, 55.54413483300003], + [-160.741769985999895, 55.548651434000149], + [-160.768137173999889, 55.545396226000108], + [-160.76427161399991, 55.530462958000086], + [-160.740956183999913, 55.524888414000074], + [-160.706613735999952, 55.525132554000109], + [-160.675404425999886, 55.521918036000145], + [-160.661854620999918, 55.506252346000068], + [-160.667591925999886, 55.477850653000147], + [-160.683420376999919, 55.464667059000092], + [-160.78258216099988, 55.447088934000149], + [-160.799020962999862, 55.447902736000074], + [-160.809396938999953, 55.451849677000055], + [-160.832020636999914, 55.465399481000034], + [-160.843088344999956, 55.468410549000126], + [-160.848581508999899, 55.473049221000153], + [-160.84593665299991, 55.483465887000065], + [-160.83661861899995, 55.499416408000158], + [-160.83177649599989, 55.511623440000122], + [-160.84052486899995, 55.518540757000139], + [-160.867298956999861, 55.523627020000148], + [-160.924549933999913, 55.519110419000086], + [-160.959421352999925, 55.49315013200011], + [-160.987619594999899, 55.458319403000147], + [-161.024973110999895, 55.427435614000117], + [-161.072092251999891, 55.408351955000128], + [-161.279164191999939, 55.354885158000016], + [-161.31200110599994, 55.353583075000117], + [-161.326608852999954, 55.362250067], + [-161.339466925999886, 55.383246161000145], + [-161.368723110999923, 55.385443427000141], + [-161.479115363999881, 55.361029364000089], + [-161.506662563999896, 55.363836981000034], + [-161.518422003999888, 55.383368231000119], + [-161.515573696999923, 55.388983466000113], + [-161.487985805999926, 55.427801825000031], + [-161.485585089999859, 55.438421942000062], + [-161.481922980999911, 55.480373440000065], + [-161.479237433999941, 55.484930731000119], + [-161.454335089999915, 55.514797268], + [-161.442982550999943, 55.525620835], + [-161.418894008999928, 55.538397528000033], + [-161.388742641999897, 55.572170315000122], + [-161.367543097999885, 55.578273830000015], + [-161.349110480999855, 55.57062409100017], + [-161.316639777999882, 55.543198960000112], + [-161.292185024999924, 55.537298895000092], + [-161.182606574999909, 55.523627020000148], + [-161.151844855999911, 55.525620835], + [-161.144886847999913, 55.534979559000035], + [-161.159250454999892, 55.545396226000108], + [-161.247792120999918, 55.557766018000152], + [-161.261219855999911, 55.561712958000143], + [-161.271433071999923, 55.571234442000119], + [-161.280751105999883, 55.582586981000119], + [-161.291859503999888, 55.591945705000128], + [-161.31615149599989, 55.600409247000087], + [-161.364938930999898, 55.61001211100016], + [-161.408192511999886, 55.635931708000058], + [-161.438791469999899, 55.638739325000117], + [-161.62079830599987, 55.612982489000089], + [-161.613352016999897, 55.59979889500012], + [-161.617258266999897, 55.593736070000134], + [-161.626291469999899, 55.590318101000108], + [-161.634470180999926, 55.585109768000123], + [-161.652170376999919, 55.56118398600016], + [-161.708363410999937, 55.527085679000052], + [-161.716420050999943, 55.513088283000101], + [-161.713327602999868, 55.502020575000145], + [-161.706491665999948, 55.497259833000058], + [-161.699655727999925, 55.49530670800003], + [-161.696522589999859, 55.492580471000124], + [-161.697214321999894, 55.482611395000148], + [-161.709421352999868, 55.434393622000115], + [-161.710194464999915, 55.424302476000136], + [-161.709421352999868, 55.407131252000013], + [-161.711008266999897, 55.401760158000158], + [-161.716420050999943, 55.393255927000112], + [-161.81708736899995, 55.316839911000031], + [-161.833119269999941, 55.293646552000084], + [-161.841908331999917, 55.289618231000119], + [-161.894520636999914, 55.24241771000014], + [-161.89781653599988, 55.233465887000094], + [-161.899118618999864, 55.224554755000057], + [-161.902414516999897, 55.217840887000122], + [-161.911936001999891, 55.215155341000141], + [-161.934803839999915, 55.213812567000147], + [-161.944813605999911, 55.215562242000047], + [-161.956613735999866, 55.221909898], + [-161.948312954999892, 55.221136786000059], + [-161.922474738999881, 55.221909898], + [-161.922474738999881, 55.229396877000127], + [-161.951161261999914, 55.237209377000127], + [-161.984689907999893, 55.240423895], + [-162.018015102999954, 55.239813544000029], + [-162.046009894999884, 55.235581773000106], + [-162.046009894999884, 55.229396877000127], + [-162.02049719999988, 55.200751044000171], + [-162.015695766999897, 55.184515692000119], + [-162.032338019999941, 55.174139716000028], + [-161.984567837999919, 55.15713125200007], + [-161.981556769999884, 55.147406317000119], + [-161.97431393099987, 55.138251044000057], + [-161.96507727799991, 55.130601304000109], + [-161.956613735999866, 55.125718492000047], + [-161.972767706999946, 55.107407945], + [-162.001291469999927, 55.093207098000065], + [-162.032948370999918, 55.083319403000147], + [-162.059030727999954, 55.078599351000051], + [-162.080881313999896, 55.080633856000176], + [-162.10578365799995, 55.089422919000057], + [-162.128000454999892, 55.102972723], + [-162.141590949999852, 55.119533596000068], + [-162.122141079999949, 55.124986070000105], + [-162.114247199999909, 55.125718492000047], + [-162.121693488999881, 55.133205471000011], + [-162.112782355999911, 55.141424872000115], + [-162.106394008999899, 55.149115302000112], + [-162.102487758999928, 55.157619533000158], + [-162.101267055999898, 55.167914130000085], + [-162.192738410999937, 55.142564195000048], + [-162.230946417999888, 55.11273834800015], + [-162.210682745999861, 55.090236721000153], + [-162.198190883999956, 55.062892971000068], + [-162.202097133999956, 55.039862372000115], + [-162.230946417999888, 55.030218817000147], + [-162.246083136999886, 55.027044989000089], + [-162.260568813999924, 55.02167389500012], + [-162.274769660999937, 55.019598700000088], + [-162.289296027999882, 55.026800848000121], + [-162.298085089999944, 55.035874742000132], + [-162.313221808999941, 55.058172919000171], + [-162.319691535999937, 55.071112372000172], + [-162.329294399999924, 55.066066799000126], + [-162.337473110999923, 55.057684637000179], + [-162.351063605999883, 55.04010651200015], + [-162.362538214999915, 55.036566473000065], + [-162.422718878999888, 55.036363023000106], + [-162.449330206999946, 55.040269273000106], + [-162.472238735999952, 55.0489769550001], + [-162.492624477999925, 55.061835028000033], + [-162.511545376999948, 55.078599351000051], + [-162.526478644999884, 55.102240302000084], + [-162.517404751999891, 55.114691473000093], + [-162.493601040999891, 55.117499091000141], + [-162.464344855999855, 55.11273834800015], + [-162.416493292999917, 55.097886460000083], + [-162.390614386999914, 55.09658437700007], + [-162.360707160999851, 55.105292059000149], + [-162.417347785999937, 55.129055080000072], + [-162.436390753999945, 55.140082098000036], + [-162.47996985599994, 55.175523179000109], + [-162.491037563999896, 55.188421942000119], + [-162.530954555999926, 55.248765367000075], + [-162.557362433999941, 55.267035223000121], + [-162.600900844999956, 55.270412502000156], + [-162.571644660999937, 55.280829169000143], + [-162.567453579999892, 55.292222398000106], + [-162.583322719999927, 55.301092841000141], + [-162.614572719999899, 55.303900458], + [-162.645334438999896, 55.300034898000021], + [-162.668283657999893, 55.291408596000096], + [-162.687367316999854, 55.277899481000119], + [-162.70673580599987, 55.259507554000081], + [-162.718739386999914, 55.239081122000115], + [-162.718332485999895, 55.217922268], + [-162.70531165299991, 55.20136139500012], + [-162.658762173999889, 55.190334377000099], + [-162.632883266999954, 55.179673570000048], + [-162.614125128999888, 55.166327216000141], + [-162.614572719999899, 55.153713283000158], + [-162.603260870999918, 55.14354075700011], + [-162.599964972999885, 55.137111721000011], + [-162.603952602999954, 55.131903387000094], + [-162.614572719999899, 55.125718492000047], + [-162.614816860999952, 55.129136460000055], + [-162.619699673999918, 55.134182033000073], + [-162.626535610999923, 55.13764069200009], + [-162.632191535999937, 55.136664130000028], + [-162.635324673999889, 55.131048895], + [-162.635446743999864, 55.125148830000072], + [-162.634755011999914, 55.119045315000093], + [-162.635690883999928, 55.11273834800015], + [-162.641713019999912, 55.090969143000095], + [-162.642770962999862, 55.071112372000172], + [-162.634999152999882, 55.063625393], + [-162.614572719999899, 55.078599351000051], + [-162.612131313999953, 55.062201239000146], + [-162.559925910999937, 54.961249091000113], + [-162.584828253999888, 54.965806382000054], + [-162.616444464999859, 54.979885158000101], + [-162.645497199999937, 54.998439846000096], + [-162.662953253999888, 55.016546942], + [-162.627797003999945, 55.012274481000091], + [-162.618967251999891, 55.015692450000088], + [-162.621408657999922, 55.030218817000147], + [-162.63304602799991, 55.045558986000103], + [-162.649484829999921, 55.052964585000083], + [-162.667185024999924, 55.050604559000121], + [-162.676625128999945, 55.036363023000106], + [-162.685495571999894, 55.017238674000126], + [-162.696522589999915, 55.003241278000175], + [-162.723825649999924, 54.975531317], + [-162.718373175999886, 54.968085028000118], + [-162.716623501999891, 54.963364976000108], + [-162.720692511999943, 54.961249091000113], + [-162.725046352999925, 54.960109768000066], + [-162.752756313999924, 54.944891669000086], + [-162.767445441999939, 54.939601955000015], + [-162.782948370999918, 54.935939846000153], + [-162.850412563999924, 54.935044664000074], + [-162.877634243999921, 54.938950914000074], + [-162.920847133999928, 54.957424221000096], + [-162.927357550999915, 54.963283596000124], + [-162.929880337999919, 54.971869208000143], + [-162.93504798099994, 54.976996161000059], + [-162.967396613999938, 54.992336330000015], + [-162.974354620999918, 55.009507554000137], + [-162.952748175999943, 55.014064846000068], + [-162.926462368999921, 55.01455312700007], + [-162.919626430999898, 55.019924221000124], + [-162.936960415999891, 55.029282945000048], + [-162.97996985599994, 55.038641669000086], + [-162.998158331999917, 55.05068594], + [-163.024118618999921, 55.08502838700015], + [-163.041127081999889, 55.099351304000137], + [-163.063303188999953, 55.105292059000149], + [-163.075021938999953, 55.106634833000058], + [-163.096547003999859, 55.11220937700007], + [-163.107980923999918, 55.11273834800015], + [-163.122059699999852, 55.109849351000108], + [-163.148304816999882, 55.10101959800015], + [-163.163197394999941, 55.099066473], + [-163.149769660999937, 55.106431382000025], + [-163.12132727799991, 55.117905992000047], + [-163.107980923999918, 55.125718492000047], + [-163.129099087999919, 55.133449611000131], + [-163.157093878999945, 55.138617255000057], + [-163.18305416599992, 55.139146226000136], + [-163.197987433999884, 55.133205471000011], + [-163.20018469999988, 55.121405341000056], + [-163.196766730999855, 55.108465887000037], + [-163.192128058999941, 55.097601630000142], + [-163.190541144999912, 55.092230536], + [-163.202748175999886, 55.08616771], + [-163.215036587999919, 55.089667059000178], + [-163.238352016999954, 55.105292059000149], + [-163.238229946999866, 55.090318101000136], + [-163.231312628999888, 55.08100006700009], + [-163.219349738999938, 55.077134507], + [-163.204213019999941, 55.078599351000051], + [-163.217640753999945, 55.045355536000145], + [-163.205515102999925, 55.018988348000121], + [-163.174753383999956, 55.001695054000137], + [-163.114003058999913, 54.992336330000015], + [-163.089955206999889, 54.984279690000065], + [-163.067250128999945, 54.973293361000017], + [-163.053334113999881, 54.961249091000113], + [-163.049875454999949, 54.941839911], + [-163.062570766999926, 54.928778387000122], + [-163.135202602999925, 54.903713283000016], + [-163.171213344999899, 54.88190338700015], + [-163.200388149999924, 54.872951565000122], + [-163.231434699999937, 54.84479401200015], + [-163.25141354099992, 54.838324286000145], + [-163.277455206999889, 54.833685614000117], + [-163.32079016799986, 54.813869533000016], + [-163.341379360999895, 54.811102606000148], + [-163.357411261999886, 54.81761302300005], + [-163.367543097999942, 54.83014557500006], + [-163.376657680999926, 54.844956773000106], + [-163.389759894999912, 54.858872789000017], + [-163.341867641999897, 54.876776434000149], + [-163.327097133999899, 54.886175848000065], + [-163.324574347999885, 54.891058661000145], + [-163.324818488999938, 54.902329820000134], + [-163.320871548999946, 54.907294012000179], + [-163.311512824999909, 54.911566473], + [-163.301462368999921, 54.913723049000012], + [-163.290882941999882, 54.914129950000117], + [-163.279896613999938, 54.91351959800015], + [-163.296823696999923, 54.927639065000093], + [-163.345285610999895, 54.919419663999989], + [-163.347604946999951, 54.94082265800013], + [-163.329172329999921, 54.966864325000088], + [-163.306589321999951, 54.959051825000117], + [-163.281361456999889, 54.944647528000061], + [-163.255116339999859, 54.9513207050001], + [-163.245961066999882, 54.969956773], + [-163.282053188999924, 54.990139065000037], + [-163.292958136999914, 55.013128973], + [-163.299143032999893, 55.061224677000055], + [-163.30601966099988, 55.073960679000109], + [-163.31867428299995, 55.085394598000065], + [-163.325144008999956, 55.095648505], + [-163.313465949999852, 55.105292059000149], + [-163.313465949999852, 55.11273834800015], + [-163.320505337999919, 55.11220937700007], + [-163.325184699999937, 55.11408112200003], + [-163.329294399999895, 55.116888739000089], + [-163.334543423999889, 55.119533596000068], + [-163.148996548999918, 55.180975653000147], + [-163.024728969999899, 55.245591539000102], + [-162.991281704999921, 55.24241771000014], + [-163.009022589999915, 55.237372137000094], + [-163.030873175999858, 55.22719961100016], + [-163.051706508999928, 55.214341539000131], + [-163.066395636999943, 55.201483466000113], + [-163.076527472999885, 55.18065013200011], + [-163.062936977999925, 55.175767320000048], + [-162.992624477999925, 55.181830145000148], + [-162.984486456999889, 55.180975653000147], + [-162.98375403599988, 55.179185289000074], + [-162.98078365799995, 55.174994208000143], + [-162.976185675999915, 55.17055898600016], + [-162.970814581999946, 55.167914130000085], + [-162.962025519999884, 55.169012762000122], + [-162.895822719999899, 55.189642645000148], + [-162.874948696999923, 55.200384833000058], + [-162.833688930999898, 55.229396877000127], + [-162.849924282999922, 55.245428778000033], + [-162.888661261999857, 55.246771552000112], + [-162.896351691999882, 55.266669012000122], + [-162.800119594999956, 55.29026927300005], + [-162.794748501999891, 55.299465236000131], + [-162.737009243999864, 55.310939846000068], + [-162.713856574999909, 55.321275132], + [-162.653309699999937, 55.361517645000063], + [-162.641835089999887, 55.38027578300013], + [-162.634999152999882, 55.362616278000118], + [-162.614206508999871, 55.35150788], + [-162.588449673999946, 55.346096096000124], + [-162.566761847999885, 55.345445054], + [-162.550974087999919, 55.34853750200007], + [-162.54051673099994, 55.353949286000116], + [-162.518910285999937, 55.372788804000052], + [-162.511830206999889, 55.374904690000065], + [-162.504343227999925, 55.37368398600016], + [-162.497141079999892, 55.37396881700009], + [-162.491037563999896, 55.38027578300013], + [-162.489979620999918, 55.385321356000148], + [-162.490223761999886, 55.391994533000016], + [-162.491769985999923, 55.397691148000021], + [-162.494455532999893, 55.400091864000146], + [-162.507557745999861, 55.407538153000118], + [-162.504017706999889, 55.424017645], + [-162.504261847999942, 55.44041575700011], + [-162.528879360999923, 55.447902736000074], + [-162.556996222999942, 55.446926174000012], + [-162.582386847999942, 55.437323309000035], + [-162.60102291599992, 55.423732815000065], + [-162.621408657999922, 55.406927802000055], + [-162.604725714999887, 55.429877020000148], + [-162.591053839999944, 55.437323309000035], + [-162.576161261999886, 55.445990302000112], + [-162.549997524999924, 55.458726304000081], + [-162.226999477999897, 55.697902736000017], + [-162.149037238999938, 55.722845770000148], + [-162.130116339999915, 55.73432038], + [-162.092600063999896, 55.764064846000011], + [-162.077015753999888, 55.770005601000136], + [-162.050526495999918, 55.77374909100017], + [-161.912953253999888, 55.830877997000144], + [-161.898264126999891, 55.841986395000092], + [-161.826283331999946, 55.87986888200011], + [-161.799997524999924, 55.889715887000037], + [-161.773915167999945, 55.895982163999989], + [-161.689035610999895, 55.903550523000135], + [-161.640858527999939, 55.917669989000061], + [-161.525502081999946, 55.934881903000175], + [-161.457712368999921, 55.953924872000172], + [-161.388905402999939, 55.961737372000144], + [-161.377512173999889, 55.965521552], + [-161.356638149999924, 55.976263739], + [-161.155344204999892, 56.017035223000065], + [-161.225575324999937, 55.995998440000122], + [-161.257761196999894, 55.986029364000146], + [-161.273264126999891, 55.978461005], + [-161.367543097999885, 55.955633856000176], + [-161.206857876999891, 55.955633856000176], + [-161.170847133999928, 55.949855861000017], + [-161.154774542999917, 55.949896552000027], + [-161.137928839999915, 55.958685614000061], + [-161.124216274999924, 55.96124909100017], + [-161.072743292999917, 55.941351630000085], + [-161.053293423999918, 55.941107489000146], + [-161.039418097999942, 55.945949611000017], + [-161.011301235999952, 55.961859442000119], + [-160.959950324999909, 55.976263739], + [-160.946400519999855, 55.986029364000146], + [-160.932362433999913, 55.990301825000145], + [-160.874134894999884, 55.993150132], + [-160.871408657999893, 55.961737372000144], + [-160.867258266999869, 55.945868231000034], + [-160.860463019999941, 55.934515692000062], + [-160.900013800999886, 55.934556382000054], + [-160.940378383999928, 55.93935781500015], + [-160.979318813999953, 55.93744538], + [-161.014393683999913, 55.917710679000052], + [-161.024159308999856, 55.902899481000176], + [-161.023386196999923, 55.8907738300001], + [-161.015573696999923, 55.881170966000113], + [-161.004465298999918, 55.873724677000141], + [-160.983631964999915, 55.867010809000178], + [-160.965891079999949, 55.86937083500014], + [-160.948475714999859, 55.875433661000145], + [-160.928781704999949, 55.87986888200011], + [-160.943796352999954, 55.850490627000013], + [-160.950062628999888, 55.832993882000054], + [-160.946400519999855, 55.825262762000065], + [-160.930612758999928, 55.821844794000057], + [-160.915150519999884, 55.813666083000115], + [-160.820383266999897, 55.73916250200007], + [-160.799020962999862, 55.715399481000176], + [-160.781809048999946, 55.751044012000122], + [-160.768137173999889, 55.75853099199999], + [-160.747181769999884, 55.746161200000145], + [-160.717111782999922, 55.722845770000148], + [-160.699208136999857, 55.703192450000088], + [-160.689564581999889, 55.697902736000017], + [-160.675526495999918, 55.701117255000085], + [-160.675729946999894, 55.705633856000034], + [-160.664784308999913, 55.729803778000033], + [-160.661854620999918, 55.732814846000124], + [-160.666086391999926, 55.74404531500015], + [-160.67625891799986, 55.747137762000037], + [-160.688588019999912, 55.748114325000088], + [-160.699411587999919, 55.75299713700015], + [-160.707102016999926, 55.759833075000088], + [-160.725331183999913, 55.771389065000037], + [-160.756703253999945, 55.78611888200011], + [-160.76427161399991, 55.804754950000088], + [-160.775217251999891, 55.84650299700003], + [-160.782460089999915, 55.865668036], + [-160.795277472999942, 55.873724677000141], + [-160.799265102999925, 55.875433661000145], + [-160.798654751999948, 55.879461981000091], + [-160.795399542999917, 55.88377513200011], + [-160.791574673999889, 55.886704820000134], + [-160.784535285999908, 55.887681382000025], + [-160.777536587999919, 55.885565497000087], + [-160.76427161399991, 55.87986888200011], + [-160.717111782999922, 55.86627838700015], + [-160.688710089999887, 55.862290757000082], + [-160.512196417999917, 55.869940497000115], + [-160.503610805999926, 55.859442450000031], + [-160.479603644999884, 55.850287177000055], + [-160.477731899999924, 55.838446356000091], + [-160.481882290999948, 55.823472398000078], + [-160.476267055999955, 55.804754950000088], + [-160.460194464999859, 55.795640367000104], + [-160.442250128999945, 55.800523179000081], + [-160.422556118999893, 55.809149481000176], + [-160.401193813999924, 55.810980536000059], + [-160.394846157999893, 55.807318427], + [-160.386708136999886, 55.795233466000084], + [-160.380686001999891, 55.790472723], + [-160.369130011999943, 55.786769924000154], + [-160.309763149999895, 55.779364325000174], + [-160.288889126999919, 55.774481512000094], + [-160.267689581999917, 55.772284247000115], + [-160.243519660999937, 55.776841539000046], + [-160.278879360999952, 55.788316148000021], + [-160.287912563999953, 55.793931382], + [-160.309071417999945, 55.819281317000119], + [-160.319203253999888, 55.825262762000065], + [-160.237294074999852, 55.838324286000116], + [-160.250965949999909, 55.852484442000147], + [-160.272653774999867, 55.859116929000109], + [-160.319203253999888, 55.86627838700015], + [-160.520741339999859, 55.935207424000012], + [-160.540760870999918, 55.935370184000149], + [-160.566273566999939, 55.928290106000091], + [-160.57245846299989, 55.934515692000062], + [-160.552683071999866, 55.949123440000093], + [-160.543527798999889, 55.958482164000102], + [-160.538319464999915, 55.969305731000119], + [-160.539133266999897, 55.984564520000092], + [-160.547596808999941, 55.993394273000135], + [-160.561838344999956, 55.995306708], + [-160.579904751999891, 55.989732163999989], + [-160.568104620999918, 56.007554429000052], + [-160.532215949999909, 56.040228583], + [-160.516346808999884, 56.068793036], + [-160.476389126999919, 56.096665757000139], + [-160.462595180999926, 56.112616278000147], + [-160.461171027999939, 56.151312567], + [-160.455555792999945, 56.172349351000108], + [-160.438710089999944, 56.181545315], + [-160.428944464999915, 56.193264065000093], + [-160.403797980999911, 56.239691473000121], + [-160.394357876999891, 56.242987372000172], + [-160.368723110999952, 56.276841539000046], + [-160.237294074999852, 56.339178778000118], + [-160.188710089999915, 56.386908270000063], + [-160.01703854099992, 56.445379950000031], + [-159.928049282999922, 56.488959052000055], + [-159.847727016999897, 56.540513414000131], + [-159.745716925999915, 56.579331773000135], + [-159.483143683999884, 56.647040106000148], + [-159.55890865799995, 56.62034739800005], + [-159.547596808999856, 56.61318594], + [-159.526926235999952, 56.616156317000119], + [-159.502430792999917, 56.622870184000149], + [-159.456369594999899, 56.629339911000059], + [-159.324574347999885, 56.67401764500012], + [-159.308094855999911, 56.684881903000118], + [-159.28876705599987, 56.692084052000141], + [-159.231068488999938, 56.691961981000176], + [-159.208851691999882, 56.695461330000157], + [-159.221262173999889, 56.700873114000032], + [-159.234730597999885, 56.702826239000061], + [-159.263417120999918, 56.702337958000086], + [-159.263417120999918, 56.708563544000029], + [-159.199655727999897, 56.751695054000052], + [-159.175282355999911, 56.763739325000145], + [-159.086374477999925, 56.78579336100016], + [-159.040964321999923, 56.815130927000084], + [-158.991078253999888, 56.842596747000115], + [-158.943918423999889, 56.869859117000104], + [-158.889230923999946, 56.889593817000119], + [-158.866200324999852, 56.894110419000086], + [-158.893788214999887, 56.874457098000121], + [-158.959421352999897, 56.853461005], + [-158.99742591099988, 56.828802802000027], + [-159.02513587099989, 56.816717841000113], + [-159.030710415999891, 56.80878327000012], + [-159.02489173099994, 56.796576239000061], + [-159.010690883999928, 56.788804429000052], + [-158.99286861899995, 56.785142320000105], + [-158.97606360599994, 56.784857489000089], + [-158.979196743999921, 56.805731512000037], + [-158.971058722999885, 56.827541408000101], + [-158.957712368999893, 56.842474677000141], + [-158.945017055999926, 56.842922268000123], + [-158.911000128999888, 56.817694403000175], + [-158.873646613999938, 56.797837632000082], + [-158.848947719999956, 56.789374091000028], + [-158.814686652999882, 56.781439520000063], + [-158.78075110599994, 56.777533270000063], + [-158.756947394999941, 56.781154690000122], + [-158.743723110999895, 56.786322333000143], + [-158.72870846299989, 56.789374091000028], + [-158.698597785999851, 56.791083075000031], + [-158.681467251999919, 56.786607164000074], + [-158.655751105999855, 56.767645575000145], + [-158.639637824999909, 56.763739325000145], + [-158.653920050999886, 56.805365302000112], + [-158.653797980999911, 56.817206122000087], + [-158.651437954999864, 56.826483466000141], + [-158.652821417999945, 56.836249091000084], + [-158.682443813999896, 56.86933014500012], + [-158.689076300999943, 56.884507554000109], + [-158.688954230999883, 56.939601955000157], + [-158.694894985999895, 56.969183661000116], + [-158.694406704999921, 56.979803778000147], + [-158.688059048999889, 57.007025458000058], + [-158.68211829299986, 57.022040106000176], + [-158.652088995999918, 57.059759833000058], + [-158.607899542999917, 57.100978908000016], + [-158.312448696999923, 57.314886786000116], + [-158.300770636999914, 57.319281317], + [-158.284372524999924, 57.322943427000055], + [-158.182687954999949, 57.362005927000112], + [-158.058094855999883, 57.367092190000122], + [-158.063669399999895, 57.377183335], + [-158.073475714999915, 57.381537177], + [-158.085886196999923, 57.382066148000078], + [-158.099069790999891, 57.380764065000065], + [-158.079660610999895, 57.3966332050001], + [-158.017079230999855, 57.428534247000115], + [-157.996327277999882, 57.446234442000119], + [-157.961293097999885, 57.484198309000035], + [-157.940744594999927, 57.497463283000158], + [-157.872792120999861, 57.513617255000113], + [-157.786610480999911, 57.556097723000093], + [-157.757761196999866, 57.564276434000092], + [-157.735951300999943, 57.558823960000055], + [-157.72297115799995, 57.564764716000084], + [-157.709665493999921, 57.568670966000084], + [-157.680653449999909, 57.572495835], + [-157.691639777999882, 57.557928778000147], + [-157.683216925999943, 57.540106512000094], + [-157.652780727999868, 57.503607489000146], + [-157.666615363999881, 57.489203192000062], + [-157.65672766799986, 57.483587958000086], + [-157.509388800999886, 57.476263739000061], + [-157.513661261999857, 57.466498114000117], + [-157.516224738999881, 57.462632554000109], + [-157.478952602999925, 57.483099677], + [-157.445505337999947, 57.483303127000127], + [-157.428700324999937, 57.485256252000099], + [-157.41380774599989, 57.489935614], + [-157.395578579999892, 57.502427476000108], + [-157.39513098899991, 57.512762762000122], + [-157.407419399999952, 57.522040106000176], + [-157.427438930999926, 57.53156159100017], + [-157.418446417999917, 57.539455471000124], + [-157.407704230999911, 57.546047268000038], + [-157.398060675999943, 57.55414459800015], + [-157.392079230999911, 57.566310940000122], + [-157.407093878999945, 57.561265367000019], + [-157.439442511999943, 57.556586005000085], + [-157.454782680999898, 57.552069403000033], + [-157.443714972999885, 57.537298895000148], + [-157.419748501999891, 57.512640692000147], + [-157.41380774599989, 57.497463283000158], + [-157.51390540299991, 57.509751695000105], + [-157.533558722999885, 57.507310288999989], + [-157.543405727999897, 57.500311591000113], + [-157.556101040999948, 57.494818427000084], + [-157.569569464999915, 57.49119700700011], + [-157.581735805999926, 57.489935614], + [-157.595407680999955, 57.493231512000037], + [-157.597523566999882, 57.500962632000054], + [-157.591297980999911, 57.517889716000028], + [-157.587269660999937, 57.563177802000055], + [-157.590646938999953, 57.584214585], + [-157.602162238999881, 57.603501695000105], + [-157.603505011999886, 57.608547268000152], + [-157.600778774999924, 57.612982489000117], + [-157.598622199999909, 57.617824611000017], + [-157.602162238999881, 57.624009507000082], + [-157.607533331999946, 57.62799713700015], + [-157.618275519999884, 57.634100653000033], + [-157.622670050999943, 57.637640692000119], + [-157.630075649999924, 57.641058661000116], + [-157.638986782999893, 57.640448309000149], + [-157.64476477799991, 57.636664130000142], + [-157.643137173999889, 57.630560614000061], + [-157.626088019999855, 57.613470770000035], + [-157.65013587099989, 57.613674221000068], + [-157.671945766999954, 57.618109442000147], + [-157.690419074999852, 57.626288153000147], + [-157.704579230999911, 57.637640692000119], + [-157.709909633999956, 57.652533270000063], + [-157.710031704999921, 57.674017645], + [-157.70653235599994, 57.695379950000145], + [-157.701161261999886, 57.709662177000055], + [-157.708811001999891, 57.729925848000065], + [-157.698353644999941, 57.759466864000117], + [-157.667062954999892, 57.818915106000148], + [-157.644602016999869, 57.878241278000033], + [-157.636667446999923, 57.909369208000143], + [-157.630116339999915, 57.978461005000142], + [-157.615183071999866, 58.041164455000128], + [-157.610096808999856, 58.092352606000091], + [-157.605539516999897, 58.105210679000109], + [-157.591297980999911, 58.127386786000088], + [-157.579457160999937, 58.140366929000081], + [-157.553293423999889, 58.162054755000057], + [-157.543527798999861, 58.175848700000145], + [-157.519764777999853, 58.167385158000044], + [-157.48578854099992, 58.165472723000065], + [-157.451649542999917, 58.168768622000115], + [-157.427438930999926, 58.175848700000145], + [-157.40965735599994, 58.188625393], + [-157.398752407999865, 58.199530341000084], + [-157.38422604099992, 58.207098700000031], + [-157.355458136999886, 58.209947007000082], + [-157.19432532499988, 58.193915106000176], + [-157.180409308999913, 58.189439195000105], + [-157.170643683999856, 58.182684637000179], + [-157.164051886999886, 58.175116278000033], + [-157.155384894999884, 58.169501044000029], + [-157.139475063999868, 58.168402411], + [-157.163319464999944, 58.191555080000128], + [-157.187082485999952, 58.204901434000035], + [-157.347523566999939, 58.239203192], + [-157.379628058999913, 58.237250067000062], + [-157.433542446999923, 58.221909898000106], + [-157.457468227999868, 58.220892645000148], + [-157.482655402999939, 58.230414130000142], + [-157.529042120999918, 58.256008205000015], + [-157.545399542999917, 58.273586330000128], + [-157.537302212999919, 58.291896877000013], + [-157.568470831999889, 58.320746161000116], + [-157.562082485999866, 58.363674221000011], + [-157.502674933999913, 58.463690497000144], + [-157.457875128999888, 58.507879950000031], + [-157.43614661399991, 58.521633205000128], + [-157.382517055999926, 58.536363023000135], + [-157.358591274999952, 58.546372789000102], + [-157.267282680999898, 58.620266018000038], + [-157.134348110999952, 58.686835028000118], + [-157.115223761999886, 58.699652411000145], + [-157.091786261999914, 58.709784247000087], + [-156.996083136999943, 58.723822333000058], + [-156.969186977999868, 58.732245184000092], + [-156.94086666599992, 58.737534898], + [-156.94086666599992, 58.744370835], + [-156.978342251999948, 58.738999742000047], + [-157.023671027999853, 58.726507880000113], + [-157.061879035999937, 58.726223049000097], + [-157.077992316999882, 58.757391669000086], + [-157.068796352999925, 58.778469143], + [-157.002268032999922, 58.839992580000072], + [-157.025502081999946, 58.86347077000012], + [-157.022694464999915, 58.869696356000091], + [-157.009714321999894, 58.881537177000055], + [-156.988596157999893, 58.895209052], + [-156.985340949999937, 58.903265692000119], + [-156.985585089999887, 58.910142320000134], + [-156.987375454999892, 58.914699611000074], + [-156.988596157999893, 58.915716864000146], + [-156.982411261999914, 58.943345445000048], + [-156.976307745999918, 58.953517971000096], + [-156.961293097999885, 58.963446356000091], + [-156.922108527999853, 58.976223049000126], + [-156.882517055999926, 58.983954169000143], + [-156.860340949999852, 58.993882554000052], + [-156.851633266999897, 59.018215236000017], + [-156.851429816999939, 59.077093817], + [-156.842884894999884, 59.103216864000146], + [-156.822865363999938, 59.122626044000143], + [-156.800038214999915, 59.138739325000031], + [-156.783192511999914, 59.155218817000119], + [-156.853627081999917, 59.119940497000172], + [-156.865101691999882, 59.111232815], + [-156.867258266999954, 59.102728583000058], + [-156.878041144999884, 59.078355210000026], + [-156.886830206999946, 59.067938544000114], + [-156.884632941999939, 59.055405992000104], + [-156.880441860999895, 59.041652736000103], + [-156.878773566999882, 59.032375393000152], + [-156.889719204999864, 59.012518622000059], + [-156.910104946999923, 58.997259833000086], + [-156.935414191999882, 58.987494208000115], + [-156.991810675999943, 58.981756903000147], + [-157.01581783799989, 58.974066473000121], + [-157.034901495999861, 58.959418036000116], + [-157.050729946999923, 58.936183986000017], + [-157.069569464999944, 58.899725653000061], + [-157.084462042999917, 58.886664130000057], + [-157.135568813999896, 58.877346096000124], + [-157.254465298999946, 58.84048086100016], + [-157.373117641999897, 58.824774481000091], + [-157.386830206999917, 58.820868231000091], + [-157.400217251999919, 58.815497137000037], + [-157.410023566999882, 58.809515692000119], + [-157.424020962999919, 58.803045966000028], + [-157.475209113999881, 58.799627997000115], + [-157.56817851299985, 58.747893215000133], + [-157.657459716999881, 58.736186718000098], + [-157.814181904999884, 58.687708844000113], + [-157.978098110999895, 58.647528387000094], + [-158.15367591099988, 58.613999742000075], + [-158.203358527999853, 58.612982489], + [-158.263010219999956, 58.623521226000079], + [-158.31586666599992, 58.646551825000031], + [-158.345448370999861, 58.682928778000118], + [-158.335804816999911, 58.701483466000028], + [-158.345285610999895, 58.724066473], + [-158.363596157999893, 58.744614976000136], + [-158.380197719999927, 58.757391669000086], + [-158.408314581999946, 58.770086981000063], + [-158.546131964999915, 58.799261786], + [-158.557728644999941, 58.806463934000035], + [-158.566151495999918, 58.819484768], + [-158.565663214999915, 58.830633856000034], + [-158.559641079999892, 58.839992580000072], + [-158.551503058999913, 58.847398179000052], + [-158.538034633999928, 58.856268622000087], + [-158.528431769999941, 58.860907294000029], + [-158.519968227999897, 58.867336330000128], + [-158.509958462999919, 58.881537177000055], + [-158.49547278599988, 58.911688544000171], + [-158.488840298999889, 58.922512111000074], + [-158.499256964999887, 58.948797919000086], + [-158.477487758999928, 58.963202216000141], + [-158.421131964999859, 58.977118231000034], + [-158.431507941999882, 58.979437567], + [-158.439401821999923, 58.983547268000152], + [-158.443226691999939, 58.989691473000121], + [-158.44163977799991, 58.998236395000148], + [-158.451527472999942, 58.997463283000044], + [-158.460519985999952, 58.994777736000131], + [-158.468617316999882, 58.990220445000105], + [-158.475778774999924, 58.983954169000143], + [-158.497507290999891, 58.993963934000035], + [-158.491322394999912, 59.001532294000086], + [-158.458729620999861, 59.014715887000037], + [-158.443552212999862, 59.025336005000085], + [-158.424305792999917, 59.032782294000143], + [-158.403431769999884, 59.037176825000031], + [-158.383290167999917, 59.038560289000102], + [-158.172800258999928, 59.013006903000033], + [-158.137155727999868, 58.999457098000065], + [-158.104603644999912, 58.979885158000101], + [-158.078561977999925, 58.956691799000154], + [-158.069528774999924, 58.943304755000057], + [-158.070627407999893, 58.925848700000088], + [-158.064279751999948, 58.908270575000145], + [-158.056833462999862, 58.899115302], + [-158.044504360999923, 58.888373114000061], + [-158.030140753999945, 58.879055080000128], + [-158.017079230999855, 58.874090887000179], + [-158.017323370999918, 58.886664130000057], + [-158.013864712999919, 58.895697333000086], + [-158.006662563999896, 58.900824286], + [-157.995350714999915, 58.902044989], + [-157.995350714999915, 58.908270575000145], + [-158.028065558999913, 58.907538153000033], + [-158.04133053299995, 58.911444403000033], + [-158.050607876999891, 58.922512111000074], + [-158.034169074999909, 58.942816473000065], + [-158.052316860999895, 58.971340236000074], + [-158.102121548999889, 59.014715887000037], + [-158.140248175999886, 59.03620026200015], + [-158.23383541599992, 59.039211330000157], + [-158.316639777999939, 59.06244538], + [-158.402699347999942, 59.073675848000093], + [-158.44163977799991, 59.086981512000094], + [-158.473215298999889, 59.104803778000175], + [-158.489328579999892, 59.117824611000074], + [-158.496286587999862, 59.131415106000034], + [-158.498890753999888, 59.143866278000061], + [-158.505563930999926, 59.145982164000046], + [-158.514393683999884, 59.145005601], + [-158.523548956999861, 59.14842357], + [-158.52867591099988, 59.15615469], + [-158.530832485999895, 59.163804429000137], + [-158.534494594999927, 59.170599677000055], + [-158.544056769999912, 59.175767320000077], + [-158.549061652999853, 59.15766022300015], + [-158.547474738999938, 59.144842841000028], + [-158.537220831999889, 59.137193101], + [-158.516102667999888, 59.134751695000048], + [-158.516713019999941, 59.11151764500012], + [-158.45726477799991, 59.075873114000089], + [-158.462147589999859, 59.052801825000117], + [-158.48078365799995, 59.044094143000123], + [-158.521188930999926, 59.037339585], + [-158.537220831999889, 59.02558014500012], + [-158.540516730999911, 59.020575262000179], + [-158.542591925999943, 59.015611070000134], + [-158.543690558999913, 59.009711005], + [-158.544056769999912, 59.001654364000061], + [-158.547311977999954, 58.993475653000147], + [-158.554310675999943, 58.988918361000103], + [-158.561350063999896, 58.985500393000095], + [-158.57787024599989, 58.959173895000092], + [-158.608998175999886, 58.933172919000114], + [-158.644398566999882, 58.911281643000066], + [-158.688465949999909, 58.895575262000094], + [-158.709095831999917, 58.88287995000006], + [-158.729481574999909, 58.873602606000091], + [-158.746408657999893, 58.877834377000013], + [-158.753366665999863, 58.890448309000092], + [-158.748036261999914, 58.900213934000035], + [-158.737497524999924, 58.911444403000033], + [-158.728993292999917, 58.928697007000139], + [-158.762644008999928, 58.94367096600017], + [-158.777821417999917, 58.952622789000102], + [-158.790476040999891, 58.963446356000091], + [-158.75413977799991, 58.972154038999989], + [-158.739735480999911, 58.979885158000101], + [-158.746408657999893, 58.994818427000141], + [-158.825266079999949, 58.977118231000034], + [-158.810495571999951, 58.965969143], + [-158.772043423999946, 58.920477606000034], + [-158.769968227999925, 58.911078192000119], + [-158.793894008999899, 58.816351630000142], + [-158.783558722999885, 58.799505927000141], + [-158.782460089999944, 58.783880927000055], + [-158.787953253999888, 58.769761460000112], + [-158.797311977999925, 58.757391669000086], + [-158.811879035999937, 58.74445221600017], + [-158.827951626999919, 58.736273505000085], + [-158.846913214999915, 58.732001044000143], + [-158.869943813999896, 58.730698960000055], + [-158.877919074999852, 58.732367255000085], + [-158.885609503999888, 58.736802476000051], + [-158.89130611899995, 58.743353583000115], + [-158.893503383999928, 58.751166083000115], + [-158.89008541599992, 58.763617255000142], + [-158.881540493999921, 58.768459377000042], + [-158.859364386999943, 58.771673895000092], + [-158.81977291599992, 58.783921617000047], + [-158.804310675999886, 58.794663804000052], + [-158.807850714999859, 58.809515692000119], + [-158.827137824999909, 58.819403387000037], + [-158.851022915999863, 58.82021719000015], + [-158.873239712999919, 58.813177802000084], + [-158.887318488999881, 58.799627997000115], + [-158.861439581999889, 58.799465236000131], + [-158.874134894999941, 58.789740302], + [-158.900339321999951, 58.778957424000097], + [-158.914621548999946, 58.775376695000105], + [-158.912953253999945, 58.757635809000035], + [-158.90843665299991, 58.741197007000139], + [-158.889395851999893, 58.706292953000158], + [-158.851595096999887, 58.677090568000139], + [-158.820151044999932, 58.614033749000143], + [-158.793894008999899, 58.56932200700011], + [-158.792087045999864, 58.570416545000072], + [-158.779042120999918, 58.562892971000096], + [-158.772653774999924, 58.558783270000148], + [-158.770008917999917, 58.54913971600017], + [-158.771433071999894, 58.52464427300005], + [-158.770008917999917, 58.51845937700007], + [-158.758493618999893, 58.507269598000065], + [-158.745920376999891, 58.505113023000078], + [-158.733631964999944, 58.506252346000011], + [-158.722849087999919, 58.504828192000119], + [-158.708688930999926, 58.49225495000006], + [-158.72008216099988, 58.483587958000143], + [-158.73969479099992, 58.474188544000029], + [-158.759755011999914, 58.447088934000092], + [-158.782053188999953, 58.437160549000097], + [-158.807118292999917, 58.430731512000179], + [-158.825266079999949, 58.429022528000175], + [-158.825266079999949, 58.422186591000141], + [-158.797311977999925, 58.422186591000141], + [-158.829660610999923, 58.404771226], + [-158.881733978999932, 58.399620140000124], + [-158.939761181999899, 58.398070541000081], + [-159.014855729999908, 58.414548234000094], + [-159.051258917999917, 58.42470937700007], + [-159.071644660999937, 58.442694403000118], + [-159.058420376999891, 58.438381252000013], + [-159.046335415999863, 58.43829987200003], + [-159.036610480999911, 58.443793036000059], + [-159.030710415999891, 58.456366278000147], + [-159.055734829999892, 58.455877997000144], + [-159.074696417999917, 58.458726304000024], + [-159.083688930999926, 58.469061591000113], + [-159.078480597999942, 58.491115627000013], + [-159.11461341099988, 58.490057684000149], + [-159.150990363999881, 58.518784898000106], + [-159.208851691999882, 58.586737372000172], + [-159.298939581999917, 58.672349351000079], + [-159.384954426999911, 58.755823955000139], + [-159.482736782999893, 58.816066799000012], + [-159.506906704999892, 58.822170315000093], + [-159.517933722999942, 58.826320705000128], + [-159.545033331999889, 58.844305731000148], + [-159.551462368999864, 58.847398179000052], + [-159.579294399999924, 58.846177476000136], + [-159.594064556999882, 58.831711013000174], + [-159.633778449999909, 58.83470286699999], + [-159.6609183059999, 58.839442828000145], + [-159.63024296099988, 58.852715096000068], + [-159.600968233999907, 58.885454495], + [-159.58694062899994, 58.90746285400003], + [-159.617486564999922, 58.931323761000144], + [-159.63814764199995, 58.935097728000116], + [-159.651335474999883, 58.935554168000053], + [-159.680182550999916, 58.93175312800004], + [-159.709648881999897, 58.928656857000092], + [-159.738127269999893, 58.928247205000119], + [-159.728762406999891, 58.918736967000186], + [-159.725177230999918, 58.910438944000148], + [-159.734624587999889, 58.892691828000082], + [-159.755731608999952, 58.881467982000018], + [-159.768229370999904, 58.865531335000085], + [-159.743328949999864, 58.854477447000036], + [-159.752923502999863, 58.840825769000091], + [-159.765972843999918, 58.831369322000128], + [-159.776926526999944, 58.848779473000135], + [-159.798500224999884, 58.849832911000149], + [-159.807039767999896, 58.844662271000075], + [-159.805977692999875, 58.837465301000051], + [-159.7994846389999, 58.831460848000077], + [-159.795920053999907, 58.823162764000145], + [-159.786180632999901, 58.817039471000115], + [-159.794851364999857, 58.800276818000057], + [-159.816697940999916, 58.793831596000032], + [-159.839955206999917, 58.792669989000117], + [-159.866359868999893, 58.779123037000105], + [-159.906129611999944, 58.765405788000137], + [-159.9114801099999, 58.775800839000127], + [-159.929539336999937, 58.790007464], + [-159.962961391999954, 58.820054429], + [-159.985218878999888, 58.835150458], + [-159.990223761999914, 58.839992580000072], + [-159.983347727999899, 58.849227542000065], + [-159.983302680999884, 58.860806849000156], + [-159.98924518799987, 58.866109872], + [-159.997141079999949, 58.874090887000179], + [-160.018379545999949, 58.880378119000071], + [-160.045815100999903, 58.882590479000086], + [-160.070564778999881, 58.879597322000123], + [-160.084872863999919, 58.875601642000035], + [-160.088935699999865, 58.868909665], + [-160.09222354699989, 58.863216499000046], + [-160.096862564999924, 58.857223613000073], + [-160.112912047999856, 58.861107008000133], + [-160.132313605999855, 58.866400458000058], + [-160.153095172999912, 58.861284684000097], + [-160.165253477999954, 58.864381932000114], + [-160.150248658999942, 58.880938240000049], + [-160.158070441999882, 58.899318752000127], + [-160.152201675999891, 58.916104053000097], + [-160.2018564789999, 58.90841655800007], + [-160.222335342999941, 58.902204480000151], + [-160.228869440999944, 58.890810878000153], + [-160.24644173, 58.886895905000145], + [-160.253062719999917, 58.898674049000178], + [-160.25719153599988, 58.911932684000121], + [-160.254099087999862, 58.935980536000059], + [-160.256662563999896, 58.94623444200009], + [-160.267689581999917, 58.950384833000115], + [-160.287650626999948, 58.93239836100004], + [-160.301462911999948, 58.945070658000148], + [-160.328930845999906, 58.941428804000012], + [-160.331128669999941, 58.951719836000095], + [-160.319203253999888, 58.956691799000154], + [-160.317331508999928, 58.965155341000113], + [-160.301225850999884, 58.971664112000141], + [-160.296022363999924, 58.976973024000117], + [-160.267538946999878, 58.977495470000079], + [-160.25719153599988, 58.983954169000143], + [-160.255116339999915, 58.990301825000174], + [-160.258046027999853, 58.99542877800009], + [-160.264597133999928, 59.001654364000061], + [-160.269398566999939, 59.011704820000134], + [-160.280384894999884, 59.018500067000062], + [-160.292917446999894, 59.023667710000055], + [-160.30219479099992, 59.028957424000126], + [-160.306874152999853, 59.032416083000143], + [-160.317250128999945, 59.037746486000103], + [-160.322336391999897, 59.042303778000147], + [-160.334723123999879, 59.053837343000097], + [-160.320871548999918, 59.061346747000059], + [-160.325428839999859, 59.066555080000128], + [-160.352169130999926, 59.070659380000095], + [-160.401535572999876, 59.048843531000088], + [-160.529519638999943, 59.001903958000113], + [-160.667155750999939, 58.94764329000013], + [-160.694150671999921, 58.92824736600015], + [-160.768495646999895, 58.896425942000135], + [-160.833719662999897, 58.812546350000147], + [-160.82748648799992, 58.83726516500009], + [-160.829368048999925, 58.852646541000169], + [-160.842441908999945, 58.867961745000102], + [-160.867869269999886, 58.878817388000087], + [-160.888551184999955, 58.884101928000078], + [-160.907750356999912, 58.876391108000163], + [-160.961413968999864, 58.873247005000067], + [-160.979394981999917, 58.864130509000105], + [-160.99333381699995, 58.846687664000157], + [-161.033227387999915, 58.84247571600018], + [-161.076177251999923, 58.817573406000136], + [-161.109585955999876, 58.811507963000011], + [-161.137587309999901, 58.799172793000096], + [-161.173218142999872, 58.79756598500002], + [-161.179700670999893, 58.782725861000145], + [-161.244074198999954, 58.782748149000113], + [-161.271973322999884, 58.787092971000092], + [-161.291244389999918, 58.792609707000011], + [-161.278635219999956, 58.810248114000146], + [-161.271351691999854, 58.8126488300001], + [-161.271351691999854, 58.820054429], + [-161.300404425999943, 58.81464264500012], + [-161.306141730999911, 58.8126488300001], + [-161.310292120999918, 58.805487372000144], + [-161.312570766999897, 58.796454169000143], + [-161.310658331999946, 58.788641669000143], + [-161.302438930999955, 58.785345770000035], + [-161.289781637999937, 58.777946364000016], + [-161.262952707999943, 58.776689813000147], + [-161.290109829999892, 58.770453192000062], + [-161.310513272999941, 58.748074371000101], + [-161.357469443999946, 58.726245282000079], + [-161.367131858999869, 58.71146943300009], + [-161.374582237999931, 58.699709848000097], + [-161.376221999999899, 58.686801874000125], + [-161.374501105999883, 58.672349351000079], + [-161.361904657999929, 58.668457760000038], + [-161.327100737999899, 58.67828065800002], + [-161.301284957999883, 58.681817701000014], + [-161.363887635999845, 58.659647369000183], + [-161.488325137999936, 58.640392314000124], + [-161.535995509999879, 58.623292881000097], + [-161.550282624999909, 58.606555617000183], + [-161.5623725989999, 58.602024664000012], + [-161.585031704999949, 58.607611395000148], + [-161.596913214999915, 58.607163804000052], + [-161.61266028599988, 58.604925848000065], + [-161.639759894999884, 58.595160223000121], + [-161.665638800999886, 58.590806382000139], + [-161.676340298999946, 58.585394598000093], + [-161.685251430999955, 58.577826239000146], + [-161.693104620999947, 58.56932200700011], + [-161.707508917999917, 58.561183986000103], + [-161.726673956999889, 58.55849844], + [-161.764841274999924, 58.559393622000115], + [-161.752186652999882, 58.577093817], + [-161.720529751999891, 58.599269924000069], + [-161.710194464999915, 58.613999742000075], + [-161.723500128999916, 58.625555731000091], + [-161.738148566999939, 58.634507554000109], + [-161.756418423999889, 58.643133856000034], + [-161.765085415999891, 58.645086981000176], + [-161.761708136999857, 58.637884833000143], + [-161.761341925999858, 58.629095770000063], + [-161.767079230999911, 58.617743231000091], + [-161.762885027999914, 58.590986179000183], + [-161.779530402999939, 58.61261627800009], + [-161.797678188999953, 58.62323639500012], + [-161.83430122999988, 58.626482401000104], + [-161.912845309999909, 58.631862979000161], + [-161.936516006999909, 58.6296918500001], + [-161.959685143999877, 58.623281576000139], + [-161.980139831999907, 58.628373997000139], + [-162.012099270999954, 58.620714223000064], + [-162.03582065299986, 58.625851170000104], + [-162.077171377999889, 58.620893308000134], + [-162.137766079999949, 58.63385651200015], + [-162.176053606999915, 58.644923451000139], + [-162.121775083999864, 58.663856137000053], + [-162.067087368999921, 58.666652736000074], + [-162.046009894999884, 58.682928778000118], + [-162.030100063999953, 58.675930080000128], + [-161.990305141999869, 58.679103908000101], + [-161.965931769999912, 58.674750067], + [-161.95445716099988, 58.676459052000112], + [-161.949777798999946, 58.675482489000146], + [-161.949208136999886, 58.673041083], + [-161.950388149999924, 58.66425202000012], + [-161.949777798999946, 58.661810614], + [-161.94355221299989, 58.656887111000131], + [-161.939930792999917, 58.652736721000011], + [-161.934437628999888, 58.649644273000106], + [-161.922474738999881, 58.648138739000061], + [-161.891102667999917, 58.653713283000073], + [-161.858713344999927, 58.669419664000046], + [-161.842844204999892, 58.69163646], + [-161.867488510999891, 58.704048422000156], + [-161.865418462999855, 58.716263234000067], + [-161.821888800999943, 58.733547268], + [-161.809803839999944, 58.74095286699999], + [-161.795847133999871, 58.75389232], + [-161.786244269999884, 58.758734442000062], + [-161.758615688999896, 58.757391669000086], + [-161.717375500999879, 58.754842889000045], + [-161.677397905999953, 58.773526668000088], + [-161.655588344999927, 58.806463934000035], + [-161.684840212999859, 58.818585860999988], + [-161.712163293999907, 58.812970081000017], + [-161.733530550999916, 58.807902914000081], + [-161.753117224999954, 58.789869757000147], + [-161.762125892999904, 58.772668403000026], + [-161.774736872999881, 58.770506674000146], + [-161.762644008999956, 58.80499909100017], + [-161.75926673099994, 58.815497137000037], + [-161.758615688999896, 58.826320705000128], + [-161.762806769999912, 58.835638739000089], + [-161.769631311999888, 58.848728061000045], + [-161.777595875999936, 58.857714463], + [-161.785521100999915, 58.877619205000158], + [-161.790668535999941, 58.899866805], + [-161.792795376999891, 58.96478913], + [-161.794911261999886, 58.974514065000122], + [-161.799549933999913, 58.983954169000143], + [-161.807728644999941, 58.989569403000147], + [-161.834706183999884, 59.002875067000062], + [-161.840524868999921, 59.008205471000124], + [-161.851633266999954, 59.023179429000081], + [-161.855824347999885, 59.033758856000034], + [-161.850453253999945, 59.038560289000102], + [-161.845570441999882, 59.039740302000141], + [-161.835926886999914, 59.044867255000057], + [-161.829701300999943, 59.046047268000095], + [-161.822092251999891, 59.044378973000065], + [-161.821237758999899, 59.040432033000073], + [-161.822255011999857, 59.035874742000132], + [-161.820057745999861, 59.032375393000152], + [-161.817941860999952, 59.030096747000172], + [-161.815907355999911, 59.026353257000139], + [-161.812611456999889, 59.022040106000034], + [-161.806385870999918, 59.018133856000034], + [-161.798573370999918, 59.017482815000093], + [-161.771677212999862, 59.02558014500012], + [-161.742421027999939, 59.030218817000147], + [-161.725168423999946, 59.035101630000113], + [-161.694040493999921, 59.054917710000112], + [-161.614003058999856, 59.080755927000055], + [-161.608998175999915, 59.085516669000143], + [-161.60484778599988, 59.096380927000141], + [-161.600331183999913, 59.101263739], + [-161.594471808999884, 59.101996161000116], + [-161.577748175999943, 59.099920966000113], + [-161.573068813999924, 59.101263739], + [-161.569162563999924, 59.115057684000121], + [-161.577870245999918, 59.12051015800013], + [-161.610300258999928, 59.120550848000121], + [-161.613270636999914, 59.123968817000147], + [-161.616403774999895, 59.131415106000034], + [-161.62328040299991, 59.138820705000015], + [-161.637888149999924, 59.142238674000041], + [-161.646717902999882, 59.139349677], + [-161.671009894999884, 59.125311591000056], + [-161.682932094999899, 59.120550848000121], + [-161.723133917999917, 59.115790106000034], + [-161.840524868999921, 59.120550848000121], + [-161.873483852999925, 59.111029364000146], + [-161.888376430999955, 59.094387111000103], + [-161.880970831999889, 59.078924872000172], + [-161.847401495999918, 59.07330963700015], + [-161.847401495999918, 59.066555080000128], + [-161.896473761999886, 59.075384833], + [-161.939442511999943, 59.098578192000119], + [-161.974110480999911, 59.131415106000034], + [-162.02953040299991, 59.230129299000069], + [-162.042917446999894, 59.248358466000141], + [-162.051503058999913, 59.270168361000017], + [-162.038685675999886, 59.28937409100017], + [-162.020008917999917, 59.30174388200011], + [-161.998239712999919, 59.312933661000116], + [-162.036203579999949, 59.281887111000103], + [-162.043649868999921, 59.265773830000128], + [-162.034982876999948, 59.25088125200007], + [-162.009022589999915, 59.237534898000078], + [-161.983102993999921, 59.253729559000121], + [-161.968251105999883, 59.280829169000143], + [-161.970895962999862, 59.306708075000145], + [-161.964344855999883, 59.315334377000156], + [-161.962473110999895, 59.328070380000113], + [-161.964711066999882, 59.341945705000015], + [-161.970895962999862, 59.353908596000124], + [-161.959462042999917, 59.375067450000031], + [-161.946603969999899, 59.387762762000094], + [-161.929432745999947, 59.39386627800009], + [-161.905100063999896, 59.395453192000119], + [-161.883168097999885, 59.422267971000011], + [-161.867543097999885, 59.433091539000102], + [-161.853586391999897, 59.422186591000028], + [-161.847401495999918, 59.422186591000028], + [-161.837595180999926, 59.439927476000136], + [-161.821237758999899, 59.463364976000108], + [-161.801625128999945, 59.479193427000141], + [-161.770985480999911, 59.469956773], + [-161.755726691999882, 59.472642320000048], + [-161.740793423999918, 59.478705145000148], + [-161.730661587999947, 59.484808661000145], + [-161.717233852999954, 59.495835679], + [-161.713937954999921, 59.501369533000016], + [-161.859242316999882, 59.628119208000086], + [-161.867258266999954, 59.655503648000135], + [-161.876210089999859, 59.667710679000109], + [-161.879221157999893, 59.679592190000065], + [-161.879831508999928, 59.689846096000096], + [-161.881540493999921, 59.697170315], + [-161.889637824999852, 59.706244208], + [-161.909006313999896, 59.718817450000088], + [-161.994130011999886, 59.811102606000034], + [-162.081776495999918, 59.87787506700009], + [-162.094553188999953, 59.894029039000046], + [-162.101267055999898, 59.915594794000143], + [-162.10008704299986, 59.951117255000113], + [-162.10875403599988, 59.96515534100017], + [-162.158070441999939, 59.976507880000057], + [-162.178781704999949, 59.99042389500012], + [-162.196237758999928, 60.008246161], + [-162.209828253999888, 60.025458075000031], + [-162.231068488999853, 60.064398505000113], + [-162.240061001999891, 60.089789130000142], + [-162.234364386999886, 60.101223049000097], + [-162.224069790999863, 60.105454820000105], + [-162.214182094999956, 60.115627346000153], + [-162.206654425999886, 60.127997137000094], + [-162.203602667999917, 60.138739325000117], + [-162.203195766999897, 60.14752838700015], + [-162.203561977999925, 60.153306382000139], + [-162.207386847999942, 60.159613348000065], + [-162.24555416599992, 60.194769598000121], + [-162.251410015999909, 60.201419183], + [-162.221262173999918, 60.201849677], + [-162.186268683999913, 60.209865627000127], + [-162.16156260199989, 60.216366740000169], + [-162.161158684999918, 60.232477862000124], + [-162.156605597999885, 60.244370835000055], + [-162.149037238999938, 60.24518463700015], + [-162.161691860999895, 60.250677802], + [-162.175241665999863, 60.250637111000017], + [-162.203602667999917, 60.24518463700015], + [-162.200510219999927, 60.241522528000118], + [-162.198353644999941, 60.238267320000077], + [-162.181501141999888, 60.232506079000174], + [-162.181043975999899, 60.223118739000157], + [-162.210438605999911, 60.217962958000086], + [-162.248890753999945, 60.214748440000037], + [-162.278553839999859, 60.223456122000087], + [-162.272572394999941, 60.24518463700015], + [-162.290231899999952, 60.242499091000084], + [-162.298085089999944, 60.235907294000029], + [-162.30011959499987, 60.226996161000088], + [-162.299875454999921, 60.217230536000145], + [-162.297556118999864, 60.214178778000147], + [-162.292673305999898, 60.211900132000082], + [-162.287790493999921, 60.210760809000035], + [-162.285593227999925, 60.211086330000157], + [-162.28453528599988, 60.196966864000117], + [-162.285593227999925, 60.196763413999989], + [-162.291127081999946, 60.196600653000118], + [-162.298329230999883, 60.189195054000137], + [-162.30011959499987, 60.180487372000144], + [-162.289296027999882, 60.176336981000091], + [-162.257676738999919, 60.173847152000164], + [-162.236518682999872, 60.162752173000072], + [-162.228725608999895, 60.145585875], + [-162.238419964999878, 60.13561663500009], + [-162.263940250999894, 60.127293915000095], + [-162.288355105999926, 60.121593730000157], + [-162.297781979999911, 60.116424021000071], + [-162.317243017999942, 60.113060354000126], + [-162.337651090999913, 60.129653327000156], + [-162.343129035999937, 60.139390367000047], + [-162.366892055999926, 60.162543036], + [-162.372792120999947, 60.170355536], + [-162.374948696999951, 60.176336981000091], + [-162.3622006249999, 60.180907576], + [-162.353586391999897, 60.187567450000117], + [-162.347645636999857, 60.190619208], + [-162.340443488999938, 60.20766836100016], + [-162.341664191999882, 60.21898021000014], + [-162.350046352999925, 60.228949286000116], + [-162.364369269999884, 60.241766669000143], + [-162.412546352999954, 60.272528387000037], + [-162.43016516799986, 60.275213934000121], + [-162.44697018099987, 60.281968492000075], + [-162.458579606999876, 60.295085591000102], + [-162.442392438999946, 60.309588292000129], + [-162.390474988999927, 60.329466372000056], + [-162.333241339999915, 60.400213934000092], + [-162.319203253999945, 60.422593492000104], + [-162.313547329999864, 60.447211005000113], + [-162.303089972999885, 60.470851955000128], + [-162.278513149999867, 60.485663153000118], + [-162.249989386999857, 60.496649481000176], + [-162.22752844999988, 60.508978583000115], + [-162.224354620999918, 60.519354559000121], + [-162.227406378999888, 60.531927802000112], + [-162.22874915299991, 60.542425848000093], + [-162.220692511999943, 60.546820380000057], + [-162.219960089999915, 60.55215078300013], + [-162.222157355999911, 60.577948309000149], + [-162.224110480999855, 60.587836005000085], + [-162.20771236899995, 60.588934637000122], + [-162.191639777999882, 60.593898830000072], + [-162.109730597999942, 60.631415106000091], + [-162.09784908799989, 60.639349677000055], + [-162.061350063999924, 60.651027736000131], + [-161.96711178299995, 60.645656643000095], + [-161.942982550999915, 60.669745184000121], + [-161.957834438999896, 60.675279039000046], + [-161.963449673999889, 60.67658112200003], + [-161.944935675999886, 60.685003973000093], + [-161.881540493999921, 60.703924872000115], + [-161.910593227999925, 60.713690497000144], + [-161.938221808999913, 60.707668361000131], + [-161.965036587999919, 60.69635651200015], + [-162.072255011999914, 60.665228583000058], + [-162.094431118999864, 60.669745184000121], + [-162.088246222999885, 60.68691640800013], + [-162.115101691999882, 60.71279531500015], + [-162.15375729099992, 60.732489325000088], + [-162.183176235999952, 60.731146552000112], + [-162.129953579999949, 60.701402085], + [-162.121693488999881, 60.693996486000017], + [-162.121286587999947, 60.67523834800015], + [-162.123361782999893, 60.658921617000132], + [-162.133168097999913, 60.64740631700009], + [-162.18378658799989, 60.639634507], + [-162.237538214999944, 60.624741929000137], + [-162.261667446999866, 60.621323960000112], + [-162.276315883999871, 60.612941799000069], + [-162.284128383999871, 60.593654690000122], + [-162.28937740799995, 60.571926174000154], + [-162.296457485999923, 60.556463934000035], + [-162.299794074999937, 60.551174221000153], + [-162.306101040999891, 60.533189195000105], + [-162.365915493999921, 60.476629950000117], + [-162.374948696999951, 60.464911200000031], + [-162.377268032999922, 60.458197333000086], + [-162.379261847999857, 60.442531643], + [-162.382435675999915, 60.436957098000093], + [-162.394154425999915, 60.433091538999989], + [-162.428944464999859, 60.436957098000093], + [-162.441232876999919, 60.423407294000029], + [-162.436024542999917, 60.412543036000145], + [-162.424020962999919, 60.400213934000092], + [-162.415964321999951, 60.382391669000029], + [-162.452015753999916, 60.370754299000012], + [-162.464792446999951, 60.372381903000033], + [-162.456898566999882, 60.388576565000093], + [-162.464344855999855, 60.395982163999989], + [-162.49946041599992, 60.381984768], + [-162.509226040999863, 60.372870184000121], + [-162.497873501999891, 60.361273505000028], + [-162.512521938999896, 60.354925848000065], + [-162.537790493999864, 60.351019598000093], + [-162.549997524999924, 60.344468492000019], + [-162.559519008999928, 60.337469794000114], + [-162.56781979099992, 60.334173895000092], + [-162.574899868999864, 60.336900132000054], + [-162.580433722999885, 60.347601630000085], + [-162.58568274599989, 60.339422919000143], + [-162.590687628999945, 60.335353908000016], + [-162.597523566999939, 60.334051825000117], + [-162.608347133999928, 60.333929755000142], + [-162.608347133999928, 60.327093817000119], + [-162.576730923999946, 60.318304755000057], + [-162.566761847999885, 60.313462632000082], + [-162.591175910999908, 60.307033596000153], + [-162.600900844999956, 60.306626695000048], + [-162.562204555999926, 60.293850002000013], + [-162.553700324999909, 60.286200262000179], + [-162.550119594999899, 60.275864976000079], + [-162.55219479099992, 60.267157294000086], + [-162.56000729099992, 60.261135158000073], + [-162.573557094999899, 60.258856512000094], + [-162.703317837999862, 60.265692450000031], + [-162.657338019999884, 60.251695054000081], + [-162.558420376999891, 60.237494208000058], + [-162.469186977999925, 60.204901434000092], + [-162.450266079999921, 60.191066799000097], + [-162.453806118999921, 60.173163153000033], + [-162.481800910999937, 60.150580145000063], + [-162.493234829999892, 60.136786200000145], + [-162.497873501999891, 60.11823151200015], + [-162.492990688999953, 60.099188544000143], + [-162.483102993999921, 60.086615302000084], + [-162.475534633999871, 60.073431708000115], + [-162.477365688999953, 60.052801825000088], + [-162.485218878999945, 60.035386460000112], + [-162.496449347999942, 60.019720770000148], + [-162.510243292999945, 60.006740627000156], + [-162.525827602999925, 59.997503973000093], + [-162.578684048999889, 59.983872789000046], + [-162.639759894999884, 59.981390692000119], + [-162.700388149999924, 59.988836981000091], + [-162.751698370999861, 60.00495026200015], + [-162.752797003999916, 59.968247789000074], + [-162.807972785999937, 59.942572333], + [-163.087635870999918, 59.859116929000109], + [-163.316477016999954, 59.830267645], + [-163.614938930999898, 59.800848700000088], + [-163.877145962999919, 59.799546617000104], + [-164.098337368999921, 59.833685614], + [-164.128529425999943, 59.842678127000042], + [-164.15986080599987, 59.864569403000147], + [-164.187001105999911, 59.891506252000042], + [-164.204782680999898, 59.915594794000143], + [-164.212269660999851, 59.954982815000122], + [-164.183786587999947, 59.968654690000065], + [-164.094919399999924, 59.977687893000066], + [-164.094919399999924, 59.9845238300001], + [-164.106190558999913, 59.983791408000158], + [-164.116892055999926, 59.984442450000117], + [-164.126942511999914, 59.986802476000079], + [-164.13646399599989, 59.991359768], + [-164.130238410999937, 59.994086005000085], + [-164.114735480999911, 60.00495026200015], + [-164.14671790299991, 60.010443427], + [-164.20055091099988, 60.034328518000066], + [-164.348133917999917, 60.066473700000031], + [-164.385243292999917, 60.084906317000062], + [-164.399647589999887, 60.087551174000154], + [-164.412668423999889, 60.091782945000077], + [-164.434559699999909, 60.110581773000106], + [-164.441232876999862, 60.114813544000143], + [-164.444325324999852, 60.119086005000057], + [-164.479074673999918, 60.142157294000114], + [-164.488270636999886, 60.150580145000063], + [-164.495187954999892, 60.159857489000117], + [-164.495554165999891, 60.168850002000127], + [-164.485300258999956, 60.176336981000091], + [-164.485300258999956, 60.1837425800001], + [-164.512644008999928, 60.190619208], + [-164.564442511999943, 60.218491929000052], + [-164.61469479099992, 60.23187897300015], + [-164.643788214999887, 60.248277085000055], + [-164.66112219999988, 60.266424872000144], + [-164.649159308999941, 60.278713283000016], + [-164.656442837999862, 60.288072007000054], + [-164.673654751999891, 60.295152085000112], + [-164.677072719999899, 60.303208726000051], + [-164.673288540999863, 60.312201239000061], + [-164.649159308999941, 60.333929755000142], + [-164.714955206999917, 60.300604559000064], + [-164.753488735999895, 60.287095445000077], + [-164.783884243999864, 60.296372789000131], + [-164.80882727799991, 60.308091539000102], + [-164.988962368999921, 60.341376044000114], + [-165.005970831999889, 60.34674713700015], + [-165.03876705599987, 60.370184637000037], + [-165.071522589999915, 60.384833075000145], + [-165.101429816999882, 60.406683661], + [-165.129139777999882, 60.431708075000117], + [-165.143259243999893, 60.450628973000121], + [-165.121571417999917, 60.450506903000147], + [-165.053822394999884, 60.464911200000031], + [-165.033924933999913, 60.466620184000035], + [-165.023996548999889, 60.468980210000083], + [-165.01972408799989, 60.474554755], + [-165.018259243999921, 60.482367255000085], + [-165.014393683999913, 60.49282461100016], + [-165.008981899999867, 60.501939195000048], + [-165.00263424399995, 60.505845445000048], + [-164.983387824999909, 60.51007721600017], + [-164.973703579999949, 60.52041250200007], + [-164.974191860999923, 60.533636786000116], + [-164.985585089999887, 60.546820380000057], + [-165.010446743999921, 60.554510809000178], + [-165.160227016999869, 60.521958726000108], + [-165.174265102999925, 60.51552969], + [-165.195627407999893, 60.50226471600017], + [-165.221750454999949, 60.499009507000139], + [-165.369740363999881, 60.512111721000011], + [-165.384348110999895, 60.51691315300009], + [-165.431223110999952, 60.553045966000028], + [-165.411691860999895, 60.567531643000066], + [-165.383900519999912, 60.581040757000054], + [-165.35411536399991, 60.588446356000034], + [-165.314279751999919, 60.580877997000087], + [-165.297718878999945, 60.583075262000179], + [-165.281931118999921, 60.589097398], + [-165.270130988999938, 60.597723700000088], + [-165.258900519999941, 60.608710028000061], + [-165.248850063999953, 60.614650783000073], + [-165.203968878999945, 60.625392971000096], + [-165.171131964999944, 60.643052476], + [-165.118763800999886, 60.658636786], + [-165.080637173999889, 60.681708075000145], + [-165.023386196999923, 60.696682033000073], + [-164.999216274999924, 60.711371161000088], + [-164.989735480999911, 60.729681708000143], + [-164.996652798999918, 60.74518463700015], + [-165.030262824999852, 60.776190497000087], + [-165.031361456999889, 60.787014065000093], + [-165.01537024599989, 60.791449286000059], + [-164.994862433999941, 60.793198960000055], + [-164.98216712099989, 60.796332098000121], + [-164.971506313999953, 60.80304596600017], + [-164.924143032999893, 60.820542710000112], + [-164.874948696999894, 60.848781643000095], + [-164.897775844999899, 60.86933014500012], + [-164.942250128999916, 60.889634507000139], + [-164.958241339999915, 60.916815497000059], + [-164.937448696999923, 60.936468817], + [-164.915638800999886, 60.924465236000074], + [-164.895578579999921, 60.901678778000061], + [-164.879750128999888, 60.889471747000172], + [-164.871286587999947, 60.886175848000121], + [-164.848255988999881, 60.871649481000091], + [-164.834787563999896, 60.868353583000058], + [-164.81932532499988, 60.871405341000141], + [-164.780751105999911, 60.895697333000115], + [-164.753244594999956, 60.90619538], + [-164.711048956999917, 60.917181708000058], + [-164.668405727999897, 60.921779690000093], + [-164.639515753999888, 60.91331614800005], + [-164.642079230999883, 60.899888414000074], + [-164.685658331999889, 60.867621161000116], + [-164.69758053299995, 60.854681708000115], + [-164.669138149999924, 60.825751044000114], + [-164.59638424399995, 60.818915106000091], + [-164.464833136999914, 60.820542710000112], + [-164.429025844999899, 60.803900458000086], + [-164.416371222999913, 60.800116278000147], + [-164.375436977999897, 60.800116278000147], + [-164.357492641999954, 60.793687242000132], + [-164.351551886999914, 60.792669989000061], + [-164.283558722999857, 60.792669989000061], + [-164.270822719999899, 60.787909247000172], + [-164.267689581999917, 60.776760158000158], + [-164.26817786399991, 60.763373114000146], + [-164.266224738999881, 60.752346096000011], + [-164.259632941999882, 60.742132880000057], + [-164.25218665299991, 60.734930731000034], + [-164.241403774999924, 60.731146552000112], + [-164.224598761999914, 60.731146552000112], + [-164.235463019999884, 60.723211981000063], + [-164.235544399999867, 60.712632554], + [-164.228627081999889, 60.701117255000057], + [-164.218373175999943, 60.69017161699999], + [-164.320017055999926, 60.662298895000148], + [-164.328236456999917, 60.656683661000145], + [-164.33141028599988, 60.652411200000031], + [-164.337839321999894, 60.640285549000126], + [-164.341297980999911, 60.635646877000013], + [-164.341908331999946, 60.632757880000085], + [-164.340565558999856, 60.624090887000179], + [-164.341297980999911, 60.621323960000112], + [-164.345651821999894, 60.620266018000066], + [-164.357126430999926, 60.622015692000062], + [-164.361765102999954, 60.621323960000112], + [-164.370187954999892, 60.617865302000112], + [-164.386789516999954, 60.61351146000014], + [-164.395944790999948, 60.608303127000127], + [-164.399403449999937, 60.603216864000117], + [-164.406076626999891, 60.586859442], + [-164.410227016999954, 60.580389716000084], + [-164.416452602999897, 60.576727606000063], + [-164.444325324999852, 60.567328192000119], + [-164.420358852999897, 60.554266669000143], + [-164.397165493999864, 60.560370184000035], + [-164.354969855999911, 60.594061591000028], + [-164.299305792999917, 60.627020575000117], + [-164.283558722999857, 60.639349677000055], + [-164.259348110999952, 60.653265692000119], + [-164.228830532999922, 60.658026434000035], + [-164.163156704999921, 60.656683661000145], + [-164.135080532999922, 60.663723049000012], + [-164.119618292999888, 60.680568752000013], + [-164.101755337999919, 60.718166408000016], + [-164.084299282999865, 60.73456452000012], + [-164.062611456999889, 60.747951565000122], + [-164.01976477799991, 60.766546942000119], + [-163.986317511999943, 60.776312567000062], + [-163.955637173999946, 60.779852606000034], + [-163.888783331999917, 60.779608466000084], + [-163.865671352999954, 60.777044989000089], + [-163.838693813999896, 60.769029039000046], + [-163.816232876999891, 60.755113023000078], + [-163.806874152999882, 60.734930731000034], + [-163.815174933999941, 60.714667059000121], + [-163.829050258999928, 60.698187567000119], + [-163.831776495999918, 60.683783270000063], + [-163.806874152999882, 60.669745184000121], + [-163.817494269999912, 60.659613348000065], + [-163.828846808999884, 60.650946356000148], + [-163.83617102799991, 60.639553127000013], + [-163.834828253999888, 60.621323960000112], + [-163.826039191999939, 60.607163804000024], + [-163.811105923999889, 60.593939520000063], + [-163.794382290999863, 60.58417389500012], + [-163.77989661399991, 60.580389716000084], + [-163.731434699999937, 60.582709052000055], + [-163.686472133999928, 60.589748440000122], + [-163.64354407499988, 60.601548570000105], + [-163.464304165999948, 60.67658112200003], + [-163.435780402999853, 60.697455145], + [-163.429147915999891, 60.716986395000092], + [-163.441883917999945, 60.735296942000147], + [-163.471669074999937, 60.752346096000011], + [-163.459339972999885, 60.75409577], + [-163.409006313999953, 60.752346096000011], + [-163.424305792999917, 60.764715887000037], + [-163.543649868999893, 60.810003973000065], + [-163.861520962999919, 60.854681708000115], + [-163.912831183999941, 60.84959544500002], + [-163.930409308999884, 60.854681708000115], + [-163.852853969999927, 60.883246161000031], + [-163.808949347999885, 60.892523505000057], + [-163.76593990799995, 60.889471747000172], + [-163.718251105999883, 60.871323960000083], + [-163.697621222999857, 60.868353583000058], + [-163.57843990799995, 60.884100653000118], + [-163.562733527999882, 60.890122789000102], + [-163.556019660999937, 60.899969794000057], + [-163.563588019999884, 60.91331614800005], + [-163.579457160999908, 60.919867255000142], + [-163.725087042999917, 60.932359117000047], + [-163.756418423999946, 60.945257880000057], + [-163.745432094999899, 60.964544989], + [-163.723703579999921, 60.956610419000029], + [-163.701975063999953, 60.96430084800015], + [-163.68305416599992, 60.978949286000059], + [-163.669667120999918, 60.991888739000061], + [-163.704090949999852, 60.999660549000069], + [-163.768788214999887, 60.980454820000105], + [-163.800038214999944, 60.978216864000117], + [-163.795969204999892, 60.957709052000084], + [-163.812367316999911, 60.951971747000115], + [-163.837147589999859, 60.950018622000144], + [-163.858102993999921, 60.940985419000143], + [-163.867176886999914, 60.934149481000034], + [-163.886667446999923, 60.927964585000055], + [-163.895619269999941, 60.923000393], + [-163.902088995999918, 60.91522858300003], + [-163.90794837099989, 60.899847723000065], + [-163.913319464999944, 60.892564195000048], + [-163.957508917999917, 60.868150132000025], + [-164.007069464999944, 60.86220937700007], + [-164.135365363999853, 60.867132880000142], + [-164.363758917999888, 60.872056382], + [-164.564442511999943, 60.854681708000115], + [-164.573231574999909, 60.857611395000148], + [-164.593006964999944, 60.871486721000124], + [-164.602609829999921, 60.87579987200003], + [-164.584543423999889, 60.900091864000032], + [-164.585886196999894, 60.91006094], + [-164.602609829999921, 60.923000393], + [-164.628041144999941, 60.932318427000055], + [-164.714955206999917, 60.937241929000109], + [-164.72675533799989, 60.935003973000121], + [-164.744984503999888, 60.925238348000093], + [-164.767933722999857, 60.91982656500015], + [-164.788278774999952, 60.905707098], + [-164.797556118999921, 60.902533270000148], + [-164.814890102999897, 60.90810781500015], + [-164.838327602999868, 60.937445380000057], + [-164.855824347999913, 60.950873114000061], + [-164.879465298999946, 60.957424221000124], + [-164.907093878999945, 60.958726304000137], + [-164.934681769999884, 60.956122137000037], + [-164.958241339999915, 60.950873114000061], + [-165.015248175999915, 60.921047268000066], + [-165.036813930999926, 60.916815497000059], + [-165.081491665999891, 60.917385158000016], + [-165.128977016999897, 60.923488674000097], + [-165.170765753999945, 60.94159577], + [-165.198475714999915, 60.978216864000117], + [-165.118153449999909, 61.013251044000029], + [-165.088612433999941, 61.019842841000084], + [-164.974191860999923, 61.025336005000113], + [-164.950795050999943, 61.019842841000084], + [-164.95282955599987, 61.057033596000096], + [-164.950795050999943, 61.067572333000058], + [-164.940052863999938, 61.083807684000092], + [-164.92719479099992, 61.08698151200015], + [-164.864491339999915, 61.079779364000117], + [-164.857004360999952, 61.082342841000028], + [-164.845285610999952, 61.091213283000073], + [-164.82787024599989, 61.099554755000057], + [-164.785755988999938, 61.104315497000144], + [-164.766468878999888, 61.108587958000058], + [-164.78339596299989, 61.120021877000013], + [-164.814564581999889, 61.118719794000114], + [-164.87633216099988, 61.108587958000058], + [-164.930978969999927, 61.114732164000046], + [-164.999216274999924, 61.114732164000046], + [-165.012562628999945, 61.106268622000087], + [-165.005563930999955, 61.087469794000143], + [-165.004017706999917, 61.068670966000084], + [-165.03368079299986, 61.060126044000171], + [-165.058705206999889, 61.062892971000124], + [-165.084828253999916, 61.070257880000113], + [-165.109364386999943, 61.081000067000147], + [-165.129587368999864, 61.094305731000148], + [-165.129750128999916, 61.106634833000115], + [-165.175241665999891, 61.121771552000112], + [-165.191029425999943, 61.136460679000109], + [-165.168690558999913, 61.145697333000086], + [-165.146555141999926, 61.149725653000033], + [-165.129505988999881, 61.156642971000124], + [-165.115589972999913, 61.190578518000095], + [-165.098500128999859, 61.20307038], + [-165.060658331999917, 61.218451239000117], + [-165.143259243999893, 61.259426174000154], + [-165.131703253999888, 61.241848049000041], + [-165.119252081999946, 61.230373440000065], + [-165.103586391999897, 61.223130601000051], + [-165.082386847999885, 61.218451239000117], + [-165.102772589999859, 61.20844147300015], + [-165.12047278599988, 61.205959377000127], + [-165.13609778599988, 61.200995184000178], + [-165.150013800999943, 61.183661200000088], + [-165.148264126999948, 61.177150783000101], + [-165.14399166599992, 61.167710679000081], + [-165.144398566999939, 61.15936920800003], + [-165.156849738999853, 61.155747789000046], + [-165.211496548999918, 61.149562893000066], + [-165.346872524999867, 61.197088934000178], + [-165.369740363999881, 61.200751044000029], + [-165.36274166599992, 61.21279531500015], + [-165.326771613999938, 61.231634833000086], + [-165.293324347999885, 61.254828192000119], + [-165.271921352999925, 61.259588934000121], + [-165.225453253999888, 61.259426174000154], + [-165.212717251999919, 61.265204169000114], + [-165.206654425999943, 61.279242255000057], + [-165.204782680999955, 61.296087958000058], + [-165.204660610999895, 61.310614325000117], + [-165.208363410999937, 61.32680898600016], + [-165.219105597999942, 61.331691799000126], + [-165.259877081999917, 61.32831452], + [-165.259877081999917, 61.334458726], + [-165.225778774999895, 61.348130601000108], + [-165.182565883999899, 61.351955471000124], + [-165.171131964999944, 61.354966539000046], + [-165.157785610999952, 61.365790106000034], + [-165.16185462099989, 61.373683986000017], + [-165.17210852799991, 61.382473049000069], + [-165.177357550999915, 61.395941473000065], + [-165.158762173999918, 61.418646552000027], + [-165.076242641999897, 61.419378973000121], + [-165.047678188999924, 61.436957098000065], + [-165.061390753999945, 61.446966864000146], + [-165.057810024999867, 61.451727606000148], + [-165.006052212999947, 61.464829820000105], + [-165.005197719999956, 61.466864325000145], + [-165.004261847999885, 61.471136786000059], + [-165.002512173999889, 61.475775458000086], + [-164.999216274999924, 61.479152736000103], + [-164.967722133999928, 61.48956940300009], + [-164.86888587099989, 61.498968817000119], + [-164.847238735999895, 61.497626044000029], + [-164.841542120999918, 61.498968817000119], + [-164.840687628999916, 61.502752997000059], + [-164.842477993999921, 61.515692450000145], + [-164.841542120999918, 61.519476630000085], + [-164.829945441999911, 61.525336005000113], + [-164.818104620999947, 61.528631903000147], + [-164.786936001999862, 61.533758856000148], + [-164.763376430999926, 61.541693427000112], + [-164.747670050999943, 61.554673570000134], + [-164.743112758999899, 61.571030992000047], + [-164.752797003999859, 61.588934637000094], + [-164.690744594999927, 61.601385809000121], + [-164.708200649999895, 61.617417710000026], + [-164.72406979099992, 61.625555731000119], + [-164.742258266999897, 61.628363348000065], + [-164.766468878999888, 61.628729559000178], + [-164.760568813999953, 61.626166083000086], + [-164.752268032999893, 61.621242580000015], + [-164.745961066999939, 61.615057684000149], + [-164.745961066999939, 61.608832098000093], + [-164.755238410999908, 61.602362372000087], + [-164.765370245999947, 61.601955471000096], + [-164.775990363999881, 61.603094794000029], + [-164.786936001999862, 61.601385809000121], + [-164.80219479099992, 61.591620184000178], + [-164.821115688999953, 61.567857163999989], + [-164.877634243999864, 61.52602773600016], + [-164.89618893099987, 61.519476630000085], + [-164.966745571999951, 61.516587632000139], + [-164.99091549399995, 61.511379299000126], + [-165.008615688999953, 61.503485419000171], + [-165.01622473899991, 61.496527411000088], + [-165.021066860999895, 61.488023179000052], + [-165.030262824999852, 61.475734768000095], + [-165.039865688999924, 61.470892645000035], + [-165.050648566999939, 61.472642320000105], + [-165.061594204999892, 61.476792710000055], + [-165.071522589999915, 61.479152736000103], + [-165.085764126999891, 61.476263739000061], + [-165.086903449999937, 61.469183661000031], + [-165.083200649999895, 61.460150458], + [-165.082224087999919, 61.445013739], + [-165.079090949999852, 61.441066799000012], + [-165.079172329999921, 61.437079169000057], + [-165.088612433999941, 61.430731512000094], + [-165.099924282999922, 61.42865631700009], + [-165.111927863999853, 61.431097723000121], + [-165.123361782999893, 61.434881903000147], + [-165.133005337999862, 61.436957098000065], + [-165.154733852999925, 61.433417059000178], + [-165.186105923999889, 61.416245835000055], + [-165.204660610999895, 61.410223700000145], + [-165.195383266999926, 61.38963450700011], + [-165.191029425999943, 61.382961330000157], + [-165.205677863999853, 61.376369533000101], + [-165.238229946999923, 61.367743231000176], + [-165.253122524999867, 61.361802476000051], + [-165.263132290999948, 61.354193427000112], + [-165.271595831999889, 61.345648505], + [-165.281076626999891, 61.338364976], + [-165.294056769999912, 61.334458726], + [-165.280466274999952, 61.318670966000141], + [-165.261423305999955, 61.317450262000122], + [-165.242380337999862, 61.320624091000084], + [-165.228871222999885, 61.317450262000122], + [-165.227121548999889, 61.308905341000113], + [-165.231516079999892, 61.299383856000091], + [-165.23375403599988, 61.287746486000103], + [-165.225778774999895, 61.273098049000097], + [-165.267933722999942, 61.270005601000108], + [-165.312936977999925, 61.260891018], + [-165.355458136999886, 61.245754299000012], + [-165.390248175999943, 61.224595445000105], + [-165.399606899999867, 61.195624091000028], + [-165.369496222999942, 61.175970770000063], + [-165.346384243999893, 61.156724351000108], + [-165.376576300999915, 61.129095770000035], + [-165.368234829999949, 61.121242580000128], + [-165.364206508999956, 61.108099677000084], + [-165.362985805999955, 61.07754140800013], + [-165.373727993999864, 61.071600653000118], + [-165.39781653599988, 61.073472398], + [-165.437448696999923, 61.081244208], + [-165.512806769999884, 61.08698151200015], + [-165.547189907999922, 61.093898830000157], + [-165.582102016999954, 61.108587958000058], + [-165.605091925999915, 61.124497788999989], + [-165.621693488999881, 61.14350006700009], + [-165.632191535999851, 61.165676174000154], + [-165.636708136999914, 61.191107489000061], + [-165.634510870999918, 61.190252997000144], + [-165.629831508999899, 61.191310940000037], + [-165.625192837999862, 61.194647528000061], + [-165.623036261999857, 61.200751044000029], + [-165.626291469999899, 61.204657294000029], + [-165.633249477999897, 61.20888906500015], + [-165.640248175999886, 61.214178778000033], + [-165.643503383999928, 61.22150299700003], + [-165.64399166599992, 61.23851146], + [-165.642160610999952, 61.24892812700007], + [-165.63251705599987, 61.253404039000046], + [-165.609974738999881, 61.252590236000131], + [-165.62328040299991, 61.262152411000116], + [-165.628000454999921, 61.271795966000084], + [-165.623727993999921, 61.280462958000086], + [-165.609974738999881, 61.287298895], + [-165.640939907999922, 61.288397528000147], + [-165.699452277999882, 61.303412177000084], + [-165.828724738999881, 61.312974351000051], + [-165.855783657999893, 61.320868231000034], + [-165.876779751999948, 61.336574611000103], + [-165.921254035999851, 61.399359442000062], + [-165.918324347999942, 61.414740302000112], + [-165.891102667999917, 61.42877838700015], + [-165.835316535999937, 61.444322007000054], + [-165.803171352999868, 61.449286200000117], + [-165.790272589999859, 61.452866929], + [-165.780100063999924, 61.457993882], + [-165.771229620999861, 61.466538804000109], + [-165.767282680999898, 61.475531317000147], + [-165.766306118999921, 61.485052802000141], + [-165.766428188999896, 61.495266018000066], + [-165.776966925999943, 61.51581452000012], + [-165.802072719999927, 61.528143622000144], + [-165.855783657999893, 61.539984442000119], + [-165.868153449999937, 61.544663804000137], + [-165.89081783799989, 61.556789455000128], + [-165.904164191999911, 61.561021226000051], + [-165.923898891999954, 61.562160549000097], + [-166.050404425999886, 61.543402411000116], + [-166.085682745999918, 61.53221263200011], + [-166.096018032999893, 61.519476630000085], + [-166.088612433999913, 61.51447174700003], + [-166.065622524999924, 61.510443427000055], + [-166.054392055999926, 61.505804755000142], + [-166.106190558999856, 61.498521226000108], + [-166.138254360999923, 61.516099351000051], + [-166.195301886999914, 61.585598049000069], + [-166.199940558999856, 61.594549872000087], + [-166.196156378999945, 61.602362372000087], + [-166.189442511999886, 61.609320380000085], + [-166.185373501999919, 61.615668036000031], + [-166.185373501999919, 61.656683661000116], + [-166.180856899999867, 61.673529364000117], + [-166.172678188999868, 61.694647528000033], + [-166.160511847999885, 61.71393463700015], + [-166.144398566999911, 61.72553131700009], + [-166.155873175999858, 61.665838934000092], + [-166.15404212099989, 61.656683661000116], + [-166.147328253999945, 61.653753973], + [-166.128244594999956, 61.640448309000178], + [-166.116444464999887, 61.636135158000073], + [-166.056223110999923, 61.642401434000121], + [-166.044178839999915, 61.646144924000154], + [-166.019602016999897, 61.657131252000013], + [-165.782419399999895, 61.684068101], + [-165.766428188999896, 61.690822658000016], + [-165.779530402999853, 61.696356512000037], + [-165.828480597999913, 61.690822658000016], + [-165.841542120999918, 61.693060614], + [-165.860218878999888, 61.701849677000055], + [-165.870065883999899, 61.705064195000105], + [-165.883534308999884, 61.706000067], + [-165.911203579999892, 61.704169012000037], + [-165.924672003999859, 61.705064195000105], + [-165.936594204999892, 61.709458726000108], + [-165.957956508999956, 61.722723700000031], + [-165.965646938999896, 61.72553131700009], + [-166.003366665999948, 61.734930731000119], + [-166.04430091099988, 61.758490302000055], + [-166.080148891999897, 61.789496161000088], + [-166.102772589999944, 61.821112372000144], + [-165.975900844999899, 61.835394598000065], + [-165.911000128999916, 61.827948309000178], + [-165.849313930999898, 61.8360863300001], + [-165.828480597999913, 61.835394598000065], + [-165.793080206999917, 61.826849677000141], + [-165.780100063999924, 61.827948309000178], + [-165.743031378999888, 61.845607815], + [-165.726063605999911, 61.84845612200003], + [-165.609079555999898, 61.851304429000081], + [-165.588246222999913, 61.862127997000172], + [-165.610178188999953, 61.864447333000143], + [-165.644113735999895, 61.895249742000104], + [-165.689320441999939, 61.910305080000043], + [-165.709787563999896, 61.927435614000061], + [-165.739084438999896, 61.965073960000055], + [-165.750355597999913, 61.984442450000145], + [-165.758493618999921, 62.00527578300013], + [-165.75951087099989, 62.02562083500014], + [-165.730946417999888, 62.07648346600017], + [-165.713734503999888, 62.085272528000033], + [-165.71031653599988, 62.095038153000175], + [-165.708811001999919, 62.106634833], + [-165.70555579299986, 62.116603908000073], + [-165.691965298999918, 62.130072333000058], + [-165.668405727999868, 62.148098049000097], + [-165.641916469999899, 62.163804429000052], + [-165.594593878999945, 62.178290106000091], + [-165.447702602999925, 62.302883205000072], + [-165.344593878999916, 62.366034247000144], + [-165.334828253999888, 62.375718492000104], + [-165.314523891999954, 62.403957424000069], + [-165.296742316999882, 62.421332098000065], + [-165.273548956999946, 62.437445380000113], + [-165.184641079999921, 62.47744375200007], + [-165.133046027999853, 62.515692450000031], + [-165.095692511999914, 62.529771226000079], + [-165.055734829999949, 62.538275458], + [-165.020334438999953, 62.541083075000145], + [-164.930978969999927, 62.533677476000051], + [-164.887399868999921, 62.539129950000088], + [-164.867868618999921, 62.538031317000147], + [-164.848988410999908, 62.5274925800001], + [-164.860300258999871, 62.520005601000108], + [-164.867421027999939, 62.51068756700009], + [-164.867054816999911, 62.500962632000139], + [-164.855824347999913, 62.492743231000034], + [-164.848133917999917, 62.477932033000158], + [-164.810902472999913, 62.469427802000112], + [-164.735707160999908, 62.46478913], + [-164.723337368999893, 62.46116771000014], + [-164.701771613999881, 62.443752346000068], + [-164.690744594999927, 62.437445380000113], + [-164.671823696999894, 62.434556382], + [-164.608835415999891, 62.437445380000113], + [-164.650461391999954, 62.425360419000029], + [-164.665598110999952, 62.418768622000144], + [-164.695057745999918, 62.396470445000105], + [-164.713490363999881, 62.386175848], + [-164.733631964999915, 62.378729559000121], + [-164.706003383999899, 62.379584052000112], + [-164.685658331999889, 62.386542059000121], + [-164.650135870999918, 62.414984442000119], + [-164.640980597999942, 62.419989325000174], + [-164.629953579999892, 62.423814195], + [-164.597604946999866, 62.423407294000171], + [-164.581898566999911, 62.426174221000124], + [-164.574696417999888, 62.437445380000113], + [-164.586537238999938, 62.454820054000109], + [-164.615712042999888, 62.460150458000086], + [-164.670277472999857, 62.46198151200015], + [-164.67711341099988, 62.474351304], + [-164.662302212999919, 62.489935614000089], + [-164.629953579999892, 62.513169664000102], + [-164.647206183999913, 62.512518622000144], + [-164.657907680999926, 62.510239976], + [-164.677072719999899, 62.499579169000143], + [-164.693592902999853, 62.485052802000112], + [-164.705067511999914, 62.479071356000091], + [-164.714955206999917, 62.482123114], + [-164.74286861899995, 62.496405341000084], + [-164.810739712999947, 62.486273505000113], + [-164.841542120999918, 62.492743231000034], + [-164.800363735999952, 62.5235863300001], + [-164.794422980999911, 62.533677476000051], + [-164.800607876999891, 62.547186591000028], + [-164.816232876999891, 62.555568752000099], + [-164.835397915999948, 62.559800523000106], + [-164.852487758999899, 62.560980536000145], + [-164.857980923999918, 62.563625393000123], + [-164.854969855999911, 62.569403387000094], + [-164.845285610999952, 62.57831452000012], + [-164.834706183999913, 62.584377346000124], + [-164.821481899999867, 62.586615302000112], + [-164.794422980999911, 62.588324286000116], + [-164.704701300999886, 62.612494208000115], + [-164.479074673999918, 62.745917059000035], + [-164.504261847999885, 62.750311591000028], + [-164.539784308999856, 62.738836981000176], + [-164.574940558999913, 62.719916083000058], + [-164.612619594999899, 62.693019924000097], + [-164.663441535999937, 62.678290106000091], + [-164.740345831999946, 62.634466864000117], + [-164.779123501999891, 62.618963934000121], + [-164.813221808999884, 62.620184637000037], + [-164.827951626999891, 62.654120184000178], + [-164.831979946999923, 62.682196356000091], + [-164.843251105999911, 62.705145575000174], + [-164.86070716099988, 62.723822333000058], + [-164.883168097999885, 62.73908112200003], + [-164.873036261999943, 62.743882554000109], + [-164.866688605999911, 62.749253648000078], + [-164.866892055999955, 62.754706122000115], + [-164.87633216099988, 62.759588934000178], + [-164.87323971299989, 62.764064846000124], + [-164.871571417999888, 62.767645575000117], + [-164.868845180999898, 62.77094147300015], + [-164.862660285999937, 62.773871161000088], + [-164.870228644999884, 62.776678778000033], + [-164.890004035999908, 62.786932684000149], + [-164.873158331999917, 62.792181708000143], + [-164.859079555999955, 62.794867255000113], + [-164.844919399999924, 62.795477606000176], + [-164.827951626999891, 62.794378973000121], + [-164.792103644999884, 62.786932684000149], + [-164.776112433999856, 62.788519598000093], + [-164.766468878999888, 62.801214911000145], + [-164.832590298999889, 62.80890534100017], + [-164.861765102999925, 62.81952545800003], + [-164.883168097999885, 62.841538804000109], + [-164.859323696999923, 62.854071356000119], + [-164.852487758999899, 62.855780341000028], + [-164.849232550999943, 62.859930731000148], + [-164.848133917999917, 62.879706122000172], + [-164.845285610999952, 62.886867580000043], + [-164.833851691999911, 62.89915599199999], + [-164.816110805999926, 62.927191473000093], + [-164.753407355999911, 62.990952867000132], + [-164.723500128999945, 63.01292552300005], + [-164.690744594999927, 63.027085679000081], + [-164.662587042999945, 63.03204987200003], + [-164.528187628999945, 63.034735419000114], + [-164.516672329999892, 63.030218817000147], + [-164.50922604099992, 63.025213934000092], + [-164.487375454999892, 63.015814520000092], + [-164.478464321999951, 63.014105536000088], + [-164.472645636999914, 63.016913153000033], + [-164.468739386999914, 63.023260809000149], + [-164.462880011999857, 63.029852606000034], + [-164.451161261999857, 63.033351955000043], + [-164.44159908799989, 63.03188711100016], + [-164.410227016999954, 63.020249742000047], + [-164.40070553299995, 63.020575262000179], + [-164.384348110999923, 63.025213934000092], + [-164.376088019999941, 63.023667710000055], + [-164.354969855999911, 63.014105536000088], + [-164.333688930999955, 63.00901927300005], + [-164.324330206999917, 63.009100653000033], + [-164.313954230999911, 63.014105536000088], + [-164.330799933999913, 63.041408596000153], + [-164.35090084499987, 63.059637762000037], + [-164.376657680999926, 63.07050202000012], + [-164.52281653599988, 63.088324286], + [-164.539906378999945, 63.102240302000084], + [-164.549143032999893, 63.116197007000054], + [-164.562448696999923, 63.122544663999989], + [-164.595163540999948, 63.130113023000135], + [-164.579090949999852, 63.140570380000113], + [-164.521799282999922, 63.161118882000054], + [-164.502390102999925, 63.16494375200007], + [-164.487782355999911, 63.17072174700003], + [-164.423532680999955, 63.208970445], + [-164.36583411399991, 63.229193427], + [-164.145375128999945, 63.262152411000088], + [-163.994577602999925, 63.256252346000124], + [-163.827381964999915, 63.21954987200003], + [-163.767323370999918, 63.224758205000128], + [-163.752268032999893, 63.222642320000105], + [-163.729237433999941, 63.216782945000077], + [-163.724558071999923, 63.213120835000112], + [-163.732411261999914, 63.205877997000087], + [-163.723093227999954, 63.199937242000075], + [-163.702463344999927, 63.193304755000028], + [-163.694203253999945, 63.188177802], + [-163.683461066999939, 63.173488674000097], + [-163.67674719999988, 63.167425848], + [-163.646555141999869, 63.158921617000075], + [-163.638295050999886, 63.14545319200009], + [-163.643381313999896, 63.131293036000059], + [-163.663522915999948, 63.123358466000084], + [-163.663522915999948, 63.116522528000175], + [-163.634632941999939, 63.120184637000037], + [-163.58849036399991, 63.135077216000084], + [-163.567331508999899, 63.136948960000055], + [-163.541818813999896, 63.128810940000122], + [-163.564523891999954, 63.118068752000013], + [-163.602528449999852, 63.1056175800001], + [-163.622547980999911, 63.092271226], + [-163.655954555999898, 63.060370184000149], + [-163.791940883999928, 63.021918036000059], + [-163.806874152999882, 62.986151434000064], + [-163.762440558999856, 63.015204169000029], + [-163.652902798999889, 63.045070705000015], + [-163.600819464999859, 63.068060614], + [-163.556955532999893, 63.104722398000106], + [-163.528553839999887, 63.116685289000046], + [-163.491322394999884, 63.10179271], + [-163.440663214999915, 63.096014716000028], + [-163.395985480999855, 63.068060614], + [-163.366159633999956, 63.038275458000086], + [-163.350534633999871, 63.030829169000114], + [-163.290150519999855, 63.048814195000048], + [-163.093983527999853, 63.057359117000075], + [-163.073841925999915, 63.061265367000075], + [-163.034006313999924, 63.079087632000139], + [-163.01305091099988, 63.084662177000055], + [-162.988718227999925, 63.099554755], + [-162.981394008999899, 63.105943101000108], + [-162.969227667999917, 63.114406643000066], + [-162.923044399999924, 63.123358466000084], + [-162.880808071999894, 63.140936591000028], + [-162.861317511999914, 63.15228913], + [-162.84788977799991, 63.16494375200007], + [-162.844064907999893, 63.17462799700003], + [-162.845895962999862, 63.188950914000102], + [-162.841135219999956, 63.198431708000115], + [-162.833851691999854, 63.204901434000121], + [-162.806345180999926, 63.21954987200003], + [-162.696644660999908, 63.229193427], + [-162.596506313999896, 63.276678778000118], + [-162.428944464999859, 63.403876044000171], + [-162.408802863999938, 63.425726630000113], + [-162.401600714999887, 63.431219794000143], + [-162.361887173999889, 63.447821356000091], + [-162.351063605999883, 63.455715236000074], + [-162.330637173999889, 63.466864325000088], + [-162.303171352999954, 63.47675202], + [-162.280018683999913, 63.489081122000144], + [-162.272572394999941, 63.507513739], + [-162.313547329999864, 63.534247137000094], + [-162.309437628999916, 63.546576239000146], + [-162.293202277999882, 63.550360419000171], + [-162.251454230999911, 63.548529364], + [-162.237253383999928, 63.546291408000016], + [-162.207020636999914, 63.536525783000073], + [-162.176218227999925, 63.53253815300009], + [-162.134755011999943, 63.521185614000117], + [-162.099558071999894, 63.518988348000121], + [-162.084217902999939, 63.514715887000122], + [-162.059641079999921, 63.496039130000142], + [-162.046091274999952, 63.490220445], + [-162.031442837999947, 63.486639716000028], + [-162.018055792999945, 63.485825914000102], + [-162.037587042999917, 63.484279690000065], + [-162.054676886999857, 63.474310614000089], + [-162.070668097999885, 63.461737372000087], + [-162.086984829999892, 63.452337958000058], + [-162.106922980999883, 63.447821356000091], + [-162.148996548999946, 63.444077867000075], + [-162.168894008999928, 63.438666083000115], + [-162.168894008999928, 63.431219794000143], + [-161.914621548499952, 63.450425523000106], + [-161.660349087999919, 63.469631252000156], + [-161.62079830599987, 63.466538804000081], + [-161.589588995999918, 63.458075262000037], + [-161.573435024999924, 63.455389716000141], + [-161.557443813999953, 63.457342841000113], + [-161.511586066999882, 63.472805080000043], + [-161.496408657999893, 63.474269924000097], + [-161.483469204999864, 63.473456122000172], + [-161.470895962999862, 63.469875393], + [-161.456654425999886, 63.462836005000113], + [-161.440541144999884, 63.46019114800005], + [-161.422840949999909, 63.465725002000156], + [-161.404855923999946, 63.473944403000147], + [-161.388050910999937, 63.47955963700015], + [-161.186268683999941, 63.505560614000146], + [-161.056507941999882, 63.57440827], + [-161.045480923999918, 63.585760809000178], + [-161.033884243999921, 63.610052802000055], + [-161.006540493999921, 63.621771552000055], + [-160.97480221299989, 63.628241278000147], + [-160.949899868999921, 63.63666413], + [-160.892526821999923, 63.684881903000061], + [-160.849924282999893, 63.698309637000037], + [-160.827097133999956, 63.713527736000017], + [-160.791574673999889, 63.746527411000088], + [-160.76695716099988, 63.824123440000122], + [-160.805043097999885, 63.90448639500012], + [-160.928781704999949, 64.048163153000175], + [-160.945261196999923, 64.096014716000084], + [-160.951649542999917, 64.206284898], + [-160.973459438999896, 64.250474351000051], + [-160.995350714999915, 64.265692450000031], + [-161.063425258999871, 64.295843817000147], + [-161.089833136999857, 64.30141836100016], + [-161.115915493999921, 64.310003973000065], + [-161.175526495999918, 64.350897528000118], + [-161.203114386999943, 64.364081122000144], + [-161.203114386999943, 64.370306708000115], + [-161.193959113999881, 64.371161200000031], + [-161.188099738999938, 64.373765367000104], + [-161.175770636999857, 64.383978583000058], + [-161.19469153599988, 64.392075913999989], + [-161.238026495999861, 64.398098049000097], + [-161.257761196999894, 64.405096747000172], + [-161.244252081999917, 64.410101630000113], + [-161.226755337999862, 64.411810614000117], + [-161.188832160999851, 64.411281643000123], + [-161.188832160999851, 64.418117580000157], + [-161.331776495999861, 64.417547919000086], + [-161.429432745999861, 64.433294989000146], + [-161.457997199999852, 64.431708075000117], + [-161.483631964999915, 64.424872137000094], + [-161.498402472999913, 64.414536851], + [-161.508981899999952, 64.402167059000064], + [-161.520700649999924, 64.392523505000085], + [-161.538889126999948, 64.390773830000072], + [-161.538889126999948, 64.397650458], + [-161.525990363999938, 64.429103908000016], + [-161.518422003999888, 64.438544012000037], + [-161.503854946999923, 64.448431708000143], + [-161.493723110999895, 64.451849677000055], + [-161.485707160999937, 64.457098700000031], + [-161.477406378999888, 64.472723700000117], + [-161.473378058999913, 64.488185940000122], + [-161.471913214999915, 64.499741929000081], + [-161.468088344999927, 64.509955145], + [-161.456979946999894, 64.521144924000012], + [-161.440419074999909, 64.529120184000149], + [-161.413929816999882, 64.537543036000116], + [-161.387521938999868, 64.54205963700015], + [-161.370716925999858, 64.538153387000179], + [-161.340402798999889, 64.523993231000148], + [-161.093332485999952, 64.502590236000017], + [-161.035023566999939, 64.507757880000113], + [-161.004465298999918, 64.527980861000131], + [-161.068592902999882, 64.544623114000089], + [-161.085926886999857, 64.552557684000035], + [-160.973459438999896, 64.555853583000086], + [-160.95799719999988, 64.55882396], + [-160.947336391999954, 64.566066799000012], + [-160.938465949999909, 64.574855861000074], + [-160.928781704999949, 64.582586981000091], + [-160.833973761999857, 64.617336330000157], + [-160.803171352999897, 64.64337799700003], + [-160.790272589999887, 64.707709052000141], + [-160.788156704999892, 64.712713934000178], + [-160.787709113999881, 64.717840887000094], + [-160.791574673999889, 64.725897528000033], + [-160.801503058999884, 64.736395575000088], + [-160.825428839999944, 64.748928127000099], + [-160.83661861899995, 64.757635809000178], + [-160.884714321999923, 64.810126044000029], + [-160.901437954999949, 64.822739976000108], + [-160.916005011999886, 64.828680731000034], + [-160.963490363999881, 64.835842190000093], + [-161.003366665999863, 64.854885158000073], + [-161.044382290999863, 64.862534898000106], + [-161.146473761999943, 64.918198960000112], + [-161.155344204999892, 64.925197658000016], + [-161.133290167999917, 64.924017645000092], + [-161.085764126999891, 64.912990627000127], + [-161.066232876999919, 64.915228583000115], + [-161.029611782999893, 64.931463934000149], + [-161.010080532999922, 64.937241929000109], + [-160.990834113999881, 64.939439195000105], + [-161.003854946999951, 64.944566148000106], + [-161.020130988999881, 64.947211005000113], + [-161.037098761999857, 64.947577216000028], + [-161.052235480999855, 64.945624091000084], + [-161.056752081999917, 64.942816473000121], + [-161.060047980999855, 64.934475002000156], + [-161.062855597999885, 64.932603257], + [-161.182565883999899, 64.939520575000088], + [-161.210560675999915, 64.932603257], + [-161.207102016999926, 64.909735419000086], + [-161.229440883999928, 64.895982164000074], + [-161.307606574999852, 64.872015692000033], + [-161.31590735599994, 64.86542389500012], + [-161.322255011999857, 64.845526434000035], + [-161.330067511999857, 64.837713934000149], + [-161.340199347999913, 64.831935940000093], + [-161.361805792999917, 64.826361395000092], + [-161.366932745999918, 64.818752346000124], + [-161.369699673999889, 64.809719143000123], + [-161.373768683999941, 64.802313544000143], + [-161.395253058999884, 64.786769924000126], + [-161.408802863999938, 64.77948639500012], + [-161.42218990799995, 64.774359442000033], + [-161.444081183999884, 64.77073802300005], + [-161.489450649999867, 64.770249742000075], + [-161.511586066999882, 64.767523505], + [-161.523996548999889, 64.762111721000153], + [-161.534657355999911, 64.755072333000086], + [-161.545765753999945, 64.750881252000127], + [-161.559396938999896, 64.753851630000057], + [-161.564401821999923, 64.770412502000127], + [-161.644846157999922, 64.783758856000034], + [-161.672352667999945, 64.79173411699999], + [-161.701242641999954, 64.81175364800005], + [-161.733591274999867, 64.820746161000088], + [-161.806385870999918, 64.822739976000108], + [-161.782907680999955, 64.816839911000088], + [-161.740915493999893, 64.798000393000123], + [-161.716420050999943, 64.794867255000057], + [-161.896311001999919, 64.753973700000031], + [-161.949777798999946, 64.725897528000033], + [-161.931752081999917, 64.71865469], + [-161.914133266999897, 64.722113348], + [-161.881540493999921, 64.740220445000105], + [-161.861398891999897, 64.747951565000122], + [-161.799549933999913, 64.761297919000029], + [-161.812082485999895, 64.75299713700015], + [-161.84980221299989, 64.736395575000088], + [-161.864125128999888, 64.733384507], + [-161.865793423999889, 64.730943101000051], + [-161.884958462999947, 64.716294664000046], + [-161.895456508999928, 64.711737372000115], + [-161.923939581999946, 64.712103583000115], + [-161.982533331999889, 64.703070380000113], + [-162.080881313999896, 64.721096096000124], + [-162.121693488999881, 64.712876695000048], + [-162.107777472999885, 64.709418036000145], + [-162.079090949999909, 64.705471096000153], + [-162.066477016999954, 64.699286200000088], + [-162.142811652999882, 64.696234442], + [-162.177357550999886, 64.688177802000055], + [-162.209828253999888, 64.671942450000117], + [-162.219431118999921, 64.664699611000103], + [-162.247181769999941, 64.634588934000149], + [-162.257639126999891, 64.625718492000104], + [-162.270212368999893, 64.6192894550001], + [-162.318063930999926, 64.612982489000061], + [-162.511219855999911, 64.558661200000031], + [-162.556833462999862, 64.532212632000054], + [-162.583119269999884, 64.520697333000115], + [-162.607167120999918, 64.506781317000119], + [-162.621408657999922, 64.487005927000112], + [-162.621571417999888, 64.475572007000054], + [-162.614206508999871, 64.456203518000123], + [-162.614572719999899, 64.445990302000027], + [-162.622792120999918, 64.437323309000121], + [-162.635324673999889, 64.429266669000171], + [-162.643422003999916, 64.420152085], + [-162.638742641999897, 64.408148505000057], + [-162.642648891999897, 64.394435940000122], + [-162.73460852799991, 64.367173570000048], + [-162.756296352999897, 64.352118231000034], + [-162.781320766999897, 64.343695380000085], + [-162.80439205599987, 64.347805080000128], + [-162.820017055999955, 64.370306708000115], + [-162.820749477999897, 64.385931708], + [-162.816843227999897, 64.397935289000131], + [-162.815500454999892, 64.40892161699999], + [-162.823719855999911, 64.421535549000069], + [-162.844431118999921, 64.444077867000047], + [-162.855417446999951, 64.45221588700015], + [-162.874623175999915, 64.459662177000141], + [-162.861317511999914, 64.48651764500012], + [-162.85029049399995, 64.493394273000135], + [-162.827463344999927, 64.493150132], + [-162.827463344999927, 64.50063711100016], + [-162.869496222999913, 64.513332424000041], + [-162.896188930999926, 64.518011786000145], + [-162.921742316999911, 64.531683661000088], + [-162.933583136999886, 64.534735419000171], + [-162.940541144999884, 64.537665106000091], + [-162.960560675999943, 64.551255601000051], + [-162.970814581999946, 64.555853583000086], + [-162.99046790299991, 64.558335679000109], + [-163.053334113999881, 64.555853583000086], + [-163.053334113999881, 64.562079169000057], + [-163.045155402999853, 64.56281159100017], + [-163.025461391999897, 64.569525458000115], + [-163.056589321999923, 64.592108466000084], + [-163.107126430999926, 64.608221747000144], + [-163.147653774999924, 64.627142645000092], + [-163.148996548999918, 64.658270575000174], + [-163.214792446999894, 64.65452708500014], + [-163.242502407999893, 64.648382880000057], + [-163.358591274999924, 64.603745835], + [-163.389759894999912, 64.596869208], + [-163.389759894999912, 64.590033270000063], + [-163.368153449999909, 64.587795315000093], + [-163.313465949999852, 64.562079169000057], + [-163.291371222999885, 64.557521877000099], + [-163.211008266999869, 64.555853583000086], + [-163.194081183999884, 64.547430731000034], + [-163.162302212999947, 64.522040106000091], + [-163.142770962999862, 64.514960028000061], + [-163.118153449999852, 64.514227606000119], + [-163.039743618999921, 64.521144924000012], + [-163.048695441999939, 64.516180731000148], + [-163.052967902999939, 64.509955145], + [-163.052357550999886, 64.502264716000084], + [-163.046498175999943, 64.493150132], + [-163.096750454999921, 64.475816148000106], + [-163.11461341099988, 64.461004950000031], + [-163.121652798999946, 64.435126044000029], + [-163.134999152999853, 64.412543036000145], + [-163.165882941999911, 64.410589911], + [-163.200428839999915, 64.419989325000031], + [-163.224680141999897, 64.431708075000117], + [-163.279286261999857, 64.485744533000016], + [-163.299794074999909, 64.493150132], + [-163.330637173999889, 64.496568101000022], + [-163.357411261999886, 64.50519440300009], + [-163.409006313999953, 64.527980861000131], + [-163.53656979099992, 64.564520575000174], + [-163.678537563999868, 64.586330471000124], + [-163.817128058999913, 64.590033270000063], + [-163.971384243999893, 64.569525458000115], + [-164.389108852999925, 64.569525458000115], + [-164.266224738999881, 64.575751044000171], + [-164.341867641999954, 64.590033270000063], + [-164.650380011999857, 64.502264716000084], + [-164.745961066999939, 64.493150132], + [-164.725453253999888, 64.502590236000017], + [-164.656605597999913, 64.521144924000012], + [-164.691721157999893, 64.531317450000145], + [-164.807443813999924, 64.521144924000012], + [-164.83625240799995, 64.514797268000095], + [-164.885690883999899, 64.491522528000147], + [-164.909860805999926, 64.493150132], + [-164.902658657999893, 64.510565497000144], + [-164.908151821999923, 64.523993231000148], + [-164.921457485999923, 64.532416083], + [-164.93781490799995, 64.534735419000171], + [-164.93781490799995, 64.527980861000131], + [-164.930856899999952, 64.525132554], + [-164.924143032999893, 64.521144924000012], + [-164.932362433999913, 64.51276276200015], + [-164.942005988999881, 64.507554429000052], + [-164.952951626999948, 64.505804755000057], + [-164.965077277999939, 64.507473049000069], + [-164.953968878999916, 64.494370835000112], + [-164.935170050999858, 64.486476955000128], + [-164.914051886999943, 64.48037344000015], + [-164.89618893099987, 64.472723700000117], + [-164.924143032999893, 64.459662177000141], + [-164.842518683999913, 64.461411851000136], + [-164.801096157999893, 64.467474677000141], + [-164.766468878999888, 64.480169989], + [-164.796457485999952, 64.463446356000148], + [-164.837106899999952, 64.455226955000072], + [-165.035511847999942, 64.44830963700015], + [-165.446237758999871, 64.511867580000157], + [-165.877512173999889, 64.54824453300013], + [-166.002390102999868, 64.571437893000066], + [-166.189686652999939, 64.585191148], + [-166.370350714999915, 64.637844143], + [-166.446034308999913, 64.691473700000088], + [-166.483469204999949, 64.729641018000066], + [-166.474623356999899, 64.748137624000051], + [-166.474737484999935, 64.770954982000077], + [-166.478016730999911, 64.789618231000176], + [-166.480376894999893, 64.802010139000075], + [-166.470066861999925, 64.807366877], + [-166.439207876999888, 64.810215714], + [-166.39391028599988, 64.822739976000108], + [-166.386057094999899, 64.827337958000058], + [-166.385568813999896, 64.836004950000145], + [-166.391713019999884, 64.841376044000114], + [-166.403879360999952, 64.835842190000093], + [-166.410157197999894, 64.854530315000105], + [-166.408834984999913, 64.869548642999987], + [-166.390207485999923, 64.898504950000088], + [-166.407948370999918, 64.904445705000015], + [-166.432932094999927, 64.921616929000137], + [-166.471018032999922, 64.930365302000112], + [-166.504831508999899, 64.951117255000028], + [-166.527333136999886, 64.953111070000048], + [-166.515248175999886, 64.937811591000084], + [-166.444813605999883, 64.898504950000088], + [-166.46747799399995, 64.907416083000115], + [-166.525705532999865, 64.936468817], + [-166.579721935999885, 64.952968616000177], + [-166.684529225999881, 64.982179906000042], + [-166.700066469999882, 64.994006359000039], + [-166.69535038099994, 65.007664844000132], + [-166.687375979999956, 65.022827007], + [-166.711388818999922, 65.043713442000026], + [-166.749510172999919, 65.062010457000113], + [-166.829050258999956, 65.08283112200003], + [-166.878610805999898, 65.102728583000115], + [-166.961530911999915, 65.154359258000014], + [-166.957386847999885, 65.178127346000068], + [-166.9395721059999, 65.220765124000096], + [-166.926973628999946, 65.242896969000057], + [-166.910186138999876, 65.264533382000039], + [-166.894316131999858, 65.276363518], + [-166.880238410999937, 65.28204987200003], + [-166.852772589999887, 65.277899481000176], + [-166.861765102999897, 65.267482815], + [-166.889356940999875, 65.238460395000132], + [-166.905900159999902, 65.220569307000133], + [-166.918247126999916, 65.202182262000164], + [-166.932077602999925, 65.168850002000013], + [-166.917658332999878, 65.15438559900015], + [-166.904223590999919, 65.150911264000101], + [-166.890451626999948, 65.151760158000073], + [-166.876169399999952, 65.149115302], + [-166.844227667999945, 65.136297919000143], + [-166.754261847999885, 65.115627346000124], + [-166.712635870999918, 65.112941799000154], + [-166.656727667999945, 65.125067450000145], + [-166.609974738999881, 65.122300523], + [-166.57953854099992, 65.129950262000122], + [-166.559315558999884, 65.130682684000149], + [-166.547189907999893, 65.13690827], + [-166.542917446999894, 65.136867580000015], + [-166.538644985999895, 65.136297919000143], + [-166.534169074999909, 65.13743724199999], + [-166.533640102999925, 65.140041408000073], + [-166.534779425999886, 65.14915599199999], + [-166.534169074999909, 65.151760158000073], + [-166.485829230999911, 65.173570054000109], + [-166.469227667999945, 65.189276434000092], + [-166.476429816999882, 65.210109768000066], + [-166.488718227999925, 65.234279690000065], + [-166.469227667999945, 65.244574286], + [-166.403879360999952, 65.25413646], + [-166.391794399999952, 65.260239976000079], + [-166.381947394999941, 65.266994533000016], + [-166.371286587999919, 65.272528387000037], + [-166.356678839999887, 65.275213934000092], + [-166.341796566999903, 65.266718645000097], + [-166.323579845999859, 65.255456966000011], + [-166.251599967999908, 65.258056836], + [-166.124573853999891, 65.234273622000032], + [-166.090634509999887, 65.231044072000046], + [-166.056451185999862, 65.232976328000163], + [-166.031187851999903, 65.24310361], + [-166.076649644999918, 65.263578687000106], + [-166.140409905999945, 65.285692726], + [-166.227894391999882, 65.301617637], + [-166.310130747999892, 65.312188333000122], + [-166.34846377, 65.309279207000046], + [-166.373768683999913, 65.305324611000131], + [-166.434055400999881, 65.318724034000084], + [-166.502797003999888, 65.336249091000084], + [-166.647049889999892, 65.351326450000144], + [-166.938303188999896, 65.385077216000084], + [-166.923044399999924, 65.37832265800013], + [-166.913011021999921, 65.37079122400003], + [-166.870098064999866, 65.360781050000114], + [-166.812409178999928, 65.35356719], + [-166.725879585999849, 65.342074735], + [-166.6499355979999, 65.326820378000107], + [-166.766921086999872, 65.335763305000043], + [-166.863587591999874, 65.351319648000114], + [-167.00044988499991, 65.378115755000167], + [-167.184295793999922, 65.393241341000035], + [-167.398554501999882, 65.401081548000022], + [-167.604327128999927, 65.453419410000052], + [-167.643122949999935, 65.475885788000156], + [-167.722117643999894, 65.504658347000046], + [-167.822957517999953, 65.523837836000055], + [-167.887016176999907, 65.547614050000092], + [-168.032175258999928, 65.573431708], + [-168.052438930999926, 65.580023505000057], + [-168.060373501999919, 65.584906317000119], + [-168.081003383999928, 65.591498114], + [-168.090280727999897, 65.596747137000094], + [-168.095570441999882, 65.603501695000134], + [-168.100941535999937, 65.618231512000122], + [-168.103871222999942, 65.62409088700015], + [-168.127797003999916, 65.642157294000086], + [-168.131214972999913, 65.648260809000149], + [-168.13219153599988, 65.652899481000091], + [-168.137440558999884, 65.665025132], + [-168.134877081999889, 65.669826565000093], + [-168.126291469999956, 65.672796942], + [-168.124379035999908, 65.675930080000072], + [-168.115427212999862, 65.685980536000145], + [-168.071603969999899, 65.707098700000145], + [-167.98114986899995, 65.733099677000141], + [-167.92401891699987, 65.748607860000121], + [-167.882079792999946, 65.755439833000182], + [-167.866810675999915, 65.749009507000054], + [-167.877878383999928, 65.73851146], + [-167.891346808999913, 65.733954169000057], + [-167.909413214999944, 65.73078034100017], + [-167.940866665999863, 65.716701565000122], + [-167.990956183999884, 65.709133205000072], + [-168.028024868999893, 65.696763414000046], + [-168.056711391999954, 65.677232164000074], + [-168.062936977999925, 65.651353257000054], + [-168.039865688999953, 65.635931708000115], + [-168.000436977999868, 65.642564195], + [-167.925485805999926, 65.665025132], + [-167.894886847999913, 65.670233466000084], + [-167.856068488999881, 65.683539130000028], + [-167.826242641999897, 65.701361395000092], + [-167.822743292999917, 65.720282294000114], + [-167.580922003999888, 65.720689195000105], + [-167.531239386999857, 65.726141669000143], + [-167.500599738999853, 65.740790106000148], + [-167.496571417999888, 65.765448309000149], + [-167.524403449999937, 65.773830471000011], + [-167.559193488999881, 65.778713283000073], + [-167.576364712999919, 65.792547919000086], + [-167.56102454299986, 65.808905341000084], + [-167.52513587099989, 65.813299872000172], + [-167.452829555999926, 65.809719143], + [-167.468332485999923, 65.816351630000085], + [-167.485218878999916, 65.82103099199999], + [-167.502919074999909, 65.82330963700015], + [-167.521107550999915, 65.822699286], + [-167.521107550999915, 65.830145575000174], + [-167.345936652999939, 65.898586330000128], + [-167.288319464999887, 65.905218817], + [-167.282419399999952, 65.894598700000145], + [-167.261219855999855, 65.882961330000157], + [-167.213246222999857, 65.86432526200015], + [-167.182850714999887, 65.858221747000087], + [-167.151112433999941, 65.859808661000116], + [-167.059885219999956, 65.877630927], + [-166.986398891999954, 65.908636786000116], + [-166.893422003999888, 65.929388739000032], + [-166.876820441999911, 65.946844794000171], + [-166.973011847999942, 65.974188544000143], + [-166.92804928299995, 65.991400458000058], + [-166.897328253999888, 65.99603913], + [-166.85216223899991, 66.008124091000084], + [-166.835804816999911, 66.015082098000093], + [-166.847645636999857, 66.00918203300013], + [-166.85960852799991, 66.004706122000087], + [-166.869943813999896, 65.998602606000091], + [-166.876820441999911, 65.987779039000102], + [-166.855458136999857, 65.987494208000058], + [-166.81586666599992, 65.981838283000073], + [-166.794870571999866, 65.987779039000102], + [-166.800363735999895, 65.992254950000145], + [-166.810007290999863, 66.003119208000058], + [-166.815378383999928, 66.007635809000092], + [-166.800648566999939, 66.012762762000122], + [-166.76073157499988, 66.04242584800015], + [-166.724964972999857, 66.061346747000172], + [-166.53563391799986, 66.119452216000028], + [-166.460804816999882, 66.128648179], + [-166.408151821999866, 66.147935289000046], + [-166.357492641999897, 66.156561591000056], + [-166.310902472999885, 66.175360419000086], + [-166.287464972999913, 66.17963288], + [-166.184925910999937, 66.174994208000086], + [-166.138498501999891, 66.16673411699999], + [-166.089182094999899, 66.152289130000113], + [-166.10871334499987, 66.152248440000122], + [-166.145130988999938, 66.156561591000056], + [-166.164255337999919, 66.152289130000113], + [-166.093698696999951, 66.12531159100017], + [-165.754994269999941, 66.105292059000092], + [-165.500111456999917, 66.152289130000113], + [-165.516224738999881, 66.164984442], + [-165.540638800999943, 66.173488674000041], + [-165.611765102999868, 66.182928778000033], + [-165.710886196999923, 66.212632554000052], + [-165.765980597999885, 66.220160223000121], + [-165.848947719999899, 66.22011953300013], + [-165.873972133999899, 66.225572007000082], + [-165.889963344999899, 66.241034247000087], + [-165.872873501999948, 66.263413804000109], + [-165.838693813999953, 66.28896719], + [-165.766428188999896, 66.323635158000073], + [-165.487660285999908, 66.402289130000085], + [-165.36351477799991, 66.41893138200011], + [-165.335316535999851, 66.429429429], + [-165.305734829999892, 66.43695709800015], + [-165.105213995999918, 66.445298570000105], + [-165.074940558999913, 66.440252997000087], + [-165.076608852999925, 66.436346747000087], + [-165.077585415999891, 66.433172919000029], + [-165.079050258999956, 66.429917710000083], + [-165.082386847999885, 66.42601146], + [-165.073719855999911, 66.41502513200011], + [-165.06196041599992, 66.407538153000147], + [-165.048166469999899, 66.402533270000035], + [-165.033395962999919, 66.399318752000156], + [-165.026560024999924, 66.422512111000103], + [-165.006337042999888, 66.430853583000058], + [-164.980905727999868, 66.433783270000092], + [-164.958241339999915, 66.440252997000087], + [-164.955759243999893, 66.444647528000147], + [-164.950550910999908, 66.460150458000086], + [-164.944650844999956, 66.466986395], + [-164.931141730999883, 66.472235419000086], + [-164.898752407999893, 66.478338934000149], + [-164.731312628999945, 66.532660223], + [-164.718088344999899, 66.556341864000117], + [-164.522653774999924, 66.582424221000096], + [-164.274362758999871, 66.60228099199999], + [-163.986398891999926, 66.61225006700009], + [-163.736317511999914, 66.603461005000113], + [-163.675729946999923, 66.592230536000116], + [-163.628732876999891, 66.570013739000061], + [-163.908151821999923, 66.5841332050001], + [-163.930124477999954, 66.585760809000121], + [-163.92088782499988, 66.573187567000119], + [-163.882883266999897, 66.569484768000066], + [-163.806874152999882, 66.570013739000061], + [-163.786813930999926, 66.560492255000057], + [-163.771799282999893, 66.545070705000128], + [-163.762399868999864, 66.525824286000088], + [-163.759103969999927, 66.504828192000147], + [-163.766468878999916, 66.485419012000037], + [-163.78461666599992, 66.470892645], + [-163.864247199999909, 66.436468817000062], + [-163.868967251999891, 66.429429429], + [-163.872141079999864, 66.420070705000157], + [-163.879628058999941, 66.41111888200011], + [-163.888498501999891, 66.403876044000114], + [-163.895619269999941, 66.399318752000156], + [-163.885202602999925, 66.379868882000054], + [-163.888172980999855, 66.366644598000121], + [-163.894846157999922, 66.35423411699999], + [-163.895619269999941, 66.337225653000033], + [-163.868967251999891, 66.30931224199999], + [-163.870432094999956, 66.308294989000117], + [-163.869699673999946, 66.302639065000122], + [-163.864979620999918, 66.295314846000124], + [-163.854685024999924, 66.289455471000096], + [-163.876576300999943, 66.265936591000028], + [-163.918771938999896, 66.246486721000124], + [-163.964955206999889, 66.232977606000148], + [-163.999256964999944, 66.227362372000144], + [-164.05406653599988, 66.226996161000145], + [-164.078236456999889, 66.222601630000057], + [-164.098337368999921, 66.210353908000101], + [-164.120310024999924, 66.204006252000156], + [-164.175729946999923, 66.208156643], + [-164.191110805999955, 66.193304755000142], + [-164.032093878999945, 66.192124742000104], + [-163.985666469999899, 66.206935940000093], + [-163.990549282999865, 66.189154364], + [-163.977487758999899, 66.18353913], + [-163.959787563999896, 66.186997789000017], + [-163.950876430999926, 66.196356512000037], + [-163.945749477999925, 66.208685614000089], + [-163.933176235999952, 66.212347723000121], + [-163.917469855999883, 66.210679429000109], + [-163.903065558999913, 66.206935940000093], + [-163.890492316999911, 66.167629299000069], + [-163.85496985599994, 66.133734442000119], + [-163.807484503999945, 66.107245184000149], + [-163.759103969999927, 66.090236721000096], + [-163.680490688999924, 66.078599351], + [-163.354359503999888, 66.09764232], + [-163.338734503999916, 66.093329169000171], + [-163.304310675999886, 66.07904694200009], + [-163.286447719999899, 66.075913804000024], + [-163.121652798999946, 66.070379950000088], + [-163.04047604099992, 66.079169012000065], + [-163.000843878999916, 66.087836005000142], + [-162.963693813999896, 66.100775458000058], + [-162.947702602999897, 66.103501695000105], + [-162.864491339999859, 66.098049221000068], + [-162.784169074999852, 66.105373440000093], + [-162.758534308999884, 66.111314195000105], + [-162.764759894999941, 66.103908596000124], + [-162.710764126999948, 66.085516669000086], + [-162.682850714999915, 66.069769598000121], + [-162.679676886999914, 66.052679755000085], + [-162.685251430999926, 66.046942450000117], + [-162.689808722999885, 66.040961005], + [-162.692005988999881, 66.033107815], + [-162.690297003999888, 66.021918036], + [-162.68378658799989, 66.008978583], + [-162.676869269999884, 66.006537177000055], + [-162.669789191999939, 66.010158596000039], + [-162.662953253999888, 66.015082098000093], + [-162.661447719999956, 66.020656643000095], + [-162.660511847999885, 66.029852606000148], + [-162.654733852999925, 66.038519598000065], + [-162.638742641999897, 66.04242584800015], + [-162.549265102999925, 66.051336981000091], + [-162.50812740799995, 66.060736395000035], + [-162.487904425999915, 66.062892971000011], + [-162.481068488999881, 66.065130927], + [-162.474964972999913, 66.069281317000119], + [-162.468495245999918, 66.071030992000132], + [-162.460642055999926, 66.066636460000055], + [-162.451161261999914, 66.055894273000135], + [-162.445668097999885, 66.051174221000124], + [-162.439808722999942, 66.049261786000059], + [-162.427683071999951, 66.047308661000116], + [-162.401071743999921, 66.038316148000106], + [-162.388010219999927, 66.035589911000116], + [-162.346628383999928, 66.036525783000016], + [-162.306101040999891, 66.04242584800015], + [-162.210072394999912, 66.071682033000073], + [-162.179432745999918, 66.075913804000024], + [-161.915638800999943, 66.04242584800015], + [-161.933338995999947, 66.040676174000154], + [-161.948923305999926, 66.034369208000115], + [-161.977121548999918, 66.015082098000093], + [-161.960153774999924, 66.013373114000089], + [-161.926014777999939, 66.025091864000061], + [-161.908192511999857, 66.021918036], + [-161.89793860599994, 66.012274481000034], + [-161.899240688999953, 66.003119208000058], + [-161.908558722999885, 65.994696356000091], + [-161.922474738999881, 65.987779039000102], + [-161.895375128999945, 65.97947825700011], + [-161.858225063999953, 65.977280992000132], + [-161.820668097999942, 65.980292059000035], + [-161.792795376999891, 65.987779039000102], + [-161.792795376999891, 65.99404531500015], + [-161.847401495999918, 66.007635809000092], + [-161.833688930999926, 66.024481512000094], + [-161.817331508999899, 66.039780992000075], + [-161.798898891999954, 66.052801825000145], + [-161.779123501999948, 66.062892971000011], + [-161.746205206999861, 66.071437893000123], + [-161.729440883999928, 66.078436591000028], + [-161.727284308999941, 66.08681875200007], + [-161.737660285999937, 66.088364976000108], + [-161.785267706999917, 66.075913804000024], + [-161.785267706999917, 66.083441473000065], + [-161.763295050999886, 66.091376044000029], + [-161.685292120999947, 66.138617255], + [-161.66633053299995, 66.154038804000109], + [-161.658680792999917, 66.162258205000015], + [-161.646921352999925, 66.184393622000087], + [-161.638132290999863, 66.195013739000146], + [-161.624582485999895, 66.199448960000112], + [-161.618153449999909, 66.203762111000017], + [-161.590687628999945, 66.238470770000092], + [-161.584909633999871, 66.249741929000081], + [-161.579823370999861, 66.25470612200003], + [-161.571237758999928, 66.258002020000063], + [-161.550729946999894, 66.261542059000035], + [-161.505930141999954, 66.278876044000029], + [-161.360096808999913, 66.275213934000178], + [-161.363840298999946, 66.272406317000119], + [-161.373768683999941, 66.262152411], + [-161.320668097999942, 66.232814846000096], + [-161.298695441999939, 66.227362372000144], + [-161.236927863999938, 66.223130601000136], + [-161.175770636999857, 66.227362372000144], + [-161.128651495999861, 66.245794989], + [-161.105661587999919, 66.250392971000124], + [-161.086415167999945, 66.241034247000087], + [-161.083811001999948, 66.230943101000108], + [-161.088083462999862, 66.218410549000126], + [-161.098459438999953, 66.208685614000089], + [-161.114328579999892, 66.206935940000093], + [-161.111439581999861, 66.197333075000088], + [-161.107004360999895, 66.188625393000038], + [-161.100900844999899, 66.18056875200007], + [-161.093251105999855, 66.172756252000099], + [-161.104359503999888, 66.165838934000092], + [-161.111683722999885, 66.157904364000117], + [-161.113148566999882, 66.148871161000116], + [-161.10688229099992, 66.138617255], + [-161.12328040299991, 66.13174062700007], + [-161.14281165299991, 66.129787502000127], + [-161.182606574999909, 66.131170966000028], + [-161.182606574999909, 66.12433502800009], + [-161.162546352999925, 66.118597723000121], + [-161.138986782999893, 66.11737702], + [-161.114938930999926, 66.119614976], + [-161.093251105999855, 66.12433502800009], + [-161.077341274999952, 66.130804755], + [-161.06773841099988, 66.138495184000121], + [-161.052235480999855, 66.158514716000084], + [-161.024037238999881, 66.184230861000131], + [-161.017526821999894, 66.193304755000142], + [-161.004709438999953, 66.232245184000035], + [-160.997019008999928, 66.241034247000087], + [-161.013783331999861, 66.261908270000063], + [-161.057443813999953, 66.28510163], + [-161.075876430999898, 66.299383856000091], + [-161.094309048999918, 66.318670966000028], + [-161.113758917999917, 66.332912502000127], + [-161.135731574999937, 66.343166408000158], + [-161.260324673999889, 66.369208075000031], + [-161.308827277999882, 66.373521226000136], + [-161.342966274999867, 66.382961330000128], + [-161.360788540999948, 66.385077216000141], + [-161.424875454999921, 66.383490302000112], + [-161.510690883999956, 66.407660223000121], + [-161.744618292999917, 66.405503648000135], + [-161.756947394999884, 66.402980861000017], + [-161.792795376999891, 66.385077216000141], + [-161.813059048999889, 66.380926825000117], + [-161.874704555999926, 66.377630927000084], + [-161.904367641999954, 66.365179755000057], + [-161.919056769999884, 66.344305731000091], + [-161.913278774999895, 66.326727606000148], + [-161.881540493999921, 66.323635158000073], + [-161.893299933999913, 66.316148179000109], + [-161.88731848899991, 66.309881903000147], + [-161.874948696999866, 66.303412177000055], + [-161.867258266999954, 66.295640367000047], + [-161.86982174399995, 66.281317450000145], + [-161.880930141999897, 66.272162177], + [-161.896311001999919, 66.27045319200009], + [-161.911936001999891, 66.278876044000029], + [-161.919016079999892, 66.287665106000091], + [-161.924672003999859, 66.29824453300013], + [-161.928537563999953, 66.309393622000172], + [-161.929921027999939, 66.320217190000065], + [-161.934641079999949, 66.327134507000054], + [-161.944650844999927, 66.330633856000148], + [-161.953968878999888, 66.336411851000108], + [-161.956613735999866, 66.350287177000027], + [-161.948312954999892, 66.366522528000147], + [-161.898264126999891, 66.408921617000047], + [-161.886545376999891, 66.422308661000145], + [-161.875965949999909, 66.440090236000017], + [-161.868763800999886, 66.46035390800013], + [-161.867258266999954, 66.481268622000087], + [-161.888376430999955, 66.52440013200011], + [-161.932484503999945, 66.556341864000117], + [-162.079457160999937, 66.623195705000128], + [-162.163197394999884, 66.682766018000066], + [-162.209828253999888, 66.70722077], + [-162.264515753999916, 66.722723700000117], + [-162.440541144999884, 66.730780341000141], + [-162.470895962999947, 66.738511460000055], + [-162.484608527999882, 66.744086005000085], + [-162.495106574999937, 66.746527411], + [-162.50458736899995, 66.749823309000035], + [-162.515248175999886, 66.758124091000028], + [-162.520578579999949, 66.766058661], + [-162.522328253999945, 66.780951239000146], + [-162.525827602999925, 66.789740302000027], + [-162.540028449999852, 66.804754950000031], + [-162.575795050999886, 66.830633856000034], + [-162.587228969999927, 66.844956773000135], + [-162.604562954999921, 66.841376044000143], + [-162.625314907999893, 66.861476955000015], + [-162.639841274999952, 66.887030341000084], + [-162.638742641999897, 66.899603583000086], + [-162.593820766999897, 66.916327216000113], + [-162.577015753999888, 66.919419664000017], + [-162.519968227999897, 66.920558986000131], + [-162.516224738999881, 66.923529364000146], + [-162.515451626999948, 66.927883205000128], + [-162.507435675999886, 66.939032294000143], + [-162.502390102999954, 66.94822825700011], + [-162.495228644999912, 66.956732489000061], + [-162.484811977999925, 66.960394598], + [-162.472849087999919, 66.957220770000148], + [-162.463815883999871, 66.949367580000072], + [-162.44697018099987, 66.929999091000141], + [-162.417103644999884, 66.922512111000074], + [-162.384103969999927, 66.934759833000143], + [-162.352609829999921, 66.952297268000095], + [-162.327137824999909, 66.960394598], + [-162.306630011999857, 66.952948309000035], + [-162.284860805999898, 66.937079169000114], + [-162.210438605999911, 66.869330145000092], + [-162.120920376999948, 66.806097723000121], + [-162.094309048999889, 66.794378973000121], + [-162.033029751999891, 66.786281643], + [-162.016835089999915, 66.780951239000146], + [-162.014963344999956, 66.772365627000127], + [-162.052845831999889, 66.735093492000047], + [-162.075754360999895, 66.706203518000123], + [-162.083241339999859, 66.68675364800005], + [-162.080759243999921, 66.666205145], + [-162.065988735999952, 66.653062242000047], + [-162.015207485999895, 66.634100653000033], + [-161.994821743999921, 66.621812242000075], + [-161.915231899999924, 66.557196356000034], + [-161.870838995999918, 66.532171942000033], + [-161.63377844999988, 66.457993882], + [-161.607167120999918, 66.45392487200003], + [-161.434030727999925, 66.468491929000052], + [-161.388050910999937, 66.481268622000087], + [-161.353627081999917, 66.485052802000112], + [-161.339182094999956, 66.488714911000059], + [-161.340280727999897, 66.49494049700003], + [-161.313059048999889, 66.500799872000172], + [-161.262888149999924, 66.529242255], + [-161.237538214999887, 66.535874742000047], + [-161.204213019999884, 66.538641669000029], + [-161.193430141999897, 66.536078192], + [-161.155262824999909, 66.503729559000092], + [-161.141916469999899, 66.498032945000105], + [-161.060983852999925, 66.486151434000149], + [-161.033680792999945, 66.475409247000144], + [-160.983631964999915, 66.440578518], + [-160.784779425999858, 66.374497789000102], + [-160.765370245999947, 66.370428778000061], + [-160.702829555999926, 66.377630927000084], + [-160.617176886999943, 66.371405341000028], + [-160.450917120999918, 66.393744208000058], + [-160.249094204999921, 66.402289130000085], + [-160.228505011999914, 66.412054755000113], + [-160.216175910999937, 66.43280670800003], + [-160.215646938999868, 66.45001862200003], + [-160.220448370999947, 66.493638414000131], + [-160.219186977999925, 66.532049872000059], + [-160.24946041599992, 66.561468817000119], + [-160.325428839999859, 66.60480377800009], + [-160.320871548999918, 66.60618724199999], + [-160.31187903599988, 66.610174872000144], + [-160.305612758999928, 66.610988674000069], + [-160.317575649999867, 66.634100653000033], + [-160.299631313999924, 66.639837958], + [-160.269113735999895, 66.639797268], + [-160.243519660999937, 66.645738023000135], + [-160.274973110999952, 66.654608466000084], + [-160.317941860999895, 66.655585028000147], + [-160.354440883999928, 66.644842841000056], + [-160.366403774999867, 66.61839427300005], + [-160.39716549399995, 66.629584052000084], + [-160.441273566999854, 66.635972398], + [-160.48485266799986, 66.634466864000146], + [-160.514149542999888, 66.621812242000075], + [-160.521717902999939, 66.609849351000136], + [-160.52586829299986, 66.600083726], + [-160.533558722999885, 66.593491929000109], + [-160.551706508999899, 66.591131903000147], + [-160.634510870999918, 66.597967841000084], + [-160.698312954999892, 66.612860419000057], + [-160.813547329999892, 66.662054755000057], + [-160.880970831999889, 66.672430731000148], + [-161.059071417999888, 66.651922919000086], + [-161.136057094999956, 66.651922919000086], + [-161.171579555999926, 66.644435940000122], + [-161.203114386999943, 66.625230210000083], + [-161.204050258999928, 66.621161200000031], + [-161.20213782499988, 66.608832098000065], + [-161.203114386999943, 66.60480377800009], + [-161.211171027999882, 66.601385809000092], + [-161.231760219999899, 66.599758205000072], + [-161.237253383999928, 66.597967841000084], + [-161.240183071999866, 66.587632554], + [-161.237049933999913, 66.57929108300003], + [-161.234934048999889, 66.570786851], + [-161.240956183999884, 66.560044664000074], + [-161.271962042999917, 66.542954820000105], + [-161.313710089999944, 66.5353050800001], + [-161.395497199999909, 66.535874742000047], + [-161.429432745999861, 66.542466539000131], + [-161.446726040999863, 66.54376862200003], + [-161.481556769999912, 66.533880927000112], + [-161.495432094999899, 66.536688544000171], + [-161.518422003999888, 66.550116278000147], + [-161.562611456999946, 66.56639232], + [-161.565622524999952, 66.577541408000016], + [-161.54633541599992, 66.597967841000084], + [-161.598011847999857, 66.601874091000084], + [-161.649728969999899, 66.612860419000057], + [-161.868275519999912, 66.706284898000106], + [-161.901966925999915, 66.735093492000047], + [-161.871774868999921, 66.754095770000063], + [-161.867258266999954, 66.758124091000028], + [-161.86945553299995, 66.768744208000058], + [-161.881540493999921, 66.789740302000027], + [-161.885324673999889, 66.808661200000031], + [-161.880563930999955, 66.814764716000028], + [-161.853342251999891, 66.819403387000037], + [-161.820057745999861, 66.837551174000126], + [-161.80016028599988, 66.853745835], + [-161.801136847999942, 66.865912177000084], + [-161.808216925999915, 66.879461981000034], + [-161.806385870999918, 66.899603583000086], + [-161.788685675999943, 66.91339752800009], + [-161.734079555999955, 66.92308177300005], + [-161.716420050999943, 66.939927476000051], + [-161.722727016999897, 66.943019924000126], + [-161.725534633999928, 66.946234442], + [-161.727365688999924, 66.949652411], + [-161.730661587999947, 66.953558661], + [-161.661732550999915, 66.963202216000141], + [-161.628854946999923, 66.964056708000058], + [-161.558338995999918, 66.957993882000082], + [-161.518299933999913, 66.960679429000052], + [-161.498850063999896, 66.971096096000124], + [-161.525217251999891, 66.991441148000135], + [-161.544422980999855, 66.994696356000176], + [-161.589548305999926, 66.993231512000122], + [-161.603464321999894, 66.997992255000113], + [-161.616078253999888, 67.007798570000048], + [-161.631337042999945, 67.014593817000062], + [-161.687570766999926, 67.029282945000077], + [-161.696522589999859, 67.029282945000077], + [-161.703724738999881, 67.026434637000037], + [-161.708241339999944, 67.021551825000145], + [-161.71031653599988, 67.016994533000016], + [-161.710194464999915, 67.015041408000073], + [-161.724558071999866, 67.014837958000115], + [-161.740223761999943, 67.017279364000146], + [-161.755441860999923, 67.023179429], + [-161.76825924399995, 67.033026434000092], + [-161.796213344999899, 67.048488674000126], + [-161.835153774999867, 67.054999091000028], + [-161.990223761999886, 67.049221096000153], + [-162.248036261999914, 67.015041408000073], + [-162.257761196999866, 67.020575262000179], + [-162.258290167999945, 67.032904364000117], + [-162.255482550999886, 67.045803127000127], + [-162.254872199999937, 67.052923895], + [-162.26500403599988, 67.061590887000094], + [-162.275257941999939, 67.06781647300015], + [-162.288278774999924, 67.070868231000063], + [-162.306101040999891, 67.07025788], + [-162.296986456999889, 67.05019765800013], + [-162.30687415299991, 67.039943752000013], + [-162.312977667999917, 67.029527085000112], + [-162.293039516999897, 67.008856512000094], + [-162.312936977999925, 67.003892320000048], + [-162.368112758999928, 67.008856512000094], + [-162.435495571999923, 66.99103424700003], + [-162.456898566999882, 66.994574286], + [-162.466867641999897, 67.00218333500014], + [-162.467600063999896, 67.009466864000061], + [-162.428822394999884, 67.057928778000033], + [-162.425852016999897, 67.063421942000062], + [-162.405588344999956, 67.071437893], + [-162.386423305999898, 67.090399481000034], + [-162.354481574999909, 67.132310289000131], + [-162.337839321999923, 67.145086981000148], + [-162.334909633999928, 67.150864976000136], + [-162.340809699999852, 67.159654039000102], + [-162.360096808999913, 67.167425848], + [-162.387928839999944, 67.168768622000087], + [-162.416127081999917, 67.165594794000029], + [-162.436390753999945, 67.159654039000102], + [-162.39911861899995, 67.159979559000035], + [-162.383493618999864, 67.154282945000048], + [-162.374948696999951, 67.139227606000034], + [-162.390451626999891, 67.13361237200003], + [-162.485910610999895, 67.061224677000084], + [-162.558786587999919, 67.019964911000116], + [-162.580433722999885, 67.015041408000073], + [-162.663767055999926, 67.016058661000116], + [-162.676991339999944, 67.018255927000112], + [-162.690297003999888, 67.022528387000037], + [-162.688547329999892, 67.026068427000112], + [-162.687489386999914, 67.029364325000145], + [-162.685983852999868, 67.032782294000143], + [-162.682810024999924, 67.036810614000117], + [-162.733347133999928, 67.048814195000048], + [-162.88890540299991, 67.042954820000105], + [-162.939564581999889, 67.04816315300009], + [-162.951893683999941, 67.044338283000073], + [-162.937326626999891, 67.029282945000077], + [-162.916737433999884, 67.020819403000033], + [-162.869496222999913, 67.014837958000115], + [-162.84788977799991, 67.008856512000094], + [-162.874134894999941, 67.005316473000036], + [-163.073923305999898, 67.035549221000039], + [-163.142323370999861, 67.057033596000153], + [-163.405629035999937, 67.075873114], + [-163.433094855999883, 67.08502838700015], + [-163.688303188999896, 67.103216864000061], + [-163.724964972999942, 67.111273505], + [-163.765614386999914, 67.139960028000147], + [-163.774159308999941, 67.180365302000027], + [-163.773426886999914, 67.225653387000037], + [-163.786447719999899, 67.26951732], + [-163.792469855999911, 67.289007880000057], + [-163.81004798099994, 67.335150458], + [-163.823963995999918, 67.354559637000094], + [-163.96161861899995, 67.498683986000131], + [-164.046457485999923, 67.563706773], + [-164.151478644999912, 67.619614976000051], + [-164.446034308999856, 67.709906317000062], + [-164.531605597999942, 67.750799872000087], + [-164.597767706999946, 67.77415599199999], + [-164.693552212999862, 67.824611721000011], + [-164.726511196999951, 67.834540106000119], + [-164.766468878999888, 67.838080145], + [-164.773304816999911, 67.838080145], + [-164.764393683999884, 67.823716539000102], + [-164.747751430999926, 67.817124742000047], + [-164.732858852999868, 67.812201239000089], + [-164.718088344999899, 67.803900458], + [-164.747873501999891, 67.809881903000033], + [-164.801503058999884, 67.838364976000136], + [-164.856027798999889, 67.849554755000142], + [-165.053944464999859, 67.933050848000036], + [-165.232736782999893, 67.997626044000171], + [-165.43720455599987, 68.060248114000089], + [-165.619984503999888, 68.091945705000128], + [-165.768991665999891, 68.106878973000093], + [-165.928089972999885, 68.136948960000112], + [-165.99360104099992, 68.16705963700015], + [-166.027088995999861, 68.194322007000054], + [-166.067860480999911, 68.216620184000092], + [-166.078602667999945, 68.225083726000136], + [-166.103464321999894, 68.239894924000012], + [-166.205881313999896, 68.262640692000147], + [-166.29662024599989, 68.299627997000087], + [-166.643747524999952, 68.344549872000087], + [-166.789865688999924, 68.339585679000137], + [-166.822824673999918, 68.351385809000092], + [-166.829050258999956, 68.351385809000092], + [-166.811838344999956, 68.35956452], + [-166.598215298999889, 68.408107815000065], + [-166.507191535999851, 68.422919012000065], + [-166.444813605999883, 68.42023346600017], + [-166.513783331999917, 68.414699611000131], + [-166.719064907999922, 68.37327708500014], + [-166.747181769999912, 68.363348700000031], + [-166.664540167999945, 68.351385809000092], + [-166.54816646999987, 68.358832098000093], + [-166.45478268099987, 68.398871161000116], + [-166.427683071999951, 68.397162177000112], + [-166.376535610999895, 68.385565497000087], + [-166.384836391999869, 68.397121486000017], + [-166.411447719999899, 68.403998114000117], + [-166.424997524999867, 68.41347890800013], + [-166.33820553299995, 68.399969794000143], + [-166.315134243999893, 68.405991929000081], + [-166.332875128999888, 68.41282786699999], + [-166.350900844999927, 68.436224677000084], + [-166.370350714999915, 68.440822658000016], + [-166.330189581999917, 68.467474677000141], + [-166.314645962999919, 68.481024481000091], + [-166.300770636999914, 68.502875067000147], + [-166.306263800999943, 68.522040106000119], + [-166.287180141999869, 68.537543036000116], + [-166.259632941999939, 68.551011460000026], + [-166.23997962099989, 68.564276434000035], + [-166.231027798999861, 68.579901434000121], + [-166.232533331999917, 68.587103583000058], + [-166.237904425999886, 68.59316640800013], + [-166.23997962099989, 68.605210679000052], + [-166.237131313999953, 68.616034247000144], + [-166.218861456999889, 68.646185614000089], + [-166.230661587999947, 68.654852606000176], + [-166.228708462999919, 68.661078192000119], + [-166.220285610999952, 68.666896877000099], + [-166.212635870999918, 68.674139716000113], + [-166.206979946999923, 68.686835028000175], + [-166.205067511999886, 68.696763413999989], + [-166.205881313999896, 68.718491929000052], + [-166.202707485999923, 68.740423895000063], + [-166.196848110999895, 68.759670315000037], + [-166.193796352999868, 68.779689846000096], + [-166.199045376999862, 68.803900458000086], + [-166.227976040999863, 68.849595445000105], + [-166.236765102999925, 68.874823309000149], + [-166.222604946999923, 68.885809637000037], + [-166.085642055999926, 68.89142487200003], + [-166.009103969999927, 68.872748114000146], + [-165.813588019999884, 68.879461981000091], + [-165.664743618999921, 68.86155833500014], + [-165.322092251999919, 68.876450913999989], + [-165.044056769999855, 68.881496486000017], + [-164.79076087099989, 68.914252020000148], + [-164.346424933999913, 68.929388739000146], + [-164.257028774999895, 68.94668203300013], + [-164.170358852999954, 68.953802802], + [-164.090036587999947, 68.978949286000059], + [-163.96454830599987, 69.003119208000086], + [-163.935170050999886, 69.012437242000104], + [-163.876698370999918, 69.038641669000143], + [-163.82172604099992, 69.04783763200011], + [-163.622547980999911, 69.119208075000117], + [-163.28612219999988, 69.310980536000116], + [-163.264759894999941, 69.326605536000116], + [-163.195301886999914, 69.415228583], + [-163.176991339999944, 69.426906643], + [-163.155751105999855, 69.420843817], + [-163.239979620999861, 69.32831452000012], + [-163.272450324999852, 69.304144598], + [-163.272450324999852, 69.29791901200015], + [-163.242543097999885, 69.30463288], + [-163.155751105999855, 69.359361070000134], + [-163.163197394999941, 69.366197007000054], + [-163.142648891999897, 69.375230210000055], + [-163.125803188999896, 69.389960028000147], + [-163.120676235999895, 69.40643952000012], + [-163.135324673999889, 69.420843817], + [-163.12242591099988, 69.430365302], + [-163.120187954999892, 69.438137111000017], + [-163.122141079999949, 69.44562409100017], + [-163.121652798999946, 69.45433177300005], + [-163.114125128999888, 69.466253973], + [-163.106678839999915, 69.474839585000112], + [-163.104969855999911, 69.483710028000147], + [-163.114816860999923, 69.495917059000035], + [-163.083200649999952, 69.501044012000037], + [-163.070790167999917, 69.52041250200007], + [-163.069284633999956, 69.541327216000028], + [-163.070139126999891, 69.551174221000124], + [-163.064768032999922, 69.555975653000033], + [-163.067860480999911, 69.566799221000124], + [-163.074777798999889, 69.578314520000063], + [-163.080677863999938, 69.58535390800013], + [-163.093820766999897, 69.590562242000132], + [-163.148996548999918, 69.599554755000057], + [-163.148996548999918, 69.605780341000113], + [-163.085438605999911, 69.60932038], + [-163.053578253999888, 69.615464585000055], + [-163.025461391999897, 69.626288153000147], + [-163.035145636999857, 69.632310289000074], + [-163.066395636999943, 69.64671458500014], + [-163.032907680999898, 69.661078192], + [-163.041615363999881, 69.663478908000158], + [-163.066395636999943, 69.674058335000026], + [-163.04853268099987, 69.687241929000052], + [-162.98412024599989, 69.681830145], + [-162.956532355999855, 69.68773021000014], + [-162.938425258999956, 69.711249091000084], + [-162.957590298999918, 69.72337474199999], + [-162.993478969999899, 69.727972723000121], + [-163.025461391999897, 69.728664455000072], + [-163.018747524999952, 69.745835679], + [-163.005360480999855, 69.75311920800003], + [-162.988352016999897, 69.756822007000054], + [-162.970814581999946, 69.763413804000109], + [-162.978260870999918, 69.770249742000047], + [-162.949777798999918, 69.790472723000065], + [-162.791371222999885, 69.853338934000121], + [-162.757272915999863, 69.87189362200003], + [-162.711618618999921, 69.880682684000092], + [-162.669992641999897, 69.906561591000084], + [-162.592762824999937, 69.941717841000141], + [-162.537790493999864, 69.956732489], + [-162.51142330599987, 69.976955471000011], + [-162.489491339999944, 70.001776434000149], + [-162.477365688999953, 70.024115302], + [-162.481922980999911, 70.030747789000074], + [-162.491037563999896, 70.051459052000055], + [-162.461496548999918, 70.05963776200015], + [-162.360707160999851, 70.057603257000054], + [-162.364206508999928, 70.063666083000143], + [-162.37132727799991, 70.079494533000073], + [-162.374948696999951, 70.085598049000069], + [-162.340809699999852, 70.092433986000074], + [-162.352040167999945, 70.108384507], + [-162.321481899999924, 70.127264716000028], + [-162.244618292999917, 70.153876044000143], + [-162.20673580599987, 70.161322333000143], + [-162.199411587999862, 70.164374091000028], + [-162.194284633999956, 70.171210028000147], + [-162.190419074999852, 70.17804596600017], + [-162.186594204999949, 70.181219794000029], + [-162.170969204999949, 70.184637762000037], + [-162.124867316999939, 70.203192450000145], + [-162.099436001999919, 70.220607815000122], + [-162.052845831999889, 70.243841864000146], + [-162.014963344999956, 70.27732982], + [-162.001657680999926, 70.280910549000069], + [-161.956613735999866, 70.304673570000077], + [-161.905710415999948, 70.32062409100017], + [-161.879831508999928, 70.322943427000141], + [-161.853586391999897, 70.318345445000105], + [-161.856149868999921, 70.314642645000063], + [-161.86103268099987, 70.304673570000077], + [-161.839955206999889, 70.304103908000101], + [-161.833119269999941, 70.304673570000077], + [-161.833119269999941, 70.297837632000054], + [-161.840443488999853, 70.296942450000145], + [-161.86103268099987, 70.290432033000158], + [-161.723703579999892, 70.274847723000065], + [-161.703358527999882, 70.263739325000031], + [-161.733469204999892, 70.250311591000141], + [-161.860056118999921, 70.258693752000013], + [-161.901966925999915, 70.256903387000122], + [-161.867909308999913, 70.242661851000108], + [-161.790842251999948, 70.240545966000113], + [-161.758615688999896, 70.229559637000065], + [-161.789173956999917, 70.229152736000131], + [-161.832590298999889, 70.223130601000136], + [-161.859486456999946, 70.211859442000147], + [-161.840524868999921, 70.195461330000128], + [-161.86554928299995, 70.179348049000069], + [-161.899525519999884, 70.178656317000119], + [-162.008737758999899, 70.196275132000054], + [-162.025502081999917, 70.195461330000128], + [-162.039784308999913, 70.191107489000146], + [-162.066151495999918, 70.179388739000061], + [-162.080759243999921, 70.174953518000095], + [-162.121693488999881, 70.161322333000143], + [-162.121693488999881, 70.153876044000143], + [-161.86461341099988, 70.169134833000115], + [-161.848093227999868, 70.173814195000048], + [-161.813221808999941, 70.192084052000112], + [-161.786732550999886, 70.199652411000059], + [-161.703358527999882, 70.195461330000128], + [-161.720163540999891, 70.201239325000088], + [-161.728260870999918, 70.202297268000066], + [-161.738148566999939, 70.202297268000066], + [-161.729318813999868, 70.215643622000172], + [-161.712595180999926, 70.224066473000121], + [-161.693186001999948, 70.228338934000035], + [-161.67601477799991, 70.229559637000065], + [-161.666737433999941, 70.232082424000069], + [-161.663522915999891, 70.237860419000029], + [-161.661447719999899, 70.244696356000063], + [-161.655588344999927, 70.250067450000088], + [-161.643422003999945, 70.254095770000063], + [-161.631947394999884, 70.256089585000112], + [-161.342152472999885, 70.258775132], + [-161.210642055999898, 70.276800848000036], + [-161.067005988999938, 70.314846096000011], + [-161.024973110999895, 70.318345445000105], + [-161.024973110999895, 70.312160549000126], + [-161.031809048999889, 70.312160549000126], + [-161.031809048999889, 70.304673570000077], + [-161.009877081999889, 70.304388739000117], + [-160.949899868999921, 70.290432033000158], + [-160.95649166599992, 70.301459052000112], + [-160.977406378999888, 70.313625393], + [-160.983998175999943, 70.325140692000119], + [-160.957875128999888, 70.332749742000075], + [-160.860666469999899, 70.347316799000012], + [-160.621530727999925, 70.429592190000065], + [-160.599802212999862, 70.441839911000116], + [-160.662790493999893, 70.434027411000116], + [-160.707468227999925, 70.419134833000086], + [-160.812692837999919, 70.387193101000079], + [-160.773060675999886, 70.405747788999989], + [-160.689279751999948, 70.434027411000116], + [-160.448963995999861, 70.489650783000158], + [-160.216175910999937, 70.579046942000062], + [-160.188303188999896, 70.597072658000101], + [-160.172230597999913, 70.604925848000093], + [-160.155384894999912, 70.606350002000156], + [-160.16742916599992, 70.596258856000091], + [-160.15961666599992, 70.587958075000117], + [-160.142689581999946, 70.58201732], + [-160.127430792999888, 70.579046942000062], + [-160.10297604099992, 70.578517971000096], + [-160.038075324999852, 70.592718817], + [-159.947092251999919, 70.597235419000143], + [-159.928212042999888, 70.592718817], + [-159.924387173999889, 70.581488348], + [-159.928903774999924, 70.568426825000031], + [-159.938181118999864, 70.557277736000017], + [-159.948679165999948, 70.551703192], + [-159.948679165999948, 70.544867255000085], + [-159.942209438999953, 70.545477606000034], + [-159.921986456999946, 70.544867255000085], + [-159.94383704299986, 70.521958726], + [-160.011057094999899, 70.520331122000144], + [-160.041818813999896, 70.507025458000143], + [-160.074086066999939, 70.48822663], + [-160.114816860999895, 70.480698960000112], + [-160.201893683999941, 70.476629950000174], + [-160.168771938999896, 70.465969143000123], + [-160.125721808999884, 70.466009833000115], + [-159.948475714999915, 70.494452216000141], + [-159.921986456999946, 70.489650783000158], + [-159.938343878999945, 70.476060289000102], + [-159.974232550999943, 70.456000067000147], + [-159.990223761999914, 70.441839911000116], + [-160.013905402999853, 70.410956122000172], + [-160.029652472999913, 70.398993231000034], + [-160.051747199999909, 70.394110419000171], + [-160.056345180999926, 70.37494538], + [-160.114206508999928, 70.344142971000124], + [-160.133656378999945, 70.325140692000119], + [-160.09601803299995, 70.321356512000094], + [-160.009022589999887, 70.361476955000015], + [-159.969186977999925, 70.372992255000057], + [-159.948475714999915, 70.370428778000147], + [-159.933176235999952, 70.362290757000139], + [-159.922230597999885, 70.349310614000117], + [-159.914540167999945, 70.331976630000057], + [-159.916818813999924, 70.330389716000028], + [-159.922311977999954, 70.328070380000057], + [-159.927316860999895, 70.324164130000057], + [-159.928212042999888, 70.318345445000105], + [-159.925485805999926, 70.315375067], + [-159.920765753999916, 70.313381252000156], + [-159.916452602999925, 70.312323309000092], + [-159.914540167999945, 70.312160549000126], + [-159.910633917999945, 70.304103908000101], + [-159.906198696999866, 70.299139716000141], + [-159.904286261999914, 70.293768622000087], + [-159.907704230999911, 70.284247137000094], + [-159.86656653599988, 70.277736721000011], + [-159.833241339999859, 70.252020575000145], + [-159.803089972999942, 70.220282294000086], + [-159.771188930999926, 70.195461330000128], + [-159.770578579999892, 70.225165106000148], + [-159.786732550999943, 70.238104559000149], + [-159.810536261999914, 70.24689362200003], + [-159.83263098899991, 70.263739325000031], + [-159.836903449999909, 70.273627020000148], + [-159.838693813999896, 70.285793361000131], + [-159.838815883999871, 70.308417059000092], + [-159.844960089999944, 70.313421942000147], + [-159.849720831999946, 70.318426825000088], + [-159.853098110999895, 70.325140692000119], + [-159.850534633999956, 70.330877997000087], + [-159.84349524599989, 70.335516669000029], + [-159.838693813999896, 70.341009833000058], + [-159.842518683999913, 70.349432684000092], + [-159.880319790999863, 70.375677802000141], + [-159.887277798999861, 70.387193101000079], + [-159.886789516999897, 70.398871161000059], + [-159.882150844999956, 70.40761953300013], + [-159.876779751999891, 70.415472723000121], + [-159.874216274999867, 70.424790757000082], + [-159.865061001999891, 70.444037177000112], + [-159.845814581999946, 70.456529039000131], + [-159.828602667999917, 70.471258856000119], + [-159.825795050999886, 70.497056382000054], + [-159.810292120999861, 70.500799872000172], + [-159.799305792999917, 70.499212958000143], + [-159.728098110999895, 70.47264232], + [-159.709706183999856, 70.46979401200015], + [-159.669626430999926, 70.473089911], + [-159.593373175999886, 70.492580471000068], + [-159.540842251999948, 70.499212958000143], + [-159.495310024999867, 70.51581452], + [-159.480580206999889, 70.515529690000065], + [-159.449289516999926, 70.500921942000147], + [-159.434763149999867, 70.497056382000054], + [-159.418527798999946, 70.499701239000117], + [-159.367136196999923, 70.517645575000174], + [-159.325672980999911, 70.521307684000035], + [-159.305775519999941, 70.526190497000087], + [-159.291371222999885, 70.538072007000054], + [-159.421091274999924, 70.523830471000153], + [-159.530832485999952, 70.532416083000058], + [-159.565134243999921, 70.531236070000134], + [-159.568430141999954, 70.528794664000102], + [-159.570871548999889, 70.524115302], + [-159.572336391999954, 70.519598700000031], + [-159.57249915299991, 70.517645575000174], + [-159.579945441999882, 70.516831773000078], + [-159.631174282999922, 70.517279364000061], + [-159.641184048999918, 70.514308986000131], + [-159.650746222999885, 70.507025458000143], + [-159.663807745999861, 70.500067450000145], + [-159.681752081999917, 70.496812242000104], + [-159.715931769999912, 70.497056382000054], + [-159.732289191999939, 70.499904690000093], + [-159.74238033799989, 70.504217841000084], + [-159.764352993999921, 70.517645575000174], + [-159.825306769999884, 70.54376862200003], + [-159.842518683999913, 70.555121161], + [-159.849436001999919, 70.562323309000035], + [-159.85521399599989, 70.570502020000148], + [-159.859120245999861, 70.57941315300009], + [-159.860544399999924, 70.589016018000066], + [-159.864613410999908, 70.599066473000121], + [-159.874582485999895, 70.602687893], + [-159.886789516999897, 70.60455963700015], + [-159.947865363999938, 70.636419989], + [-160.005726691999939, 70.64008209800015], + [-160.065174933999913, 70.627752997000087], + [-160.119984503999888, 70.606350002000156], + [-160.122303839999859, 70.610296942000119], + [-160.124582485999952, 70.615668036], + [-160.127430792999888, 70.62620677300005], + [-160.096262173999889, 70.643052476000051], + [-159.913034633999899, 70.700628973000121], + [-159.88805091099988, 70.705552476], + [-159.836252407999893, 70.708075262000094], + [-159.812123175999943, 70.71556224199999], + [-159.846262173999946, 70.71556224199999], + [-159.813099738999938, 70.727850653000033], + [-159.708973761999914, 70.779282945000134], + [-159.683216925999886, 70.79759349199999], + [-159.668161587999862, 70.804999091000084], + [-159.644846157999865, 70.810003973000121], + [-159.595407680999926, 70.813788153000061], + [-159.548776821999894, 70.830226955000128], + [-159.519642706999946, 70.835760809000149], + [-159.412058071999923, 70.842027085000112], + [-159.383290167999917, 70.846909898], + [-159.346302863999881, 70.863348700000174], + [-159.161000128999945, 70.88690827000012], + [-159.206247524999867, 70.866400458000058], + [-159.318796352999925, 70.861029364000032], + [-159.37328040299991, 70.845933335000026], + [-159.174265102999868, 70.853908596000068], + [-159.155140753999888, 70.846340236000017], + [-159.140573696999866, 70.82542552300005], + [-159.181345180999926, 70.81671784100017], + [-159.311838344999927, 70.812445380000057], + [-159.410878058999913, 70.787420966000141], + [-159.449045376999891, 70.784491278000033], + [-159.449045376999891, 70.777044989000146], + [-159.392079230999855, 70.767320054], + [-159.373605923999946, 70.760931708000086], + [-159.356800910999937, 70.760199286000145], + [-159.339060024999924, 70.76654694200009], + [-159.321278449999937, 70.769273179000052], + [-159.304432745999947, 70.757798570000105], + [-159.31004798099994, 70.753973700000088], + [-159.318714972999942, 70.746161200000088], + [-159.324899868999921, 70.743557033000101], + [-159.300974087999947, 70.727118231000091], + [-159.246449347999885, 70.706447658000073], + [-159.222482876999891, 70.68891022300015], + [-159.21629798099994, 70.695135809000092], + [-159.270497199999909, 70.744614976000051], + [-159.279042120999918, 70.764715887000094], + [-159.236154751999948, 70.77081940300009], + [-159.119740363999881, 70.76398346600017], + [-158.989735480999883, 70.777044989000146], + [-159.003488735999895, 70.797267971000068], + [-159.029164191999939, 70.805121161000059], + [-159.08531653599988, 70.804999091000084], + [-159.060414191999911, 70.816555080000015], + [-158.715402798999861, 70.791327216000141], + [-158.338002081999889, 70.818019924000069], + [-158.439279751999862, 70.822088934000035], + [-158.492990688999924, 70.832342841000141], + [-158.523548956999861, 70.852769273000106], + [-158.479929165999948, 70.853257554000109], + [-158.389393683999913, 70.83673737200003], + [-158.043039516999954, 70.836859442], + [-157.86493893099987, 70.86644114800005], + [-157.67353268099987, 70.922796942000119], + [-157.624379035999851, 70.931301174000154], + [-157.593251105999855, 70.946193752000013], + [-157.577951626999891, 70.949611721000011], + [-157.55907141799986, 70.951361395], + [-157.231190558999941, 71.071356512000037], + [-157.087839321999923, 71.15501536699999], + [-157.025502081999946, 71.203192450000031], + [-156.817209438999953, 71.306341864000061], + [-156.681833462999862, 71.352728583000115], + [-156.591908331999889, 71.364732164000046], + [-156.522409633999871, 71.38971588700015], + [-156.498605923999889, 71.40452708500014], + [-156.471506313999953, 71.412502346000096], + [-156.434803839999944, 71.40648021] + ] + ] + ] + } +} diff --git a/types/testdata/zip.json b/types/testdata/zip.json index df2f9702345..4762ea711c0 100644 --- a/types/testdata/zip.json +++ b/types/testdata/zip.json @@ -1 +1,1865 @@ -{ "type": "Feature", "properties": { "ZCTA5CE10": "04760", "GEOID10": "04760", "CLASSFP10": "B5", "MTFCC10": "G6350", "FUNCSTAT10": "S", "ALAND10": 259787771.0, "AWATER10": 547534.0, "INTPTLAT10": "+46.3393412", "INTPTLON10": "-067.9548745" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -67.852721, 46.372067 ], [ -67.847532, 46.372107 ], [ -67.842568, 46.372157 ], [ -67.840795, 46.372167 ], [ -67.83499, 46.372252 ], [ -67.828309, 46.372337 ], [ -67.821947, 46.372442 ], [ -67.819315, 46.372478 ], [ -67.815451, 46.372546 ], [ -67.809313, 46.37259 ], [ -67.804761, 46.372678 ], [ -67.802935, 46.372713 ], [ -67.798108, 46.372788 ], [ -67.797668, 46.372792 ], [ -67.797179, 46.372799 ], [ -67.795557, 46.372844 ], [ -67.789835, 46.372917 ], [ -67.783302, 46.372964 ], [ -67.783255, 46.370021 ], [ -67.783193, 46.364629 ], [ -67.783113, 46.359292 ], [ -67.783081, 46.357421 ], [ -67.783018, 46.353747 ], [ -67.782962, 46.351031 ], [ -67.782883, 46.343503 ], [ -67.782807, 46.337354 ], [ -67.782735, 46.334356 ], [ -67.782704, 46.332756 ], [ -67.7827, 46.331778 ], [ -67.782693, 46.329967 ], [ -67.782695, 46.328345 ], [ -67.782685, 46.328103 ], [ -67.782683, 46.32767 ], [ -67.782683, 46.327488 ], [ -67.782682, 46.327417 ], [ -67.782683, 46.327326 ], [ -67.782661, 46.325587 ], [ -67.782656, 46.323604 ], [ -67.782627, 46.322511 ], [ -67.782614, 46.321335 ], [ -67.782572, 46.319603 ], [ -67.782525, 46.317639 ], [ -67.782524, 46.317519 ], [ -67.782519, 46.317353 ], [ -67.782516, 46.317152 ], [ -67.782512, 46.316979 ], [ -67.782509, 46.316804 ], [ -67.782504, 46.316545 ], [ -67.782502, 46.316311 ], [ -67.782499, 46.31604 ], [ -67.782496, 46.315737 ], [ -67.782503, 46.315682 ], [ -67.782454, 46.311378 ], [ -67.782364, 46.305456 ], [ -67.782362, 46.305285 ], [ -67.782248, 46.296235 ], [ -67.782247, 46.296185 ], [ -67.782245, 46.296137 ], [ -67.78224, 46.295779 ], [ -67.782173, 46.290585 ], [ -67.782114, 46.284024 ], [ -67.782078, 46.280189 ], [ -67.782065, 46.279406 ], [ -67.782453, 46.27941 ], [ -67.782526, 46.279411 ], [ -67.786179, 46.279423 ], [ -67.786532, 46.279427 ], [ -67.788408, 46.279429 ], [ -67.791458, 46.279425 ], [ -67.792003, 46.279421 ], [ -67.800462, 46.279385 ], [ -67.807624, 46.279442 ], [ -67.811433, 46.279427 ], [ -67.813495, 46.279422 ], [ -67.814129, 46.279428 ], [ -67.814518, 46.279431 ], [ -67.814877, 46.279434 ], [ -67.821223, 46.279493 ], [ -67.829311, 46.279531 ], [ -67.830484, 46.279552 ], [ -67.831429, 46.279546 ], [ -67.839729, 46.279491 ], [ -67.840192, 46.279488 ], [ -67.840815, 46.279485 ], [ -67.852212, 46.279449 ], [ -67.853472, 46.279443 ], [ -67.860869, 46.279408 ], [ -67.862737, 46.2794 ], [ -67.862771, 46.2794 ], [ -67.863352, 46.279397 ], [ -67.864042, 46.279395 ], [ -67.865152, 46.279386 ], [ -67.8694, 46.279382 ], [ -67.869961, 46.279382 ], [ -67.874539, 46.279301 ], [ -67.875364, 46.279298 ], [ -67.877482, 46.279289 ], [ -67.878294, 46.279284 ], [ -67.87859, 46.279282 ], [ -67.879347, 46.279281 ], [ -67.881751, 46.279268 ], [ -67.884156, 46.279296 ], [ -67.884485, 46.279299 ], [ -67.886583, 46.279311 ], [ -67.88901, 46.279325 ], [ -67.89576, 46.279365 ], [ -67.896852, 46.279383 ], [ -67.899339, 46.279389 ], [ -67.904314, 46.279415 ], [ -67.906979, 46.279454 ], [ -67.906979, 46.279877 ], [ -67.907004, 46.281128 ], [ -67.907013, 46.281632 ], [ -67.907095, 46.285633 ], [ -67.907108, 46.286146 ], [ -67.907127, 46.286894 ], [ -67.907161, 46.288649 ], [ -67.907196, 46.290404 ], [ -67.907221, 46.292159 ], [ -67.907236, 46.293206 ], [ -67.907247, 46.293915 ], [ -67.907257, 46.294333 ], [ -67.907291, 46.295675 ], [ -67.907354, 46.29743 ], [ -67.907375, 46.298915 ], [ -67.907379, 46.299172 ], [ -67.907423, 46.300914 ], [ -67.907467, 46.30266 ], [ -67.907497, 46.30463 ], [ -67.907528, 46.306135 ], [ -67.907622, 46.310474 ], [ -67.907624, 46.310724 ], [ -67.90799, 46.310681 ], [ -67.908057, 46.310675 ], [ -67.908392, 46.310671 ], [ -67.908541, 46.310661 ], [ -67.908785, 46.310639 ], [ -67.909028, 46.310597 ], [ -67.909186, 46.310579 ], [ -67.909532, 46.310522 ], [ -67.909603, 46.310505 ], [ -67.909671, 46.310488 ], [ -67.909738, 46.310473 ], [ -67.909808, 46.310462 ], [ -67.909878, 46.310455 ], [ -67.909948, 46.310453 ], [ -67.910017, 46.310452 ], [ -67.910139, 46.310459 ], [ -67.910227, 46.310471 ], [ -67.910433, 46.310416 ], [ -67.910475, 46.310513 ], [ -67.910584, 46.310618 ], [ -67.910832, 46.310699 ], [ -67.911146, 46.31068 ], [ -67.911393, 46.310589 ], [ -67.911469, 46.310561 ], [ -67.911969, 46.310309 ], [ -67.912467, 46.310092 ], [ -67.91283, 46.309933 ], [ -67.913406, 46.309728 ], [ -67.913535, 46.309697 ], [ -67.913687, 46.309661 ], [ -67.914434, 46.309566 ], [ -67.914934, 46.309527 ], [ -67.915286, 46.3095 ], [ -67.916133, 46.309414 ], [ -67.917389, 46.309319 ], [ -67.918522, 46.30929 ], [ -67.918789, 46.309238 ], [ -67.919065, 46.309114 ], [ -67.919383, 46.308948 ], [ -67.919702, 46.308919 ], [ -67.920045, 46.308976 ], [ -67.920526, 46.309138 ], [ -67.920987, 46.309257 ], [ -67.921354, 46.309276 ], [ -67.921615, 46.309266 ], [ -67.921787, 46.309266 ], [ -67.92192, 46.309304 ], [ -67.92202, 46.309381 ], [ -67.92202, 46.309214 ], [ -67.921982, 46.309076 ], [ -67.921887, 46.308948 ], [ -67.921939, 46.308729 ], [ -67.922063, 46.308557 ], [ -67.922272, 46.308362 ], [ -67.922534, 46.3082 ], [ -67.9227, 46.308043 ], [ -67.922777, 46.307901 ], [ -67.922819, 46.307653 ], [ -67.922891, 46.307453 ], [ -67.922962, 46.307177 ], [ -67.922976, 46.306901 ], [ -67.922938, 46.306544 ], [ -67.922848, 46.306164 ], [ -67.922762, 46.305835 ], [ -67.922629, 46.305416 ], [ -67.922515, 46.305083 ], [ -67.922401, 46.304902 ], [ -67.922229, 46.30475 ], [ -67.921972, 46.304631 ], [ -67.921658, 46.304531 ], [ -67.921463, 46.304446 ], [ -67.921311, 46.304308 ], [ -67.921192, 46.304113 ], [ -67.92113, 46.303955 ], [ -67.921135, 46.303779 ], [ -67.921225, 46.30356 ], [ -67.921525, 46.303175 ], [ -67.921744, 46.302885 ], [ -67.921834, 46.302709 ], [ -67.921844, 46.302575 ], [ -67.921782, 46.302414 ], [ -67.921549, 46.30218 ], [ -67.921235, 46.301947 ], [ -67.920971, 46.301684 ], [ -67.920925, 46.301638 ], [ -67.920768, 46.301428 ], [ -67.920721, 46.301281 ], [ -67.920745, 46.301129 ], [ -67.920883, 46.300919 ], [ -67.921154, 46.300719 ], [ -67.921644, 46.300529 ], [ -67.922039, 46.300415 ], [ -67.922401, 46.300362 ], [ -67.922748, 46.300362 ], [ -67.923062, 46.300405 ], [ -67.923429, 46.300372 ], [ -67.923805, 46.30032 ], [ -67.92428, 46.30022 ], [ -67.924847, 46.300072 ], [ -67.925232, 46.30002 ], [ -67.925737, 46.299972 ], [ -67.92616, 46.299882 ], [ -67.926455, 46.299796 ], [ -67.926698, 46.299639 ], [ -67.926788, 46.299449 ], [ -67.926936, 46.298887 ], [ -67.927088, 46.298644 ], [ -67.927364, 46.298426 ], [ -67.92793, 46.298202 ], [ -67.928402, 46.298059 ], [ -67.928806, 46.298031 ], [ -67.929111, 46.298059 ], [ -67.929558, 46.298264 ], [ -67.929748, 46.298368 ], [ -67.929986, 46.298421 ], [ -67.930187, 46.298408 ], [ -67.930215, 46.298407 ], [ -67.930391, 46.298368 ], [ -67.9307, 46.298288 ], [ -67.930981, 46.298235 ], [ -67.931205, 46.298197 ], [ -67.931485, 46.298192 ], [ -67.93179, 46.298235 ], [ -67.93208, 46.29825 ], [ -67.932323, 46.298254 ], [ -67.93328, 46.298192 ], [ -67.933832, 46.298169 ], [ -67.934208, 46.298169 ], [ -67.934755, 46.29825 ], [ -67.93515, 46.298326 ], [ -67.935313, 46.298336 ], [ -67.935607, 46.298354 ], [ -67.935835, 46.29834 ], [ -67.936063, 46.298288 ], [ -67.936325, 46.298188 ], [ -67.936497, 46.298064 ], [ -67.936592, 46.297912 ], [ -67.93662, 46.297579 ], [ -67.93662, 46.297098 ], [ -67.936649, 46.296674 ], [ -67.936706, 46.296298 ], [ -67.93682, 46.295975 ], [ -67.937016, 46.295566 ], [ -67.937044, 46.295508 ], [ -67.937091, 46.295232 ], [ -67.93702, 46.294956 ], [ -67.936901, 46.294676 ], [ -67.936911, 46.294509 ], [ -67.937068, 46.294252 ], [ -67.937334, 46.294009 ], [ -67.937769, 46.293712 ], [ -67.937962, 46.293581 ], [ -67.93841, 46.293257 ], [ -67.938605, 46.293091 ], [ -67.938681, 46.292891 ], [ -67.938686, 46.292696 ], [ -67.938552, 46.292158 ], [ -67.938452, 46.291677 ], [ -67.938438, 46.291535 ], [ -67.938495, 46.291397 ], [ -67.938595, 46.291297 ], [ -67.9388, 46.291206 ], [ -67.93909, 46.291159 ], [ -67.939628, 46.291125 ], [ -67.940327, 46.291106 ], [ -67.941132, 46.291097 ], [ -67.941888, 46.291097 ], [ -67.942517, 46.291149 ], [ -67.942954, 46.291173 ], [ -67.94353, 46.291144 ], [ -67.943911, 46.291064 ], [ -67.944078, 46.291016 ], [ -67.944734, 46.290683 ], [ -67.945205, 46.290454 ], [ -67.945467, 46.290293 ], [ -67.945581, 46.290178 ], [ -67.94571, 46.289974 ], [ -67.945991, 46.289317 ], [ -67.946205, 46.288736 ], [ -67.946251, 46.28859 ], [ -67.946381, 46.28818 ], [ -67.946452, 46.287923 ], [ -67.946452, 46.287723 ], [ -67.946381, 46.287551 ], [ -67.946281, 46.287413 ], [ -67.945929, 46.287199 ], [ -67.945367, 46.286919 ], [ -67.944473, 46.286495 ], [ -67.943564, 46.286 ], [ -67.942826, 46.285462 ], [ -67.942426, 46.285196 ], [ -67.941955, 46.284986 ], [ -67.941103, 46.284701 ], [ -67.940684, 46.28452 ], [ -67.940499, 46.284353 ], [ -67.940427, 46.284196 ], [ -67.940494, 46.283987 ], [ -67.940699, 46.283801 ], [ -67.941136, 46.28364 ], [ -67.941693, 46.283616 ], [ -67.94216, 46.283635 ], [ -67.94244, 46.283654 ], [ -67.942778, 46.28364 ], [ -67.943335, 46.283549 ], [ -67.944063, 46.283406 ], [ -67.945424, 46.283149 ], [ -67.945753, 46.283026 ], [ -67.946162, 46.282807 ], [ -67.946595, 46.282602 ], [ -67.946819, 46.282483 ], [ -67.946933, 46.282374 ], [ -67.946957, 46.28225 ], [ -67.946933, 46.28213 ], [ -67.946923, 46.282083 ], [ -67.946685, 46.28147 ], [ -67.946585, 46.28117 ], [ -67.946271, 46.28055 ], [ -67.9459, 46.279879 ], [ -67.945591, 46.279179 ], [ -67.945329, 46.278608 ], [ -67.945191, 46.278375 ], [ -67.944939, 46.278094 ], [ -67.944572, 46.277823 ], [ -67.94402, 46.277585 ], [ -67.943206, 46.277299 ], [ -67.942554, 46.277138 ], [ -67.942031, 46.277042 ], [ -67.941436, 46.276904 ], [ -67.941089, 46.276805 ], [ -67.941273, 46.276608 ], [ -67.941386, 46.276434 ], [ -67.942717, 46.276433 ], [ -67.945149, 46.276428 ], [ -67.947581, 46.276424 ], [ -67.950025, 46.276406 ], [ -67.952502, 46.276415 ], [ -67.954878, 46.276396 ], [ -67.95937, 46.276392 ], [ -67.961782, 46.276382 ], [ -67.96464, 46.276379 ], [ -67.973962, 46.276369 ], [ -67.973524, 46.277588 ], [ -67.972734, 46.278434 ], [ -67.972306, 46.279645 ], [ -67.972372, 46.280125 ], [ -67.972373, 46.281406 ], [ -67.972241, 46.281611 ], [ -67.972143, 46.282046 ], [ -67.971813, 46.282433 ], [ -67.971353, 46.284239 ], [ -67.971057, 46.284811 ], [ -67.970496, 46.28552 ], [ -67.970398, 46.286 ], [ -67.970135, 46.286663 ], [ -67.969706, 46.287211 ], [ -67.969, 46.287734 ], [ -67.970003, 46.287965 ], [ -67.972246, 46.289679 ], [ -67.973072, 46.290182 ], [ -67.974062, 46.290593 ], [ -67.974358, 46.290799 ], [ -67.974623, 46.291279 ], [ -67.974787, 46.29137 ], [ -67.974986, 46.291667 ], [ -67.975579, 46.291941 ], [ -67.978019, 46.292077 ], [ -67.980196, 46.292374 ], [ -67.982867, 46.292281 ], [ -67.983482, 46.292464 ], [ -67.983229, 46.292464 ], [ -67.98257, 46.292693 ], [ -67.982241, 46.292922 ], [ -67.982373, 46.29315 ], [ -67.983362, 46.293287 ], [ -67.984055, 46.293652 ], [ -67.984352, 46.294041 ], [ -67.984288, 46.296212 ], [ -67.983761, 46.297104 ], [ -67.983695, 46.297401 ], [ -67.983893, 46.297927 ], [ -67.984421, 46.298361 ], [ -67.986071, 46.299 ], [ -67.986994, 46.299091 ], [ -67.987489, 46.299251 ], [ -67.987687, 46.299571 ], [ -67.987787, 46.300051 ], [ -67.987985, 46.300394 ], [ -67.988381, 46.300622 ], [ -67.989205, 46.300736 ], [ -67.989568, 46.301033 ], [ -67.989701, 46.301307 ], [ -67.989965, 46.301536 ], [ -67.990328, 46.302199 ], [ -67.99079, 46.302564 ], [ -67.992011, 46.302838 ], [ -67.992473, 46.303249 ], [ -67.992638, 46.303615 ], [ -67.992706, 46.305672 ], [ -67.992838, 46.30606 ], [ -67.993102, 46.306312 ], [ -67.993531, 46.306563 ], [ -67.994291, 46.307385 ], [ -67.995149, 46.307591 ], [ -67.996897, 46.307567 ], [ -67.997952, 46.307429 ], [ -67.998971, 46.30784 ], [ -67.999467, 46.307886 ], [ -68.00019, 46.307839 ], [ -68.000375, 46.307945 ], [ -68.000508, 46.308051 ], [ -68.000684, 46.308156 ], [ -68.000715, 46.30813 ], [ -68.000805, 46.307982 ], [ -68.000828, 46.307801 ], [ -68.000814, 46.307563 ], [ -68.00089, 46.307206 ], [ -68.00099, 46.306987 ], [ -68.001228, 46.306783 ], [ -68.001733, 46.306583 ], [ -68.002142, 46.306483 ], [ -68.002675, 46.306388 ], [ -68.003593, 46.30624 ], [ -68.004055, 46.30615 ], [ -68.004369, 46.306045 ], [ -68.004712, 46.305897 ], [ -68.004988, 46.305717 ], [ -68.005235, 46.305479 ], [ -68.005578, 46.30505 ], [ -68.005668, 46.30496 ], [ -68.005873, 46.304664 ], [ -68.006067, 46.304142 ], [ -68.006082, 46.304103 ], [ -68.006253, 46.303855 ], [ -68.006463, 46.303622 ], [ -68.006848, 46.303284 ], [ -68.007196, 46.303013 ], [ -68.007429, 46.30278 ], [ -68.00771, 46.302485 ], [ -68.007995, 46.302242 ], [ -68.008262, 46.302099 ], [ -68.00868, 46.301961 ], [ -68.009323, 46.301804 ], [ -68.009851, 46.301695 ], [ -68.010403, 46.301538 ], [ -68.010836, 46.301447 ], [ -68.011341, 46.30139 ], [ -68.01184, 46.301371 ], [ -68.012349, 46.301338 ], [ -68.013301, 46.301224 ], [ -68.013687, 46.301134 ], [ -68.014401, 46.300915 ], [ -68.015381, 46.300639 ], [ -68.016237, 46.300386 ], [ -68.017008, 46.300168 ], [ -68.01787, 46.299906 ], [ -68.018879, 46.299611 ], [ -68.019564, 46.299416 ], [ -68.020225, 46.299244 ], [ -68.020554, 46.299144 ], [ -68.02093, 46.298987 ], [ -68.021272, 46.298816 ], [ -68.021434, 46.298649 ], [ -68.021491, 46.298478 ], [ -68.021553, 46.298126 ], [ -68.021634, 46.29776 ], [ -68.021725, 46.297517 ], [ -68.021829, 46.297322 ], [ -68.021972, 46.297165 ], [ -68.022167, 46.297008 ], [ -68.022192, 46.296995 ], [ -68.023086, 46.297811 ], [ -68.02401, 46.298411 ], [ -68.024847, 46.298871 ], [ -68.026464, 46.299733 ], [ -68.028168, 46.300605 ], [ -68.029164, 46.301032 ], [ -68.030224, 46.301545 ], [ -68.030881, 46.301804 ], [ -68.031974, 46.302424 ], [ -68.032907, 46.303052 ], [ -68.034177, 46.303847 ], [ -68.035388, 46.304456 ], [ -68.036355, 46.30506 ], [ -68.037423, 46.305599 ], [ -68.039646, 46.306535 ], [ -68.04052, 46.306975 ], [ -68.040987, 46.307397 ], [ -68.041543, 46.307852 ], [ -68.041919, 46.308411 ], [ -68.042739, 46.309056 ], [ -68.043155, 46.309789 ], [ -68.044025, 46.310937 ], [ -68.044785, 46.311261 ], [ -68.04552, 46.311657 ], [ -68.045977, 46.312051 ], [ -68.046075, 46.312435 ], [ -68.046079, 46.312671 ], [ -68.046329, 46.313258 ], [ -68.046473, 46.313327 ], [ -68.046523, 46.313445 ], [ -68.046635, 46.313536 ], [ -68.047167, 46.314299 ], [ -68.047533, 46.315002 ], [ -68.047969, 46.31562 ], [ -68.048072, 46.315685 ], [ -68.048241, 46.31592 ], [ -68.048616, 46.316199 ], [ -68.048894, 46.316524 ], [ -68.049535, 46.317378 ], [ -68.050111, 46.317975 ], [ -68.05028, 46.318211 ], [ -68.050559, 46.318622 ], [ -68.052032, 46.319416 ], [ -68.052683, 46.320018 ], [ -68.052879, 46.320633 ], [ -68.052843, 46.321145 ], [ -68.05328, 46.322404 ], [ -68.053133, 46.323076 ], [ -68.053292, 46.324139 ], [ -68.05332, 46.324585 ], [ -68.052965, 46.325378 ], [ -68.052867, 46.326106 ], [ -68.052695, 46.326636 ], [ -68.052467, 46.327085 ], [ -68.052569, 46.327554 ], [ -68.052957, 46.328057 ], [ -68.054691, 46.329489 ], [ -68.05486, 46.329724 ], [ -68.054971, 46.329816 ], [ -68.055275, 46.3302 ], [ -68.056341, 46.330869 ], [ -68.056987, 46.331382 ], [ -68.057442, 46.331833 ], [ -68.05773, 46.332099 ], [ -68.058016, 46.332456 ], [ -68.05834, 46.332542 ], [ -68.058505, 46.332817 ], [ -68.059594, 46.333137 ], [ -68.061079, 46.333434 ], [ -68.061343, 46.333525 ], [ -68.061706, 46.3338 ], [ -68.061772, 46.33396 ], [ -68.062135, 46.334233 ], [ -68.062927, 46.334507 ], [ -68.063257, 46.334804 ], [ -68.063356, 46.335101 ], [ -68.063422, 46.33517 ], [ -68.063521, 46.335696 ], [ -68.063521, 46.33789 ], [ -68.06362, 46.338325 ], [ -68.063884, 46.338622 ], [ -68.064181, 46.338805 ], [ -68.064379, 46.339102 ], [ -68.064478, 46.339422 ], [ -68.064841, 46.339879 ], [ -68.065897, 46.340793 ], [ -68.066062, 46.341547 ], [ -68.066227, 46.341845 ], [ -68.066392, 46.341913 ], [ -68.066491, 46.34205 ], [ -68.067745, 46.342988 ], [ -68.068901, 46.343102 ], [ -68.070419, 46.343033 ], [ -68.070782, 46.342873 ], [ -68.071376, 46.34253 ], [ -68.071772, 46.342439 ], [ -68.072202, 46.342439 ], [ -68.072334, 46.342622 ], [ -68.073885, 46.343467 ], [ -68.074083, 46.343696 ], [ -68.074083, 46.34381 ], [ -68.074248, 46.344039 ], [ -68.074612, 46.344221 ], [ -68.07481, 46.344221 ], [ -68.075635, 46.34397 ], [ -68.075998, 46.344016 ], [ -68.076295, 46.344221 ], [ -68.077054, 46.345067 ], [ -68.077978, 46.345432 ], [ -68.078176, 46.345707 ], [ -68.078177, 46.345958 ], [ -68.078078, 46.346004 ], [ -68.078012, 46.34621 ], [ -68.078012, 46.347375 ], [ -68.078177, 46.347558 ], [ -68.078804, 46.347993 ], [ -68.079828, 46.348381 ], [ -68.080257, 46.348655 ], [ -68.080323, 46.348769 ], [ -68.080323, 46.349387 ], [ -68.080455, 46.349615 ], [ -68.080752, 46.349844 ], [ -68.080884, 46.350232 ], [ -68.081016, 46.350392 ], [ -68.08105, 46.350507 ], [ -68.081545, 46.350849 ], [ -68.08171, 46.351078 ], [ -68.081776, 46.351558 ], [ -68.082139, 46.351946 ], [ -68.08214, 46.352609 ], [ -68.082239, 46.352792 ], [ -68.08247, 46.352952 ], [ -68.082503, 46.353066 ], [ -68.082179, 46.353171 ], [ -68.081479, 46.353395 ], [ -68.08095, 46.353697 ], [ -68.080123, 46.354485 ], [ -68.079462, 46.355271 ], [ -68.079231, 46.355435 ], [ -68.077975, 46.35657 ], [ -68.077843, 46.3568 ], [ -68.077743, 46.357378 ], [ -68.077346, 46.357841 ], [ -68.077346, 46.358788 ], [ -68.077081, 46.359182 ], [ -68.076552, 46.359691 ], [ -68.076122, 46.359923 ], [ -68.075021, 46.360214 ], [ -68.075047, 46.360229 ], [ -68.075183, 46.36029 ], [ -68.075255, 46.360315 ], [ -68.075464, 46.360371 ], [ -68.075882, 46.360458 ], [ -68.078195, 46.361024 ], [ -68.07861, 46.361123 ], [ -68.079032, 46.361231 ], [ -68.079437, 46.361346 ], [ -68.079647, 46.361416 ], [ -68.079847, 46.361489 ], [ -68.080249, 46.361653 ], [ -68.080646, 46.361838 ], [ -68.081234, 46.362126 ], [ -68.081697, 46.362337 ], [ -68.08215, 46.362541 ], [ -68.082285, 46.362597 ], [ -68.082527, 46.362689 ], [ -68.082454, 46.362793 ], [ -68.082135, 46.36309 ], [ -68.082037, 46.363198 ], [ -68.081957, 46.363314 ], [ -68.08189, 46.363448 ], [ -68.081786, 46.363738 ], [ -68.081714, 46.36396 ], [ -68.081655, 46.364091 ], [ -68.081621, 46.364152 ], [ -68.081557, 46.364245 ], [ -68.081455, 46.364367 ], [ -68.081394, 46.364429 ], [ -68.081232, 46.364568 ], [ -68.080866, 46.364819 ], [ -68.080498, 46.365057 ], [ -68.080316, 46.365177 ], [ -68.080136, 46.365308 ], [ -68.079966, 46.365439 ], [ -68.079791, 46.365586 ], [ -68.079634, 46.365738 ], [ -68.079331, 46.366057 ], [ -68.079053, 46.36638 ], [ -68.078363, 46.367211 ], [ -68.077983, 46.367654 ], [ -68.077638, 46.368039 ], [ -68.07755, 46.368153 ], [ -68.077476, 46.368272 ], [ -68.077414, 46.368407 ], [ -68.077238, 46.368962 ], [ -68.077166, 46.369164 ], [ -68.076693, 46.370365 ], [ -68.076323, 46.371228 ], [ -68.076012, 46.372036 ], [ -68.075866, 46.372458 ], [ -68.075626, 46.373057 ], [ -68.075309, 46.373863 ], [ -68.075153, 46.374286 ], [ -68.075007, 46.374614 ], [ -68.074965, 46.374774 ], [ -68.074918, 46.375068 ], [ -68.074891, 46.375501 ], [ -68.074879, 46.375581 ], [ -68.074841, 46.375716 ], [ -68.074736, 46.375996 ], [ -68.074568, 46.376391 ], [ -68.074491, 46.376591 ], [ -68.074318, 46.376999 ], [ -68.074087, 46.377605 ], [ -68.073845, 46.378207 ], [ -68.073596, 46.378808 ], [ -68.07352, 46.379008 ], [ -68.073448, 46.379217 ], [ -68.073221, 46.379785 ], [ -68.073147, 46.379987 ], [ -68.072894, 46.380813 ], [ -68.072749, 46.381222 ], [ -68.072594, 46.381632 ], [ -68.072528, 46.381838 ], [ -68.072476, 46.382045 ], [ -68.072403, 46.382496 ], [ -68.072337, 46.382868 ], [ -68.072269, 46.383085 ], [ -68.072188, 46.383286 ], [ -68.07206, 46.383538 ], [ -68.071919, 46.383793 ], [ -68.071838, 46.383919 ], [ -68.071804, 46.383964 ], [ -68.071924, 46.383997 ], [ -68.071965, 46.384034 ], [ -68.071992, 46.384088 ], [ -68.072047, 46.384192 ], [ -68.072088, 46.384267 ], [ -68.072133, 46.384337 ], [ -68.072209, 46.384461 ], [ -68.072271, 46.384545 ], [ -68.072306, 46.384591 ], [ -68.072344, 46.384637 ], [ -68.072385, 46.384684 ], [ -68.072426, 46.384734 ], [ -68.07251, 46.384838 ], [ -68.072557, 46.384883 ], [ -68.072604, 46.38493 ], [ -68.072652, 46.384979 ], [ -68.072753, 46.385078 ], [ -68.072804, 46.385128 ], [ -68.072856, 46.385177 ], [ -68.072908, 46.385224 ], [ -68.072956, 46.385273 ], [ -68.073044, 46.385367 ], [ -68.07309, 46.385412 ], [ -68.073135, 46.385454 ], [ -68.073178, 46.385494 ], [ -68.073222, 46.385533 ], [ -68.073265, 46.385572 ], [ -68.073307, 46.385614 ], [ -68.073348, 46.385654 ], [ -68.073387, 46.3857 ], [ -68.073429, 46.385737 ], [ -68.073471, 46.385776 ], [ -68.073511, 46.385822 ], [ -68.073553, 46.385866 ], [ -68.07359, 46.385917 ], [ -68.073633, 46.38596 ], [ -68.073678, 46.386001 ], [ -68.073722, 46.386039 ], [ -68.073766, 46.386076 ], [ -68.073814, 46.386116 ], [ -68.073861, 46.386158 ], [ -68.073908, 46.386203 ], [ -68.073957, 46.386247 ], [ -68.074004, 46.386292 ], [ -68.07405, 46.386334 ], [ -68.074095, 46.386374 ], [ -68.074141, 46.386413 ], [ -68.074187, 46.386455 ], [ -68.074231, 46.386498 ], [ -68.074274, 46.386543 ], [ -68.074322, 46.386587 ], [ -68.074367, 46.386633 ], [ -68.074458, 46.386722 ], [ -68.074503, 46.386772 ], [ -68.074596, 46.386871 ], [ -68.074642, 46.386924 ], [ -68.074688, 46.386977 ], [ -68.074732, 46.387037 ], [ -68.074776, 46.387099 ], [ -68.074819, 46.387152 ], [ -68.074864, 46.387211 ], [ -68.074906, 46.387264 ], [ -68.074947, 46.387317 ], [ -68.07498, 46.387368 ], [ -68.075014, 46.38742 ], [ -68.075047, 46.387471 ], [ -68.075079, 46.387521 ], [ -68.075112, 46.387569 ], [ -68.075145, 46.387616 ], [ -68.075177, 46.387662 ], [ -68.075239, 46.387761 ], [ -68.075277, 46.387809 ], [ -68.075319, 46.387859 ], [ -68.075363, 46.387911 ], [ -68.07541, 46.387963 ], [ -68.07546, 46.388017 ], [ -68.075511, 46.38807 ], [ -68.075608, 46.388172 ], [ -68.075695, 46.388256 ], [ -68.075735, 46.388295 ], [ -68.075767, 46.388338 ], [ -68.075829, 46.388419 ], [ -68.075942, 46.38854 ], [ -68.076012, 46.388639 ], [ -68.076042, 46.388697 ], [ -68.076071, 46.388756 ], [ -68.076109, 46.3888 ], [ -68.076139, 46.388848 ], [ -68.076165, 46.388944 ], [ -68.07616, 46.388991 ], [ -68.07615, 46.389041 ], [ -68.076125, 46.389097 ], [ -68.076089, 46.389152 ], [ -68.076046, 46.389215 ], [ -68.075953, 46.389356 ], [ -68.075909, 46.38943 ], [ -68.075859, 46.3895 ], [ -68.075819, 46.389565 ], [ -68.074111, 46.391494 ], [ -68.07398, 46.391815 ], [ -68.074015, 46.392297 ], [ -68.074114, 46.392366 ], [ -68.074751, 46.394544 ], [ -68.075583, 46.395623 ], [ -68.07575, 46.396128 ], [ -68.075818, 46.396747 ], [ -68.076184, 46.397069 ], [ -68.077211, 46.397621 ], [ -68.077344, 46.397805 ], [ -68.07814, 46.398127 ], [ -68.079962, 46.398474 ], [ -68.080757, 46.398797 ], [ -68.081289, 46.399325 ], [ -68.081493, 46.400678 ], [ -68.081793, 46.401344 ], [ -68.082457, 46.402056 ], [ -68.083187, 46.40256 ], [ -68.083255, 46.402721 ], [ -68.08352, 46.402905 ], [ -68.083247, 46.403008 ], [ -68.083014, 46.403146 ], [ -68.082742, 46.403412 ], [ -68.082552, 46.40366 ], [ -68.082385, 46.403998 ], [ -68.082305, 46.404302 ], [ -68.08229, 46.40455 ], [ -68.082333, 46.404873 ], [ -68.082428, 46.405311 ], [ -68.082571, 46.405844 ], [ -68.082585, 46.405968 ], [ -68.082552, 46.406101 ], [ -68.082433, 46.406396 ], [ -68.082305, 46.406672 ], [ -68.08219, 46.407048 ], [ -68.082071, 46.4074 ], [ -68.081914, 46.407795 ], [ -68.081889, 46.407927 ], [ -68.08185, 46.407873 ], [ -68.081778, 46.40784 ], [ -68.081498, 46.407839 ], [ -68.081314, 46.407854 ], [ -68.08122, 46.407861 ], [ -68.08113, 46.407867 ], [ -68.081042, 46.407871 ], [ -68.080865, 46.407877 ], [ -68.080772, 46.407879 ], [ -68.08068, 46.40788 ], [ -68.080578, 46.407883 ], [ -68.080359, 46.407898 ], [ -68.080245, 46.407908 ], [ -68.080128, 46.407921 ], [ -68.079889, 46.407948 ], [ -68.079763, 46.407957 ], [ -68.079365, 46.407972 ], [ -68.079229, 46.407968 ], [ -68.07884, 46.407959 ], [ -68.078718, 46.407955 ], [ -68.078604, 46.40795 ], [ -68.078312, 46.407948 ], [ -68.078222, 46.40795 ], [ -68.078126, 46.407956 ], [ -68.07784, 46.407971 ], [ -68.077742, 46.407975 ], [ -68.077548, 46.407982 ], [ -68.077366, 46.407988 ], [ -68.077278, 46.407993 ], [ -68.077191, 46.408 ], [ -68.077102, 46.408008 ], [ -68.076903, 46.408041 ], [ -68.076802, 46.408062 ], [ -68.076697, 46.408088 ], [ -68.076593, 46.408119 ], [ -68.076391, 46.408194 ], [ -68.076294, 46.408233 ], [ -68.076202, 46.408272 ], [ -68.076109, 46.40831 ], [ -68.07591, 46.408374 ], [ -68.075801, 46.408401 ], [ -68.075573, 46.408452 ], [ -68.075469, 46.408473 ], [ -68.075369, 46.408489 ], [ -68.075279, 46.408499 ], [ -68.075194, 46.408507 ], [ -68.075023, 46.408516 ], [ -68.074932, 46.40852 ], [ -68.074843, 46.408522 ], [ -68.074557, 46.408536 ], [ -68.074464, 46.408542 ], [ -68.074368, 46.408548 ], [ -68.074052, 46.40857 ], [ -68.073941, 46.408577 ], [ -68.073619, 46.408601 ], [ -68.073514, 46.408599 ], [ -68.073416, 46.408602 ], [ -68.073132, 46.408605 ], [ -68.072963, 46.408624 ], [ -68.072891, 46.408636 ], [ -68.072768, 46.408663 ], [ -68.072577, 46.408725 ], [ -68.072506, 46.40875 ], [ -68.072431, 46.408779 ], [ -68.072276, 46.408837 ], [ -68.072107, 46.408895 ], [ -68.071933, 46.408955 ], [ -68.071756, 46.409014 ], [ -68.071579, 46.409072 ], [ -68.071484, 46.409104 ], [ -68.071391, 46.409137 ], [ -68.071303, 46.409165 ], [ -68.071121, 46.409223 ], [ -68.071032, 46.409249 ], [ -68.070864, 46.409299 ], [ -68.070784, 46.409321 ], [ -68.070618, 46.409366 ], [ -68.070531, 46.40939 ], [ -68.070442, 46.409414 ], [ -68.070352, 46.409439 ], [ -68.070172, 46.409481 ], [ -68.070086, 46.409499 ], [ -68.069999, 46.409514 ], [ -68.069823, 46.409541 ], [ -68.069731, 46.409553 ], [ -68.069641, 46.409562 ], [ -68.069552, 46.40957 ], [ -68.06929, 46.409587 ], [ -68.069206, 46.409594 ], [ -68.069051, 46.409602 ], [ -68.068915, 46.409594 ], [ -68.068794, 46.409599 ], [ -68.0686, 46.409608 ], [ -68.067548, 46.409666 ], [ -68.067, 46.409676 ], [ -68.065957, 46.409753 ], [ -68.065273, 46.409787 ], [ -68.064516, 46.409842 ], [ -68.064303, 46.409857 ], [ -68.064004, 46.409887 ], [ -68.06352, 46.409881 ], [ -68.062936, 46.409893 ], [ -68.062728, 46.409909 ], [ -68.062216, 46.409906 ], [ -68.061716, 46.409847 ], [ -68.061323, 46.409783 ], [ -68.060917, 46.409737 ], [ -68.060192, 46.409757 ], [ -68.059584, 46.409743 ], [ -68.058919, 46.409701 ], [ -68.058138, 46.409705 ], [ -68.05753, 46.409696 ], [ -68.05696, 46.40968 ], [ -68.056362, 46.409662 ], [ -68.055534, 46.409634 ], [ -68.054756, 46.409654 ], [ -68.054327, 46.409696 ], [ -68.05425, 46.409697 ], [ -68.054141, 46.4097 ], [ -68.054006, 46.40971 ], [ -68.053935, 46.409716 ], [ -68.053863, 46.409721 ], [ -68.053792, 46.409725 ], [ -68.053721, 46.409731 ], [ -68.05357, 46.409741 ], [ -68.053495, 46.409746 ], [ -68.053419, 46.409751 ], [ -68.05334, 46.409756 ], [ -68.053257, 46.409761 ], [ -68.053086, 46.409767 ], [ -68.052994, 46.409766 ], [ -68.052901, 46.409765 ], [ -68.052805, 46.409762 ], [ -68.052608, 46.409756 ], [ -68.052513, 46.409752 ], [ -68.052418, 46.409746 ], [ -68.052319, 46.409737 ], [ -68.052113, 46.409706 ], [ -68.052011, 46.409685 ], [ -68.051908, 46.409661 ], [ -68.051702, 46.409601 ], [ -68.051599, 46.409567 ], [ -68.051498, 46.409529 ], [ -68.051394, 46.409485 ], [ -68.051187, 46.409399 ], [ -68.051089, 46.409357 ], [ -68.050996, 46.409313 ], [ -68.050909, 46.409265 ], [ -68.050826, 46.409214 ], [ -68.050662, 46.409103 ], [ -68.050581, 46.409041 ], [ -68.050504, 46.408976 ], [ -68.050433, 46.408912 ], [ -68.050236, 46.40871 ], [ -68.050171, 46.40864 ], [ -68.050105, 46.408572 ], [ -68.05004, 46.408503 ], [ -68.049974, 46.408432 ], [ -68.04991, 46.408362 ], [ -68.049793, 46.408231 ], [ -68.049739, 46.40817 ], [ -68.049689, 46.408111 ], [ -68.049642, 46.408053 ], [ -68.049559, 46.407941 ], [ -68.049497, 46.407858 ], [ -68.049465, 46.407867 ], [ -68.049358, 46.40789 ], [ -68.049291, 46.407897 ], [ -68.049224, 46.407915 ], [ -68.049156, 46.407942 ], [ -68.049101, 46.407962 ], [ -68.048941, 46.408021 ], [ -68.048749, 46.408037 ], [ -68.048673, 46.408043 ], [ -68.048575, 46.40805 ], [ -68.048503, 46.408033 ], [ -68.048429, 46.408017 ], [ -68.048355, 46.408006 ], [ -68.048287, 46.408001 ], [ -68.048204, 46.407992 ], [ -68.048113, 46.407996 ], [ -68.048023, 46.40801 ], [ -68.047946, 46.408019 ], [ -68.047885, 46.408037 ], [ -68.047807, 46.40806 ], [ -68.04774, 46.408087 ], [ -68.047721, 46.408095 ], [ -68.047615, 46.408148 ], [ -68.047562, 46.408201 ], [ -68.047538, 46.408254 ], [ -68.047528, 46.40833 ], [ -68.047553, 46.408419 ], [ -68.04755, 46.408485 ], [ -68.047618, 46.408576 ], [ -68.047664, 46.408618 ], [ -68.04771, 46.408656 ], [ -68.04776, 46.408694 ], [ -68.047786, 46.408713 ], [ -68.04785, 46.408764 ], [ -68.047965, 46.408852 ], [ -68.047997, 46.408895 ], [ -68.048027, 46.408945 ], [ -68.048057, 46.408999 ], [ -68.048091, 46.409054 ], [ -68.048115, 46.40911 ], [ -68.04814, 46.40916 ], [ -68.048175, 46.409202 ], [ -68.048214, 46.409244 ], [ -68.048224, 46.409292 ], [ -68.048243, 46.409341 ], [ -68.048259, 46.409387 ], [ -68.048279, 46.409431 ], [ -68.048322, 46.409486 ], [ -68.048369, 46.409524 ], [ -68.048404, 46.409563 ], [ -68.04843, 46.409617 ], [ -68.048453, 46.409661 ], [ -68.048485, 46.409708 ], [ -68.048499, 46.409759 ], [ -68.048488, 46.409804 ], [ -68.048494, 46.409868 ], [ -68.048511, 46.409916 ], [ -68.048543, 46.409992 ], [ -68.048552, 46.410037 ], [ -68.048573, 46.410086 ], [ -68.048595, 46.410135 ], [ -68.048622, 46.410189 ], [ -68.048635, 46.410237 ], [ -68.048662, 46.410293 ], [ -68.048648, 46.410347 ], [ -68.048653, 46.410398 ], [ -68.048697, 46.410451 ], [ -68.048717, 46.410504 ], [ -68.048741, 46.410553 ], [ -68.048749, 46.410604 ], [ -68.04874, 46.410649 ], [ -68.04873, 46.410705 ], [ -68.048717, 46.41075 ], [ -68.048716, 46.410801 ], [ -68.048713, 46.410853 ], [ -68.048721, 46.410909 ], [ -68.048726, 46.410954 ], [ -68.048712, 46.411005 ], [ -68.048713, 46.411052 ], [ -68.04869, 46.411104 ], [ -68.048685, 46.411152 ], [ -68.048682, 46.411203 ], [ -68.048689, 46.41125 ], [ -68.048695, 46.411304 ], [ -68.048708, 46.41136 ], [ -68.048679, 46.411413 ], [ -68.048703, 46.411471 ], [ -68.048747, 46.411523 ], [ -68.048759, 46.41158 ], [ -68.048859, 46.411721 ], [ -68.049006, 46.411888 ], [ -68.049182, 46.411978 ], [ -68.049406, 46.41205 ], [ -68.049715, 46.412188 ], [ -68.04992, 46.412321 ], [ -68.050248, 46.412473 ], [ -68.050501, 46.412678 ], [ -68.050624, 46.412792 ], [ -68.050652, 46.412843 ], [ -68.05072, 46.412968 ], [ -68.05082, 46.413073 ], [ -68.050981, 46.413211 ], [ -68.051138, 46.413311 ], [ -68.05121, 46.413444 ], [ -68.051215, 46.413554 ], [ -68.051196, 46.413682 ], [ -68.051153, 46.41382 ], [ -68.051138, 46.413915 ], [ -68.051167, 46.413987 ], [ -68.051278, 46.414167 ], [ -68.051405, 46.414372 ], [ -68.051438, 46.414486 ], [ -68.051429, 46.414705 ], [ -68.051429, 46.414886 ], [ -68.05141, 46.415072 ], [ -68.051376, 46.415229 ], [ -68.051395, 46.415348 ], [ -68.051472, 46.415452 ], [ -68.05161, 46.415557 ], [ -68.051819, 46.415657 ], [ -68.052081, 46.415767 ], [ -68.052276, 46.415862 ], [ -68.052504, 46.416038 ], [ -68.052756, 46.416276 ], [ -68.052923, 46.416399 ], [ -68.053009, 46.416542 ], [ -68.053289, 46.417042 ], [ -68.053361, 46.417194 ], [ -68.053351, 46.417294 ], [ -68.053289, 46.417375 ], [ -68.053061, 46.417565 ], [ -68.052718, 46.417822 ], [ -68.05248, 46.418027 ], [ -68.052347, 46.418179 ], [ -68.052281, 46.418294 ], [ -68.052266, 46.418393 ], [ -68.052328, 46.41857 ], [ -68.052433, 46.418827 ], [ -68.052485, 46.418993 ], [ -68.052461, 46.41916 ], [ -68.052352, 46.419298 ], [ -68.052247, 46.419455 ], [ -68.052133, 46.419712 ], [ -68.052109, 46.419869 ], [ -68.052143, 46.419997 ], [ -68.0522, 46.420102 ], [ -68.052361, 46.42023 ], [ -68.052414, 46.420387 ], [ -68.0524, 46.42054 ], [ -68.052328, 46.420644 ], [ -68.052214, 46.420735 ], [ -68.051947, 46.420797 ], [ -68.051762, 46.420835 ], [ -68.051476, 46.420944 ], [ -68.051196, 46.421125 ], [ -68.051015, 46.421263 ], [ -68.05091, 46.421387 ], [ -68.050801, 46.421544 ], [ -68.050682, 46.421687 ], [ -68.050524, 46.42182 ], [ -68.050325, 46.421925 ], [ -68.050063, 46.422048 ], [ -68.049858, 46.422101 ], [ -68.049677, 46.422105 ], [ -68.049439, 46.422029 ], [ -68.049254, 46.422006 ], [ -68.049078, 46.422053 ], [ -68.048906, 46.422158 ], [ -68.048711, 46.422248 ], [ -68.048597, 46.422267 ], [ -68.048735, 46.421948 ], [ -68.048878, 46.421411 ], [ -68.049049, 46.420811 ], [ -68.049006, 46.42074 ], [ -68.04883, 46.420687 ], [ -68.04879, 46.420684 ], [ -68.048949, 46.420326 ], [ -68.049511, 46.420531 ], [ -68.049942, 46.42092 ], [ -68.050305, 46.420989 ], [ -68.050768, 46.420852 ], [ -68.051, 46.420646 ], [ -68.0509, 46.420349 ], [ -68.050901, 46.41964 ], [ -68.051033, 46.419343 ], [ -68.051099, 46.419069 ], [ -68.051429, 46.418406 ], [ -68.051495, 46.418063 ], [ -68.050834, 46.417697 ], [ -68.050669, 46.417309 ], [ -68.050735, 46.416874 ], [ -68.050801, 46.416691 ], [ -68.05081, 46.416522 ], [ -68.050834, 46.416074 ], [ -68.050768, 46.415548 ], [ -68.050862, 46.415297 ], [ -68.050967, 46.415023 ], [ -68.050702, 46.414657 ], [ -68.050372, 46.41324 ], [ -68.050207, 46.413011 ], [ -68.049877, 46.412783 ], [ -68.049018, 46.412554 ], [ -68.048291, 46.412485 ], [ -68.047729, 46.412279 ], [ -68.047332, 46.412302 ], [ -68.046539, 46.412714 ], [ -68.045382, 46.412713 ], [ -68.04492, 46.412873 ], [ -68.044688, 46.41301 ], [ -68.04455, 46.41335 ], [ -68.044286, 46.413998 ], [ -68.044231, 46.414133 ], [ -68.044093, 46.414473 ], [ -68.044027, 46.414519 ], [ -68.044027, 46.414633 ], [ -68.043928, 46.414656 ], [ -68.043928, 46.414862 ], [ -68.043795, 46.415113 ], [ -68.043795, 46.415913 ], [ -68.043564, 46.416439 ], [ -68.043563, 46.416958 ], [ -68.042634, 46.41717 ], [ -68.042248, 46.417249 ], [ -68.042187, 46.417261 ], [ -68.041982, 46.417275 ], [ -68.042001, 46.417494 ], [ -68.042001, 46.417656 ], [ -68.042025, 46.417918 ], [ -68.042077, 46.41806 ], [ -68.042187, 46.418236 ], [ -68.04232, 46.418393 ], [ -68.042063, 46.418631 ], [ -68.04192, 46.418827 ], [ -68.04173, 46.419117 ], [ -68.041587, 46.419379 ], [ -68.041487, 46.41955 ], [ -68.041335, 46.419721 ], [ -68.040978, 46.420069 ], [ -68.04045, 46.420673 ], [ -68.040404, 46.420729 ], [ -68.039565, 46.421734 ], [ -68.039146, 46.422215 ], [ -68.038104, 46.423305 ], [ -68.037509, 46.42398 ], [ -68.037109, 46.424499 ], [ -68.036452, 46.425337 ], [ -68.036081, 46.425708 ], [ -68.035696, 46.426131 ], [ -68.03542, 46.426507 ], [ -68.034882, 46.427131 ], [ -68.034335, 46.427659 ], [ -68.033987, 46.428011 ], [ -68.033778, 46.428254 ], [ -68.033507, 46.428725 ], [ -68.033369, 46.428835 ], [ -68.033221, 46.428858 ], [ -68.033007, 46.428882 ], [ -68.032274, 46.428811 ], [ -68.03195, 46.428825 ], [ -68.031689, 46.428873 ], [ -68.031441, 46.429015 ], [ -68.030794, 46.429567 ], [ -68.030304, 46.429929 ], [ -68.029899, 46.43011 ], [ -68.029423, 46.430267 ], [ -68.028914, 46.430381 ], [ -68.028186, 46.430491 ], [ -68.02782, 46.430519 ], [ -68.02751, 46.430495 ], [ -68.027144, 46.430429 ], [ -68.026906, 46.430415 ], [ -68.026554, 46.430476 ], [ -68.025764, 46.430952 ], [ -68.025431, 46.431109 ], [ -68.025231, 46.431152 ], [ -68.02465, 46.431209 ], [ -68.024303, 46.431262 ], [ -68.023932, 46.431304 ], [ -68.023165, 46.4313 ], [ -68.022475, 46.431233 ], [ -68.022023, 46.431162 ], [ -68.021609, 46.431024 ], [ -68.020962, 46.43079 ], [ -68.020443, 46.430738 ], [ -68.020006, 46.430771 ], [ -68.019801, 46.430838 ], [ -68.019677, 46.430943 ], [ -68.019453, 46.431257 ], [ -68.019368, 46.431476 ], [ -68.01932, 46.431861 ], [ -68.019287, 46.432404 ], [ -68.019244, 46.432823 ], [ -68.019168, 46.43307 ], [ -68.019001, 46.433579 ], [ -68.018954, 46.433879 ], [ -68.018954, 46.434141 ], [ -68.019025, 46.434759 ], [ -68.019035, 46.435002 ], [ -68.018911, 46.435192 ], [ -68.018683, 46.435383 ], [ -68.01844, 46.435521 ], [ -68.018126, 46.435687 ], [ -68.017774, 46.435778 ], [ -68.017131, 46.435911 ], [ -68.016646, 46.435973 ], [ -68.016132, 46.436025 ], [ -68.015865, 46.43604 ], [ -68.015551, 46.436111 ], [ -68.015185, 46.436216 ], [ -68.014804, 46.436335 ], [ -68.013605, 46.436625 ], [ -68.012986, 46.436749 ], [ -68.012534, 46.436801 ], [ -68.01221, 46.436853 ], [ -68.01193, 46.436925 ], [ -68.01162, 46.437058 ], [ -68.011301, 46.437258 ], [ -68.01024, 46.437967 ], [ -68.009845, 46.438252 ], [ -68.009555, 46.4384 ], [ -68.009169, 46.438548 ], [ -68.008589, 46.438743 ], [ -68.008184, 46.438857 ], [ -68.007856, 46.438933 ], [ -68.00749, 46.438976 ], [ -68.007014, 46.438985 ], [ -68.006504, 46.438952 ], [ -68.005105, 46.438609 ], [ -68.004463, 46.438462 ], [ -68.003587, 46.438267 ], [ -68.002978, 46.438067 ], [ -68.00216, 46.437677 ], [ -68.001765, 46.43752 ], [ -68.00155, 46.437462 ], [ -68.001217, 46.437443 ], [ -68.000813, 46.437458 ], [ -68.000584, 46.437448 ], [ -68.000289, 46.437382 ], [ -68.000009, 46.437348 ], [ -67.999652, 46.437367 ], [ -67.999385, 46.437396 ], [ -67.999119, 46.437467 ], [ -67.999104, 46.437478 ], [ -67.998991, 46.437564 ], [ -67.998824, 46.437691 ], [ -67.998467, 46.437891 ], [ -67.998019, 46.438148 ], [ -67.997562, 46.438433 ], [ -67.997101, 46.438733 ], [ -67.996777, 46.438962 ], [ -67.996468, 46.439133 ], [ -67.996239, 46.43919 ], [ -67.995987, 46.439199 ], [ -67.995621, 46.439176 ], [ -67.995178, 46.439157 ], [ -67.994631, 46.439147 ], [ -67.994407, 46.439128 ], [ -67.99416, 46.439095 ], [ -67.993679, 46.438957 ], [ -67.99327, 46.438819 ], [ -67.992961, 46.438676 ], [ -67.992646, 46.438467 ], [ -67.992309, 46.438272 ], [ -67.991923, 46.43811 ], [ -67.991623, 46.438019 ], [ -67.991152, 46.437972 ], [ -67.990871, 46.437929 ], [ -67.990586, 46.437872 ], [ -67.989943, 46.437634 ], [ -67.989391, 46.437491 ], [ -67.988949, 46.437424 ], [ -67.98853, 46.437443 ], [ -67.988443, 46.437459 ], [ -67.987683, 46.43689 ], [ -67.987586, 46.436658 ], [ -67.984844, 46.436583 ], [ -67.983605, 46.436456 ], [ -67.982106, 46.436157 ], [ -67.981586, 46.435882 ], [ -67.980779, 46.435056 ], [ -67.98013, 46.434729 ], [ -67.977389, 46.434411 ], [ -67.975926, 46.433706 ], [ -67.97538, 46.433109 ], [ -67.974442, 46.432249 ], [ -67.973695, 46.431846 ], [ -67.972067, 46.431237 ], [ -67.970833, 46.4306 ], [ -67.970575, 46.43033 ], [ -67.970137, 46.429191 ], [ -67.970087, 46.428423 ], [ -67.969896, 46.42809 ], [ -67.969843, 46.4275 ], [ -67.969928, 46.427162 ], [ -67.969897, 46.427168 ], [ -67.969762, 46.427202 ], [ -67.969616, 46.427254 ], [ -67.969353, 46.427365 ], [ -67.968756, 46.427629 ], [ -67.968566, 46.427723 ], [ -67.968303, 46.427869 ], [ -67.967925, 46.428058 ], [ -67.967651, 46.428186 ], [ -67.96756, 46.42822 ], [ -67.967437, 46.428256 ], [ -67.967304, 46.428283 ], [ -67.967167, 46.428296 ], [ -67.966663, 46.428304 ], [ -67.966368, 46.428317 ], [ -67.966086, 46.428332 ], [ -67.965876, 46.428338 ], [ -67.965791, 46.428329 ], [ -67.965732, 46.428315 ], [ -67.965655, 46.428286 ], [ -67.965583, 46.428243 ], [ -67.965359, 46.428065 ], [ -67.965132, 46.427897 ], [ -67.964913, 46.427726 ], [ -67.964607, 46.426459 ], [ -67.962718, 46.424832 ], [ -67.961779, 46.425093 ], [ -67.961797, 46.424935 ], [ -67.961833, 46.424719 ], [ -67.961876, 46.424542 ], [ -67.961926, 46.424356 ], [ -67.961946, 46.424266 ], [ -67.961959, 46.424168 ], [ -67.961958, 46.424062 ], [ -67.961946, 46.423972 ], [ -67.961903, 46.423831 ], [ -67.961833, 46.423694 ], [ -67.96171, 46.423442 ], [ -67.961605, 46.423167 ], [ -67.961543, 46.423035 ], [ -67.961459, 46.422888 ], [ -67.961281, 46.422609 ], [ -67.961178, 46.422415 ], [ -67.961096, 46.422217 ], [ -67.96088, 46.421619 ], [ -67.960716, 46.421204 ], [ -67.960648, 46.420998 ], [ -67.960611, 46.420791 ], [ -67.96058, 46.420466 ], [ -67.960538, 46.420248 ], [ -67.960473, 46.420042 ], [ -67.96038, 46.419772 ], [ -67.960333, 46.419612 ], [ -67.960296, 46.419438 ], [ -67.960285, 46.419321 ], [ -67.960287, 46.419206 ], [ -67.960303, 46.419097 ], [ -67.960325, 46.419009 ], [ -67.960349, 46.418939 ], [ -67.960526, 46.418547 ], [ -67.96068, 46.4181 ], [ -67.960794, 46.41783 ], [ -67.96092, 46.41764 ], [ -67.961188, 46.417295 ], [ -67.961747, 46.416625 ], [ -67.96189, 46.416467 ], [ -67.961945, 46.416413 ], [ -67.962043, 46.416322 ], [ -67.962249, 46.416113 ], [ -67.962349, 46.416016 ], [ -67.962444, 46.415905 ], [ -67.962528, 46.415783 ], [ -67.962562, 46.415717 ], [ -67.962595, 46.415632 ], [ -67.962619, 46.415539 ], [ -67.962626, 46.415467 ], [ -67.962625, 46.415376 ], [ -67.962606, 46.415269 ], [ -67.962572, 46.415153 ], [ -67.962541, 46.415073 ], [ -67.962414, 46.414795 ], [ -67.962347, 46.41467 ], [ -67.962231, 46.414485 ], [ -67.962092, 46.414259 ], [ -67.962052, 46.414175 ], [ -67.962003, 46.414043 ], [ -67.96196, 46.413888 ], [ -67.961898, 46.413589 ], [ -67.961892, 46.413518 ], [ -67.961894, 46.413434 ], [ -67.961905, 46.413339 ], [ -67.961924, 46.41324 ], [ -67.961963, 46.413097 ], [ -67.961785, 46.413006 ], [ -67.961529, 46.412863 ], [ -67.961401, 46.412799 ], [ -67.961213, 46.412722 ], [ -67.960869, 46.412586 ], [ -67.960471, 46.412416 ], [ -67.960266, 46.412341 ], [ -67.960063, 46.412289 ], [ -67.959507, 46.41216 ], [ -67.959385, 46.412121 ], [ -67.959299, 46.412086 ], [ -67.959221, 46.412043 ], [ -67.959158, 46.411999 ], [ -67.959099, 46.411947 ], [ -67.958459, 46.411269 ], [ -67.958251, 46.411056 ], [ -67.95821, 46.411009 ], [ -67.958096, 46.41091 ], [ -67.957926, 46.410772 ], [ -67.957822, 46.410673 ], [ -67.957679, 46.410505 ], [ -67.9576, 46.410425 ], [ -67.957481, 46.410345 ], [ -67.957381, 46.410311 ], [ -67.957311, 46.410301 ], [ -67.957099, 46.410301 ], [ -67.956965, 46.410309 ], [ -67.956678, 46.410352 ], [ -67.956526, 46.410369 ], [ -67.95639, 46.410371 ], [ -67.9561, 46.410352 ], [ -67.955881, 46.410333 ], [ -67.955444, 46.41031 ], [ -67.955002, 46.41029 ], [ -67.954573, 46.410252 ], [ -67.954351, 46.410241 ], [ -67.953479, 46.410242 ], [ -67.953257, 46.410232 ], [ -67.953042, 46.410215 ], [ -67.952805, 46.410201 ], [ -67.952597, 46.410198 ], [ -67.95238, 46.410213 ], [ -67.951977, 46.410266 ], [ -67.951294, 46.410307 ], [ -67.95085, 46.410326 ], [ -67.950633, 46.410329 ], [ -67.949994, 46.410321 ], [ -67.94949, 46.410332 ], [ -67.949117, 46.410331 ], [ -67.949022, 46.410334 ], [ -67.948881, 46.41032 ], [ -67.948805, 46.410301 ], [ -67.948686, 46.41025 ], [ -67.948616, 46.410195 ], [ -67.948561, 46.410136 ], [ -67.948377, 46.409907 ], [ -67.948306, 46.409805 ], [ -67.948037, 46.409458 ], [ -67.947659, 46.408924 ], [ -67.94752, 46.408759 ], [ -67.947213, 46.408445 ], [ -67.947073, 46.408279 ], [ -67.946951, 46.408106 ], [ -67.94683, 46.407922 ], [ -67.946563, 46.407578 ], [ -67.946273, 46.407263 ], [ -67.946134, 46.4071 ], [ -67.946002, 46.406932 ], [ -67.945829, 46.406692 ], [ -67.94569, 46.406524 ], [ -67.945534, 46.406362 ], [ -67.945395, 46.406222 ], [ -67.945297, 46.406102 ], [ -67.945257, 46.406045 ], [ -67.945218, 46.405978 ], [ -67.945179, 46.40589 ], [ -67.945136, 46.405748 ], [ -67.945049, 46.40535 ], [ -67.944898, 46.404947 ], [ -67.944796, 46.404742 ], [ -67.944765, 46.404673 ], [ -67.944593, 46.404194 ], [ -67.944292, 46.403392 ], [ -67.944216, 46.403182 ], [ -67.944018, 46.402537 ], [ -67.943988, 46.402351 ], [ -67.943972, 46.402192 ], [ -67.943956, 46.401814 ], [ -67.943962, 46.401607 ], [ -67.943974, 46.401456 ], [ -67.944037, 46.401019 ], [ -67.944077, 46.400649 ], [ -67.944089, 46.400431 ], [ -67.944081, 46.400226 ], [ -67.944059, 46.400082 ], [ -67.944015, 46.399945 ], [ -67.943979, 46.399877 ], [ -67.943895, 46.399768 ], [ -67.943784, 46.399661 ], [ -67.943361, 46.399292 ], [ -67.943018, 46.399029 ], [ -67.942667, 46.398764 ], [ -67.942496, 46.398626 ], [ -67.942175, 46.398343 ], [ -67.942019, 46.398188 ], [ -67.941885, 46.398014 ], [ -67.941761, 46.397841 ], [ -67.941496, 46.397504 ], [ -67.941359, 46.397337 ], [ -67.941209, 46.397189 ], [ -67.941044, 46.397061 ], [ -67.940866, 46.396932 ], [ -67.94069, 46.396786 ], [ -67.940529, 46.396638 ], [ -67.940194, 46.396368 ], [ -67.939849, 46.396083 ], [ -67.939623, 46.395929 ], [ -67.939494, 46.395855 ], [ -67.939364, 46.395791 ], [ -67.939026, 46.39564 ], [ -67.938578, 46.395406 ], [ -67.938399, 46.395299 ], [ -67.938283, 46.395216 ], [ -67.93816, 46.395103 ], [ -67.937912, 46.394842 ], [ -67.937868, 46.394791 ], [ -67.937792, 46.394671 ], [ -67.93776, 46.394607 ], [ -67.937731, 46.394532 ], [ -67.937707, 46.394448 ], [ -67.937693, 46.394371 ], [ -67.937689, 46.39428 ], [ -67.937697, 46.394208 ], [ -67.937714, 46.394142 ], [ -67.937738, 46.394077 ], [ -67.937806, 46.39395 ], [ -67.937848, 46.393886 ], [ -67.93793, 46.393788 ], [ -67.938043, 46.393682 ], [ -67.938151, 46.393596 ], [ -67.938263, 46.393493 ], [ -67.938353, 46.393383 ], [ -67.938463, 46.393214 ], [ -67.938572, 46.393013 ], [ -67.938666, 46.39282 ], [ -67.938821, 46.392575 ], [ -67.938849, 46.392517 ], [ -67.938868, 46.392451 ], [ -67.938873, 46.3924 ], [ -67.938863, 46.392337 ], [ -67.938828, 46.392261 ], [ -67.938777, 46.39221 ], [ -67.938662, 46.392133 ], [ -67.938292, 46.391915 ], [ -67.937916, 46.391711 ], [ -67.937794, 46.391651 ], [ -67.937587, 46.391574 ], [ -67.937165, 46.391449 ], [ -67.936969, 46.391387 ], [ -67.936541, 46.391267 ], [ -67.936124, 46.391155 ], [ -67.935918, 46.391096 ], [ -67.9355, 46.391006 ], [ -67.935094, 46.390924 ], [ -67.934867, 46.390864 ], [ -67.934582, 46.390798 ], [ -67.934396, 46.390763 ], [ -67.934146, 46.39073 ], [ -67.933858, 46.390704 ], [ -67.933643, 46.390704 ], [ -67.933201, 46.390735 ], [ -67.932986, 46.390765 ], [ -67.932773, 46.390799 ], [ -67.932577, 46.390816 ], [ -67.932345, 46.390815 ], [ -67.931831, 46.390805 ], [ -67.931784, 46.390802 ], [ -67.930105, 46.390685 ], [ -67.930131, 46.390384 ], [ -67.929603, 46.38995 ], [ -67.928612, 46.389653 ], [ -67.928315, 46.389447 ], [ -67.928249, 46.389287 ], [ -67.928414, 46.389035 ], [ -67.928843, 46.388281 ], [ -67.928843, 46.387893 ], [ -67.929141, 46.387253 ], [ -67.929306, 46.385584 ], [ -67.929565, 46.384889 ], [ -67.928845, 46.384599 ], [ -67.928878, 46.384369 ], [ -67.928746, 46.384141 ], [ -67.928153, 46.383452 ], [ -67.927297, 46.381824 ], [ -67.927, 46.381411 ], [ -67.925516, 46.380309 ], [ -67.924989, 46.379689 ], [ -67.924692, 46.379185 ], [ -67.924597, 46.376227 ], [ -67.924465, 46.376181 ], [ -67.924367, 46.375791 ], [ -67.923855, 46.37501 ], [ -67.922783, 46.374148 ], [ -67.91955, 46.372447 ], [ -67.918661, 46.371735 ], [ -67.918628, 46.371528 ], [ -67.918397, 46.371207 ], [ -67.918365, 46.370428 ], [ -67.918267, 46.370358 ], [ -67.917872, 46.369097 ], [ -67.918006, 46.36825 ], [ -67.917811, 46.366507 ], [ -67.917516, 46.365613 ], [ -67.917848, 46.364283 ], [ -67.917749, 46.364077 ], [ -67.916431, 46.363204 ], [ -67.915904, 46.362584 ], [ -67.915883, 46.362453 ], [ -67.915826, 46.362441 ], [ -67.915792, 46.362389 ], [ -67.915639, 46.361988 ], [ -67.915622, 46.361918 ], [ -67.915613, 46.361847 ], [ -67.915611, 46.361774 ], [ -67.91562, 46.361704 ], [ -67.915681, 46.361507 ], [ -67.915699, 46.361415 ], [ -67.915709, 46.361312 ], [ -67.915706, 46.361222 ], [ -67.915697, 46.361149 ], [ -67.915659, 46.36098 ], [ -67.915559, 46.360711 ], [ -67.915376, 46.360096 ], [ -67.915296, 46.359904 ], [ -67.915251, 46.35975 ], [ -67.915248, 46.359663 ], [ -67.915262, 46.359595 ], [ -67.915348, 46.35928 ], [ -67.915384, 46.359057 ], [ -67.91539, 46.358919 ], [ -67.915419, 46.35863 ], [ -67.915411, 46.35856 ], [ -67.915395, 46.358496 ], [ -67.915345, 46.358358 ], [ -67.915311, 46.358284 ], [ -67.915238, 46.358157 ], [ -67.915211, 46.358094 ], [ -67.914966, 46.357651 ], [ -67.914914, 46.357517 ], [ -67.914856, 46.357296 ], [ -67.914792, 46.357074 ], [ -67.914711, 46.356931 ], [ -67.914624, 46.356824 ], [ -67.914429, 46.356606 ], [ -67.914123, 46.356285 ], [ -67.914016, 46.356193 ], [ -67.913847, 46.356052 ], [ -67.913737, 46.355976 ], [ -67.913483, 46.355827 ], [ -67.91328, 46.355721 ], [ -67.912957, 46.355583 ], [ -67.912601, 46.355457 ], [ -67.912467, 46.355404 ], [ -67.91239, 46.355366 ], [ -67.912327, 46.355328 ], [ -67.912268, 46.355285 ], [ -67.912084, 46.355131 ], [ -67.911847, 46.354963 ], [ -67.911825, 46.354943 ], [ -67.910552, 46.354521 ], [ -67.910251, 46.354339 ], [ -67.910013, 46.354014 ], [ -67.909743, 46.353785 ], [ -67.909046, 46.351747 ], [ -67.908793, 46.350555 ], [ -67.908621, 46.350562 ], [ -67.908411, 46.350578 ], [ -67.908423, 46.351138 ], [ -67.908426, 46.351853 ], [ -67.90843, 46.35256 ], [ -67.908449, 46.358248 ], [ -67.908449, 46.360026 ], [ -67.908448, 46.361785 ], [ -67.908448, 46.363549 ], [ -67.908445, 46.36422 ], [ -67.908438, 46.365313 ], [ -67.908439, 46.366042 ], [ -67.908486, 46.366452 ], [ -67.908522, 46.367046 ], [ -67.908672, 46.368735 ], [ -67.908802, 46.370411 ], [ -67.908905, 46.37173 ], [ -67.906073, 46.371725 ], [ -67.903301, 46.371735 ], [ -67.900528, 46.371744 ], [ -67.897755, 46.371736 ], [ -67.895004, 46.371745 ], [ -67.893652, 46.371745 ], [ -67.892637, 46.371745 ], [ -67.89221, 46.371745 ], [ -67.889437, 46.371741 ], [ -67.887093, 46.371736 ], [ -67.885862, 46.371742 ], [ -67.884626, 46.371743 ], [ -67.883389, 46.371745 ], [ -67.882152, 46.371746 ], [ -67.881761, 46.371747 ], [ -67.880909, 46.371747 ], [ -67.879657, 46.371753 ], [ -67.878414, 46.371759 ], [ -67.877178, 46.37176 ], [ -67.876346, 46.371761 ], [ -67.874467, 46.371882 ], [ -67.872304, 46.371888 ], [ -67.86814, 46.37191 ], [ -67.866509, 46.371921 ], [ -67.860426, 46.371986 ], [ -67.860014, 46.371991 ], [ -67.854906, 46.372046 ], [ -67.852721, 46.372067 ] ] ] } } +{ + "type": "Feature", + "properties": { + "ZCTA5CE10": "04760", + "GEOID10": "04760", + "CLASSFP10": "B5", + "MTFCC10": "G6350", + "FUNCSTAT10": "S", + "ALAND10": 259787771.0, + "AWATER10": 547534.0, + "INTPTLAT10": "+46.3393412", + "INTPTLON10": "-067.9548745" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [-67.852721, 46.372067], + [-67.847532, 46.372107], + [-67.842568, 46.372157], + [-67.840795, 46.372167], + [-67.83499, 46.372252], + [-67.828309, 46.372337], + [-67.821947, 46.372442], + [-67.819315, 46.372478], + [-67.815451, 46.372546], + [-67.809313, 46.37259], + [-67.804761, 46.372678], + [-67.802935, 46.372713], + [-67.798108, 46.372788], + [-67.797668, 46.372792], + [-67.797179, 46.372799], + [-67.795557, 46.372844], + [-67.789835, 46.372917], + [-67.783302, 46.372964], + [-67.783255, 46.370021], + [-67.783193, 46.364629], + [-67.783113, 46.359292], + [-67.783081, 46.357421], + [-67.783018, 46.353747], + [-67.782962, 46.351031], + [-67.782883, 46.343503], + [-67.782807, 46.337354], + [-67.782735, 46.334356], + [-67.782704, 46.332756], + [-67.7827, 46.331778], + [-67.782693, 46.329967], + [-67.782695, 46.328345], + [-67.782685, 46.328103], + [-67.782683, 46.32767], + [-67.782683, 46.327488], + [-67.782682, 46.327417], + [-67.782683, 46.327326], + [-67.782661, 46.325587], + [-67.782656, 46.323604], + [-67.782627, 46.322511], + [-67.782614, 46.321335], + [-67.782572, 46.319603], + [-67.782525, 46.317639], + [-67.782524, 46.317519], + [-67.782519, 46.317353], + [-67.782516, 46.317152], + [-67.782512, 46.316979], + [-67.782509, 46.316804], + [-67.782504, 46.316545], + [-67.782502, 46.316311], + [-67.782499, 46.31604], + [-67.782496, 46.315737], + [-67.782503, 46.315682], + [-67.782454, 46.311378], + [-67.782364, 46.305456], + [-67.782362, 46.305285], + [-67.782248, 46.296235], + [-67.782247, 46.296185], + [-67.782245, 46.296137], + [-67.78224, 46.295779], + [-67.782173, 46.290585], + [-67.782114, 46.284024], + [-67.782078, 46.280189], + [-67.782065, 46.279406], + [-67.782453, 46.27941], + [-67.782526, 46.279411], + [-67.786179, 46.279423], + [-67.786532, 46.279427], + [-67.788408, 46.279429], + [-67.791458, 46.279425], + [-67.792003, 46.279421], + [-67.800462, 46.279385], + [-67.807624, 46.279442], + [-67.811433, 46.279427], + [-67.813495, 46.279422], + [-67.814129, 46.279428], + [-67.814518, 46.279431], + [-67.814877, 46.279434], + [-67.821223, 46.279493], + [-67.829311, 46.279531], + [-67.830484, 46.279552], + [-67.831429, 46.279546], + [-67.839729, 46.279491], + [-67.840192, 46.279488], + [-67.840815, 46.279485], + [-67.852212, 46.279449], + [-67.853472, 46.279443], + [-67.860869, 46.279408], + [-67.862737, 46.2794], + [-67.862771, 46.2794], + [-67.863352, 46.279397], + [-67.864042, 46.279395], + [-67.865152, 46.279386], + [-67.8694, 46.279382], + [-67.869961, 46.279382], + [-67.874539, 46.279301], + [-67.875364, 46.279298], + [-67.877482, 46.279289], + [-67.878294, 46.279284], + [-67.87859, 46.279282], + [-67.879347, 46.279281], + [-67.881751, 46.279268], + [-67.884156, 46.279296], + [-67.884485, 46.279299], + [-67.886583, 46.279311], + [-67.88901, 46.279325], + [-67.89576, 46.279365], + [-67.896852, 46.279383], + [-67.899339, 46.279389], + [-67.904314, 46.279415], + [-67.906979, 46.279454], + [-67.906979, 46.279877], + [-67.907004, 46.281128], + [-67.907013, 46.281632], + [-67.907095, 46.285633], + [-67.907108, 46.286146], + [-67.907127, 46.286894], + [-67.907161, 46.288649], + [-67.907196, 46.290404], + [-67.907221, 46.292159], + [-67.907236, 46.293206], + [-67.907247, 46.293915], + [-67.907257, 46.294333], + [-67.907291, 46.295675], + [-67.907354, 46.29743], + [-67.907375, 46.298915], + [-67.907379, 46.299172], + [-67.907423, 46.300914], + [-67.907467, 46.30266], + [-67.907497, 46.30463], + [-67.907528, 46.306135], + [-67.907622, 46.310474], + [-67.907624, 46.310724], + [-67.90799, 46.310681], + [-67.908057, 46.310675], + [-67.908392, 46.310671], + [-67.908541, 46.310661], + [-67.908785, 46.310639], + [-67.909028, 46.310597], + [-67.909186, 46.310579], + [-67.909532, 46.310522], + [-67.909603, 46.310505], + [-67.909671, 46.310488], + [-67.909738, 46.310473], + [-67.909808, 46.310462], + [-67.909878, 46.310455], + [-67.909948, 46.310453], + [-67.910017, 46.310452], + [-67.910139, 46.310459], + [-67.910227, 46.310471], + [-67.910433, 46.310416], + [-67.910475, 46.310513], + [-67.910584, 46.310618], + [-67.910832, 46.310699], + [-67.911146, 46.31068], + [-67.911393, 46.310589], + [-67.911469, 46.310561], + [-67.911969, 46.310309], + [-67.912467, 46.310092], + [-67.91283, 46.309933], + [-67.913406, 46.309728], + [-67.913535, 46.309697], + [-67.913687, 46.309661], + [-67.914434, 46.309566], + [-67.914934, 46.309527], + [-67.915286, 46.3095], + [-67.916133, 46.309414], + [-67.917389, 46.309319], + [-67.918522, 46.30929], + [-67.918789, 46.309238], + [-67.919065, 46.309114], + [-67.919383, 46.308948], + [-67.919702, 46.308919], + [-67.920045, 46.308976], + [-67.920526, 46.309138], + [-67.920987, 46.309257], + [-67.921354, 46.309276], + [-67.921615, 46.309266], + [-67.921787, 46.309266], + [-67.92192, 46.309304], + [-67.92202, 46.309381], + [-67.92202, 46.309214], + [-67.921982, 46.309076], + [-67.921887, 46.308948], + [-67.921939, 46.308729], + [-67.922063, 46.308557], + [-67.922272, 46.308362], + [-67.922534, 46.3082], + [-67.9227, 46.308043], + [-67.922777, 46.307901], + [-67.922819, 46.307653], + [-67.922891, 46.307453], + [-67.922962, 46.307177], + [-67.922976, 46.306901], + [-67.922938, 46.306544], + [-67.922848, 46.306164], + [-67.922762, 46.305835], + [-67.922629, 46.305416], + [-67.922515, 46.305083], + [-67.922401, 46.304902], + [-67.922229, 46.30475], + [-67.921972, 46.304631], + [-67.921658, 46.304531], + [-67.921463, 46.304446], + [-67.921311, 46.304308], + [-67.921192, 46.304113], + [-67.92113, 46.303955], + [-67.921135, 46.303779], + [-67.921225, 46.30356], + [-67.921525, 46.303175], + [-67.921744, 46.302885], + [-67.921834, 46.302709], + [-67.921844, 46.302575], + [-67.921782, 46.302414], + [-67.921549, 46.30218], + [-67.921235, 46.301947], + [-67.920971, 46.301684], + [-67.920925, 46.301638], + [-67.920768, 46.301428], + [-67.920721, 46.301281], + [-67.920745, 46.301129], + [-67.920883, 46.300919], + [-67.921154, 46.300719], + [-67.921644, 46.300529], + [-67.922039, 46.300415], + [-67.922401, 46.300362], + [-67.922748, 46.300362], + [-67.923062, 46.300405], + [-67.923429, 46.300372], + [-67.923805, 46.30032], + [-67.92428, 46.30022], + [-67.924847, 46.300072], + [-67.925232, 46.30002], + [-67.925737, 46.299972], + [-67.92616, 46.299882], + [-67.926455, 46.299796], + [-67.926698, 46.299639], + [-67.926788, 46.299449], + [-67.926936, 46.298887], + [-67.927088, 46.298644], + [-67.927364, 46.298426], + [-67.92793, 46.298202], + [-67.928402, 46.298059], + [-67.928806, 46.298031], + [-67.929111, 46.298059], + [-67.929558, 46.298264], + [-67.929748, 46.298368], + [-67.929986, 46.298421], + [-67.930187, 46.298408], + [-67.930215, 46.298407], + [-67.930391, 46.298368], + [-67.9307, 46.298288], + [-67.930981, 46.298235], + [-67.931205, 46.298197], + [-67.931485, 46.298192], + [-67.93179, 46.298235], + [-67.93208, 46.29825], + [-67.932323, 46.298254], + [-67.93328, 46.298192], + [-67.933832, 46.298169], + [-67.934208, 46.298169], + [-67.934755, 46.29825], + [-67.93515, 46.298326], + [-67.935313, 46.298336], + [-67.935607, 46.298354], + [-67.935835, 46.29834], + [-67.936063, 46.298288], + [-67.936325, 46.298188], + [-67.936497, 46.298064], + [-67.936592, 46.297912], + [-67.93662, 46.297579], + [-67.93662, 46.297098], + [-67.936649, 46.296674], + [-67.936706, 46.296298], + [-67.93682, 46.295975], + [-67.937016, 46.295566], + [-67.937044, 46.295508], + [-67.937091, 46.295232], + [-67.93702, 46.294956], + [-67.936901, 46.294676], + [-67.936911, 46.294509], + [-67.937068, 46.294252], + [-67.937334, 46.294009], + [-67.937769, 46.293712], + [-67.937962, 46.293581], + [-67.93841, 46.293257], + [-67.938605, 46.293091], + [-67.938681, 46.292891], + [-67.938686, 46.292696], + [-67.938552, 46.292158], + [-67.938452, 46.291677], + [-67.938438, 46.291535], + [-67.938495, 46.291397], + [-67.938595, 46.291297], + [-67.9388, 46.291206], + [-67.93909, 46.291159], + [-67.939628, 46.291125], + [-67.940327, 46.291106], + [-67.941132, 46.291097], + [-67.941888, 46.291097], + [-67.942517, 46.291149], + [-67.942954, 46.291173], + [-67.94353, 46.291144], + [-67.943911, 46.291064], + [-67.944078, 46.291016], + [-67.944734, 46.290683], + [-67.945205, 46.290454], + [-67.945467, 46.290293], + [-67.945581, 46.290178], + [-67.94571, 46.289974], + [-67.945991, 46.289317], + [-67.946205, 46.288736], + [-67.946251, 46.28859], + [-67.946381, 46.28818], + [-67.946452, 46.287923], + [-67.946452, 46.287723], + [-67.946381, 46.287551], + [-67.946281, 46.287413], + [-67.945929, 46.287199], + [-67.945367, 46.286919], + [-67.944473, 46.286495], + [-67.943564, 46.286], + [-67.942826, 46.285462], + [-67.942426, 46.285196], + [-67.941955, 46.284986], + [-67.941103, 46.284701], + [-67.940684, 46.28452], + [-67.940499, 46.284353], + [-67.940427, 46.284196], + [-67.940494, 46.283987], + [-67.940699, 46.283801], + [-67.941136, 46.28364], + [-67.941693, 46.283616], + [-67.94216, 46.283635], + [-67.94244, 46.283654], + [-67.942778, 46.28364], + [-67.943335, 46.283549], + [-67.944063, 46.283406], + [-67.945424, 46.283149], + [-67.945753, 46.283026], + [-67.946162, 46.282807], + [-67.946595, 46.282602], + [-67.946819, 46.282483], + [-67.946933, 46.282374], + [-67.946957, 46.28225], + [-67.946933, 46.28213], + [-67.946923, 46.282083], + [-67.946685, 46.28147], + [-67.946585, 46.28117], + [-67.946271, 46.28055], + [-67.9459, 46.279879], + [-67.945591, 46.279179], + [-67.945329, 46.278608], + [-67.945191, 46.278375], + [-67.944939, 46.278094], + [-67.944572, 46.277823], + [-67.94402, 46.277585], + [-67.943206, 46.277299], + [-67.942554, 46.277138], + [-67.942031, 46.277042], + [-67.941436, 46.276904], + [-67.941089, 46.276805], + [-67.941273, 46.276608], + [-67.941386, 46.276434], + [-67.942717, 46.276433], + [-67.945149, 46.276428], + [-67.947581, 46.276424], + [-67.950025, 46.276406], + [-67.952502, 46.276415], + [-67.954878, 46.276396], + [-67.95937, 46.276392], + [-67.961782, 46.276382], + [-67.96464, 46.276379], + [-67.973962, 46.276369], + [-67.973524, 46.277588], + [-67.972734, 46.278434], + [-67.972306, 46.279645], + [-67.972372, 46.280125], + [-67.972373, 46.281406], + [-67.972241, 46.281611], + [-67.972143, 46.282046], + [-67.971813, 46.282433], + [-67.971353, 46.284239], + [-67.971057, 46.284811], + [-67.970496, 46.28552], + [-67.970398, 46.286], + [-67.970135, 46.286663], + [-67.969706, 46.287211], + [-67.969, 46.287734], + [-67.970003, 46.287965], + [-67.972246, 46.289679], + [-67.973072, 46.290182], + [-67.974062, 46.290593], + [-67.974358, 46.290799], + [-67.974623, 46.291279], + [-67.974787, 46.29137], + [-67.974986, 46.291667], + [-67.975579, 46.291941], + [-67.978019, 46.292077], + [-67.980196, 46.292374], + [-67.982867, 46.292281], + [-67.983482, 46.292464], + [-67.983229, 46.292464], + [-67.98257, 46.292693], + [-67.982241, 46.292922], + [-67.982373, 46.29315], + [-67.983362, 46.293287], + [-67.984055, 46.293652], + [-67.984352, 46.294041], + [-67.984288, 46.296212], + [-67.983761, 46.297104], + [-67.983695, 46.297401], + [-67.983893, 46.297927], + [-67.984421, 46.298361], + [-67.986071, 46.299], + [-67.986994, 46.299091], + [-67.987489, 46.299251], + [-67.987687, 46.299571], + [-67.987787, 46.300051], + [-67.987985, 46.300394], + [-67.988381, 46.300622], + [-67.989205, 46.300736], + [-67.989568, 46.301033], + [-67.989701, 46.301307], + [-67.989965, 46.301536], + [-67.990328, 46.302199], + [-67.99079, 46.302564], + [-67.992011, 46.302838], + [-67.992473, 46.303249], + [-67.992638, 46.303615], + [-67.992706, 46.305672], + [-67.992838, 46.30606], + [-67.993102, 46.306312], + [-67.993531, 46.306563], + [-67.994291, 46.307385], + [-67.995149, 46.307591], + [-67.996897, 46.307567], + [-67.997952, 46.307429], + [-67.998971, 46.30784], + [-67.999467, 46.307886], + [-68.00019, 46.307839], + [-68.000375, 46.307945], + [-68.000508, 46.308051], + [-68.000684, 46.308156], + [-68.000715, 46.30813], + [-68.000805, 46.307982], + [-68.000828, 46.307801], + [-68.000814, 46.307563], + [-68.00089, 46.307206], + [-68.00099, 46.306987], + [-68.001228, 46.306783], + [-68.001733, 46.306583], + [-68.002142, 46.306483], + [-68.002675, 46.306388], + [-68.003593, 46.30624], + [-68.004055, 46.30615], + [-68.004369, 46.306045], + [-68.004712, 46.305897], + [-68.004988, 46.305717], + [-68.005235, 46.305479], + [-68.005578, 46.30505], + [-68.005668, 46.30496], + [-68.005873, 46.304664], + [-68.006067, 46.304142], + [-68.006082, 46.304103], + [-68.006253, 46.303855], + [-68.006463, 46.303622], + [-68.006848, 46.303284], + [-68.007196, 46.303013], + [-68.007429, 46.30278], + [-68.00771, 46.302485], + [-68.007995, 46.302242], + [-68.008262, 46.302099], + [-68.00868, 46.301961], + [-68.009323, 46.301804], + [-68.009851, 46.301695], + [-68.010403, 46.301538], + [-68.010836, 46.301447], + [-68.011341, 46.30139], + [-68.01184, 46.301371], + [-68.012349, 46.301338], + [-68.013301, 46.301224], + [-68.013687, 46.301134], + [-68.014401, 46.300915], + [-68.015381, 46.300639], + [-68.016237, 46.300386], + [-68.017008, 46.300168], + [-68.01787, 46.299906], + [-68.018879, 46.299611], + [-68.019564, 46.299416], + [-68.020225, 46.299244], + [-68.020554, 46.299144], + [-68.02093, 46.298987], + [-68.021272, 46.298816], + [-68.021434, 46.298649], + [-68.021491, 46.298478], + [-68.021553, 46.298126], + [-68.021634, 46.29776], + [-68.021725, 46.297517], + [-68.021829, 46.297322], + [-68.021972, 46.297165], + [-68.022167, 46.297008], + [-68.022192, 46.296995], + [-68.023086, 46.297811], + [-68.02401, 46.298411], + [-68.024847, 46.298871], + [-68.026464, 46.299733], + [-68.028168, 46.300605], + [-68.029164, 46.301032], + [-68.030224, 46.301545], + [-68.030881, 46.301804], + [-68.031974, 46.302424], + [-68.032907, 46.303052], + [-68.034177, 46.303847], + [-68.035388, 46.304456], + [-68.036355, 46.30506], + [-68.037423, 46.305599], + [-68.039646, 46.306535], + [-68.04052, 46.306975], + [-68.040987, 46.307397], + [-68.041543, 46.307852], + [-68.041919, 46.308411], + [-68.042739, 46.309056], + [-68.043155, 46.309789], + [-68.044025, 46.310937], + [-68.044785, 46.311261], + [-68.04552, 46.311657], + [-68.045977, 46.312051], + [-68.046075, 46.312435], + [-68.046079, 46.312671], + [-68.046329, 46.313258], + [-68.046473, 46.313327], + [-68.046523, 46.313445], + [-68.046635, 46.313536], + [-68.047167, 46.314299], + [-68.047533, 46.315002], + [-68.047969, 46.31562], + [-68.048072, 46.315685], + [-68.048241, 46.31592], + [-68.048616, 46.316199], + [-68.048894, 46.316524], + [-68.049535, 46.317378], + [-68.050111, 46.317975], + [-68.05028, 46.318211], + [-68.050559, 46.318622], + [-68.052032, 46.319416], + [-68.052683, 46.320018], + [-68.052879, 46.320633], + [-68.052843, 46.321145], + [-68.05328, 46.322404], + [-68.053133, 46.323076], + [-68.053292, 46.324139], + [-68.05332, 46.324585], + [-68.052965, 46.325378], + [-68.052867, 46.326106], + [-68.052695, 46.326636], + [-68.052467, 46.327085], + [-68.052569, 46.327554], + [-68.052957, 46.328057], + [-68.054691, 46.329489], + [-68.05486, 46.329724], + [-68.054971, 46.329816], + [-68.055275, 46.3302], + [-68.056341, 46.330869], + [-68.056987, 46.331382], + [-68.057442, 46.331833], + [-68.05773, 46.332099], + [-68.058016, 46.332456], + [-68.05834, 46.332542], + [-68.058505, 46.332817], + [-68.059594, 46.333137], + [-68.061079, 46.333434], + [-68.061343, 46.333525], + [-68.061706, 46.3338], + [-68.061772, 46.33396], + [-68.062135, 46.334233], + [-68.062927, 46.334507], + [-68.063257, 46.334804], + [-68.063356, 46.335101], + [-68.063422, 46.33517], + [-68.063521, 46.335696], + [-68.063521, 46.33789], + [-68.06362, 46.338325], + [-68.063884, 46.338622], + [-68.064181, 46.338805], + [-68.064379, 46.339102], + [-68.064478, 46.339422], + [-68.064841, 46.339879], + [-68.065897, 46.340793], + [-68.066062, 46.341547], + [-68.066227, 46.341845], + [-68.066392, 46.341913], + [-68.066491, 46.34205], + [-68.067745, 46.342988], + [-68.068901, 46.343102], + [-68.070419, 46.343033], + [-68.070782, 46.342873], + [-68.071376, 46.34253], + [-68.071772, 46.342439], + [-68.072202, 46.342439], + [-68.072334, 46.342622], + [-68.073885, 46.343467], + [-68.074083, 46.343696], + [-68.074083, 46.34381], + [-68.074248, 46.344039], + [-68.074612, 46.344221], + [-68.07481, 46.344221], + [-68.075635, 46.34397], + [-68.075998, 46.344016], + [-68.076295, 46.344221], + [-68.077054, 46.345067], + [-68.077978, 46.345432], + [-68.078176, 46.345707], + [-68.078177, 46.345958], + [-68.078078, 46.346004], + [-68.078012, 46.34621], + [-68.078012, 46.347375], + [-68.078177, 46.347558], + [-68.078804, 46.347993], + [-68.079828, 46.348381], + [-68.080257, 46.348655], + [-68.080323, 46.348769], + [-68.080323, 46.349387], + [-68.080455, 46.349615], + [-68.080752, 46.349844], + [-68.080884, 46.350232], + [-68.081016, 46.350392], + [-68.08105, 46.350507], + [-68.081545, 46.350849], + [-68.08171, 46.351078], + [-68.081776, 46.351558], + [-68.082139, 46.351946], + [-68.08214, 46.352609], + [-68.082239, 46.352792], + [-68.08247, 46.352952], + [-68.082503, 46.353066], + [-68.082179, 46.353171], + [-68.081479, 46.353395], + [-68.08095, 46.353697], + [-68.080123, 46.354485], + [-68.079462, 46.355271], + [-68.079231, 46.355435], + [-68.077975, 46.35657], + [-68.077843, 46.3568], + [-68.077743, 46.357378], + [-68.077346, 46.357841], + [-68.077346, 46.358788], + [-68.077081, 46.359182], + [-68.076552, 46.359691], + [-68.076122, 46.359923], + [-68.075021, 46.360214], + [-68.075047, 46.360229], + [-68.075183, 46.36029], + [-68.075255, 46.360315], + [-68.075464, 46.360371], + [-68.075882, 46.360458], + [-68.078195, 46.361024], + [-68.07861, 46.361123], + [-68.079032, 46.361231], + [-68.079437, 46.361346], + [-68.079647, 46.361416], + [-68.079847, 46.361489], + [-68.080249, 46.361653], + [-68.080646, 46.361838], + [-68.081234, 46.362126], + [-68.081697, 46.362337], + [-68.08215, 46.362541], + [-68.082285, 46.362597], + [-68.082527, 46.362689], + [-68.082454, 46.362793], + [-68.082135, 46.36309], + [-68.082037, 46.363198], + [-68.081957, 46.363314], + [-68.08189, 46.363448], + [-68.081786, 46.363738], + [-68.081714, 46.36396], + [-68.081655, 46.364091], + [-68.081621, 46.364152], + [-68.081557, 46.364245], + [-68.081455, 46.364367], + [-68.081394, 46.364429], + [-68.081232, 46.364568], + [-68.080866, 46.364819], + [-68.080498, 46.365057], + [-68.080316, 46.365177], + [-68.080136, 46.365308], + [-68.079966, 46.365439], + [-68.079791, 46.365586], + [-68.079634, 46.365738], + [-68.079331, 46.366057], + [-68.079053, 46.36638], + [-68.078363, 46.367211], + [-68.077983, 46.367654], + [-68.077638, 46.368039], + [-68.07755, 46.368153], + [-68.077476, 46.368272], + [-68.077414, 46.368407], + [-68.077238, 46.368962], + [-68.077166, 46.369164], + [-68.076693, 46.370365], + [-68.076323, 46.371228], + [-68.076012, 46.372036], + [-68.075866, 46.372458], + [-68.075626, 46.373057], + [-68.075309, 46.373863], + [-68.075153, 46.374286], + [-68.075007, 46.374614], + [-68.074965, 46.374774], + [-68.074918, 46.375068], + [-68.074891, 46.375501], + [-68.074879, 46.375581], + [-68.074841, 46.375716], + [-68.074736, 46.375996], + [-68.074568, 46.376391], + [-68.074491, 46.376591], + [-68.074318, 46.376999], + [-68.074087, 46.377605], + [-68.073845, 46.378207], + [-68.073596, 46.378808], + [-68.07352, 46.379008], + [-68.073448, 46.379217], + [-68.073221, 46.379785], + [-68.073147, 46.379987], + [-68.072894, 46.380813], + [-68.072749, 46.381222], + [-68.072594, 46.381632], + [-68.072528, 46.381838], + [-68.072476, 46.382045], + [-68.072403, 46.382496], + [-68.072337, 46.382868], + [-68.072269, 46.383085], + [-68.072188, 46.383286], + [-68.07206, 46.383538], + [-68.071919, 46.383793], + [-68.071838, 46.383919], + [-68.071804, 46.383964], + [-68.071924, 46.383997], + [-68.071965, 46.384034], + [-68.071992, 46.384088], + [-68.072047, 46.384192], + [-68.072088, 46.384267], + [-68.072133, 46.384337], + [-68.072209, 46.384461], + [-68.072271, 46.384545], + [-68.072306, 46.384591], + [-68.072344, 46.384637], + [-68.072385, 46.384684], + [-68.072426, 46.384734], + [-68.07251, 46.384838], + [-68.072557, 46.384883], + [-68.072604, 46.38493], + [-68.072652, 46.384979], + [-68.072753, 46.385078], + [-68.072804, 46.385128], + [-68.072856, 46.385177], + [-68.072908, 46.385224], + [-68.072956, 46.385273], + [-68.073044, 46.385367], + [-68.07309, 46.385412], + [-68.073135, 46.385454], + [-68.073178, 46.385494], + [-68.073222, 46.385533], + [-68.073265, 46.385572], + [-68.073307, 46.385614], + [-68.073348, 46.385654], + [-68.073387, 46.3857], + [-68.073429, 46.385737], + [-68.073471, 46.385776], + [-68.073511, 46.385822], + [-68.073553, 46.385866], + [-68.07359, 46.385917], + [-68.073633, 46.38596], + [-68.073678, 46.386001], + [-68.073722, 46.386039], + [-68.073766, 46.386076], + [-68.073814, 46.386116], + [-68.073861, 46.386158], + [-68.073908, 46.386203], + [-68.073957, 46.386247], + [-68.074004, 46.386292], + [-68.07405, 46.386334], + [-68.074095, 46.386374], + [-68.074141, 46.386413], + [-68.074187, 46.386455], + [-68.074231, 46.386498], + [-68.074274, 46.386543], + [-68.074322, 46.386587], + [-68.074367, 46.386633], + [-68.074458, 46.386722], + [-68.074503, 46.386772], + [-68.074596, 46.386871], + [-68.074642, 46.386924], + [-68.074688, 46.386977], + [-68.074732, 46.387037], + [-68.074776, 46.387099], + [-68.074819, 46.387152], + [-68.074864, 46.387211], + [-68.074906, 46.387264], + [-68.074947, 46.387317], + [-68.07498, 46.387368], + [-68.075014, 46.38742], + [-68.075047, 46.387471], + [-68.075079, 46.387521], + [-68.075112, 46.387569], + [-68.075145, 46.387616], + [-68.075177, 46.387662], + [-68.075239, 46.387761], + [-68.075277, 46.387809], + [-68.075319, 46.387859], + [-68.075363, 46.387911], + [-68.07541, 46.387963], + [-68.07546, 46.388017], + [-68.075511, 46.38807], + [-68.075608, 46.388172], + [-68.075695, 46.388256], + [-68.075735, 46.388295], + [-68.075767, 46.388338], + [-68.075829, 46.388419], + [-68.075942, 46.38854], + [-68.076012, 46.388639], + [-68.076042, 46.388697], + [-68.076071, 46.388756], + [-68.076109, 46.3888], + [-68.076139, 46.388848], + [-68.076165, 46.388944], + [-68.07616, 46.388991], + [-68.07615, 46.389041], + [-68.076125, 46.389097], + [-68.076089, 46.389152], + [-68.076046, 46.389215], + [-68.075953, 46.389356], + [-68.075909, 46.38943], + [-68.075859, 46.3895], + [-68.075819, 46.389565], + [-68.074111, 46.391494], + [-68.07398, 46.391815], + [-68.074015, 46.392297], + [-68.074114, 46.392366], + [-68.074751, 46.394544], + [-68.075583, 46.395623], + [-68.07575, 46.396128], + [-68.075818, 46.396747], + [-68.076184, 46.397069], + [-68.077211, 46.397621], + [-68.077344, 46.397805], + [-68.07814, 46.398127], + [-68.079962, 46.398474], + [-68.080757, 46.398797], + [-68.081289, 46.399325], + [-68.081493, 46.400678], + [-68.081793, 46.401344], + [-68.082457, 46.402056], + [-68.083187, 46.40256], + [-68.083255, 46.402721], + [-68.08352, 46.402905], + [-68.083247, 46.403008], + [-68.083014, 46.403146], + [-68.082742, 46.403412], + [-68.082552, 46.40366], + [-68.082385, 46.403998], + [-68.082305, 46.404302], + [-68.08229, 46.40455], + [-68.082333, 46.404873], + [-68.082428, 46.405311], + [-68.082571, 46.405844], + [-68.082585, 46.405968], + [-68.082552, 46.406101], + [-68.082433, 46.406396], + [-68.082305, 46.406672], + [-68.08219, 46.407048], + [-68.082071, 46.4074], + [-68.081914, 46.407795], + [-68.081889, 46.407927], + [-68.08185, 46.407873], + [-68.081778, 46.40784], + [-68.081498, 46.407839], + [-68.081314, 46.407854], + [-68.08122, 46.407861], + [-68.08113, 46.407867], + [-68.081042, 46.407871], + [-68.080865, 46.407877], + [-68.080772, 46.407879], + [-68.08068, 46.40788], + [-68.080578, 46.407883], + [-68.080359, 46.407898], + [-68.080245, 46.407908], + [-68.080128, 46.407921], + [-68.079889, 46.407948], + [-68.079763, 46.407957], + [-68.079365, 46.407972], + [-68.079229, 46.407968], + [-68.07884, 46.407959], + [-68.078718, 46.407955], + [-68.078604, 46.40795], + [-68.078312, 46.407948], + [-68.078222, 46.40795], + [-68.078126, 46.407956], + [-68.07784, 46.407971], + [-68.077742, 46.407975], + [-68.077548, 46.407982], + [-68.077366, 46.407988], + [-68.077278, 46.407993], + [-68.077191, 46.408], + [-68.077102, 46.408008], + [-68.076903, 46.408041], + [-68.076802, 46.408062], + [-68.076697, 46.408088], + [-68.076593, 46.408119], + [-68.076391, 46.408194], + [-68.076294, 46.408233], + [-68.076202, 46.408272], + [-68.076109, 46.40831], + [-68.07591, 46.408374], + [-68.075801, 46.408401], + [-68.075573, 46.408452], + [-68.075469, 46.408473], + [-68.075369, 46.408489], + [-68.075279, 46.408499], + [-68.075194, 46.408507], + [-68.075023, 46.408516], + [-68.074932, 46.40852], + [-68.074843, 46.408522], + [-68.074557, 46.408536], + [-68.074464, 46.408542], + [-68.074368, 46.408548], + [-68.074052, 46.40857], + [-68.073941, 46.408577], + [-68.073619, 46.408601], + [-68.073514, 46.408599], + [-68.073416, 46.408602], + [-68.073132, 46.408605], + [-68.072963, 46.408624], + [-68.072891, 46.408636], + [-68.072768, 46.408663], + [-68.072577, 46.408725], + [-68.072506, 46.40875], + [-68.072431, 46.408779], + [-68.072276, 46.408837], + [-68.072107, 46.408895], + [-68.071933, 46.408955], + [-68.071756, 46.409014], + [-68.071579, 46.409072], + [-68.071484, 46.409104], + [-68.071391, 46.409137], + [-68.071303, 46.409165], + [-68.071121, 46.409223], + [-68.071032, 46.409249], + [-68.070864, 46.409299], + [-68.070784, 46.409321], + [-68.070618, 46.409366], + [-68.070531, 46.40939], + [-68.070442, 46.409414], + [-68.070352, 46.409439], + [-68.070172, 46.409481], + [-68.070086, 46.409499], + [-68.069999, 46.409514], + [-68.069823, 46.409541], + [-68.069731, 46.409553], + [-68.069641, 46.409562], + [-68.069552, 46.40957], + [-68.06929, 46.409587], + [-68.069206, 46.409594], + [-68.069051, 46.409602], + [-68.068915, 46.409594], + [-68.068794, 46.409599], + [-68.0686, 46.409608], + [-68.067548, 46.409666], + [-68.067, 46.409676], + [-68.065957, 46.409753], + [-68.065273, 46.409787], + [-68.064516, 46.409842], + [-68.064303, 46.409857], + [-68.064004, 46.409887], + [-68.06352, 46.409881], + [-68.062936, 46.409893], + [-68.062728, 46.409909], + [-68.062216, 46.409906], + [-68.061716, 46.409847], + [-68.061323, 46.409783], + [-68.060917, 46.409737], + [-68.060192, 46.409757], + [-68.059584, 46.409743], + [-68.058919, 46.409701], + [-68.058138, 46.409705], + [-68.05753, 46.409696], + [-68.05696, 46.40968], + [-68.056362, 46.409662], + [-68.055534, 46.409634], + [-68.054756, 46.409654], + [-68.054327, 46.409696], + [-68.05425, 46.409697], + [-68.054141, 46.4097], + [-68.054006, 46.40971], + [-68.053935, 46.409716], + [-68.053863, 46.409721], + [-68.053792, 46.409725], + [-68.053721, 46.409731], + [-68.05357, 46.409741], + [-68.053495, 46.409746], + [-68.053419, 46.409751], + [-68.05334, 46.409756], + [-68.053257, 46.409761], + [-68.053086, 46.409767], + [-68.052994, 46.409766], + [-68.052901, 46.409765], + [-68.052805, 46.409762], + [-68.052608, 46.409756], + [-68.052513, 46.409752], + [-68.052418, 46.409746], + [-68.052319, 46.409737], + [-68.052113, 46.409706], + [-68.052011, 46.409685], + [-68.051908, 46.409661], + [-68.051702, 46.409601], + [-68.051599, 46.409567], + [-68.051498, 46.409529], + [-68.051394, 46.409485], + [-68.051187, 46.409399], + [-68.051089, 46.409357], + [-68.050996, 46.409313], + [-68.050909, 46.409265], + [-68.050826, 46.409214], + [-68.050662, 46.409103], + [-68.050581, 46.409041], + [-68.050504, 46.408976], + [-68.050433, 46.408912], + [-68.050236, 46.40871], + [-68.050171, 46.40864], + [-68.050105, 46.408572], + [-68.05004, 46.408503], + [-68.049974, 46.408432], + [-68.04991, 46.408362], + [-68.049793, 46.408231], + [-68.049739, 46.40817], + [-68.049689, 46.408111], + [-68.049642, 46.408053], + [-68.049559, 46.407941], + [-68.049497, 46.407858], + [-68.049465, 46.407867], + [-68.049358, 46.40789], + [-68.049291, 46.407897], + [-68.049224, 46.407915], + [-68.049156, 46.407942], + [-68.049101, 46.407962], + [-68.048941, 46.408021], + [-68.048749, 46.408037], + [-68.048673, 46.408043], + [-68.048575, 46.40805], + [-68.048503, 46.408033], + [-68.048429, 46.408017], + [-68.048355, 46.408006], + [-68.048287, 46.408001], + [-68.048204, 46.407992], + [-68.048113, 46.407996], + [-68.048023, 46.40801], + [-68.047946, 46.408019], + [-68.047885, 46.408037], + [-68.047807, 46.40806], + [-68.04774, 46.408087], + [-68.047721, 46.408095], + [-68.047615, 46.408148], + [-68.047562, 46.408201], + [-68.047538, 46.408254], + [-68.047528, 46.40833], + [-68.047553, 46.408419], + [-68.04755, 46.408485], + [-68.047618, 46.408576], + [-68.047664, 46.408618], + [-68.04771, 46.408656], + [-68.04776, 46.408694], + [-68.047786, 46.408713], + [-68.04785, 46.408764], + [-68.047965, 46.408852], + [-68.047997, 46.408895], + [-68.048027, 46.408945], + [-68.048057, 46.408999], + [-68.048091, 46.409054], + [-68.048115, 46.40911], + [-68.04814, 46.40916], + [-68.048175, 46.409202], + [-68.048214, 46.409244], + [-68.048224, 46.409292], + [-68.048243, 46.409341], + [-68.048259, 46.409387], + [-68.048279, 46.409431], + [-68.048322, 46.409486], + [-68.048369, 46.409524], + [-68.048404, 46.409563], + [-68.04843, 46.409617], + [-68.048453, 46.409661], + [-68.048485, 46.409708], + [-68.048499, 46.409759], + [-68.048488, 46.409804], + [-68.048494, 46.409868], + [-68.048511, 46.409916], + [-68.048543, 46.409992], + [-68.048552, 46.410037], + [-68.048573, 46.410086], + [-68.048595, 46.410135], + [-68.048622, 46.410189], + [-68.048635, 46.410237], + [-68.048662, 46.410293], + [-68.048648, 46.410347], + [-68.048653, 46.410398], + [-68.048697, 46.410451], + [-68.048717, 46.410504], + [-68.048741, 46.410553], + [-68.048749, 46.410604], + [-68.04874, 46.410649], + [-68.04873, 46.410705], + [-68.048717, 46.41075], + [-68.048716, 46.410801], + [-68.048713, 46.410853], + [-68.048721, 46.410909], + [-68.048726, 46.410954], + [-68.048712, 46.411005], + [-68.048713, 46.411052], + [-68.04869, 46.411104], + [-68.048685, 46.411152], + [-68.048682, 46.411203], + [-68.048689, 46.41125], + [-68.048695, 46.411304], + [-68.048708, 46.41136], + [-68.048679, 46.411413], + [-68.048703, 46.411471], + [-68.048747, 46.411523], + [-68.048759, 46.41158], + [-68.048859, 46.411721], + [-68.049006, 46.411888], + [-68.049182, 46.411978], + [-68.049406, 46.41205], + [-68.049715, 46.412188], + [-68.04992, 46.412321], + [-68.050248, 46.412473], + [-68.050501, 46.412678], + [-68.050624, 46.412792], + [-68.050652, 46.412843], + [-68.05072, 46.412968], + [-68.05082, 46.413073], + [-68.050981, 46.413211], + [-68.051138, 46.413311], + [-68.05121, 46.413444], + [-68.051215, 46.413554], + [-68.051196, 46.413682], + [-68.051153, 46.41382], + [-68.051138, 46.413915], + [-68.051167, 46.413987], + [-68.051278, 46.414167], + [-68.051405, 46.414372], + [-68.051438, 46.414486], + [-68.051429, 46.414705], + [-68.051429, 46.414886], + [-68.05141, 46.415072], + [-68.051376, 46.415229], + [-68.051395, 46.415348], + [-68.051472, 46.415452], + [-68.05161, 46.415557], + [-68.051819, 46.415657], + [-68.052081, 46.415767], + [-68.052276, 46.415862], + [-68.052504, 46.416038], + [-68.052756, 46.416276], + [-68.052923, 46.416399], + [-68.053009, 46.416542], + [-68.053289, 46.417042], + [-68.053361, 46.417194], + [-68.053351, 46.417294], + [-68.053289, 46.417375], + [-68.053061, 46.417565], + [-68.052718, 46.417822], + [-68.05248, 46.418027], + [-68.052347, 46.418179], + [-68.052281, 46.418294], + [-68.052266, 46.418393], + [-68.052328, 46.41857], + [-68.052433, 46.418827], + [-68.052485, 46.418993], + [-68.052461, 46.41916], + [-68.052352, 46.419298], + [-68.052247, 46.419455], + [-68.052133, 46.419712], + [-68.052109, 46.419869], + [-68.052143, 46.419997], + [-68.0522, 46.420102], + [-68.052361, 46.42023], + [-68.052414, 46.420387], + [-68.0524, 46.42054], + [-68.052328, 46.420644], + [-68.052214, 46.420735], + [-68.051947, 46.420797], + [-68.051762, 46.420835], + [-68.051476, 46.420944], + [-68.051196, 46.421125], + [-68.051015, 46.421263], + [-68.05091, 46.421387], + [-68.050801, 46.421544], + [-68.050682, 46.421687], + [-68.050524, 46.42182], + [-68.050325, 46.421925], + [-68.050063, 46.422048], + [-68.049858, 46.422101], + [-68.049677, 46.422105], + [-68.049439, 46.422029], + [-68.049254, 46.422006], + [-68.049078, 46.422053], + [-68.048906, 46.422158], + [-68.048711, 46.422248], + [-68.048597, 46.422267], + [-68.048735, 46.421948], + [-68.048878, 46.421411], + [-68.049049, 46.420811], + [-68.049006, 46.42074], + [-68.04883, 46.420687], + [-68.04879, 46.420684], + [-68.048949, 46.420326], + [-68.049511, 46.420531], + [-68.049942, 46.42092], + [-68.050305, 46.420989], + [-68.050768, 46.420852], + [-68.051, 46.420646], + [-68.0509, 46.420349], + [-68.050901, 46.41964], + [-68.051033, 46.419343], + [-68.051099, 46.419069], + [-68.051429, 46.418406], + [-68.051495, 46.418063], + [-68.050834, 46.417697], + [-68.050669, 46.417309], + [-68.050735, 46.416874], + [-68.050801, 46.416691], + [-68.05081, 46.416522], + [-68.050834, 46.416074], + [-68.050768, 46.415548], + [-68.050862, 46.415297], + [-68.050967, 46.415023], + [-68.050702, 46.414657], + [-68.050372, 46.41324], + [-68.050207, 46.413011], + [-68.049877, 46.412783], + [-68.049018, 46.412554], + [-68.048291, 46.412485], + [-68.047729, 46.412279], + [-68.047332, 46.412302], + [-68.046539, 46.412714], + [-68.045382, 46.412713], + [-68.04492, 46.412873], + [-68.044688, 46.41301], + [-68.04455, 46.41335], + [-68.044286, 46.413998], + [-68.044231, 46.414133], + [-68.044093, 46.414473], + [-68.044027, 46.414519], + [-68.044027, 46.414633], + [-68.043928, 46.414656], + [-68.043928, 46.414862], + [-68.043795, 46.415113], + [-68.043795, 46.415913], + [-68.043564, 46.416439], + [-68.043563, 46.416958], + [-68.042634, 46.41717], + [-68.042248, 46.417249], + [-68.042187, 46.417261], + [-68.041982, 46.417275], + [-68.042001, 46.417494], + [-68.042001, 46.417656], + [-68.042025, 46.417918], + [-68.042077, 46.41806], + [-68.042187, 46.418236], + [-68.04232, 46.418393], + [-68.042063, 46.418631], + [-68.04192, 46.418827], + [-68.04173, 46.419117], + [-68.041587, 46.419379], + [-68.041487, 46.41955], + [-68.041335, 46.419721], + [-68.040978, 46.420069], + [-68.04045, 46.420673], + [-68.040404, 46.420729], + [-68.039565, 46.421734], + [-68.039146, 46.422215], + [-68.038104, 46.423305], + [-68.037509, 46.42398], + [-68.037109, 46.424499], + [-68.036452, 46.425337], + [-68.036081, 46.425708], + [-68.035696, 46.426131], + [-68.03542, 46.426507], + [-68.034882, 46.427131], + [-68.034335, 46.427659], + [-68.033987, 46.428011], + [-68.033778, 46.428254], + [-68.033507, 46.428725], + [-68.033369, 46.428835], + [-68.033221, 46.428858], + [-68.033007, 46.428882], + [-68.032274, 46.428811], + [-68.03195, 46.428825], + [-68.031689, 46.428873], + [-68.031441, 46.429015], + [-68.030794, 46.429567], + [-68.030304, 46.429929], + [-68.029899, 46.43011], + [-68.029423, 46.430267], + [-68.028914, 46.430381], + [-68.028186, 46.430491], + [-68.02782, 46.430519], + [-68.02751, 46.430495], + [-68.027144, 46.430429], + [-68.026906, 46.430415], + [-68.026554, 46.430476], + [-68.025764, 46.430952], + [-68.025431, 46.431109], + [-68.025231, 46.431152], + [-68.02465, 46.431209], + [-68.024303, 46.431262], + [-68.023932, 46.431304], + [-68.023165, 46.4313], + [-68.022475, 46.431233], + [-68.022023, 46.431162], + [-68.021609, 46.431024], + [-68.020962, 46.43079], + [-68.020443, 46.430738], + [-68.020006, 46.430771], + [-68.019801, 46.430838], + [-68.019677, 46.430943], + [-68.019453, 46.431257], + [-68.019368, 46.431476], + [-68.01932, 46.431861], + [-68.019287, 46.432404], + [-68.019244, 46.432823], + [-68.019168, 46.43307], + [-68.019001, 46.433579], + [-68.018954, 46.433879], + [-68.018954, 46.434141], + [-68.019025, 46.434759], + [-68.019035, 46.435002], + [-68.018911, 46.435192], + [-68.018683, 46.435383], + [-68.01844, 46.435521], + [-68.018126, 46.435687], + [-68.017774, 46.435778], + [-68.017131, 46.435911], + [-68.016646, 46.435973], + [-68.016132, 46.436025], + [-68.015865, 46.43604], + [-68.015551, 46.436111], + [-68.015185, 46.436216], + [-68.014804, 46.436335], + [-68.013605, 46.436625], + [-68.012986, 46.436749], + [-68.012534, 46.436801], + [-68.01221, 46.436853], + [-68.01193, 46.436925], + [-68.01162, 46.437058], + [-68.011301, 46.437258], + [-68.01024, 46.437967], + [-68.009845, 46.438252], + [-68.009555, 46.4384], + [-68.009169, 46.438548], + [-68.008589, 46.438743], + [-68.008184, 46.438857], + [-68.007856, 46.438933], + [-68.00749, 46.438976], + [-68.007014, 46.438985], + [-68.006504, 46.438952], + [-68.005105, 46.438609], + [-68.004463, 46.438462], + [-68.003587, 46.438267], + [-68.002978, 46.438067], + [-68.00216, 46.437677], + [-68.001765, 46.43752], + [-68.00155, 46.437462], + [-68.001217, 46.437443], + [-68.000813, 46.437458], + [-68.000584, 46.437448], + [-68.000289, 46.437382], + [-68.000009, 46.437348], + [-67.999652, 46.437367], + [-67.999385, 46.437396], + [-67.999119, 46.437467], + [-67.999104, 46.437478], + [-67.998991, 46.437564], + [-67.998824, 46.437691], + [-67.998467, 46.437891], + [-67.998019, 46.438148], + [-67.997562, 46.438433], + [-67.997101, 46.438733], + [-67.996777, 46.438962], + [-67.996468, 46.439133], + [-67.996239, 46.43919], + [-67.995987, 46.439199], + [-67.995621, 46.439176], + [-67.995178, 46.439157], + [-67.994631, 46.439147], + [-67.994407, 46.439128], + [-67.99416, 46.439095], + [-67.993679, 46.438957], + [-67.99327, 46.438819], + [-67.992961, 46.438676], + [-67.992646, 46.438467], + [-67.992309, 46.438272], + [-67.991923, 46.43811], + [-67.991623, 46.438019], + [-67.991152, 46.437972], + [-67.990871, 46.437929], + [-67.990586, 46.437872], + [-67.989943, 46.437634], + [-67.989391, 46.437491], + [-67.988949, 46.437424], + [-67.98853, 46.437443], + [-67.988443, 46.437459], + [-67.987683, 46.43689], + [-67.987586, 46.436658], + [-67.984844, 46.436583], + [-67.983605, 46.436456], + [-67.982106, 46.436157], + [-67.981586, 46.435882], + [-67.980779, 46.435056], + [-67.98013, 46.434729], + [-67.977389, 46.434411], + [-67.975926, 46.433706], + [-67.97538, 46.433109], + [-67.974442, 46.432249], + [-67.973695, 46.431846], + [-67.972067, 46.431237], + [-67.970833, 46.4306], + [-67.970575, 46.43033], + [-67.970137, 46.429191], + [-67.970087, 46.428423], + [-67.969896, 46.42809], + [-67.969843, 46.4275], + [-67.969928, 46.427162], + [-67.969897, 46.427168], + [-67.969762, 46.427202], + [-67.969616, 46.427254], + [-67.969353, 46.427365], + [-67.968756, 46.427629], + [-67.968566, 46.427723], + [-67.968303, 46.427869], + [-67.967925, 46.428058], + [-67.967651, 46.428186], + [-67.96756, 46.42822], + [-67.967437, 46.428256], + [-67.967304, 46.428283], + [-67.967167, 46.428296], + [-67.966663, 46.428304], + [-67.966368, 46.428317], + [-67.966086, 46.428332], + [-67.965876, 46.428338], + [-67.965791, 46.428329], + [-67.965732, 46.428315], + [-67.965655, 46.428286], + [-67.965583, 46.428243], + [-67.965359, 46.428065], + [-67.965132, 46.427897], + [-67.964913, 46.427726], + [-67.964607, 46.426459], + [-67.962718, 46.424832], + [-67.961779, 46.425093], + [-67.961797, 46.424935], + [-67.961833, 46.424719], + [-67.961876, 46.424542], + [-67.961926, 46.424356], + [-67.961946, 46.424266], + [-67.961959, 46.424168], + [-67.961958, 46.424062], + [-67.961946, 46.423972], + [-67.961903, 46.423831], + [-67.961833, 46.423694], + [-67.96171, 46.423442], + [-67.961605, 46.423167], + [-67.961543, 46.423035], + [-67.961459, 46.422888], + [-67.961281, 46.422609], + [-67.961178, 46.422415], + [-67.961096, 46.422217], + [-67.96088, 46.421619], + [-67.960716, 46.421204], + [-67.960648, 46.420998], + [-67.960611, 46.420791], + [-67.96058, 46.420466], + [-67.960538, 46.420248], + [-67.960473, 46.420042], + [-67.96038, 46.419772], + [-67.960333, 46.419612], + [-67.960296, 46.419438], + [-67.960285, 46.419321], + [-67.960287, 46.419206], + [-67.960303, 46.419097], + [-67.960325, 46.419009], + [-67.960349, 46.418939], + [-67.960526, 46.418547], + [-67.96068, 46.4181], + [-67.960794, 46.41783], + [-67.96092, 46.41764], + [-67.961188, 46.417295], + [-67.961747, 46.416625], + [-67.96189, 46.416467], + [-67.961945, 46.416413], + [-67.962043, 46.416322], + [-67.962249, 46.416113], + [-67.962349, 46.416016], + [-67.962444, 46.415905], + [-67.962528, 46.415783], + [-67.962562, 46.415717], + [-67.962595, 46.415632], + [-67.962619, 46.415539], + [-67.962626, 46.415467], + [-67.962625, 46.415376], + [-67.962606, 46.415269], + [-67.962572, 46.415153], + [-67.962541, 46.415073], + [-67.962414, 46.414795], + [-67.962347, 46.41467], + [-67.962231, 46.414485], + [-67.962092, 46.414259], + [-67.962052, 46.414175], + [-67.962003, 46.414043], + [-67.96196, 46.413888], + [-67.961898, 46.413589], + [-67.961892, 46.413518], + [-67.961894, 46.413434], + [-67.961905, 46.413339], + [-67.961924, 46.41324], + [-67.961963, 46.413097], + [-67.961785, 46.413006], + [-67.961529, 46.412863], + [-67.961401, 46.412799], + [-67.961213, 46.412722], + [-67.960869, 46.412586], + [-67.960471, 46.412416], + [-67.960266, 46.412341], + [-67.960063, 46.412289], + [-67.959507, 46.41216], + [-67.959385, 46.412121], + [-67.959299, 46.412086], + [-67.959221, 46.412043], + [-67.959158, 46.411999], + [-67.959099, 46.411947], + [-67.958459, 46.411269], + [-67.958251, 46.411056], + [-67.95821, 46.411009], + [-67.958096, 46.41091], + [-67.957926, 46.410772], + [-67.957822, 46.410673], + [-67.957679, 46.410505], + [-67.9576, 46.410425], + [-67.957481, 46.410345], + [-67.957381, 46.410311], + [-67.957311, 46.410301], + [-67.957099, 46.410301], + [-67.956965, 46.410309], + [-67.956678, 46.410352], + [-67.956526, 46.410369], + [-67.95639, 46.410371], + [-67.9561, 46.410352], + [-67.955881, 46.410333], + [-67.955444, 46.41031], + [-67.955002, 46.41029], + [-67.954573, 46.410252], + [-67.954351, 46.410241], + [-67.953479, 46.410242], + [-67.953257, 46.410232], + [-67.953042, 46.410215], + [-67.952805, 46.410201], + [-67.952597, 46.410198], + [-67.95238, 46.410213], + [-67.951977, 46.410266], + [-67.951294, 46.410307], + [-67.95085, 46.410326], + [-67.950633, 46.410329], + [-67.949994, 46.410321], + [-67.94949, 46.410332], + [-67.949117, 46.410331], + [-67.949022, 46.410334], + [-67.948881, 46.41032], + [-67.948805, 46.410301], + [-67.948686, 46.41025], + [-67.948616, 46.410195], + [-67.948561, 46.410136], + [-67.948377, 46.409907], + [-67.948306, 46.409805], + [-67.948037, 46.409458], + [-67.947659, 46.408924], + [-67.94752, 46.408759], + [-67.947213, 46.408445], + [-67.947073, 46.408279], + [-67.946951, 46.408106], + [-67.94683, 46.407922], + [-67.946563, 46.407578], + [-67.946273, 46.407263], + [-67.946134, 46.4071], + [-67.946002, 46.406932], + [-67.945829, 46.406692], + [-67.94569, 46.406524], + [-67.945534, 46.406362], + [-67.945395, 46.406222], + [-67.945297, 46.406102], + [-67.945257, 46.406045], + [-67.945218, 46.405978], + [-67.945179, 46.40589], + [-67.945136, 46.405748], + [-67.945049, 46.40535], + [-67.944898, 46.404947], + [-67.944796, 46.404742], + [-67.944765, 46.404673], + [-67.944593, 46.404194], + [-67.944292, 46.403392], + [-67.944216, 46.403182], + [-67.944018, 46.402537], + [-67.943988, 46.402351], + [-67.943972, 46.402192], + [-67.943956, 46.401814], + [-67.943962, 46.401607], + [-67.943974, 46.401456], + [-67.944037, 46.401019], + [-67.944077, 46.400649], + [-67.944089, 46.400431], + [-67.944081, 46.400226], + [-67.944059, 46.400082], + [-67.944015, 46.399945], + [-67.943979, 46.399877], + [-67.943895, 46.399768], + [-67.943784, 46.399661], + [-67.943361, 46.399292], + [-67.943018, 46.399029], + [-67.942667, 46.398764], + [-67.942496, 46.398626], + [-67.942175, 46.398343], + [-67.942019, 46.398188], + [-67.941885, 46.398014], + [-67.941761, 46.397841], + [-67.941496, 46.397504], + [-67.941359, 46.397337], + [-67.941209, 46.397189], + [-67.941044, 46.397061], + [-67.940866, 46.396932], + [-67.94069, 46.396786], + [-67.940529, 46.396638], + [-67.940194, 46.396368], + [-67.939849, 46.396083], + [-67.939623, 46.395929], + [-67.939494, 46.395855], + [-67.939364, 46.395791], + [-67.939026, 46.39564], + [-67.938578, 46.395406], + [-67.938399, 46.395299], + [-67.938283, 46.395216], + [-67.93816, 46.395103], + [-67.937912, 46.394842], + [-67.937868, 46.394791], + [-67.937792, 46.394671], + [-67.93776, 46.394607], + [-67.937731, 46.394532], + [-67.937707, 46.394448], + [-67.937693, 46.394371], + [-67.937689, 46.39428], + [-67.937697, 46.394208], + [-67.937714, 46.394142], + [-67.937738, 46.394077], + [-67.937806, 46.39395], + [-67.937848, 46.393886], + [-67.93793, 46.393788], + [-67.938043, 46.393682], + [-67.938151, 46.393596], + [-67.938263, 46.393493], + [-67.938353, 46.393383], + [-67.938463, 46.393214], + [-67.938572, 46.393013], + [-67.938666, 46.39282], + [-67.938821, 46.392575], + [-67.938849, 46.392517], + [-67.938868, 46.392451], + [-67.938873, 46.3924], + [-67.938863, 46.392337], + [-67.938828, 46.392261], + [-67.938777, 46.39221], + [-67.938662, 46.392133], + [-67.938292, 46.391915], + [-67.937916, 46.391711], + [-67.937794, 46.391651], + [-67.937587, 46.391574], + [-67.937165, 46.391449], + [-67.936969, 46.391387], + [-67.936541, 46.391267], + [-67.936124, 46.391155], + [-67.935918, 46.391096], + [-67.9355, 46.391006], + [-67.935094, 46.390924], + [-67.934867, 46.390864], + [-67.934582, 46.390798], + [-67.934396, 46.390763], + [-67.934146, 46.39073], + [-67.933858, 46.390704], + [-67.933643, 46.390704], + [-67.933201, 46.390735], + [-67.932986, 46.390765], + [-67.932773, 46.390799], + [-67.932577, 46.390816], + [-67.932345, 46.390815], + [-67.931831, 46.390805], + [-67.931784, 46.390802], + [-67.930105, 46.390685], + [-67.930131, 46.390384], + [-67.929603, 46.38995], + [-67.928612, 46.389653], + [-67.928315, 46.389447], + [-67.928249, 46.389287], + [-67.928414, 46.389035], + [-67.928843, 46.388281], + [-67.928843, 46.387893], + [-67.929141, 46.387253], + [-67.929306, 46.385584], + [-67.929565, 46.384889], + [-67.928845, 46.384599], + [-67.928878, 46.384369], + [-67.928746, 46.384141], + [-67.928153, 46.383452], + [-67.927297, 46.381824], + [-67.927, 46.381411], + [-67.925516, 46.380309], + [-67.924989, 46.379689], + [-67.924692, 46.379185], + [-67.924597, 46.376227], + [-67.924465, 46.376181], + [-67.924367, 46.375791], + [-67.923855, 46.37501], + [-67.922783, 46.374148], + [-67.91955, 46.372447], + [-67.918661, 46.371735], + [-67.918628, 46.371528], + [-67.918397, 46.371207], + [-67.918365, 46.370428], + [-67.918267, 46.370358], + [-67.917872, 46.369097], + [-67.918006, 46.36825], + [-67.917811, 46.366507], + [-67.917516, 46.365613], + [-67.917848, 46.364283], + [-67.917749, 46.364077], + [-67.916431, 46.363204], + [-67.915904, 46.362584], + [-67.915883, 46.362453], + [-67.915826, 46.362441], + [-67.915792, 46.362389], + [-67.915639, 46.361988], + [-67.915622, 46.361918], + [-67.915613, 46.361847], + [-67.915611, 46.361774], + [-67.91562, 46.361704], + [-67.915681, 46.361507], + [-67.915699, 46.361415], + [-67.915709, 46.361312], + [-67.915706, 46.361222], + [-67.915697, 46.361149], + [-67.915659, 46.36098], + [-67.915559, 46.360711], + [-67.915376, 46.360096], + [-67.915296, 46.359904], + [-67.915251, 46.35975], + [-67.915248, 46.359663], + [-67.915262, 46.359595], + [-67.915348, 46.35928], + [-67.915384, 46.359057], + [-67.91539, 46.358919], + [-67.915419, 46.35863], + [-67.915411, 46.35856], + [-67.915395, 46.358496], + [-67.915345, 46.358358], + [-67.915311, 46.358284], + [-67.915238, 46.358157], + [-67.915211, 46.358094], + [-67.914966, 46.357651], + [-67.914914, 46.357517], + [-67.914856, 46.357296], + [-67.914792, 46.357074], + [-67.914711, 46.356931], + [-67.914624, 46.356824], + [-67.914429, 46.356606], + [-67.914123, 46.356285], + [-67.914016, 46.356193], + [-67.913847, 46.356052], + [-67.913737, 46.355976], + [-67.913483, 46.355827], + [-67.91328, 46.355721], + [-67.912957, 46.355583], + [-67.912601, 46.355457], + [-67.912467, 46.355404], + [-67.91239, 46.355366], + [-67.912327, 46.355328], + [-67.912268, 46.355285], + [-67.912084, 46.355131], + [-67.911847, 46.354963], + [-67.911825, 46.354943], + [-67.910552, 46.354521], + [-67.910251, 46.354339], + [-67.910013, 46.354014], + [-67.909743, 46.353785], + [-67.909046, 46.351747], + [-67.908793, 46.350555], + [-67.908621, 46.350562], + [-67.908411, 46.350578], + [-67.908423, 46.351138], + [-67.908426, 46.351853], + [-67.90843, 46.35256], + [-67.908449, 46.358248], + [-67.908449, 46.360026], + [-67.908448, 46.361785], + [-67.908448, 46.363549], + [-67.908445, 46.36422], + [-67.908438, 46.365313], + [-67.908439, 46.366042], + [-67.908486, 46.366452], + [-67.908522, 46.367046], + [-67.908672, 46.368735], + [-67.908802, 46.370411], + [-67.908905, 46.37173], + [-67.906073, 46.371725], + [-67.903301, 46.371735], + [-67.900528, 46.371744], + [-67.897755, 46.371736], + [-67.895004, 46.371745], + [-67.893652, 46.371745], + [-67.892637, 46.371745], + [-67.89221, 46.371745], + [-67.889437, 46.371741], + [-67.887093, 46.371736], + [-67.885862, 46.371742], + [-67.884626, 46.371743], + [-67.883389, 46.371745], + [-67.882152, 46.371746], + [-67.881761, 46.371747], + [-67.880909, 46.371747], + [-67.879657, 46.371753], + [-67.878414, 46.371759], + [-67.877178, 46.37176], + [-67.876346, 46.371761], + [-67.874467, 46.371882], + [-67.872304, 46.371888], + [-67.86814, 46.37191], + [-67.866509, 46.371921], + [-67.860426, 46.371986], + [-67.860014, 46.371991], + [-67.854906, 46.372046], + [-67.852721, 46.372067] + ] + ] + } +} diff --git a/worker/README.md b/worker/README.md index 2fc2fee75e8..2395811f580 100644 --- a/worker/README.md +++ b/worker/README.md @@ -1,5 +1,5 @@ To update the protocol buffer definitions, run this from one directory above: -``` +```bash protoc -I worker worker/payload.proto --gofast_out=plugins=grpc:worker ``` From 644ad1264544610da8cf2a615a86818768858afa Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:40:30 -0500 Subject: [PATCH 02/16] more fixes --- graphql/e2e/common/error_test.yaml | 4 +- graphql/schema/gqlschema_test.yml | 3174 ++++++++++++++---------- systest/ldbc/test_cases.yaml | 3627 +++++----------------------- types/scalar_types_test.go | 2 +- 4 files changed, 2468 insertions(+), 4339 deletions(-) diff --git a/graphql/e2e/common/error_test.yaml b/graphql/e2e/common/error_test.yaml index 6d10599d988..a1cf9db8b65 100644 --- a/graphql/e2e/common/error_test.yaml +++ b/graphql/e2e/common/error_test.yaml @@ -9,8 +9,8 @@ [ { "message": - Cannot query field "getAuthorszzz" on type "Query". Did you mean "getAuthor" or - "getauthor1"/?, + 'Cannot query field "getAuthorszzz" on type "Query". Did you mean "getAuthor" or + "getauthor1"?', "locations": [{ "line": 2, "column": 3 }], }, ] diff --git a/graphql/schema/gqlschema_test.yml b/graphql/schema/gqlschema_test.yml index 19fc92afa61..74315cf6fea 100644 --- a/graphql/schema/gqlschema_test.yml +++ b/graphql/schema/gqlschema_test.yml @@ -6,10 +6,22 @@ invalid_schemas: id2: ID! id3: ID! } - errlist: [ - {"message":"Fields id1, id2 and id3 are listed as IDs for type P, but a type can have only one ID field. Pick a single field as the ID for type P.", "locations":[{"line":2, "column":3}, {"line":3, "column":3}, {"line":4, "column":3}]}, - {"message":"Type P; is invalid, a type must have atleast one field that is not of ID! type and doesn't have @custom/@lambda directive.", "locations":[{"line":1, "column":6}]} - ] + errlist: + [ + { + "message": + "Fields id1, id2 and id3 are listed as IDs for type P, but a type can have only one ID + field. Pick a single field as the ID for type P.", + "locations": + [{ "line": 2, "column": 3 }, { "line": 3, "column": 3 }, { "line": 4, "column": 3 }], + }, + { + "message": + "Type P; is invalid, a type must have atleast one field that is not of ID! type and + doesn't have @custom/@lambda directive.", + "locations": [{ "line": 1, "column": 6 }], + }, + ] - name: Geo field with invalid argument in @search input: | @@ -18,22 +30,33 @@ invalid_schemas: name: String! location: Point @search(by: [int]) } - errlist: [ - {"message":"Type Hotel; Field location: has the @search directive but the argument int doesn't apply to field type Point. Search by int applies to fields of type Int. Fields of type Point are searchable by just @search.", "locations":[ { "line": 4, "column":20}]}, - ] + errlist: + [ + { + "message": + "Type Hotel; Field location: has the @search directive but the argument int doesn't + apply to field type Point. Search by int applies to fields of type Int. Fields of type + Point are searchable by just @search.", + "locations": [{ "line": 4, "column": 20 }], + }, + ] - - - name: UID as a field name + - name: UID as a field name input: | type P { uid: String } - errlist: [ - {"message":"Type P; Field uid: uid is a reserved keyword and you cannot declare a field with this name.", "locations": [{"line":2, "column": 3}]}, - ] + errlist: + [ + { + "message": + "Type P; Field uid: uid is a reserved keyword and you cannot declare a field with this + name.", + "locations": [{ "line": 2, "column": 3 }], + }, + ] - - - name: Query, Mutation in initial schema + - name: Query, Mutation in initial schema input: | type Query { getAuthor(id: ID): Author! @@ -41,39 +64,52 @@ invalid_schemas: type Mutation { getAuthor(id: ID): Author! } - errlist: [ - {"message": GraphQL Query and Mutation types are only allowed to have fields - with @custom/@lambda directive. Other fields are built automatically for you. Found Query getAuthor - without @custom/@lambda., "locations":[{"line":1, "column":6}]}, - {"message":GraphQL Query and Mutation types are only allowed to have fields with - @custom/@lambda directive. Other fields are built automatically for you. Found Mutation getAuthor - without @custom/@lambda., "locations":[{"line":4, "column":6}]}, - ] + errlist: + [ + { + "message": + GraphQL Query and Mutation types are only allowed to have fields with @custom/@lambda + directive. Other fields are built automatically for you. Found Query getAuthor without + @custom/@lambda., + "locations": [{ "line": 1, "column": 6 }], + }, + { + "message": + GraphQL Query and Mutation types are only allowed to have fields with @custom/@lambda + directive. Other fields are built automatically for you. Found Mutation getAuthor + without @custom/@lambda., + "locations": [{ "line": 4, "column": 6 }], + }, + ] - - - name: No ID list of any kind + - name: No ID list of any kind input: | type A { f: [ID] name: String } - errlist: [ - {"message": "Type A; Field f: ID lists are invalid.", "locations": [{"line":2, "column": 3}]} - ] - + errlist: + [ + { + "message": "Type A; Field f: ID lists are invalid.", + "locations": [{ "line": 2, "column": 3 }], + }, + ] - - - name: No nested list of any kind + - name: No nested list of any kind input: | type A { f: [[String]] } - errlist: [ - {"message": "Type A; Field f: Nested lists are invalid.", "locations": [{"line":2, "column": 3}]} - ] + errlist: + [ + { + "message": "Type A; Field f: Nested lists are invalid.", + "locations": [{ "line": 2, "column": 3 }], + }, + ] - - - name: Enum indexes clash trigram and regexp + - name: Enum indexes clash trigram and regexp input: | type T { f: E @search(by: ["trigram", "regexp"]) @@ -81,13 +117,17 @@ invalid_schemas: enum E { A } - errlist: [ - {"message": "Type T; Field f: the argument to @search 'trigram' is the same as the index 'regexp' provided before and shouldn't be used together", - "locations": [{"line": 2, "column": 9}]} - ] + errlist: + [ + { + "message": + "Type T; Field f: the argument to @search 'trigram' is the same as the index 'regexp' + provided before and shouldn't be used together", + "locations": [{ "line": 2, "column": 9 }], + }, + ] - - - name: Enum indexes clash hash and exact + - name: Enum indexes clash hash and exact input: | type T { f: E @search(by: ["hash", "exact"]) @@ -95,33 +135,40 @@ invalid_schemas: enum E { A } - errlist: [ - {"message": "Type T; Field f: the arguments 'hash' and 'exact' can't be used together as arguments to @search.", "locations": [{"line": 2, "column": 9}]} - ] + errlist: + [ + { + "message": + "Type T; Field f: the arguments 'hash' and 'exact' can't be used together as arguments + to @search.", + "locations": [{ "line": 2, "column": 9 }], + }, + ] - - - name: HNSW index options malformed + - name: HNSW index options malformed input: | type T { f: [Float!] @embedding @search(by: ["hnsw(metric:dotproduct)"]) } - errlist: [ - {"message": "Type T; Field f: has the @search directive but the argument 'hnsw(metric:dotproduct)' with search options is malformed. Search options are comma-separated key-value pairs in YAML format => ", - "locations": [{"line": 2, "column": 27}]} - ] + errlist: + [ + { + "message": + "Type T; Field f: has the @search directive but the argument 'hnsw(metric:dotproduct)' + with search options is malformed. Search options are comma-separated key-value pairs in + YAML format => ", + "locations": [{ "line": 2, "column": 27 }], + }, + ] - - - name: Reference type that is not in input schema + - name: Reference type that is not in input schema input: | type T { f: Author } - errlist: [ - {"message": Undefined type Author., "locations": [{"line": 2, "column": 8}]} - ] + errlist: [{ "message": Undefined type Author., "locations": [{ "line": 2, "column": 8 }] }] - - - name: Unsupported definitions in initial schema + - name: Unsupported definitions in initial schema input: | scalar Int interface P { @@ -131,54 +178,56 @@ invalid_schemas: input U { x: X! } - errlist: [ - {"message":"You can't add scalar definitions. Only type, interface, union, input and enums are allowed in initial schema.", "locations":[{"line":1, "column":8}]} - ] + errlist: + [ + { + "message": + "You can't add scalar definitions. Only type, interface, union, input and enums are + allowed in initial schema.", + "locations": [{ "line": 1, "column": 8 }], + }, + ] - - - name: union members can't be non-object types - Interface + - name: union members can't be non-object types - Interface input: | interface I { f: String } union U = I - errlist: [ - {"message": UNION type \"I\" must be OBJECT., "locations":[{"line":4, "column":7}]} - ] + errlist: + [{ "message": UNION type "I" must be OBJECT., "locations": [{ "line": 4, "column": 7 }] }] - - - name: union members can't be non-object types - Scalar + - name: union members can't be non-object types - Scalar input: | union U = String - errlist: [ - {"message": UNION type \"String\" must be OBJECT., "locations":[{"line":1, "column":7}]} - ] + errlist: + [ + { + "message": UNION type "String" must be OBJECT., + "locations": [{ "line": 1, "column": 7 }], + }, + ] - - - name: union members can't be non-object types - Enum + - name: union members can't be non-object types - Enum input: | enum E { E1 E2 } union U = E - errlist: [ - {"message": UNION type \"E\" must be OBJECT., "locations":[{"line":5, "column":7}]} - ] + errlist: + [{ "message": UNION type "E" must be OBJECT., "locations": [{ "line": 5, "column": 7 }] }] - - - name: union members can't be non-object types - Input Object + - name: union members can't be non-object types - Input Object input: | input I { f: String } union U = I - errlist: [ - {"message": UNION type \"I\" must be OBJECT., "locations":[{"line":4, "column":7}]} - ] + errlist: + [{ "message": UNION type "I" must be OBJECT., "locations": [{ "line": 4, "column": 7 }] }] - - - name: "union can't be used with @dgraph(type: ...)" + - name: "union can't be used with @dgraph(type: ...)" input: | type X { f1: String @@ -187,12 +236,16 @@ invalid_schemas: f2: Int } union U @dgraph(type: "U") = X | Y - errlist: [ - {"message":"Type U; has the @dgraph directive, but it is not applicable on types of UNION kind.", "locations":[{"line":7, "column":10}]} - ] + errlist: + [ + { + "message": + "Type U; has the @dgraph directive, but it is not applicable on types of UNION kind.", + "locations": [{ "line": 7, "column": 10 }], + }, + ] - - - name: union can't be used with @withSubscription + - name: union can't be used with @withSubscription input: | type X { f1: String @@ -201,12 +254,17 @@ invalid_schemas: f2: Int } union U @withSubscription = X | Y - errlist: [ - { "message": "Type U; has the @withSubscription directive, but it is not applicable on types of UNION kind.", "locations":[{"line":7, "column":10}]} - ] + errlist: + [ + { + "message": + "Type U; has the @withSubscription directive, but it is not applicable on types of UNION + kind.", + "locations": [{ "line": 7, "column": 10 }], + }, + ] - - - name: union can't be used with @secret + - name: union can't be used with @secret input: | type X { f1: String @@ -215,12 +273,16 @@ invalid_schemas: f2: Int } union U @secret(field: "f2") = X | Y - errlist: [ - { "message": "Type U; has the @secret directive, but it is not applicable on types of UNION kind.", "locations":[{"line":7, "column":10}]} - ] + errlist: + [ + { + "message": + "Type U; has the @secret directive, but it is not applicable on types of UNION kind.", + "locations": [{ "line": 7, "column": 10 }], + }, + ] - - - name: union can't be used with @auth + - name: union can't be used with @auth input: | type X { f1: String @@ -229,12 +291,16 @@ invalid_schemas: f2: Int } union U @auth(query: {}) = X | Y - errlist: [ - { "message": "Type U; has the @auth directive, but it is not applicable on types of UNION kind.", "locations":[{"line":7, "column":10}]} - ] + errlist: + [ + { + "message": + "Type U; has the @auth directive, but it is not applicable on types of UNION kind.", + "locations": [{ "line": 7, "column": 10 }], + }, + ] - - - name: union can't be used with @hasInverse, @search, @id + - name: union can't be used with @hasInverse, @search, @id input: | type X { f1: String @@ -246,14 +312,28 @@ invalid_schemas: type Z { f: U @hasInverse(field: "f1") @search @id } - errlist: [ - { "message": "Type Z; Field f: Field f is of type U, but @hasInverse directive only applies to fields with object types.", "locations": [{"line":9, "column":3}]}, - { "message": "Type Z; Field f: has the @search directive but fields of type U can't have the @search directive.", "locations": [{"line":9, "column":34}]}, - { "message": "Type Z; Field f: with @id directive must be of type String, Int or Int64, not U", "locations": [{"line":9, "column":42}]} - ] + errlist: + [ + { + "message": + "Type Z; Field f: Field f is of type U, but @hasInverse directive only applies to fields + with object types.", + "locations": [{ "line": 9, "column": 3 }], + }, + { + "message": + "Type Z; Field f: has the @search directive but fields of type U can't have the @search + directive.", + "locations": [{ "line": 9, "column": 34 }], + }, + { + "message": + "Type Z; Field f: with @id directive must be of type String, Int or Int64, not U", + "locations": [{ "line": 9, "column": 42 }], + }, + ] - - - name: Typename is reserved word + - name: Typename is reserved word input: | type String { id: ID! @@ -272,25 +352,56 @@ invalid_schemas: E1 E2 } - errlist: [ - {"message":"String is a reserved word, so you can't declare a type with this name. Pick a different name for the type.", "locations":[{"line":1, "column":6}]}, - {"message":"Query is a reserved word, so you can't declare a type with this name. Pick a different name for the type.", "locations":[{"line":7, "column":7}]}, - {"message":"Mutation is a reserved word, so you can't declare a type with this name. Pick a different name for the type.", "locations":[{"line":8, "column":11}]}, - {"message":"Subscription is a reserved word, so you can't declare a type with this name. Pick a different name for the type.", "locations":[{"line":11, "column":7}]}, - {"message":"uid is a reserved word, so you can't declare a type with this name. Pick a different name for the type.", "locations":[{"line":14, "column":6}]}, - ] + errlist: + [ + { + "message": + "String is a reserved word, so you can't declare a type with this name. Pick a different + name for the type.", + "locations": [{ "line": 1, "column": 6 }], + }, + { + "message": + "Query is a reserved word, so you can't declare a type with this name. Pick a different + name for the type.", + "locations": [{ "line": 7, "column": 7 }], + }, + { + "message": + "Mutation is a reserved word, so you can't declare a type with this name. Pick a + different name for the type.", + "locations": [{ "line": 8, "column": 11 }], + }, + { + "message": + "Subscription is a reserved word, so you can't declare a type with this name. Pick a + different name for the type.", + "locations": [{ "line": 11, "column": 7 }], + }, + { + "message": + "uid is a reserved word, so you can't declare a type with this name. Pick a different + name for the type.", + "locations": [{ "line": 14, "column": 6 }], + }, + ] - name: Point is reserved word input: | type Point { id: ID! } - errlist: [ - { "message": "Point is a reserved word, so you can't declare a type with this name. Pick a different name for the type.", "locations": [ { "line": 1, "column": 6 } ] }, - ] + errlist: + [ + { + "message": + "Point is a reserved word, so you can't declare a type with this name. Pick a different + name for the type.", + "locations": [{ "line": 1, "column": 6 }], + }, + ] - - - name: More than 1 errors + - name: More than 1 errors input: | type X { i1: ID! @@ -299,13 +410,27 @@ invalid_schemas: l1: [X]! l2: [ID] } - errlist: [ - {"message":"Fields i1, i2, i3 and l2 are listed as IDs for type X, but a type can have only one ID field. Pick a single field as the ID for type X.", "locations":[{"line":2, "column":3}, {"line":3, "column":3}, {"line":4, "column":3}, {"line":6, "column": 3}]}, - {"message": "Type X; Field l2: ID lists are invalid.", "locations": [{"line": 6, "column": 3}]} - ] + errlist: + [ + { + "message": + "Fields i1, i2, i3 and l2 are listed as IDs for type X, but a type can have only one ID + field. Pick a single field as the ID for type X.", + "locations": + [ + { "line": 2, "column": 3 }, + { "line": 3, "column": 3 }, + { "line": 4, "column": 3 }, + { "line": 6, "column": 3 }, + ], + }, + { + "message": "Type X; Field l2: ID lists are invalid.", + "locations": [{ "line": 6, "column": 3 }], + }, + ] - - - name: Non linking inverse directive with correct field type + - name: Non linking inverse directive with correct field type input: | type Post { author: Author! @hasInverse(field: "posts") @@ -314,12 +439,17 @@ invalid_schemas: type Author { posts: [Post!]! @hasInverse(field: likedBy) } - errlist: [ - {"message": "Type Post; Field author: @hasInverse should be consistant. Post.author is the inverse of Author.posts, but Author.posts is the inverse of Post.likedBy.", "locations": [{"line": 2, "column": 20}]} - ] + errlist: + [ + { + "message": + "Type Post; Field author: @hasInverse should be consistant. Post.author is the inverse + of Author.posts, but Author.posts is the inverse of Post.likedBy.", + "locations": [{ "line": 2, "column": 20 }], + }, + ] - - - name: Multiple hasInverse to one field + - name: Multiple hasInverse to one field input: | type Post { author: Author! @hasInverse(field: "posts") @@ -329,12 +459,17 @@ invalid_schemas: type Author { posts: [Post!]! } - errlist: [ - {"message": "Type Post; Field likedBy: @hasInverse should be consistant. Post.likedBy is the inverse of Author.posts, but Author.posts is the inverse of Post.author.", "locations": [{"line": 3, "column": 20}]} - ] + errlist: + [ + { + "message": + "Type Post; Field likedBy: @hasInverse should be consistant. Post.likedBy is the inverse + of Author.posts, but Author.posts is the inverse of Post.author.", + "locations": [{ "line": 3, "column": 20 }], + }, + ] - - - name: Non linking inverse directives + - name: Non linking inverse directives input: | type X { f1: P @hasInverse(field: "f1") @@ -343,33 +478,52 @@ invalid_schemas: type P { f1: X @hasInverse(field: "f2") } - errlist: [ - {"message":"Type X; Field f1: @hasInverse should be consistant. X.f1 is the inverse of P.f1, but P.f1 is the inverse of X.f2.", "locations":[{"line":2, "column":10}]}, - {"message":"Type P; Field f1: @hasInverse is required to link the fields of same type, but the field f2 is of the type String instead of P. To link these make sure the fields are of the same type.", "locations":[{"line":6, "column":10}]}, - ] + errlist: + [ + { + "message": + "Type X; Field f1: @hasInverse should be consistant. X.f1 is the inverse of P.f1, but + P.f1 is the inverse of X.f2.", + "locations": [{ "line": 2, "column": 10 }], + }, + { + "message": + "Type P; Field f1: @hasInverse is required to link the fields of same type, but the + field f2 is of the type String instead of P. To link these make sure the fields are of + the same type.", + "locations": [{ "line": 6, "column": 10 }], + }, + ] - - - name: Inverse Directive on non object field + - name: Inverse Directive on non object field input: | type X { f1: String @hasInverse(field: "f1") } - errlist: [ - {"message":"Type X; Field f1: Field f1 is of type String, but @hasInverse directive only applies to fields with object types.", "locations":[{"line":2, "column":3}]}, - ] + errlist: + [ + { + "message": + "Type X; Field f1: Field f1 is of type String, but @hasInverse directive only applies to + fields with object types.", + "locations": [{ "line": 2, "column": 3 }], + }, + ] - - - name: Inverse Directive doesn't have field argument + - name: Inverse Directive doesn't have field argument input: | type X { f1: X @hasInverse } - errlist: [ - {"message":"Type X; Field f1: @hasInverse directive doesn't have field argument.", "locations":[{"line":2, "column":10}]}, - ] + errlist: + [ + { + "message": "Type X; Field f1: @hasInverse directive doesn't have field argument.", + "locations": [{ "line": 2, "column": 10 }], + }, + ] - - - name: hasInverse on non existing field + - name: hasInverse on non existing field input: | type X { f1: [P!]! @hasInverse(field: "f2") @@ -377,12 +531,15 @@ invalid_schemas: type P { f1: String } - errlist: [ - {"message":"Type X; Field f1: inverse field f2 doesn't exist for type P.", "locations":[{"line":2, "column":14}]}, - ] + errlist: + [ + { + "message": "Type X; Field f1: inverse field f2 doesn't exist for type P.", + "locations": [{ "line": 2, "column": 14 }], + }, + ] - - - name: ID can't have the @search directive + - name: ID can't have the @search directive input: | type X { id: ID! @search @@ -392,18 +549,24 @@ invalid_schemas: id: ID! @search(by: [term]) name: String } - errlist: [ - {"message": "Type X; Field id: has the @search directive but fields of type ID can't - have the @search directive.", - "locations":[{"line":2, "column":12}]}, - {"message": "Type Y; Field id: has the @search directive but the argument term doesn't - apply to field type ID. Search by term applies to fields of type String. Fields of type - ID can't have the @search directive.", - "locations":[{"line":6, "column":12}]} + errlist: + [ + { + "message": + "Type X; Field id: has the @search directive but fields of type ID can't have the + @search directive.", + "locations": [{ "line": 2, "column": 12 }], + }, + { + "message": + "Type Y; Field id: has the @search directive but the argument term doesn't apply to + field type ID. Search by term applies to fields of type String. Fields of type ID can't + have the @search directive.", + "locations": [{ "line": 6, "column": 12 }], + }, ] - - - name: Search will error on type that can't have the @search + - name: Search will error on type that can't have the @search input: | type X { y: Y @search @@ -411,14 +574,17 @@ invalid_schemas: type Y { y: String } - errlist: [ - {"message": "Type X; Field y: has the @search directive but fields of type Y - can't have the @search directive.", - "locations":[{"line":2, "column":9}]} + errlist: + [ + { + "message": + "Type X; Field y: has the @search directive but fields of type Y can't have the @search + directive.", + "locations": [{ "line": 2, "column": 9 }], + }, ] - - - name: Search (with arg) will error that can't have the @search + - name: Search (with arg) will error that can't have the @search input: | type X { y: Y @search(by: [term]) @@ -426,138 +592,164 @@ invalid_schemas: type Y { y: String } - errlist: [ - {"message": "Type X; Field y: has the @search directive but the argument term doesn't - apply to field type Y. Search by term applies to fields of type String. Fields of - type Y can't have the @search directive.", - "locations":[{"line":2, "column":9}]} + errlist: + [ + { + "message": + "Type X; Field y: has the @search directive but the argument term doesn't apply to field + type Y. Search by term applies to fields of type String. Fields of type Y can't have + the @search directive.", + "locations": [{ "line": 2, "column": 9 }], + }, ] - - - name: Search with wrong arg with error on default search type + - name: Search with wrong arg with error on default search type input: | type X { y: Int @search(by: [term]) } - errlist: [ - {"message": "Type X; Field y: has the @search directive but the argument term doesn't - apply to field type Int. Search by term applies to fields of type String. Fields of - type Int are searchable by just @search.", - "locations":[{"line":2, "column":11}]} + errlist: + [ + { + "message": + "Type X; Field y: has the @search directive but the argument term doesn't apply to field + type Int. Search by term applies to fields of type String. Fields of type Int are + searchable by just @search.", + "locations": [{ "line": 2, "column": 11 }], + }, ] - - - name: Search with wrong arg (int) with error on default search type (Int64) + - name: Search with wrong arg (int) with error on default search type (Int64) input: | type X { y: Int64 @search(by: [int]) } - errlist: [ - {"message": "Type X; Field y: has the @search directive but the argument int doesn't - apply to field type Int64. Search by int applies to fields of type Int. Fields of - type Int64 are searchable by just @search.", - "locations":[{"line":2, "column":13}]} - ] + errlist: + [ + { + "message": + "Type X; Field y: has the @search directive but the argument int doesn't apply to field + type Int64. Search by int applies to fields of type Int. Fields of type Int64 are + searchable by just @search.", + "locations": [{ "line": 2, "column": 13 }], + }, + ] - - - name: Search with wrong arg with error on search type + - name: Search with wrong arg with error on search type input: | type X { y: String @search(by: [day]) } - errlist: [ - {"message": "Type X; Field y: has the @search directive but the argument day doesn't - apply to field type String. Search by day applies to fields of type DateTime. Fields - of type String can have @search by exact, fulltext, hash, regexp, term and trigram.", - "locations":[{"line":2, "column":14}]} + errlist: + [ + { + "message": + "Type X; Field y: has the @search directive but the argument day doesn't apply to field + type String. Search by day applies to fields of type DateTime. Fields of type String + can have @search by exact, fulltext, hash, regexp, term and trigram.", + "locations": [{ "line": 2, "column": 14 }], + }, ] - - - name: Search with wrong arg for the index + - name: Search with wrong arg for the index input: | type X { y: String @search(by: ["hash", "hour"]) } - errlist: [ - {"message": "Type X; Field y: has the @search directive but the argument hour doesn't - apply to field type String. Search by hour applies to fields of type DateTime. Fields - of type String can have @search by exact, fulltext, hash, regexp, term and trigram.", - "locations":[{"line":2, "column":14}]} + errlist: + [ + { + "message": + "Type X; Field y: has the @search directive but the argument hour doesn't apply to field + type String. Search by hour applies to fields of type DateTime. Fields of type String + can have @search by exact, fulltext, hash, regexp, term and trigram.", + "locations": [{ "line": 2, "column": 14 }], + }, ] - - - name: Search without [] + - name: Search without [] input: | type X { y: String @search(by: "hash") } - errlist: [ - {"message": "Type X; Field y: the @search directive requires a list argument, - like @search(by: [\"hash\"])", - "locations":[{"line":2, "column":14}]} + errlist: + [ + { + "message": + 'Type X; Field y: the @search directive requires a list argument, like @search(by: + ["hash"])', + "locations": [{ "line": 2, "column": 14 }], + }, ] - - - name: Search doesn't allow hash and exact together + - name: Search doesn't allow hash and exact together input: | type X { y: String @search(by: ["hash", "exact"]) } - errlist: [ - {"message": "Type X; Field y: the arguments 'hash' and 'exact' can't be - used together as arguments to @search.", - "locations":[{"line":2, "column":14}]} + errlist: + [ + { + "message": + "Type X; Field y: the arguments 'hash' and 'exact' can't be used together as arguments + to @search.", + "locations": [{ "line": 2, "column": 14 }], + }, ] - - - name: Search with multiple datetime index + - name: Search with multiple datetime index input: | type X { y: DateTime @search(by: ["hour", "month"]) } - errlist: [ - {"message": "Type X; Field y: has the search directive on DateTime. DateTime - allows only one argument for @search.", - "locations":[{"line":2, "column":16}]} + errlist: + [ + { + "message": + "Type X; Field y: has the search directive on DateTime. DateTime allows only one + argument for @search.", + "locations": [{ "line": 2, "column": 16 }], + }, ] - - - name: Search doesn't allow trigram and regexp together + - name: Search doesn't allow trigram and regexp together input: | type X { y: String @search(by: ["trigram", "regexp"]) } - errlist: [ - {"message": "Type X; Field y: the argument to @search 'trigram' is the same as - the index 'regexp' provided before and shouldn't be used together", - "locations":[{"line":2, "column":14}]} + errlist: + [ + { + "message": + "Type X; Field y: the argument to @search 'trigram' is the same as the index 'regexp' + provided before and shouldn't be used together", + "locations": [{ "line": 2, "column": 14 }], + }, ] - - - name: Search doesn't accept bogus args + - name: Search doesn't accept bogus args input: | type X { y: String @search(by: ["bogus"]) } - errlist: [ - {"message": "Type X; Field y: the argument to @search bogus isn't valid.Fields of type - String can have @search by exact, fulltext, hash, regexp, term and trigram.", - "locations":[{"line":2, "column":14}]} + errlist: + [ + { + "message": + "Type X; Field y: the argument to @search bogus isn't valid.Fields of type String can + have @search by exact, fulltext, hash, regexp, term and trigram.", + "locations": [{ "line": 2, "column": 14 }], + }, ] - - - name: Type implements an interface which wasn't defined + - name: Type implements an interface which wasn't defined input: | type X implements Y { y: String } - errlist: [ - {"message": Undefined type "Y"., - "locations":[{"line":1, "column":6}]} - ] + errlist: [{ "message": Undefined type "Y"., "locations": [{ "line": 1, "column": 6 }] }] - - - name: Type implements an interface with the field name repeated but different type + - name: Type implements an interface with the field name repeated but different type input: | interface Y { id: ID @@ -566,26 +758,30 @@ invalid_schemas: id: String y: String } - errlist: [ - {"message": For type X to implement interface Y the field id must have type ID, - "locations":[{"line":4, "column":6}]} + errlist: + [ + { + "message": For type X to implement interface Y the field id must have type ID, + "locations": [{ "line": 4, "column": 6 }], + }, ] - - - name: Type implements an interface with no field of its own + - name: Type implements an interface with no field of its own input: | interface Y { id: ID } type X implements Y { } - errlist: [ - {"message": "expected at least one definition, found }", - "locations":[{"line":5, "column":1}]} + errlist: + [ + { + "message": "expected at least one definition, found }", + "locations": [{ "line": 5, "column": 1 }], + }, ] - - - name: Type implements from two interfaces where both have ID with different type + - name: Type implements from two interfaces where both have ID with different type input: | interface X { id: ID! @@ -596,142 +792,175 @@ invalid_schemas: type Z implements X & Y { name: String } - errlist: [ - {"message": field id is of type ID in interface Y and is of type ID! in interface X, - "locations":[{"line":7, "column":6}]} + errlist: + [ + { + "message": field id is of type ID in interface Y and is of type ID! in interface X, + "locations": [{ "line": 7, "column": 6 }], + }, ] - - - name: List of Boolean is not allowed + - name: List of Boolean is not allowed input: | type X { q: [Boolean] } - errlist: [ - {"message": "Type X; Field q: Boolean lists are invalid.", - "locations":[{"line":2, "column":3}]} + errlist: + [ + { + "message": "Type X; Field q: Boolean lists are invalid.", + "locations": [{ "line": 2, "column": 3 }], + }, ] - - - name: ID field can't have @dgraph directive + - name: ID field can't have @dgraph directive input: | type X { id: ID @dgraph(pred: "X.id") name: String } - errlist: [ - {"message": "Type X; Field id: has the @dgraph directive but fields of type ID can't - have the @dgraph directive.", - "locations":[{"line":2, "column":11}]} - ] + errlist: + [ + { + "message": + "Type X; Field id: has the @dgraph directive but fields of type ID can't have the + @dgraph directive.", + "locations": [{ "line": 2, "column": 11 }], + }, + ] - - - name: Field with @id directive has wrong type + - name: Field with @id directive has wrong type input: | type X { f1: [String] @id } - errlist: [ - {"message": "Type X; Field f1: with @id directive must be of type String, Int or Int64, not [String]", - "locations":[{"line":2, "column":17}]} + errlist: + [ + { + "message": + "Type X; Field f1: with @id directive must be of type String, Int or Int64, not [String]", + "locations": [{ "line": 2, "column": 17 }], + }, ] - - - name: "@id directive can't be applied on field with Float type" + - name: "@id directive can't be applied on field with Float type" input: | type X { f1: Float! @id } - errlist: [ - {"message": "Type X; Field f1: with @id directive must be of type String, Int or Int64, not Float!", - "locations":[{"line":2, "column":15}]} + errlist: + [ + { + "message": + "Type X; Field f1: with @id directive must be of type String, Int or Int64, not Float!", + "locations": [{ "line": 2, "column": 15 }], + }, ] - - - name: Dgraph directive with wrong argument produces an error + - name: Dgraph directive with wrong argument produces an error input: | type X { f1: String! @dgraph(type: "f1") } - errlist: [ - {"message": "Type X; Field f1: pred argument for @dgraph directive should - not be empty.", - "locations":[{"line":2, "column":16}]} + errlist: + [ + { + "message": "Type X; Field f1: pred argument for @dgraph directive should not be empty.", + "locations": [{ "line": 2, "column": 16 }], + }, ] - - - name: Dgraph directive with no argument on field produces an error + - name: Dgraph directive with no argument on field produces an error input: | type X { f1: String! @dgraph } - errlist: [ - {"message": "Type X; Field f1: pred argument for @dgraph directive should - not be empty.", - "locations":[{"line":2, "column":16}]} + errlist: + [ + { + "message": "Type X; Field f1: pred argument for @dgraph directive should not be empty.", + "locations": [{ "line": 2, "column": 16 }], + }, ] - - - name: Dgraph directive with wrong argument type on field produces an error + - name: Dgraph directive with wrong argument type on field produces an error input: | type X { f1: String! @dgraph(pred: 2) } - errlist: [ - {"message": "Type X; Field f1: pred argument for @dgraph directive should be of type String.", - "locations":[{"line":2, "column":16}]} + errlist: + [ + { + "message": + "Type X; Field f1: pred argument for @dgraph directive should be of type String.", + "locations": [{ "line": 2, "column": 16 }], + }, ] - - - name: Dgraph directive with wrong argument on type produces an error + - name: Dgraph directive with wrong argument on type produces an error input: | type X @dgraph(pred: "X") { f1: String! } - errlist: [ - {"message": Type X; type argument for @dgraph directive should not be empty., - "locations":[{"line":1, "column":9}]} - ] + errlist: + [ + { + "message": Type X; type argument for @dgraph directive should not be empty., + "locations": [{ "line": 1, "column": 9 }], + }, + ] - name: Dgraph directive with no argument on type produces an error input: | type X @dgraph { f1: String! } - errlist: [ - {"message": Type X; type argument for @dgraph directive should not be empty., - "locations":[{"line":1, "column":9}]} - ] + errlist: + [ + { + "message": Type X; type argument for @dgraph directive should not be empty., + "locations": [{ "line": 1, "column": 9 }], + }, + ] - - - name: Dgraph directive with wrong argument type on type produces an error + - name: Dgraph directive with wrong argument type on type produces an error input: | type X @dgraph(type: 2) { f1: String! } - errlist: [ - {"message": Type X; type argument for @dgraph directive should of type String., - "locations":[{"line":1, "column":9}]} - ] + errlist: + [ + { + "message": Type X; type argument for @dgraph directive should of type String., + "locations": [{ "line": 1, "column": 9 }], + }, + ] - - - name: Dgraph directive with reverse pred argument on scalar field produces an error + - name: Dgraph directive with reverse pred argument on scalar field produces an error input: | type X { f1: String! @dgraph(pred:"~movie") f2: String! @dgraph(pred:"<~movie>") } - errlist: [ - {"message": "Type X; Field f1 is of type String, but reverse predicate in @dgraph directive - only applies to fields with object types.", - "locations":[{"line":2, "column":3}]}, - {"message": "Type X; Field f2 is of type String, but reverse predicate in @dgraph directive - only applies to fields with object types.", - "locations":[{"line":3, "column":3}]} - ] + errlist: + [ + { + "message": + "Type X; Field f1 is of type String, but reverse predicate in @dgraph directive only + applies to fields with object types.", + "locations": [{ "line": 2, "column": 3 }], + }, + { + "message": + "Type X; Field f2 is of type String, but reverse predicate in @dgraph directive only + applies to fields with object types.", + "locations": [{ "line": 3, "column": 3 }], + }, + ] - - - name: Dgraph directive with reverse pred argument on field without a corresponding reverse field is an error + - name: + Dgraph directive with reverse pred argument on field without a corresponding reverse field is + an error input: | type Y { g1: String! @@ -740,13 +969,17 @@ invalid_schemas: type X { f1: [Y!] @dgraph(pred:"~movie") } - errlist: [ - {"message": "Type X; Field f1: pred argument: ~movie is not supported as forward edge doesn't exist for type Y.", - "locations":[{"line":6, "column":13}]} - ] + errlist: + [ + { + "message": + "Type X; Field f1: pred argument: ~movie is not supported as forward edge doesn't exist + for type Y.", + "locations": [{ "line": 6, "column": 13 }], + }, + ] - - - name: Dgraph directive with reverse pred argument along with hasInverse produces an error + - name: Dgraph directive with reverse pred argument along with hasInverse produces an error input: | type X { f1: [Y] @dgraph(pred: "f1") @@ -754,14 +987,18 @@ invalid_schemas: type Y { f1: [X] @dgraph(pred: "~f1") @hasInverse(field: "f1") } - errlist: [ - {"message": "Type Y; Field f1: @hasInverse directive is not allowed when pred argument in - @dgraph directive starts with a ~.", - "locations":[{"line":5, "column":12}]} - ] + errlist: + [ + { + "message": + "Type Y; Field f1: @hasInverse directive is not allowed when pred argument in @dgraph + directive starts with a ~.", + "locations": [{ "line": 5, "column": 12 }], + }, + ] - - - name: Dgraph directive with reverse pred argument along with hasInverse in forward direction + - name: + Dgraph directive with reverse pred argument along with hasInverse in forward direction produces an error input: | type X { @@ -770,14 +1007,17 @@ invalid_schemas: type Y { f1: [X] @dgraph(pred: "~f1") } - errlist: [ - {"message": "Type Y; Field f1: @hasInverse directive is not allowed when pred argument in - @dgraph directive starts with a ~.", - "locations":[{"line":5, "column":12}]} - ] + errlist: + [ + { + "message": + "Type Y; Field f1: @hasInverse directive is not allowed when pred argument in @dgraph + directive starts with a ~.", + "locations": [{ "line": 5, "column": 12 }], + }, + ] - - - name: Dgraph directive with reverse pred argument matching with wrong type produces an error + - name: Dgraph directive with reverse pred argument matching with wrong type produces an error input: | type Z { f1: String! @@ -788,14 +1028,19 @@ invalid_schemas: type Y { f1: [X] @dgraph(pred: "~f1") } - errlist: [ - {"message": "Type X; Field f1: should be of type Y to be compatible with @dgraph reverse - directive but is of type Z.", - "locations":[{"line":5, "column":12}]} - ] + errlist: + [ + { + "message": + "Type X; Field f1: should be of type Y to be compatible with @dgraph reverse directive + but is of type Z.", + "locations": [{ "line": 5, "column": 12 }], + }, + ] - - - name: Dgraph directive with reverse pred argument matching with wrong type implementing an interface produces an error + - name: + Dgraph directive with reverse pred argument matching with wrong type implementing an interface + produces an error input: | type Z { f1: String! @@ -811,14 +1056,19 @@ invalid_schemas: type Y implements Person { f1: [X] @dgraph(pred: "~f1") } - errlist: [ - {"message": "Type X; Field f1: should be any of types Y or Person to be compatible with @dgraph reverse - directive but is of type Z.", - "locations":[{"line":5, "column":12}]} - ] + errlist: + [ + { + "message": + "Type X; Field f1: should be any of types Y or Person to be compatible with @dgraph + reverse directive but is of type Z.", + "locations": [{ "line": 5, "column": 12 }], + }, + ] - - - name: Dgraph directive with reverse pred argument matching with wrong type implementing multiple interfaces produces an error + - name: + Dgraph directive with reverse pred argument matching with wrong type implementing multiple + interfaces produces an error input: | type Z { f1: String! @@ -838,14 +1088,17 @@ invalid_schemas: type Y implements Person & Student { f1: [X] @dgraph(pred: "~f1") } - errlist: [ - {"message": "Type X; Field f1: should be any of types Y, Person or Student to be compatible with @dgraph reverse - directive but is of type Z.", - "locations":[{"line":5, "column":12}]} - ] + errlist: + [ + { + "message": + "Type X; Field f1: should be any of types Y, Person or Student to be compatible with + @dgraph reverse directive but is of type Z.", + "locations": [{ "line": 5, "column": 12 }], + }, + ] - - - name: Field with a dgraph directive with reverse pred argument should be a list + - name: Field with a dgraph directive with reverse pred argument should be a list input: | type X { f1: [Y] @dgraph(pred: "f1") @@ -853,47 +1106,55 @@ invalid_schemas: type Y { f1: X @dgraph(pred: "~f1") } - errlist: [ - {"message": "Type Y; Field f1: with a dgraph directive that starts with ~ should be of type - list.", - "locations":[{"line":5, "column":10}]} - ] - + errlist: + [ + { + "message": + "Type Y; Field f1: with a dgraph directive that starts with ~ should be of type list.", + "locations": [{ "line": 5, "column": 10 }], + }, + ] - - - name: Empty field in secret directive + - name: Empty field in secret directive input: | type X @secret(field:""){ f1: String! } - errlist: [ - {"message": Type X; Argument \"field\" of secret directive is empty, - "locations":[{"line":1, "column":6}]}, - ] + errlist: + [ + { + "message": Type X; Argument "field" of secret directive is empty, + "locations": [{ "line": 1, "column": 6 }], + }, + ] - - - name: Multiple secret directive + - name: Multiple secret directive input: | type X @secret(field:"password") @secret(field: "psss"){ f1: String! } - errlist: [ - {"message": "Type X; has more than one secret fields password,psss", - "locations":[{"line":1, "column":6}]}, - ] + errlist: + [ + { + "message": "Type X; has more than one secret fields password,psss", + "locations": [{ "line": 1, "column": 6 }], + }, + ] - name: Conflicting secret directive and field input: | type X @secret(field:"f1"){ f1: String! } - errlist: [ - {"message": Type X; has a secret directive and field of the same name f1, - "locations":[{"line":1, "column":6}]}, - ] + errlist: + [ + { + "message": Type X; has a secret directive and field of the same name f1, + "locations": [{ "line": 1, "column": 6 }], + }, + ] - - - name: "@dgraph(pred: ...) validation" + - name: "@dgraph(pred: ...) validation" input: | interface V { f1: String @dgraph(pred: "ff1") @@ -918,26 +1179,67 @@ invalid_schemas: f8: Int @dgraph(pred: "X.f8") f10: String @dgraph(pred: "pwd") } - errlist: [ - {"message": "Type X; implements interfaces [V W], all of which have fields with @dgraph predicate: ff1. These fields must use different Dgraph predicates.", - "locations":[{"line":10, "column":6}]}, - {"message": "Type X; Field f9: has the @dgraph directive, which conflicts with interface W; field f4, that this type implements. These fields must use different Dgraph predicates.", - "locations":[{"line":14, "column":3}]}, - {"message": "Type Y; Field f2: has type Int, which is different to type W; field f2, which has the same @dgraph directive but type String. These fields must have either the same GraphQL types, or use different Dgraph predicates.", - "locations":[{"line":17, "column":3}]}, - {"message": "Type Y; Field f3: has type Float, which is different to type W; field f3, which has the same @dgraph directive but type [Float]. These fields must have either the same GraphQL types, or use different Dgraph predicates.", - "locations":[{"line":18, "column":3}]}, - {"message": "Type Y; Field f6: has type X, which is different to type X; field f6, which has the same @dgraph directive but type Y. These fields must have either the same GraphQL types, or use different Dgraph predicates.", - "locations":[{"line":19, "column":3}]}, - {"message": "Type Y; Field f7: doesn't have @id directive, which conflicts with type X; field f7, which has the same @dgraph directive along with @id directive. Both these fields must either use @id directive, or use different Dgraph predicates.", - "locations":[{"line":20, "column":3}]}, - {"message": "Type Y; Field f8: has type Int, which is different to type X; field f8, which has the same @dgraph directive but type String. These fields must have either the same GraphQL types, or use different Dgraph predicates.", - "locations":[{"line":21, "column":3}]}, - {"message": "Type Y; Field f10: has the @dgraph predicate, but that conflicts with type W @secret directive on the same predicate. @secret predicates are stored encrypted and so the same predicate can't be used as a String.", - "locations":[{"line":22, "column":3}]} - ] - - - name: user-defined types can't have same name as the types generated for other user-defined types or any inbuilt types + errlist: + [ + { + "message": + "Type X; implements interfaces [V W], all of which have fields with @dgraph predicate: + ff1. These fields must use different Dgraph predicates.", + "locations": [{ "line": 10, "column": 6 }], + }, + { + "message": + "Type X; Field f9: has the @dgraph directive, which conflicts with interface W; field + f4, that this type implements. These fields must use different Dgraph predicates.", + "locations": [{ "line": 14, "column": 3 }], + }, + { + "message": + "Type Y; Field f2: has type Int, which is different to type W; field f2, which has the + same @dgraph directive but type String. These fields must have either the same GraphQL + types, or use different Dgraph predicates.", + "locations": [{ "line": 17, "column": 3 }], + }, + { + "message": + "Type Y; Field f3: has type Float, which is different to type W; field f3, which has the + same @dgraph directive but type [Float]. These fields must have either the same GraphQL + types, or use different Dgraph predicates.", + "locations": [{ "line": 18, "column": 3 }], + }, + { + "message": + "Type Y; Field f6: has type X, which is different to type X; field f6, which has the + same @dgraph directive but type Y. These fields must have either the same GraphQL types, + or use different Dgraph predicates.", + "locations": [{ "line": 19, "column": 3 }], + }, + { + "message": + "Type Y; Field f7: doesn't have @id directive, which conflicts with type X; field f7, + which has the same @dgraph directive along with @id directive. Both these fields must + either use @id directive, or use different Dgraph predicates.", + "locations": [{ "line": 20, "column": 3 }], + }, + { + "message": + "Type Y; Field f8: has type Int, which is different to type X; field f8, which has the + same @dgraph directive but type String. These fields must have either the same GraphQL + types, or use different Dgraph predicates.", + "locations": [{ "line": 21, "column": 3 }], + }, + { + "message": + "Type Y; Field f10: has the @dgraph predicate, but that conflicts with type W @secret + directive on the same predicate. @secret predicates are stored encrypted and so the same + predicate can't be used as a String.", + "locations": [{ "line": 22, "column": 3 }], + }, + ] + + - name: + user-defined types can't have same name as the types generated for other user-defined types or + any inbuilt types input: | type Author { id: ID! @@ -954,11 +1256,27 @@ invalid_schemas: type IntFilter { name: String } - errlist: [ - {"message": "UpdateAuthorInput is a reserved word, so you can't declare a INPUT_OBJECT with this name. Pick a different name for the INPUT_OBJECT.", "locations":[{"line":5, "column":7}]}, - {"message": "URef is a reserved word, so you can't declare a INPUT_OBJECT with this name. Pick a different name for the INPUT_OBJECT.", "locations":[{"line":10, "column":7}]}, - {"message": "IntFilter is a reserved word, so you can't declare a OBJECT with this name. Pick a different name for the OBJECT.", "locations":[{"line":13, "column":6}]}, - ] + errlist: + [ + { + "message": + "UpdateAuthorInput is a reserved word, so you can't declare a INPUT_OBJECT with this + name. Pick a different name for the INPUT_OBJECT.", + "locations": [{ "line": 5, "column": 7 }], + }, + { + "message": + "URef is a reserved word, so you can't declare a INPUT_OBJECT with this name. Pick a + different name for the INPUT_OBJECT.", + "locations": [{ "line": 10, "column": 7 }], + }, + { + "message": + "IntFilter is a reserved word, so you can't declare a OBJECT with this name. Pick a + different name for the OBJECT.", + "locations": [{ "line": 13, "column": 6 }], + }, + ] - name: "@custom query can't have same name as the query generated for other types" input: | @@ -970,10 +1288,15 @@ invalid_schemas: type Query { getAuthor(id: ID): Author! @custom(http: {url: "http://blah.com", method: "GET"}) } - errlist: [ - {"message": "getAuthor is a reserved word, so you can't declare a query with this name. Pick a different name for the query.", - "locations":[{"line":7, "column":3}]}, - ] + errlist: + [ + { + "message": + "getAuthor is a reserved word, so you can't declare a query with this name. Pick a + different name for the query.", + "locations": [{ "line": 7, "column": 3 }], + }, + ] - name: "@custom mutation can't have same name as the mutation generated for other types" input: | @@ -985,10 +1308,15 @@ invalid_schemas: type Mutation { addAuthor(id: ID): Author! @custom(http: {url: "http://blah.com", method: "GET"}) } - errlist: [ - {"message": "addAuthor is a reserved word, so you can't declare a mutation with this name. Pick a different name for the mutation.", - "locations":[{"line":7, "column":3}]}, - ] + errlist: + [ + { + "message": + "addAuthor is a reserved word, so you can't declare a mutation with this name. Pick a + different name for the mutation.", + "locations": [{ "line": 7, "column": 3 }], + }, + ] - name: "@custom directive with extra arguments" input: | @@ -1000,10 +1328,15 @@ invalid_schemas: type Query { getAuthor1(id: ID): Author! @custom(http: {url: "blah.com", method: "GET"}, dql: "random") } - errlist: [ - {"message": "Type Query; Field getAuthor1: has 2 arguments for @custom directive, it should contain exactly one of `http` or `dql` arguments.", - "locations":[{"line":7, "column":32}]}, - ] + errlist: + [ + { + "message": + "Type Query; Field getAuthor1: has 2 arguments for @custom directive, it should contain + exactly one of `http` or `dql` arguments.", + "locations": [{ "line": 7, "column": 32 }], + }, + ] - name: "@custom directive without http or dql argument" input: | @@ -1015,10 +1348,13 @@ invalid_schemas: type Query { getAuthor1(id: ID): Author! @custom(https: {url: "blah.com", method: "GET"}) } - errlist: [ - {"message": https is not supported as an argument for custom directive., - "locations":[{"line":7, "column":32}]}, - ] + errlist: + [ + { + "message": https is not supported as an argument for custom directive., + "locations": [{ "line": 7, "column": 32 }], + }, + ] - name: "@custom directive with both http and dql argument" input: | @@ -1031,13 +1367,17 @@ invalid_schemas: getAuthor1(id: ID): Author! @custom(http: {url: "blah.com", method: "GET"}, dql: "{me(func: uid(0x1))}") } - errlist: [ - {"message": "Type Query; Field getAuthor1: has 2 arguments for @custom directive, it should contain exactly one of `http` or `dql` arguments.", - "locations":[{"line":7, "column":32}]}, - ] + errlist: + [ + { + "message": + "Type Query; Field getAuthor1: has 2 arguments for @custom directive, it should contain + exactly one of `http` or `dql` arguments.", + "locations": [{ "line": 7, "column": 32 }], + }, + ] - - - name: "@custom directive with dql on field" + - name: "@custom directive with dql on field" input: | type Author { id: ID! @@ -1050,14 +1390,16 @@ invalid_schemas: } """) } - errlist: [ - {"message": "Type Author; Field name: @custom directive with `dql` can be used only on - queries.", - "locations": [{"line": 4,"column": 25}]} - ] + errlist: + [ + { + "message": + "Type Author; Field name: @custom directive with `dql` can be used only on queries.", + "locations": [{ "line": 4, "column": 25 }], + }, + ] - - - name: "@custom directive with dql on mutation" + - name: "@custom directive with dql on mutation" input: | type Mutation { customMutation: String! @custom(dql: """ @@ -1068,35 +1410,45 @@ invalid_schemas: } """) } - errlist: [ - {"message": "Type Mutation; Field customMutation: @custom directive with `dql` can be used only on queries.", - "locations": [{"line": 2,"column": 35}]} - ] + errlist: + [ + { + "message": + "Type Mutation; Field customMutation: @custom directive with `dql` can be used only on + queries.", + "locations": [{ "line": 2, "column": 35 }], + }, + ] - - - name: "@custom directive with invalid dql argument type" + - name: "@custom directive with invalid dql argument type" input: | type Query { query1: String! @custom(dql: 5) } - errlist: [ - {"message": "Type Query; Field query1: dql argument for @custom directive must be of type String.", - "locations": [{"line": 2,"column": 27}]} - ] + errlist: + [ + { + "message": + "Type Query; Field query1: dql argument for @custom directive must be of type String.", + "locations": [{ "line": 2, "column": 27 }], + }, + ] - - - name: "@custom directive with empty dql argument value" + - name: "@custom directive with empty dql argument value" input: | type Query { query1: String! @custom(dql: " ") } - errlist: [ - {"message": "Type Query; Field query1: dql argument for @custom directive must not be empty.", - "locations": [{"line": 2,"column": 27}]} - ] + errlist: + [ + { + "message": + "Type Query; Field query1: dql argument for @custom directive must not be empty.", + "locations": [{ "line": 2, "column": 27 }], + }, + ] - - - name: "@custom directive with dql having non scalar argument for query" + - name: "@custom directive with dql having non scalar argument for query" input: | type Query { query1(arg1: [String]): String! @custom(dql: """ @@ -1107,13 +1459,17 @@ invalid_schemas: } """) } - errlist: [ - {"message": "Type Query; Field query1: Argument arg1: must be of a scalar type. @custom DQL queries accept only scalar arguments.", - "locations": [{"line": 2,"column": 43}]} - ] + errlist: + [ + { + "message": + "Type Query; Field query1: Argument arg1: must be of a scalar type. @custom DQL queries + accept only scalar arguments.", + "locations": [{ "line": 2, "column": 43 }], + }, + ] - - - name: "@custom directive with wrong url" + - name: "@custom directive with wrong url" input: | type Author { id: ID! @@ -1123,13 +1479,15 @@ invalid_schemas: type Query { getAuthor1(id: ID): Author! @custom(http: {url: "123", method: "GET"}) } - errlist: [ - {"message": Type Query; Field getAuthor1; url field inside @custom directive is invalid., - "locations":[{"line":7, "column":52}]}, - ] + errlist: + [ + { + "message": Type Query; Field getAuthor1; url field inside @custom directive is invalid., + "locations": [{ "line": 7, "column": 52 }], + }, + ] - - - name: "@custom directive on a query with undefined parameter in path is not allowed" + - name: "@custom directive on a query with undefined parameter in path is not allowed" input: | type Author { id: ID! @@ -1139,13 +1497,17 @@ invalid_schemas: type Query { getAuthor1(id: ID): Author! @custom(http: {url: "http://google.com/$idm", method: "GET"}) } - errlist: [ - {"message": Type Query; Field getAuthor1; url path inside @custom directive uses an argument idm that is not defined., - "locations":[{"line":7, "column":52}]}, - ] + errlist: + [ + { + "message": + Type Query; Field getAuthor1; url path inside @custom directive uses an argument idm + that is not defined., + "locations": [{ "line": 7, "column": 52 }], + }, + ] - - - name: "@custom directive on a query with null parameter in path is not allowed" + - name: "@custom directive on a query with null parameter in path is not allowed" input: | type Author { id: ID! @@ -1155,13 +1517,17 @@ invalid_schemas: type Query { getAuthor1(id: ID): Author! @custom(http: {url: "http://google.com/$id", method: "GET"}) } - errlist: [ - {"message": Type Query; Field getAuthor1; url path inside @custom directive uses an argument id that can be null., - "locations":[{"line":7, "column":52}]}, - ] + errlist: + [ + { + "message": + Type Query; Field getAuthor1; url path inside @custom directive uses an argument id that + can be null., + "locations": [{ "line": 7, "column": 52 }], + }, + ] - - - name: "@custom directive on a query with undefined parameter in query is not allowed" + - name: "@custom directive on a query with undefined parameter in query is not allowed" input: | type Author { id: ID! @@ -1171,13 +1537,17 @@ invalid_schemas: type Query { getAuthor1(id: ID): Author! @custom(http: {url: "http://google.com?a=$idm", method: "GET"}) } - errlist: [ - {"message": Type Query; Field getAuthor1; url query inside @custom directive uses an argument idm that is not defined., - "locations":[{"line":7, "column":52}]}, - ] + errlist: + [ + { + "message": + Type Query; Field getAuthor1; url query inside @custom directive uses an argument idm + that is not defined., + "locations": [{ "line": 7, "column": 52 }], + }, + ] - - - name: "@custom directive with wrong value for method" + - name: "@custom directive with wrong value for method" input: | type Author { id: ID! @@ -1187,13 +1557,17 @@ invalid_schemas: type Query { getAuthor1(id: ID): Author! @custom(http: {url: "http://google.com/", method: "GETS"}) } - errlist: [ - {"message": Type Query; Field getAuthor1; method field inside @custom directive can only be GET/POST/PUT/PATCH/DELETE., - "locations":[{"line":7, "column":82}]}, - ] + errlist: + [ + { + "message": + Type Query; Field getAuthor1; method field inside @custom directive can only be + GET/POST/PUT/PATCH/DELETE., + "locations": [{ "line": 7, "column": 82 }], + }, + ] - - - name: "@custom directive with mode on Query/Mutation" + - name: "@custom directive with mode on Query/Mutation" input: | type Author { id: ID! @@ -1203,13 +1577,17 @@ invalid_schemas: type Query { getAuthor1(id: ID): Author! @custom(http: {url: "http://google.com/", method: "GET", mode: SINGLE}) } - errlist: [ - {"message": Type Query; Field getAuthor1; mode field inside @custom directive can't be present on Query/Mutation., - "locations":[{"line":7, "column":94}]}, - ] + errlist: + [ + { + "message": + Type Query; Field getAuthor1; mode field inside @custom directive can't be present on + Query/Mutation., + "locations": [{ "line": 7, "column": 94 }], + }, + ] - - - name: "@custom directive with wrong value for mode" + - name: "@custom directive with wrong value for mode" input: | type Author { id: ID! @@ -1221,13 +1599,16 @@ invalid_schemas: name: String! author: Author! @custom(http: {url: "http://google.com/", method: "GET", mode: RANDOM}) } - errlist: [ - {"message": Type Post; Field author; mode field inside @custom directive can only be SINGLE/BATCH., - "locations":[{"line":9, "column":82}]}, - ] + errlist: + [ + { + "message": + Type Post; Field author; mode field inside @custom directive can only be SINGLE/BATCH., + "locations": [{ "line": 9, "column": 82 }], + }, + ] - - - name: "@custom directive with url params for batch operation" + - name: "@custom directive with url params for batch operation" input: | type Author { id: ID! @@ -1242,13 +1623,17 @@ invalid_schemas: method: "GET", mode: BATCH}) } - errlist: [ - {"message": "Type Post; Field author; has parameters in url inside @custom directive while mode is BATCH, url can't contain parameters if mode is BATCH.", - "locations":[{"line":10, "column":11}]}, - ] + errlist: + [ + { + "message": + "Type Post; Field author; has parameters in url inside @custom directive while mode is + BATCH, url can't contain parameters if mode is BATCH.", + "locations": [{ "line": 10, "column": 11 }], + }, + ] - - - name: "@custom directive with url params and graphql together" + - name: "@custom directive with url params and graphql together" input: | type Author { id: ID! @@ -1262,14 +1647,17 @@ invalid_schemas: graphql: "query ($id: ID!) { getAuthor(id: $id) }" }) } - errlist: [ - {"message": "Type Query; Field getAuthor1; has parameters in url along with graphql field inside @custom directive, url can't contain parameters if graphql field is present.", - "locations":[{"line":7, "column":32}]}, - ] - + errlist: + [ + { + "message": + "Type Query; Field getAuthor1; has parameters in url along with graphql field inside + @custom directive, url can't contain parameters if graphql field is present.", + "locations": [{ "line": 7, "column": 32 }], + }, + ] - - - name: "@custom directive with non-POST method and graphql together" + - name: "@custom directive with non-POST method and graphql together" input: | type Author { id: ID! @@ -1283,13 +1671,17 @@ invalid_schemas: graphql: "query ($id: ID!) { getAuthor(id: $id) }" }) } - errlist: [ - {"message": "Type Query; Field getAuthor1; has method GET while graphql field is also present inside @custom directive, method can only be POST if graphql field is present.", - "locations":[{"line":7, "column":32}]}, - ] + errlist: + [ + { + "message": + "Type Query; Field getAuthor1; has method GET while graphql field is also present inside + @custom directive, method can only be POST if graphql field is present.", + "locations": [{ "line": 7, "column": 32 }], + }, + ] - - - name: "@custom directive with both body and graphql together" + - name: "@custom directive with both body and graphql together" input: | type Author { id: ID! @@ -1304,13 +1696,17 @@ invalid_schemas: graphql: "query ($id: ID!) { getAuthor(id: $id) }" }) } - errlist: [ - {"message": "Type Query; Field getAuthor1; has both body and graphql field inside @custom directive, they can't be present together.", - "locations":[{"line":7, "column":32}]}, - ] + errlist: + [ + { + "message": + "Type Query; Field getAuthor1; has both body and graphql field inside @custom directive, + they can't be present together.", + "locations": [{ "line": 7, "column": 32 }], + }, + ] - - - name: "@custom directive with unparseable body" + - name: "@custom directive with unparseable body" input: | type Author { id: ID! @@ -1324,13 +1720,17 @@ invalid_schemas: body: "{id: $id, name: name}", }) } - errlist: [ - {"message": "Type Query; Field getAuthor1; body template inside @custom directive could not be parsed: found unexpected value: name", - "locations":[{"line":10, "column":12}]}, - ] + errlist: + [ + { + "message": + "Type Query; Field getAuthor1; body template inside @custom directive could not be + parsed: found unexpected value: name", + "locations": [{ "line": 10, "column": 12 }], + }, + ] - - - name: "@custom directive with undefined parameter in body" + - name: "@custom directive with undefined parameter in body" input: | type Author { id: ID! @@ -1344,13 +1744,17 @@ invalid_schemas: body: "{id: $idm}", }) } - errlist: [ - {"message": Type Query; Field getAuthor1; body template inside @custom directive uses an argument idm that is not defined., - "locations":[{"line":10, "column":12}]}, - ] + errlist: + [ + { + "message": + Type Query; Field getAuthor1; body template inside @custom directive uses an argument + idm that is not defined., + "locations": [{ "line": 10, "column": 12 }], + }, + ] - - - name: "@custom directive with empty graphql" + - name: "@custom directive with empty graphql" input: | type Author { id: ID! @@ -1364,13 +1768,17 @@ invalid_schemas: graphql: " " }) } - errlist: [ - {"message": "Type Query; Field getAuthor1: inside graphql in @custom directive, found 0 operations, it can have exactly one operation.", - "locations":[{"line":10, "column":15}]}, - ] + errlist: + [ + { + "message": + "Type Query; Field getAuthor1: inside graphql in @custom directive, found 0 operations, + it can have exactly one operation.", + "locations": [{ "line": 10, "column": 15 }], + }, + ] - - - name: "@custom directive with invalid graphql" + - name: "@custom directive with invalid graphql" input: | type Author { id: ID! @@ -1383,13 +1791,17 @@ invalid_schemas: graphql: "query { getAuthor(id: $id) } garbage" }) } - errlist: [ - {"message": "Type Query; Field getAuthor1: unable to parse graphql in @custom directive because: Unexpected Name \"garbage\"", - "locations":[{"line":9, "column":15}]}, - ] + errlist: + [ + { + "message": + 'Type Query; Field getAuthor1: unable to parse graphql in @custom directive because: + Unexpected Name "garbage"', + "locations": [{ "line": 9, "column": 15 }], + }, + ] - - - name: "@custom directive with multiple operations in graphql" + - name: "@custom directive with multiple operations in graphql" input: | type Author { id: ID! @@ -1403,13 +1815,17 @@ invalid_schemas: graphql: "query { getAuthor(id: $id) } query { getAuthor(id: $id) }" }) } - errlist: [ - {"message": "Type Query; Field getAuthor1: inside graphql in @custom directive, found 2 operations, it can have exactly one operation.", - "locations":[{"line":10, "column":15}]}, - ] + errlist: + [ + { + "message": + "Type Query; Field getAuthor1: inside graphql in @custom directive, found 2 operations, + it can have exactly one operation.", + "locations": [{ "line": 10, "column": 15 }], + }, + ] - - - name: "@custom directive with non query/mutation operation" + - name: "@custom directive with non query/mutation operation" input: | type Author { id: ID! @@ -1423,13 +1839,17 @@ invalid_schemas: graphql: "subscription ($id: ID!) { getAuthor(id: $id) }" }) } - errlist: [ - {"message": "Type Query; Field getAuthor1: inside graphql in @custom directive, found `subscription` operation, it can only have query/mutation.", - "locations":[{"line":10, "column":15}]}, - ] + errlist: + [ + { + "message": + "Type Query; Field getAuthor1: inside graphql in @custom directive, found `subscription` + operation, it can only have query/mutation.", + "locations": [{ "line": 10, "column": 15 }], + }, + ] - - - name: "@custom directive with operation name in graphql" + - name: "@custom directive with operation name in graphql" input: | type Author { id: ID! @@ -1443,20 +1863,17 @@ invalid_schemas: graphql: "query opName ($id: ID!) { getAuthor(id: $id) }" }) } - errlist: [ - { - "message": "Type Query; Field getAuthor1: inside graphql in @custom directive, found operation with name `opName`, it can't have a name.", - "locations": [ - { - "line": 10, - "column": 15 - } + errlist: + [ + { + "message": + "Type Query; Field getAuthor1: inside graphql in @custom directive, found operation with + name `opName`, it can't have a name.", + "locations": [{ "line": 10, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive with directives in operation in graphql" + - name: "@custom directive with directives in operation in graphql" input: | type Author { id: ID! @@ -1470,20 +1887,17 @@ invalid_schemas: graphql: "query ($id: ID!) @test { getAuthor(id: $id) }" }) } - errlist: [ - { - "message": "Type Query; Field getAuthor1: inside graphql in @custom directive, found operation with directives, it can't have any directives.", - "locations": [ - { - "line": 10, - "column": 15 - } + errlist: + [ + { + "message": + "Type Query; Field getAuthor1: inside graphql in @custom directive, found operation with + directives, it can't have any directives.", + "locations": [{ "line": 10, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive with multiple fields in operation in graphql" + - name: "@custom directive with multiple fields in operation in graphql" input: | type Author { id: ID! @@ -1497,20 +1911,17 @@ invalid_schemas: graphql: "query ($id: ID!) { getAuthor(id: $id) getUser(id: $id) }" }) } - errlist: [ - { - "message": "Type Query; Field getAuthor1: inside graphql in @custom directive, found 2 fields inside operation `query`, it can have exactly one field.", - "locations": [ - { - "line": 10, - "column": 15 - } + errlist: + [ + { + "message": + "Type Query; Field getAuthor1: inside graphql in @custom directive, found 2 fields + inside operation `query`, it can have exactly one field.", + "locations": [{ "line": 10, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive with alias for field in operation in graphql" + - name: "@custom directive with alias for field in operation in graphql" input: | type Author { id: ID! @@ -1524,20 +1935,17 @@ invalid_schemas: graphql: "mutation ($id: ID!) { authors: getAuthor(id: $id) }" }) } - errlist: [ - { - "message": "Type Query; Field getAuthor1: inside graphql in @custom directive, found mutation `getAuthor` with alias `authors`, it can't have any alias.", - "locations": [ - { - "line": 10, - "column": 15 - } + errlist: + [ + { + "message": + "Type Query; Field getAuthor1: inside graphql in @custom directive, found mutation + `getAuthor` with alias `authors`, it can't have any alias.", + "locations": [{ "line": 10, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive with return type for field in operation in graphql" + - name: "@custom directive with return type for field in operation in graphql" input: | type Author { id: ID! @@ -1551,13 +1959,17 @@ invalid_schemas: graphql: "query { getAuthor(id: $id): Author! }" }) } - errlist: [ - {"message": "Type Query; Field getAuthor1: unable to parse graphql in @custom directive because: Expected Name, found :", - "locations":[{"line":10, "column":15}]}, - ] + errlist: + [ + { + "message": + "Type Query; Field getAuthor1: unable to parse graphql in @custom directive because: + Expected Name, found :", + "locations": [{ "line": 10, "column": 15 }], + }, + ] - - - name: "@custom directive with directive on field in operation in graphql" + - name: "@custom directive with directive on field in operation in graphql" input: | type Author { id: ID! @@ -1571,20 +1983,17 @@ invalid_schemas: graphql: "query ($id: ID!) { getAuthor(id: $id) @test }" }) } - errlist: [ - { - "message": "Type Query; Field getAuthor1: inside graphql in @custom directive, found query `getAuthor` with directives, it can't have any directives.", - "locations": [ - { - "line": 10, - "column": 15 - } + errlist: + [ + { + "message": + "Type Query; Field getAuthor1: inside graphql in @custom directive, found query + `getAuthor` with directives, it can't have any directives.", + "locations": [{ "line": 10, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive with selection set on field in operation in graphql" + - name: "@custom directive with selection set on field in operation in graphql" input: | type Author { id: ID! @@ -1598,20 +2007,17 @@ invalid_schemas: graphql: "query ($id: ID!) { getAuthor(id: $id) { id } }" }) } - errlist: [ - { - "message": "Type Query; Field getAuthor1: inside graphql in @custom directive, found query `getAuthor` with a selection set, it can't have any selection set.", - "locations": [ - { - "line": 10, - "column": 15 - } + errlist: + [ + { + "message": + "Type Query; Field getAuthor1: inside graphql in @custom directive, found query + `getAuthor` with a selection set, it can't have any selection set.", + "locations": [{ "line": 10, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive with batch mode on field and invalid input format for query in graphql" + - name: "@custom directive with batch mode on field and invalid input format for query in graphql" input: | type Author { id: ID! @@ -1628,19 +2034,16 @@ invalid_schemas: }) name: String } - errlist: [ - { - "message": "Type Post; Field author: inside graphql in @custom directive, for BATCH mode, query `getAuthor` can have only one argument whose value should be a variable.", - "locations": [ - { - "line": 11, - "column": 15 - } + errlist: + [ + { + "message": + "Type Post; Field author: inside graphql in @custom directive, for BATCH mode, query + `getAuthor` can have only one argument whose value should be a variable.", + "locations": [{ "line": 11, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive not allowed on field of type ID!" + - name: "@custom directive not allowed on field of type ID!" input: | type Author { id: ID! @custom(http: { @@ -1650,38 +2053,29 @@ invalid_schemas: }) name: String } - errlist: [ - { - "message": Type Author; Field id; custom directive not allowed on field of type ID! or field with @id directive., - "locations": [ - { - "line": 2, - "column": 12 - } + errlist: + [ + { + "message": + Type Author; Field id; custom directive not allowed on field of type ID! or field with + @id directive., + "locations": [{ "line": 2, "column": 12 }], + }, + { + "message": + "Type Author; Field id; @custom directive, body template must use fields defined within + the type, found `foo`.", + "locations": [{ "line": 5, "column": 12 }], + }, + { + "message": + "Type Author; Field id: @custom directive, body template must use a field with type ID! + or a field with @id directive.", + "locations": [{ "line": 5, "column": 12 }], + }, ] - }, - { - "message": "Type Author; Field id; @custom directive, body template must use fields defined within the type, found `foo`.", - "locations": [ - { - "line": 5, - "column": 12 - } - ] - }, - { - "message": "Type Author; Field id: @custom directive, body template must use a field with type ID! or a field with @id directive.", - "locations": [ - { - "line": 5, - "column": 12 - } - ] - } - ] - - - name: "@custom directive not allowed on field with @id directive" + - name: "@custom directive not allowed on field with @id directive" input: | type Author { id: ID! @@ -1692,13 +2086,17 @@ invalid_schemas: }) bar: String } - errlist: [ - {"message": Type Author; Field name; custom directive not allowed on field of type ID! or field with @id directive., - "locations":[{"line":3, "column":22}]}, - ] + errlist: + [ + { + "message": + Type Author; Field name; custom directive not allowed on field of type ID! or field with + @id directive., + "locations": [{ "line": 3, "column": 22 }], + }, + ] - - - name: "@custom directive on field where body required itself" + - name: "@custom directive on field where body required itself" input: | type Author { id: ID! @@ -1709,29 +2107,22 @@ invalid_schemas: }) bar: String } - errlist: [ - { - "message": "Type Author; Field name; @custom directive, body template can't require itself.", - "locations": [ - { - "line": 6, - "column": 12 - } - ] - }, - { - "message": "Type Author; Field name; @custom directive, body template can't use another field with @custom/@lambda directive, found field `name` with @custom/@lambda.", - "locations": [ - { - "line": 6, - "column": 12 - } + errlist: + [ + { + "message": + "Type Author; Field name; @custom directive, body template can't require itself.", + "locations": [{ "line": 6, "column": 12 }], + }, + { + "message": + "Type Author; Field name; @custom directive, body template can't use another field with + @custom/@lambda directive, found field `name` with @custom/@lambda.", + "locations": [{ "line": 6, "column": 12 }], + }, ] - } - ] - - - name: "@custom directive on field where body uses undefined field" + - name: "@custom directive on field where body uses undefined field" input: | type Author { id: ID! @@ -1742,29 +2133,23 @@ invalid_schemas: }) bar: String } - errlist: [ - { - "message": "Type Author; Field name; @custom directive, body template must use fields defined within the type, found `abc`.", - "locations": [ - { - "line": 6, - "column": 12 - } - ] - }, - { - "message": "Type Author; Field name: @custom directive, body template must use a field with type ID! or a field with @id directive.", - "locations": [ - { - "line": 6, - "column": 12 - } + errlist: + [ + { + "message": + "Type Author; Field name; @custom directive, body template must use fields defined + within the type, found `abc`.", + "locations": [{ "line": 6, "column": 12 }], + }, + { + "message": + "Type Author; Field name: @custom directive, body template must use a field with type + ID! or a field with @id directive.", + "locations": [{ "line": 6, "column": 12 }], + }, ] - } - ] - - - name: "@custom directive on field where body doesn't use scalar field" + - name: "@custom directive on field where body doesn't use scalar field" input: | type Note { test: String! @@ -1779,13 +2164,17 @@ invalid_schemas: body: "{ id: $id, abc: $foo }" }) } - errlist: [ - {"message": "Type Author; Field yo; @custom directive, body template must use scalar fields, found field `foo` of type `Note`.", - "locations":[{"line":11, "column":12}]}, - ] + errlist: + [ + { + "message": + "Type Author; Field yo; @custom directive, body template must use scalar fields, found + field `foo` of type `Note`.", + "locations": [{ "line": 11, "column": 12 }], + }, + ] - - - name: "@custom directive on field where body uses another field with @custom" + - name: "@custom directive on field where body uses another field with @custom" input: | type Author { id: ID! @@ -1801,13 +2190,17 @@ invalid_schemas: body: "{ id: $id, abc: $foo }" }) } - errlist: [ - {"message": "Type Author; Field yo; @custom directive, body template can't use another field with @custom/@lambda directive, found field `foo` with @custom/@lambda.", - "locations":[{"line":12, "column":12}]}, - ] + errlist: + [ + { + "message": + "Type Author; Field yo; @custom directive, body template can't use another field with + @custom/@lambda directive, found field `foo` with @custom/@lambda.", + "locations": [{ "line": 12, "column": 12 }], + }, + ] - - - name: "@custom directive on field doesn't use field with ID! type or @id directive in body" + - name: "@custom directive on field doesn't use field with ID! type or @id directive in body" input: | type Author { id: ID! @@ -1819,13 +2212,17 @@ invalid_schemas: body: "{ abc: $foo }" }) } - errlist: [ - {"message": "Type Author; Field yo: @custom directive, body template must use a field with type ID! or a field with @id directive.", - "locations":[{"line":8, "column":12}]}, - ] + errlist: + [ + { + "message": + "Type Author; Field yo: @custom directive, body template must use a field with type ID! + or a field with @id directive.", + "locations": [{ "line": 8, "column": 12 }], + }, + ] - - - name: "@custom directive on field where graphql required itself" + - name: "@custom directive on field where graphql required itself" input: | type Author { id: ID! @@ -1836,29 +2233,21 @@ invalid_schemas: }) bar: String } - errlist: [ - { - "message": "Type Author; Field name; @custom directive, graphql can't require itself.", - "locations": [ - { - "line": 6, - "column": 15 - } - ] - }, - { - "message": "Type Author; Field name; @custom directive, graphql can't use another field with @custom/@lambda directive, found field `name` with @custom/@lambda.", - "locations": [ - { - "line": 6, - "column": 15 - } + errlist: + [ + { + "message": "Type Author; Field name; @custom directive, graphql can't require itself.", + "locations": [{ "line": 6, "column": 15 }], + }, + { + "message": + "Type Author; Field name; @custom directive, graphql can't use another field with + @custom/@lambda directive, found field `name` with @custom/@lambda.", + "locations": [{ "line": 6, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive on field where graphql uses undefined field for single mode" + - name: "@custom directive on field where graphql uses undefined field for single mode" input: | type Author { id: ID! @@ -1869,20 +2258,17 @@ invalid_schemas: }) bar: String } - errlist: [ - { - "message": "Type Author; Field name; @custom directive, graphql must use fields defined within the type, found `abc`.", - "locations": [ - { - "line": 6, - "column": 15 - } + errlist: + [ + { + "message": + "Type Author; Field name; @custom directive, graphql must use fields defined within the + type, found `abc`.", + "locations": [{ "line": 6, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive on field where graphql uses undefined field for batch mode" + - name: "@custom directive on field where graphql uses undefined field for batch mode" input: | type Author { id: ID! @@ -1895,19 +2281,16 @@ invalid_schemas: }) bar: String } - errlist: [ - { - "message": "Type Author; Field name; @custom directive, body template must use fields defined within the type, found `abc`.", - "locations": [ - { - "line": 8, - "column": 12 - } + errlist: + [ + { + "message": + "Type Author; Field name; @custom directive, body template must use fields defined + within the type, found `abc`.", + "locations": [{ "line": 8, "column": 12 }], + }, ] - }, - ] - - - name: "@custom directive on field where graphql doesn't use scalar field" + - name: "@custom directive on field where graphql doesn't use scalar field" input: | type Note { test: String! @@ -1922,20 +2305,17 @@ invalid_schemas: graphql: "query($id: ID!, $foo: Note) { getName(abc: $foo, id: $id) }" }) } - errlist: [ - { - "message": "Type Author; Field yo; @custom directive, graphql must use scalar fields, found field `foo` of type `Note`.", - "locations": [ - { - "line": 11, - "column": 15 - } + errlist: + [ + { + "message": + "Type Author; Field yo; @custom directive, graphql must use scalar fields, found field + `foo` of type `Note`.", + "locations": [{ "line": 11, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive on field where body uses another field with @custom" + - name: "@custom directive on field where body uses another field with @custom" input: | type Author { id: ID! @@ -1951,20 +2331,17 @@ invalid_schemas: graphql: "query($id: ID!, $foo: String!) { getName(abc: $foo, id: $id) }" }) } - errlist: [ - { - "message": "Type Author; Field yo; @custom directive, graphql can't use another field with @custom/@lambda directive, found field `foo` with @custom/@lambda.", - "locations": [ - { - "line": 12, - "column": 15 - } + errlist: + [ + { + "message": + "Type Author; Field yo; @custom directive, graphql can't use another field with + @custom/@lambda directive, found field `foo` with @custom/@lambda.", + "locations": [{ "line": 12, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive on field doesn't use field with ID! type or @id directive in graphql" + - name: "@custom directive on field doesn't use field with ID! type or @id directive in graphql" input: | type Author { id: ID! @@ -1976,20 +2353,17 @@ invalid_schemas: graphql: "query($foo: String) { getName(abc: $foo) }" }) } - errlist: [ - { - "message": "Type Author; Field yo: @custom directive, graphql must use a field with type ID! or a field with @id directive.", - "locations": [ - { - "line": 8, - "column": 15 - } + errlist: + [ + { + "message": + "Type Author; Field yo: @custom directive, graphql must use a field with type ID! or a + field with @id directive.", + "locations": [{ "line": 8, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive on field where type doesn't have id field" + - name: "@custom directive on field where type doesn't have id field" input: | type Author { foo: String! @@ -2000,38 +2374,29 @@ invalid_schemas: }) bar: String } - errlist: [ - { - "message": Type Author; Field name; @custom directive is only allowed on fields where the type definition has a field with type ID! or a field with @id directive., - "locations": [ - { - "line": 3, - "column": 18 - } + errlist: + [ + { + "message": + Type Author; Field name; @custom directive is only allowed on fields where the type + definition has a field with type ID! or a field with @id directive., + "locations": [{ "line": 3, "column": 18 }], + }, + { + "message": + "Type Author; Field name; @custom directive, body template must use fields defined + within the type, found `abc`.", + "locations": [{ "line": 6, "column": 12 }], + }, + { + "message": + "Type Author; Field name: @custom directive, body template must use a field with type + ID! or a field with @id directive.", + "locations": [{ "line": 6, "column": 12 }], + }, ] - }, - { - "message": "Type Author; Field name; @custom directive, body template must use fields defined within the type, found `abc`.", - "locations": [ - { - "line": 6, - "column": 12 - } - ] - }, - { - "message": "Type Author; Field name: @custom directive, body template must use a field with type ID! or a field with @id directive.", - "locations": [ - { - "line": 6, - "column": 12 - } - ] - } - ] - - - name: "@custom directive not allowed along with @search directive" + - name: "@custom directive not allowed along with @search directive" input: | type Author { id: ID! @@ -2042,13 +2407,16 @@ invalid_schemas: }) bar: String } - errlist: [ - {"message": Type Author; Field name; custom directive not allowed along with @search directive., - "locations":[{"line":3, "column":26}]}, - ] + errlist: + [ + { + "message": + Type Author; Field name; custom directive not allowed along with @search directive., + "locations": [{ "line": 3, "column": 26 }], + }, + ] - - - name: "@custom directive not allowed along with @dgraph directive" + - name: "@custom directive not allowed along with @dgraph directive" input: | type Author { id: ID! @@ -2059,13 +2427,16 @@ invalid_schemas: }) bar: String } - errlist: [ - {"message": Type Author; Field name; custom directive not allowed along with @dgraph directive., - "locations":[{"line":3, "column":39}]}, - ] + errlist: + [ + { + "message": + Type Author; Field name; custom directive not allowed along with @dgraph directive., + "locations": [{ "line": 3, "column": 39 }], + }, + ] - - - name: "@custom directive on a field in a type, only defined fields allowed in url path" + - name: "@custom directive on a field in a type, only defined fields allowed in url path" input: | type Author { id: ID! @@ -2076,29 +2447,23 @@ invalid_schemas: body: "{ id: $id }" }) } - errlist: [ - { - "message": Type Author; Field name; url path inside @custom directive uses a field fooz that is not defined., - "locations": [ - { - "line": 5, - "column": 11 - } - ] - }, - { - "message": Type Author; Field name; url path inside @custom directive uses a field bar that can be null., - "locations": [ - { - "line": 5, - "column": 11 - } + errlist: + [ + { + "message": + Type Author; Field name; url path inside @custom directive uses a field fooz that is not + defined., + "locations": [{ "line": 5, "column": 11 }], + }, + { + "message": + Type Author; Field name; url path inside @custom directive uses a field bar that can be + null., + "locations": [{ "line": 5, "column": 11 }], + }, ] - } - ] - - - name: "@custom directive on a field in a type, only mandatory fields allowed in url path" + - name: "@custom directive on a field in a type, only mandatory fields allowed in url path" input: | type Author { id: ID! @@ -2110,28 +2475,22 @@ invalid_schemas: body: "{ id: $id }" }) } - errlist: [ - { - "message": Type Author; Field name; url path inside @custom directive uses a field foo that can be null., - "locations": [ - { - "line": 6, - "column": 11 - } + errlist: + [ + { + "message": + Type Author; Field name; url path inside @custom directive uses a field foo that can be + null., + "locations": [{ "line": 6, "column": 11 }], + }, + { + "message": + Type Author; Field name; url path inside @custom directive uses a field bar that can be + null., + "locations": [{ "line": 6, "column": 11 }], + }, ] - }, - { - "message": Type Author; Field name; url path inside @custom directive uses a field bar that can be null., - "locations": [ - { - "line": 6, - "column": 11 - } - ] - } - ] - - - name: "@custom directive with variable definitions in operation in graphql" + - name: "@custom directive with variable definitions in operation in graphql" input: | type Author { id: ID! @@ -2145,20 +2504,19 @@ invalid_schemas: graphql: "query ($input: [UserInput]) { getUsers(input: $input) }" }) } - errlist: [ - { - "message": "Type Query; Field getAuthors; @custom directive, graphql variables must use fields defined within the type, found `input`.", - "locations": [ - { - "line": 10, - "column": 15 - } + errlist: + [ + { + "message": + "Type Query; Field getAuthors; @custom directive, graphql variables must use fields + defined within the type, found `input`.", + "locations": [{ "line": 10, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive on a field in a type, should only use fields defined in the type as GraphQL variables" + - name: + "@custom directive on a field in a type, should only use fields defined in the type as GraphQL + variables" input: | type Author { id: ID! @@ -2170,28 +2528,23 @@ invalid_schemas: graphql: "query ($fooz: String) { getUsers(foo: $fooz) }" }) } - errlist: [ - { - "message": "Type Author; Field name; @custom directive, graphql must use fields defined within the type, found `fooz`.", - "locations": [ - { - "line": 8, - "column": 15 - } - ] - }, - { - "message": "Type Author; Field name: @custom directive, graphql must use a field with type ID! or a field with @id directive.", - "locations": [ - { - "line": 8, - "column": 15 - } + errlist: + [ + { + "message": + "Type Author; Field name; @custom directive, graphql must use fields defined within the + type, found `fooz`.", + "locations": [{ "line": 8, "column": 15 }], + }, + { + "message": + "Type Author; Field name: @custom directive, graphql must use a field with type ID! or a + field with @id directive.", + "locations": [{ "line": 8, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive on a field in a type, should only use scalar fields as GraphQL variables" + - name: + "@custom directive on a field in a type, should only use scalar fields as GraphQL variables" input: | type Car { id: ID! @@ -2208,29 +2561,23 @@ invalid_schemas: graphql: "query ($car: Car) { getUsers(foo: $car) }" }) } - errlist: [ - { - "message": "Type Author; Field name; @custom directive, graphql must use scalar fields, found field `car` of type `Car`.", - "locations": [ - { - "line": 13, - "column": 15 - } - ] - }, - { - "message": "Type Author; Field name: @custom directive, graphql must use a field with type ID! or a field with @id directive.", - "locations": [ - { - "line": 13, - "column": 15 - } + errlist: + [ + { + "message": + "Type Author; Field name; @custom directive, graphql must use scalar fields, found field + `car` of type `Car`.", + "locations": [{ "line": 13, "column": 15 }], + }, + { + "message": + "Type Author; Field name: @custom directive, graphql must use a field with type ID! or a + field with @id directive.", + "locations": [{ "line": 13, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive on a field in a type, only defined fields allowed in url query" + - name: "@custom directive on a field in a type, only defined fields allowed in url query" input: | type Author { id: ID! @@ -2241,10 +2588,15 @@ invalid_schemas: body: "{ id: $id }" }) } - errlist: [ - {"message": Type Author; Field name; url query inside @custom directive uses a field fooz that is not defined., - "locations":[{"line":5, "column":11}]}, - ] + errlist: + [ + { + "message": + Type Author; Field name; url query inside @custom directive uses a field fooz that is + not defined., + "locations": [{ "line": 5, "column": 11 }], + }, + ] - name: "@auth directive on field" input: | @@ -2252,10 +2604,13 @@ invalid_schemas: username: String! @id @auth(query: {rule: "{ X_MyApp_Role : { eq : \"ADMIN\"}}" }) userRole: String @search(by: [hash]) } - errlist: [ - {"message": Directive auth is not applicable on FIELD_DEFINITION., - "locations":[{"line":2, "column":26}]}, - ] + errlist: + [ + { + "message": Directive auth is not applicable on FIELD_DEFINITION., + "locations": [{ "line": 2, "column": 26 }], + }, + ] - name: "@auth and @remote directive on type" input: | @@ -2274,10 +2629,13 @@ invalid_schemas: body: "{sid: $id}" }) } - errlist: [ - {"message": Type Class; cannot have both @auth and @remote directive, - "locations":[{"line":1, "column":6}]}, - ] + errlist: + [ + { + "message": Type Class; cannot have both @auth and @remote directive, + "locations": [{ "line": 1, "column": 6 }], + }, + ] - name: "@withSubscription and @remote directive on type" input: | @@ -2296,13 +2654,15 @@ invalid_schemas: body: "{sid: $id}" }) } - errlist: [ - {"message": Type Class; cannot have both @withSubscription and @remote directive, - "locations":[{"line":1, "column":6}]}, - ] + errlist: + [ + { + "message": Type Class; cannot have both @withSubscription and @remote directive, + "locations": [{ "line": 1, "column": 6 }], + }, + ] - - - name: "@custom directive on field where graphql uses a field without a variable definition" + - name: "@custom directive on field where graphql uses a field without a variable definition" input: | type Author { id: ID! @@ -2313,20 +2673,17 @@ invalid_schemas: graphql: "query($id: ID!) { getName(obj: [{abc: $age}], id: $id) }" }) } - errlist: [ - { - "message": "Type Author; Field name; @custom directive, graphql must use fields with a variable definition, found `age`.", - "locations": [ - { - "line": 7, - "column": 15 - } + errlist: + [ + { + "message": + "Type Author; Field name; @custom directive, graphql must use fields with a variable + definition, found `age`.", + "locations": [{ "line": 7, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive on query where graphql uses a field without a variable definition" + - name: "@custom directive on query where graphql uses a field without a variable definition" input: | type Author { id: ID! @@ -2340,20 +2697,17 @@ invalid_schemas: graphql: "query { getUsers(input: $input) }" }) } - errlist: [ - { - "message": "Type Query; Field getAuthors; @custom directive, graphql must use fields with a variable definition, found `input`.", - "locations": [ - { - "line": 10, - "column": 15 - } + errlist: + [ + { + "message": + "Type Query; Field getAuthors; @custom directive, graphql must use fields with a + variable definition, found `input`.", + "locations": [{ "line": 10, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive on mutation where graphql uses a field without a variable definition" + - name: "@custom directive on mutation where graphql uses a field without a variable definition" input: | type Author { id: ID! @@ -2371,20 +2725,19 @@ invalid_schemas: graphql: "query { getUsers(input: $input) }" }) } - errlist: [ - { - "message": "Type Mutation; Field setCountry1; @custom directive, graphql must use fields with a variable definition, found `input`.", - "locations": [ - { - "line": 14, - "column": 15 - } + errlist: + [ + { + "message": + "Type Mutation; Field setCountry1; @custom directive, graphql must use fields with a + variable definition, found `input`.", + "locations": [{ "line": 14, "column": 15 }], + }, ] - }, - ] - - - name: "@custom directive on field with batch mode where graphql uses a field without a variable definition" + - name: + "@custom directive on field with batch mode where graphql uses a field without a variable + definition" input: | type Author { id: ID! @@ -2397,20 +2750,17 @@ invalid_schemas: body: "{ id: $id, age: $age }" }) } - errlist: [ - { - "message": "Type Author; Field name; @custom directive, graphql must use fields with a variable definition, found `input`.", - "locations": [ - { - "line": 7, - "column": 15 - } + errlist: + [ + { + "message": + "Type Author; Field name; @custom directive, graphql must use fields with a variable + definition, found `input`.", + "locations": [{ "line": 7, "column": 15 }], + }, ] - }, - ] - - - name: invalid value for skip introspection + - name: invalid value for skip introspection input: | type Author { id: ID! @@ -2423,32 +2773,33 @@ invalid_schemas: skipIntrospection: "random" }) } - errlist: [ - { - "message": "Type Author; Field name; skipIntrospection in @custom directive can only be true/false, found: `random`.", - "locations": [ - { - "line": 7, - "column": 15 - } + errlist: + [ + { + "message": + "Type Author; Field name; skipIntrospection in @custom directive can only be true/false, + found: `random`.", + "locations": [{ "line": 7, "column": 15 }], + }, ] - }, - ] - - - name: type can't just have ID! type field + - name: type can't just have ID! type field input: | type Author { id: ID! } - errlist: [ - {"message": "Type Author; is invalid, a type must have atleast one field that is not of ID! type and doesn't have @custom/@lambda directive.", - "locations":[{"line":1, "column":6}]}, + errlist: + [ + { + "message": + "Type Author; is invalid, a type must have atleast one field that is not of ID! type and + doesn't have @custom/@lambda directive.", + "locations": [{ "line": 1, "column": 6 }], + }, ] - - - name: types must have field which is not of ID! type and doesn't have @custom directive + - name: types must have field which is not of ID! type and doesn't have @custom directive input: | type Author { id: ID! @@ -2459,9 +2810,14 @@ invalid_schemas: skipIntrospection: true }) } - errlist: [ - {"message": "Type Author; is invalid, a type must have atleast one field that is not of ID! type and doesn't have @custom/@lambda directive.", - "locations":[{"line":1, "column":6}]}, + errlist: + [ + { + "message": + "Type Author; is invalid, a type must have atleast one field that is not of ID! type and + doesn't have @custom/@lambda directive.", + "locations": [{ "line": 1, "column": 6 }], + }, ] - name: There shoudnt be any reserved arguments on any field @@ -2469,11 +2825,19 @@ invalid_schemas: type T { f(first: Int): String } - errlist: [ - {"message": "Type T; Field f: can't have first as an argument because it is a reserved argument.", "locations": [{"line": 2, "column": 3}]}] + errlist: + [ + { + "message": + "Type T; Field f: can't have first as an argument because it is a reserved argument.", + "locations": [{ "line": 2, "column": 3 }], + }, + ] - name: remote type with @custom directives on fields shouldn't be allowed - description: Remote types are not resolved further currently, hence they shouldn't have fields with @custom directive on them. + description: + Remote types are not resolved further currently, hence they shouldn't have fields with @custom + directive on them. input: | type User { id: ID! @@ -2489,14 +2853,20 @@ invalid_schemas: body: "{sid: $id}" }) } - errlist: [ - {"message": Type School; field name; can't have @custom/@lambda directive as a @remote - type can't have fields with @custom/@lambda directive., "locations": [{"line":9, "column":3}]} - ] + errlist: + [ + { + "message": + Type School; field name; can't have @custom/@lambda directive as a @remote type can't + have fields with @custom/@lambda directive., + "locations": [{ "line": 9, "column": 3 }], + }, + ] - - - name: a non-remote type can't have fields which are of remote type - description: This is disallowed because we don't generate UserRef etc., so we can't allow adding/updating user from author + - name: a non-remote type can't have fields which are of remote type + description: + This is disallowed because we don't generate UserRef etc., so we can't allow adding/updating + user from author input: | type User @remote { id: ID! @@ -2508,15 +2878,20 @@ invalid_schemas: age: Int! neighbour: [User!] } - errlist: [ - {"message": Type Author; field neighbour; is of a type that has @remote directive. Those - would need to be resolved by a @custom/@lambda directive., - "locations": [{"line":9, "column":3}]} - ] + errlist: + [ + { + "message": + Type Author; field neighbour; is of a type that has @remote directive. Those would need + to be resolved by a @custom/@lambda directive., + "locations": [{ "line": 9, "column": 3 }], + }, + ] - - - name: a remote type can't implement a non-remote interface - description: Since we won't be adding/update the remote type, it wouldn't show up in getPerson, queryPerson etc., hence causing confusion. + - name: a remote type can't implement a non-remote interface + description: + Since we won't be adding/update the remote type, it wouldn't show up in getPerson, queryPerson + etc., hence causing confusion. input: | interface Person { id: ID! @@ -2525,15 +2900,20 @@ invalid_schemas: type User implements Person @remote { age: Int! } - errlist: [ - {"message": Type User; with @remote directive implements interface Person; which doesn't have - @remote directive., - "locations": [{"line":5, "column":6}]} - ] + errlist: + [ + { + "message": + Type User; with @remote directive implements interface Person; which doesn't have + @remote directive., + "locations": [{ "line": 5, "column": 6 }], + }, + ] - - - name: non-remote type can't implement a remote type - description: Dgraph schema generation and possibly the way we do field mapping would have to be re-worked to make this work correctly + - name: non-remote type can't implement a remote type + description: + Dgraph schema generation and possibly the way we do field mapping would have to be re-worked + to make this work correctly input: | interface Person @remote { id: ID! @@ -2542,11 +2922,15 @@ invalid_schemas: type User implements Person { age: Int! } - errlist: [ - {"message": Type User; without @remote directive can't implement an interface Person; with - have @remote directive., - "locations": [{"line":5, "column":6}]} - ] + errlist: + [ + { + "message": + Type User; without @remote directive can't implement an interface Person; with have + @remote directive., + "locations": [{ "line": 5, "column": 6 }], + }, + ] - name: ID field can't have @dgraph directive and @search directive input: | @@ -2554,33 +2938,49 @@ invalid_schemas: id: ID @dgraph(pred: "X.id") @search name: String } - errlist: [ - {"message": "Type X; Field id: has the @dgraph directive but fields of type ID can't - have the @dgraph directive.", - "locations":[{"line":2, "column":13}]}, - {"message": "Type X; Field id: has the @search directive but fields of type ID can't - have the @search directive.", - "locations":[{"line":2, "column":35}]} - ] + errlist: + [ + { + "message": + "Type X; Field id: has the @dgraph directive but fields of type ID can't have the + @dgraph directive.", + "locations": [{ "line": 2, "column": 13 }], + }, + { + "message": + "Type X; Field id: has the @search directive but fields of type ID can't have the + @search directive.", + "locations": [{ "line": 2, "column": 35 }], + }, + ] - - name: "@dgraph directive on ID field and @dgraph directive with reverse pred argument on scalar - field is not allowed." + - name: + "@dgraph directive on ID field and @dgraph directive with reverse pred argument on scalar + field is not allowed." input: | type X { id: ID @dgraph(pred: "X.id") f1: String! @dgraph(pred:"~movie") } - errlist: [ - {"message": "Type X; Field id: has the @dgraph directive but fields of type ID can't have the - @dgraph directive.", - "locations":[{"line":2, "column":13}]}, - {"message": "Type X; Field f1 is of type String, but reverse predicate in @dgraph directive - only applies to fields with object types.", - "locations":[{"line":3, "column":5}]} - ] + errlist: + [ + { + "message": + "Type X; Field id: has the @dgraph directive but fields of type ID can't have the + @dgraph directive.", + "locations": [{ "line": 2, "column": 13 }], + }, + { + "message": + "Type X; Field f1 is of type String, but reverse predicate in @dgraph directive only + applies to fields with object types.", + "locations": [{ "line": 3, "column": 5 }], + }, + ] - - name: "Multiple type: @dgraph directive on ID field and @dgraph directive with reverse pred - argument on scalar field is not allowed." + - name: + "Multiple type: @dgraph directive on ID field and @dgraph directive with reverse pred argument + on scalar field is not allowed." input: | type X { id: ID @dgraph(pred: "X.id") @@ -2589,25 +2989,37 @@ invalid_schemas: type Y { f1: String! @dgraph(pred:"~movie") } - errlist: [ - {"message": "Type X; Field id: has the @dgraph directive but fields of type ID can't have the - @dgraph directive.", - "locations":[{"line":2, "column":13}]}, - {"message": "Type Y; Field f1 is of type String, but reverse predicate in @dgraph directive only - applies to fields with object types.", - "locations":[{"line":6, "column":5}]} - ] + errlist: + [ + { + "message": + "Type X; Field id: has the @dgraph directive but fields of type ID can't have the + @dgraph directive.", + "locations": [{ "line": 2, "column": 13 }], + }, + { + "message": + "Type Y; Field f1 is of type String, but reverse predicate in @dgraph directive only + applies to fields with object types.", + "locations": [{ "line": 6, "column": 5 }], + }, + ] - - - name: as is reserved keyword - type Name + - name: as is reserved keyword - type Name input: | type As { id: ID! name: String } - errlist: [ - { "message": "As is a reserved word, so you can't declare a type with this name. Pick a different name for the type.", "locations": [ { "line": 1, "column": 6 } ] }, - ] + errlist: + [ + { + "message": + "As is a reserved word, so you can't declare a type with this name. Pick a different + name for the type.", + "locations": [{ "line": 1, "column": 6 }], + }, + ] - name: as is reserved keyword - field name input: | @@ -2615,9 +3027,15 @@ invalid_schemas: as: ID! name: String } - errlist: [ - { "message": "Type X; Field as: as is a reserved keyword and you cannot declare a field with this name.", "locations": [ { "line": 2, "column": 3 } ] }, - ] + errlist: + [ + { + "message": + "Type X; Field as: as is a reserved keyword and you cannot declare a field with this + name.", + "locations": [{ "line": 2, "column": 3 }], + }, + ] - name: as is reserved keyword - type name using @dgraph directive input: | @@ -2625,9 +3043,13 @@ invalid_schemas: id: ID! name: String } - errlist: [ - { "message": Type X; type argument 'as' for @dgraph directive is a reserved keyword., "locations": [ { "line": 1, "column": 9 } ] }, - ] + errlist: + [ + { + "message": Type X; type argument 'as' for @dgraph directive is a reserved keyword., + "locations": [{ "line": 1, "column": 9 }], + }, + ] - name: as is reserved keyword - field name using @dgraph directive input: | @@ -2635,9 +3057,14 @@ invalid_schemas: id: ID! name: String @dgraph(pred:"as") } - errlist: [ - { "message": "Type X; Field name: pred argument 'as' for @dgraph directive is a reserved keyword.", "locations": [ { "line": 3, "column": 17 } ] }, - ] + errlist: + [ + { + "message": + "Type X; Field name: pred argument 'as' for @dgraph directive is a reserved keyword.", + "locations": [{ "line": 3, "column": 17 }], + }, + ] - name: field type mismatched between implementation and interface input: | @@ -2647,8 +3074,12 @@ invalid_schemas: type I3 implements I1 { name:String } - errlist: [ - { "message": For type I3 to implement interface I1 the field name must have type String!, "locations": [ { "line": 4, "column": 6 } ] }, + errlist: + [ + { + "message": For type I3 to implement interface I1 the field name must have type String!, + "locations": [{ "line": 4, "column": 6 }], + }, ] - name: Type implements multiple interfaces with same field name @@ -2662,9 +3093,13 @@ invalid_schemas: type I3 implements I1 & I2 { name:String! } - errlist: [ - { "message": Field I3.name can only be defined once., "locations": [ { "line": 2, "column": 5 } ] }, - ] + errlist: + [ + { + "message": Field I3.name can only be defined once., + "locations": [{ "line": 2, "column": 5 }], + }, + ] - name: "@external directive can only be used on fields of Type Extension" input: | @@ -2672,8 +3107,14 @@ invalid_schemas: id: ID! @external reviews: String } - errlist: [ - { "message": "Type Product: Field id: @external directive can only be defined on fields in type extensions. i.e., the type must have `@extends` or use `extend` keyword.", "locations": [ { "line": 2, "column": 14 } ] }, + errlist: + [ + { + "message": + "Type Product: Field id: @external directive can only be defined on fields in type + extensions. i.e., the type must have `@extends` or use `extend` keyword.", + "locations": [{ "line": 2, "column": 14 }], + }, ] - name: "@key directive defined more than once" @@ -2683,8 +3124,12 @@ invalid_schemas: name: String! @id reviews: String } - errlist: [ - { "message": Type Product; @key directive should not be defined more than once., "locations": [ { "line": 1, "column": 34 } ] }, + errlist: + [ + { + "message": Type Product; @key directive should not be defined more than once., + "locations": [{ "line": 1, "column": 34 }], + }, ] - name: Argument inside @key directive uses field not defined in the type @@ -2694,8 +3139,13 @@ invalid_schemas: name: String! @id reviews: String } - errlist: [ - { "message": Type Product; @key directive uses a field username which is not defined inside the type., "locations": [ { "line": 1, "column":19 } ] }, + errlist: + [ + { + "message": + Type Product; @key directive uses a field username which is not defined inside the type., + "locations": [{ "line": 1, "column": 19 }], + }, ] - name: Argument inside @key directive must have ID field or field with @id directive @@ -2705,8 +3155,14 @@ invalid_schemas: name: String! @external reviews: String } - errlist: [ - { "message": "Type Product: Field name: used inside @key directive should be of type ID or have @id directive.", "locations": [ { "line": 1, "column": 26 } ] }, + errlist: + [ + { + "message": + "Type Product: Field name: used inside @key directive should be of type ID or have @id + directive.", + "locations": [{ "line": 1, "column": 26 }], + }, ] - name: "@extends directive without @key directive" @@ -2721,9 +3177,13 @@ invalid_schemas: id: ID! review: String! } - errlist: [ - {"message": Type Product; Type Extension cannot be defined without @key directive, "locations": [ { "line": 13, "column": 12} ] }, - ] + errlist: + [ + { + "message": Type Product; Type Extension cannot be defined without @key directive, + "locations": [{ "line": 13, "column": 12 }], + }, + ] - name: "@remote directive with @key" input: | @@ -2737,9 +3197,13 @@ invalid_schemas: id: ID! review: String! } - errlist: [ - {"message": Type Product; @remote directive cannot be defined with @key directive, "locations": [ { "line": 181, "column": 12} ] }, - ] + errlist: + [ + { + "message": Type Product; @remote directive cannot be defined with @key directive, + "locations": [{ "line": 181, "column": 12 }], + }, + ] - name: directives defined on @external fields that are not @key. input: | @@ -2753,9 +3217,15 @@ invalid_schemas: id: ID! review: String! } - errlist: [ - {"message": "Type Product: Field name: @search directive can not be defined on @external fields that are not @key.", "locations": [ { "line": 3, "column": 18} ] }, - ] + errlist: + [ + { + "message": + "Type Product: Field name: @search directive can not be defined on @external fields that + are not @key.", + "locations": [{ "line": 3, "column": 18 }], + }, + ] - name: "@embedding directive on a field with String type" input: | @@ -2765,9 +3235,15 @@ invalid_schemas: title: String productVector: String @embedding } - errlist: [ - {"message": "Type Product; Field productVector: The field with @embedding directive is of type String, but @embedding directive only applies to fields of type [Float!].", "locations": [ { "line": 5, "column": 3} ] }, - ] + errlist: + [ + { + "message": + "Type Product; Field productVector: The field with @embedding directive is of type + String, but @embedding directive only applies to fields of type [Float!].", + "locations": [{ "line": 5, "column": 3 }], + }, + ] - name: "@embedding directive on a field with [Int] type" input: | @@ -2776,9 +3252,15 @@ invalid_schemas: name: String userVector: [Int] @embedding } - errlist: [ - {"message": "Type User; Field userVector: The field with @embedding directive is of type [Int], but @embedding directive only applies to fields of type [Float!].", "locations": [ { "line": 4, "column": 3} ] }, - ] + errlist: + [ + { + "message": + "Type User; Field userVector: The field with @embedding directive is of type [Int], but + @embedding directive only applies to fields of type [Float!].", + "locations": [{ "line": 4, "column": 3 }], + }, + ] - name: "@requires directive defined on type definitions" input: | @@ -2791,9 +3273,15 @@ invalid_schemas: id: ID! review: String! } - errlist: [ - {"message": "Type Product: Field reviews: @requires directive can only be defined on fields in type extensions. i.e., the type must have `@extends` or use `extend` keyword.", "locations": [ { "line": 4, "column": 23} ] } - ] + errlist: + [ + { + "message": + "Type Product: Field reviews: @requires directive can only be defined on fields in type + extensions. i.e., the type must have `@extends` or use `extend` keyword.", + "locations": [{ "line": 4, "column": 23 }], + }, + ] - name: argument inside @requires directive is not an @external field. input: | @@ -2806,9 +3294,13 @@ invalid_schemas: id: ID! review: String! } - errlist: [ - {"message": Type Product; Field name must be @external., "locations": [ { "line": 4, "column": 23} ] } - ] + errlist: + [ + { + "message": Type Product; Field name must be @external., + "locations": [{ "line": 4, "column": 23 }], + }, + ] - name: "@provides directive used on field with type that does not have a @key." input: | @@ -2821,9 +3313,13 @@ invalid_schemas: id: ID! name: String } - errlist: [ - {"message": Type Product; Field reviews does not return a type that has a @key., "locations": [ { "line": 4, "column": 23} ] } - ] + errlist: + [ + { + "message": Type Product; Field reviews does not return a type that has a @key., + "locations": [{ "line": 4, "column": 23 }], + }, + ] - name: "@provides directive uses a field that is not defined in the extended type" input: | @@ -2835,9 +3331,14 @@ invalid_schemas: id: ID! @external reviews: [Review] } - errlist: [ - {"message": "Type Review; Field author: @provides field username doesn't exist for type User.", "locations": [ { "line": 3, "column": 17} ] } - ] + errlist: + [ + { + "message": + "Type Review; Field author: @provides field username doesn't exist for type User.", + "locations": [{ "line": 3, "column": 17 }], + }, + ] - name: "@withSubscription on custom http query" input: | @@ -2853,32 +3354,48 @@ invalid_schemas: forwardHeaders: ["Authorization"] }) } - errlist: [ - { "message": "Type Query; Field getCustomTwitterUser: custom query should have dql argument if @withSubscription directive is set", - "locations": [ { "line": 7, "column": 7 } ] }, + errlist: + [ + { + "message": + "Type Query; Field getCustomTwitterUser: custom query should have dql argument if + @withSubscription directive is set", + "locations": [{ "line": 7, "column": 7 }], + }, ] - name: "@withSubscription on field of type other than Query" input: | - type TwitterUser @remote { - id: ID! - name: String @withSubscription - screen_name: String - } - errlist: [ - { "message": "Type TwitterUser; Field name: @withSubscription directive is applicable only on types and custom dql queries", - "locations": [ { "line": 3, "column": 5 } ] }, + type TwitterUser @remote { + id: ID! + name: String @withSubscription + screen_name: String + } + errlist: + [ + { + "message": + "Type TwitterUser; Field name: @withSubscription directive is applicable only on types + and custom dql queries", + "locations": [{ "line": 3, "column": 5 }], + }, ] - name: "@remoteResponse on field of non @remote type" input: | - type TwitterUser { - id: ID! - name: String @remoteResponse(name: "screen_name") - } - errlist: [ - { "message": "Type TwitterUser: Field name: @remoteResponse directive can only be defined on fields of @remote type.", "locations": [{"line": 3, "column": 17}]} - ] + type TwitterUser { + id: ID! + name: String @remoteResponse(name: "screen_name") + } + errlist: + [ + { + "message": + "Type TwitterUser: Field name: @remoteResponse directive can only be defined on fields + of @remote type.", + "locations": [{ "line": 3, "column": 17 }], + }, + ] - name: "@lambdaOnMutate with bad arg values" input: | @@ -2886,10 +3403,21 @@ invalid_schemas: id: ID! name: String } - errlist: [ - { "message": "Type TwitterUser; update argument in @lambdaOnMutate directive can only be true/false, found: `badValue`.", "locations": [{"line": 1, "column": 45}]}, - { "message": "Type TwitterUser; delete argument in @lambdaOnMutate directive can only be true/false, found: `\"false\"`.", "locations": [{"line": 1, "column": 63}]}, - ] + errlist: + [ + { + "message": + "Type TwitterUser; update argument in @lambdaOnMutate directive can only be true/false, + found: `badValue`.", + "locations": [{ "line": 1, "column": 45 }], + }, + { + "message": + 'Type TwitterUser; delete argument in @lambdaOnMutate directive can only be true/false, + found: `"false"`.', + "locations": [{ "line": 1, "column": 63 }], + }, + ] - name: "@lambdaOnMutate isn't allowed on @remote types" input: | @@ -2903,9 +3431,14 @@ invalid_schemas: method: "GET" }) } - errlist: [ - { "message": Type TwitterUser; @lambdaOnMutate directive not allowed along with @remote directive., "locations": [{"line": 1, "column": 27}]} - ] + errlist: + [ + { + "message": + Type TwitterUser; @lambdaOnMutate directive not allowed along with @remote directive., + "locations": [{ "line": 1, "column": 27 }], + }, + ] - name: language tag field can't contain more than on @ input: | @@ -2913,10 +3446,13 @@ invalid_schemas: name: String! nameHi: String @dgraph(pred:"Person.name@hi@en") } - errlist: [ - { "message": "Type Person; Field nameHi: multiple language tag not supported", - "locations": [ { "line": 3, "column": 19 } ] }, - ] + errlist: + [ + { + "message": "Type Person; Field nameHi: multiple language tag not supported", + "locations": [{ "line": 3, "column": 19 }], + }, + ] - name: language tag field should be of String type input: | @@ -2924,10 +3460,14 @@ invalid_schemas: name: String! nameHi: Int @dgraph(pred:"Person.name@hi") } - errlist: [ - { "message": "Type Person; Field nameHi: Expected type `String` for language tag field but got `Int`", - "locations": [ { "line": 3, "column": 3 } ] }, - ] + errlist: + [ + { + "message": + "Type Person; Field nameHi: Expected type `String` for language tag field but got `Int`", + "locations": [{ "line": 3, "column": 3 }], + }, + ] - name: "@id directive not supported on language tag field" input: | @@ -2935,10 +3475,14 @@ invalid_schemas: name: String! nameHi: String! @dgraph(pred:"Person.name@hi") @id } - errlist: [ - { "message": "Type Person; Field nameHi: @id directive not supported on language tag fields", - "locations": [ { "line": 3, "column": 51 } ] }, - ] + errlist: + [ + { + "message": + "Type Person; Field nameHi: @id directive not supported on language tag fields", + "locations": [{ "line": 3, "column": 51 }], + }, + ] - name: "@search directive not supported on multiple language tag field" input: | @@ -2946,11 +3490,15 @@ invalid_schemas: name: String! nameHiEn: String! @dgraph(pred:"Person.name@hi:en") @search(by: [exact]) } - errlist: [ - { "message": "Type Person; Field nameHiEn: @search directive not applicable on language tag - field with multiple languages", - "locations": [ { "line": 3, "column": 56 } ] }, - ] + errlist: + [ + { + "message": + "Type Person; Field nameHiEn: @search directive not applicable on language tag field + with multiple languages", + "locations": [{ "line": 3, "column": 56 }], + }, + ] - name: unsupported `*` language tag in graphql input: | @@ -2958,10 +3506,13 @@ invalid_schemas: name: String! nameHi: String @dgraph(pred:"Person.name@*") } - errlist: [ - { "message": "Type Person; Field nameHi: `*` language tag not supported in GraphQL", - "locations": [ { "line": 3, "column": 19 } ] }, - ] + errlist: + [ + { + "message": "Type Person; Field nameHi: `*` language tag not supported in GraphQL", + "locations": [{ "line": 3, "column": 19 }], + }, + ] - name: "@id field can't have interface argument when it's defined inside a type" input: | @@ -2969,20 +3520,29 @@ invalid_schemas: name: String! @id(interface:true) age: Int } - errlist: [ - { "message": "Type Person; Field name: @id field with interface argument - can only be defined in interface,not in Type", - "locations": [ { "line": 2, "column": 18 } ] }, - ] + errlist: + [ + { + "message": + "Type Person; Field name: @id field with interface argument can only be defined in + interface,not in Type", + "locations": [{ "line": 2, "column": 18 }], + }, + ] - name: "@default validates field type for value $now" input: | type X { field: String @default(add:{value:"$now"}) } - errlist: [ - {"message": "Type X; Field field: @default directive provides value \"$now\" which cannot be used with String", - "locations":[{"line":2, "column":18}]} + errlist: + [ + { + "message": + 'Type X; Field field: @default directive provides value "$now" which cannot be used with + String', + "locations": [{ "line": 2, "column": 18 }], + }, ] - name: "@default validates value for Int" @@ -2990,9 +3550,14 @@ invalid_schemas: type X { field: Int @default(add:{value:"apple"}) } - errlist: [ - {"message": "Type X; Field field: @default directive provides value \"apple\" which cannot be used with Int", - "locations":[{"line":2, "column":15}]} + errlist: + [ + { + "message": + 'Type X; Field field: @default directive provides value "apple" which cannot be used + with Int', + "locations": [{ "line": 2, "column": 15 }], + }, ] - name: "@default validates value for Float" @@ -3000,9 +3565,14 @@ invalid_schemas: type X { field: Float @default(add:{value:"apple"}) } - errlist: [ - {"message": "Type X; Field field: @default directive provides value \"apple\" which cannot be used with Float", - "locations":[{"line":2, "column":17}]} + errlist: + [ + { + "message": + 'Type X; Field field: @default directive provides value "apple" which cannot be used + with Float', + "locations": [{ "line": 2, "column": 17 }], + }, ] - name: "@default validates value for Boolean" @@ -3010,9 +3580,14 @@ invalid_schemas: type X { field: Boolean @default(add:{value:"apple"}) } - errlist: [ - {"message": "Type X; Field field: @default directive provides value \"apple\" which cannot be used with Boolean", - "locations":[{"line":2, "column":19}]} + errlist: + [ + { + "message": + 'Type X; Field field: @default directive provides value "apple" which cannot be used + with Boolean', + "locations": [{ "line": 2, "column": 19 }], + }, ] - name: "@default validates type is not @remote" @@ -3020,9 +3595,12 @@ invalid_schemas: type X @remote { field: Int @default(add:{value:"1"}) } - errlist: [ - {"message": "Type X; Field field: cannot use @default directive on a @remote type", - "locations":[{"line":2, "column":15}]} + errlist: + [ + { + "message": "Type X; Field field: cannot use @default directive on a @remote type", + "locations": [{ "line": 2, "column": 15 }], + }, ] - name: "@default validates field type is scalar" @@ -3033,9 +3611,13 @@ invalid_schemas: type Y { field: String } - errlist: [ - {"message": "Type X; Field field: cannot use @default directive on field with non-scalar type Y", - "locations":[{"line":2, "column":13}]} + errlist: + [ + { + "message": + "Type X; Field field: cannot use @default directive on field with non-scalar type Y", + "locations": [{ "line": 2, "column": 13 }], + }, ] - name: "@default validates field type is not list" @@ -3043,9 +3625,13 @@ invalid_schemas: type X { field: [String] @default(add:{value:"1"}) } - errlist: [ - {"message": "Type X; Field field: cannot use @default directive on field with list type [String]", - "locations":[{"line":2, "column":20}]} + errlist: + [ + { + "message": + "Type X; Field field: cannot use @default directive on field with list type [String]", + "locations": [{ "line": 2, "column": 20 }], + }, ] - name: "@default validates field type is not @id" @@ -3053,9 +3639,13 @@ invalid_schemas: type X { field: String! @id @default(add:{value:"foo"}) } - errlist: [ - {"message": "Type X; Field field: cannot use @default directive on field with @id directive", - "locations":[{"line":2, "column":23}]} + errlist: + [ + { + "message": + "Type X; Field field: cannot use @default directive on field with @id directive", + "locations": [{ "line": 2, "column": 23 }], + }, ] - name: "@default validates field type is not ID" @@ -3064,9 +3654,12 @@ invalid_schemas: id: ID! @default(add:{value:"foo"}) field: String } - errlist: [ - {"message": "Type X; Field id: cannot use @default directive on field with type ID", - "locations":[{"line":2, "column":12}]} + errlist: + [ + { + "message": "Type X; Field id: cannot use @default directive on field with type ID", + "locations": [{ "line": 2, "column": 12 }], + }, ] - name: "@default validates field type is not @custom" @@ -3078,9 +3671,13 @@ invalid_schemas: method: "GET" }) } - errlist: [ - {"message": "Type X; Field field: cannot use @default directive on field with @custom directive", - "locations":[{"line":3, "column":19}]} + errlist: + [ + { + "message": + "Type X; Field field: cannot use @default directive on field with @custom directive", + "locations": [{ "line": 3, "column": 19 }], + }, ] - name: "@default validates field type is not @lambda" @@ -3089,9 +3686,13 @@ invalid_schemas: id: String! @id field: String! @default(add:{value:"foo"}) @lambda } - errlist: [ - {"message": "Type X; Field field: cannot use @default directive on field with @lambda directive", - "locations":[{"line":3, "column":19}]} + errlist: + [ + { + "message": + "Type X; Field field: cannot use @default directive on field with @lambda directive", + "locations": [{ "line": 3, "column": 19 }], + }, ] valid_schemas: @@ -3171,8 +3772,7 @@ valid_schemas: userRole: String @search(by: [hash]) } - - - name: hasInverse directive on singleton + - name: hasInverse directive on singleton input: | type X { f1: Y @hasInverse(field: "f1") @@ -3181,8 +3781,7 @@ valid_schemas: f1: X @hasInverse(field: "f1") } - - - name: hasInverse directive on list type 1 + - name: hasInverse directive on list type 1 input: | type X { f1: [Y] @hasInverse(field: "f1") @@ -3191,8 +3790,7 @@ valid_schemas: f1: X @hasInverse(field: "f1") } - - - name: hasInverse directive from list type + - name: hasInverse directive from list type input: | type Post { postId: ID! @@ -3202,8 +3800,7 @@ valid_schemas: type Author { posts: [Post!]! @hasInverse(field: "author") } - - - name: hasInverse directive to list type + - name: hasInverse directive to list type input: | type Post { postId: ID! @@ -3214,8 +3811,7 @@ valid_schemas: posts: [Post!]! } - - - name: hasInverse directive on list type 2 + - name: hasInverse directive on list type 2 input: | type X { f1: [Y] @hasInverse(field: "f1") @@ -3224,8 +3820,7 @@ valid_schemas: f1: [X] @hasInverse(field: "f1") } - - - name: Correct search types + - name: Correct search types input: | type X { int1: Int @search @@ -3265,8 +3860,7 @@ valid_schemas: A } - - - name: dgraph directive with correct reverse field works + - name: dgraph directive with correct reverse field works input: | type X { id: ID! @@ -3279,8 +3873,7 @@ valid_schemas: f1: [X] @dgraph(pred: "f1") } - - - name: "@dgraph predicate type validation gives no errors with non-null variations" + - name: "@dgraph predicate type validation gives no errors with non-null variations" input: | type X { f1: String @dgraph(pred: "f1") @@ -3299,8 +3892,7 @@ valid_schemas: f6: String @dgraph(pred: "<职业>") } - - - name: initial schema with @custom directive + - name: initial schema with @custom directive input: | type Author { id: ID! @@ -3357,8 +3949,7 @@ valid_schemas: }) } - - - name: Schema with @custom directives on field where body requires field with @id directive + - name: Schema with @custom directives on field where body requires field with @id directive input: | type Class @remote { id: ID! @@ -3380,8 +3971,7 @@ valid_schemas: }) } - - - name: "@custom directive with variable definitions in operation in graphql" + - name: "@custom directive with variable definitions in operation in graphql" input: | type Author { id: ID! @@ -3394,8 +3984,7 @@ valid_schemas: }) } - - - name: "@custom directive with correct dql" + - name: "@custom directive with correct dql" input: | type Tweets { id: ID! @@ -3427,8 +4016,7 @@ valid_schemas: """) } - - - name: remote type can use other types which are dgraph types + - name: remote type can use other types which are dgraph types input: | type User @remote { id: ID! @@ -3441,8 +4029,7 @@ valid_schemas: age: Int! } - - - name: remote type can implement a remote type + - name: remote type can implement a remote type input: | type Car { id: ID! @@ -3457,9 +4044,7 @@ valid_schemas: age: Int! } - - - - name: a non-remote type can have fields which are of remote type if they have @custom directive + - name: a non-remote type can have fields which are of remote type if they have @custom directive input: | type User @remote { id: ID! @@ -3476,8 +4061,7 @@ valid_schemas: }) } - - - name: dgraph directive with reverse edges should work with interfaces + - name: dgraph directive with reverse edges should work with interfaces input: | type Object { id: ID! @@ -3557,8 +4141,6 @@ valid_schemas: reviews: [Review] } - - - name: "@lambdaOnMutate is allowed on types and interfaces" input: | interface Post @lambdaOnMutate(add: true, delete: false) { @@ -3636,4 +4218,4 @@ valid_schemas: type LibraryManager { name: String! @id manages: [LibraryMember] - } \ No newline at end of file + } diff --git a/systest/ldbc/test_cases.yaml b/systest/ldbc/test_cases.yaml index 6d6953fe25c..eac6e6e0711 100644 --- a/systest/ldbc/test_cases.yaml +++ b/systest/ldbc/test_cases.yaml @@ -1,3094 +1,641 @@ q1: - query: - '{q(func: eq(fqid, "person_4398046514948")) { - firstName - lastName - birthday - locationIP - browserUsed - gender - creationDate - isLocatedIn{ - id - name - } - }}' + query: + '{q(func: eq(fqid, "person_4398046514948")) { firstName lastName birthday locationIP browserUsed + gender creationDate isLocatedIn{ id name } }}' tag: IS01 resp: - '{ - "q":[ - { - "firstName":"Abhishek", - "lastName":"Roy", - "birthday":"1985-09-06T00:00:00Z", - "locationIP":"27.54.166.12", - "browserUsed":"Internet Explorer", - "gender":"male", - "creationDate":"2010-06-06T23:43:29.643Z", - "isLocatedIn":[ - { - "id":231, - "name":"Thanjavur" - } - ] - } - ] - }' + '{ "q":[ { "firstName":"Abhishek", "lastName":"Roy", "birthday":"1985-09-06T00:00:00Z", + "locationIP":"27.54.166.12", "browserUsed":"Internet Explorer", "gender":"male", + "creationDate":"2010-06-06T23:43:29.643Z", "isLocatedIn":[ { "id":231, "name":"Thanjavur" } ] } + ] }' q2: query: - '{ - q(func: eq(fqid, "person_933")) { - ~hasCreator( orderdesc: creationDate, orderdesc: id, first:10){ - id - content - creationDate - dgraph.type - replyOf{ - id - hasCreator{ - id - firstName - lastName - } - } - } - } - }' + '{ q(func: eq(fqid, "person_933")) { ~hasCreator( orderdesc: creationDate, orderdesc: id, + first:10){ id content creationDate dgraph.type replyOf{ id hasCreator{ id firstName lastName } } + } } }' tag: IS02 - resp: '{ - "q": [ - { - "~hasCreator": [ - { - "id": 1099511778677, - "content": "I see", - "creationDate": "2012-09-12T18:07:52.711Z", - "dgraph.type": [ - "comment" - ], - "replyOf": { - "id": 1099511778673, - "hasCreator": [ - { - "id": 19791209303315, - "firstName": "Chutima", - "lastName": "Wattansin" - } - ] - } - }, - { - "id": 1099511797152, - "content": "About East Germany, state''s commitment to communism was a holloAbout Almohad Caliphat", - "creationDate": "2012-09-10T12:39:32.701Z", - "dgraph.type": [ - "comment" - ], - "replyOf": { - "id": 1099511797149, - "hasCreator": [ - { - "id": 26388279068783, - "firstName": "Farhad", - "lastName": "Qaderi" - } - ] - } - }, - { - "id": 1099511627888, - "content": "", - "creationDate": "2012-09-09T20:23:20.268Z", - "dgraph.type": [ - "post" - ] - }, - { - "id": 1099511627887, - "content": "", - "creationDate": "2012-09-09T20:23:19.268Z", - "dgraph.type": [ - "post" - ] - }, - { - "id": 1099511627886, - "content": "", - "creationDate": "2012-09-09T20:23:18.268Z", - "dgraph.type": [ - "post" - ] - }, - { - "id": 1099511627885, - "content": "", - "creationDate": "2012-09-09T20:23:17.268Z", - "dgraph.type": [ - "post" - ] - }, - { - "id": 1099511627884, - "content": "", - "creationDate": "2012-09-09T20:23:16.268Z", - "dgraph.type": [ - "post" - ] - }, - { - "id": 1099511627883, - "content": "", - "creationDate": "2012-09-09T20:23:15.268Z", - "dgraph.type": [ - "post" - ] - }, - { - "id": 1099511627882, - "content": "", - "creationDate": "2012-09-09T20:23:14.268Z", - "dgraph.type": [ - "post" - ] - }, - { - "id": 1099511627881, - "content": "", - "creationDate": "2012-09-09T20:23:13.268Z", - "dgraph.type": [ - "post" - ] - } - ] - } - ] - }' + resp: + '{ "q": [ { "~hasCreator": [ { "id": 1099511778677, "content": "I see", "creationDate": + "2012-09-12T18:07:52.711Z", "dgraph.type": [ "comment" ], "replyOf": { "id": 1099511778673, + "hasCreator": [ { "id": 19791209303315, "firstName": "Chutima", "lastName": "Wattansin" } ] } }, + { "id": 1099511797152, "content": "About East Germany, state''s commitment to communism was a + holloAbout Almohad Caliphat", "creationDate": "2012-09-10T12:39:32.701Z", "dgraph.type": [ + "comment" ], "replyOf": { "id": 1099511797149, "hasCreator": [ { "id": 26388279068783, + "firstName": "Farhad", "lastName": "Qaderi" } ] } }, { "id": 1099511627888, "content": "", + "creationDate": "2012-09-09T20:23:20.268Z", "dgraph.type": [ "post" ] }, { "id": 1099511627887, + "content": "", "creationDate": "2012-09-09T20:23:19.268Z", "dgraph.type": [ "post" ] }, { "id": + 1099511627886, "content": "", "creationDate": "2012-09-09T20:23:18.268Z", "dgraph.type": [ + "post" ] }, { "id": 1099511627885, "content": "", "creationDate": "2012-09-09T20:23:17.268Z", + "dgraph.type": [ "post" ] }, { "id": 1099511627884, "content": "", "creationDate": + "2012-09-09T20:23:16.268Z", "dgraph.type": [ "post" ] }, { "id": 1099511627883, "content": "", + "creationDate": "2012-09-09T20:23:15.268Z", "dgraph.type": [ "post" ] }, { "id": 1099511627882, + "content": "", "creationDate": "2012-09-09T20:23:14.268Z", "dgraph.type": [ "post" ] }, { "id": + 1099511627881, "content": "", "creationDate": "2012-09-09T20:23:13.268Z", "dgraph.type": [ + "post" ] } ] } ] }' q3: tag: IS03 - query: '{ - q(func: eq(fqid, "person_933")) { - knows @facets( orderdesc: creationDate, orderdesc: id){ - id - firstName - lastName - } - } - }' - resp: ' - { - "q": [ - { - "knows": [ - { - "id": 24189255814068, - "firstName": "Karl", - "lastName": "Wagner", - "knows|creationDate": "2011-11-16T09:47:46.750+00:00" - }, - { - "id": 15393162790400, - "firstName": "Jose", - "lastName": "Costa", - "knows|creationDate": "2011-04-02T21:17:40.919+00:00" - }, - { - "id": 2199023256437, - "firstName": "Rudolf", - "lastName": "Engel", - "knows|creationDate": "2010-04-08T04:18:41.298+00:00" - } - ] - } - ] - }' + query: + '{ q(func: eq(fqid, "person_933")) { knows @facets( orderdesc: creationDate, orderdesc: id){ id + firstName lastName } } }' + resp: + '{ "q": [ { "knows": [ { "id": 24189255814068, "firstName": "Karl", "lastName": "Wagner", + "knows|creationDate": "2011-11-16T09:47:46.750+00:00" }, { "id": 15393162790400, "firstName": + "Jose", "lastName": "Costa", "knows|creationDate": "2011-04-02T21:17:40.919+00:00" }, { "id": + 2199023256437, "firstName": "Rudolf", "lastName": "Engel", "knows|creationDate": + "2010-04-08T04:18:41.298+00:00" } ] } ] }' q4: tag: IS04 - query: '{ - q(func: eq(fqid, "post_3")) { - creationDate - content - imageFile - } - }' - resp: '{ - "q": [ - { - "creationDate": "2010-02-14T20:30:21.451Z", - "content": "About Rupert Murdoch, alised US citizen iAbout Napoleon, tinuation of the waAbout Ferdinand II of Aragon, (1", - "imageFile": "" - } - ] - }' + query: '{ q(func: eq(fqid, "post_3")) { creationDate content imageFile } }' + resp: + '{ "q": [ { "creationDate": "2010-02-14T20:30:21.451Z", "content": "About Rupert Murdoch, alised + US citizen iAbout Napoleon, tinuation of the waAbout Ferdinand II of Aragon, (1", "imageFile": + "" } ] }' q5: tag: IS05 - query: '{ - q(func: eq(fqid, "post_3")) { - hasCreator{ - id - firstName - lastName - } - } - }' - resp: ' - { - "q": [ - { - "hasCreator": [ - { - "id": 933, - "firstName": "Mahinda", - "lastName": "Perera" - } - ] - } - ] - }' + query: '{ q(func: eq(fqid, "post_3")) { hasCreator{ id firstName lastName } } }' + resp: + '{ "q": [ { "hasCreator": [ { "id": 933, "firstName": "Mahinda", "lastName": "Perera" } ] } ] }' q6: tag: IS06 - query: '{ - q(func: eq(fqid, "post_3")) { - ~containerOf{ - id - title - hasModerator{ - id - firstName - lastName - } - } - } - }' - resp: ' - { - "q": [ - { - "~containerOf": [ - { - "id": 0, - "title": "Wall of Mahinda Perera", - "hasModerator": [ - { - "id": 933, - "firstName": "Mahinda", - "lastName": "Perera" - } - ] - } - ] - } - ] - }' + query: + '{ q(func: eq(fqid, "post_3")) { ~containerOf{ id title hasModerator{ id firstName lastName } } + } }' + resp: + '{ "q": [ { "~containerOf": [ { "id": 0, "title": "Wall of Mahinda Perera", "hasModerator": [ { + "id": 933, "firstName": "Mahinda", "lastName": "Perera" } ] } ] } ] }' q7: tag: IS07 - query: '{ - mid as var(func: eq(fqid, "post_549755864897")){ - c as hasCreator - } - q(func: uid(mid)) { - ~replyOf (orderdesc: creationDate){ - id - content - creationDate - hasCreator{ - id - firstName - lastName - knows @filter(uid(c)){ - id - firstName - lastName - } - } - } - } - }' - resp: ' - { - "q": [ - { - "~replyOf": [ - { - "id": 549755864902, - "content": "About Jan Hus, ech priest, philoAbout Islands in the Stream, Bend, Indiana raAbout ", - "creationDate": "2011-06-23T06:36:48.528Z", - "hasCreator": [ - { - "id": 10995116279491, - "firstName": "Ouwo Moussa", - "lastName": "Maazou", - "knows": [ - { - "id": 13194139535450, - "firstName": "Christopher", - "lastName": "Jones" - } - ] - } - ] - }, - { - "id": 549755864909, - "content": "maybe", - "creationDate": "2011-06-22T15:56:44.755Z", - "hasCreator": [ - { - "id": 6597069767708, - "firstName": "Abdou", - "lastName": "Dia", - "knows": [ - { - "id": 13194139535450, - "firstName": "Christopher", - "lastName": "Jones" - } - ] - } - ] - }, - { - "id": 549755864900, - "content": "yes", - "creationDate": "2011-06-22T13:34:41.791Z", - "hasCreator": [ - { - "id": 2199023256077, - "firstName": "Ibrahim Bare", - "lastName": "Ousmane", - "knows": [ - { - "id": 13194139535450, - "firstName": "Christopher", - "lastName": "Jones" - } - ] - } - ] - }, - { - "id": 549755864904, - "content": "About Jan Hus, . Their defenAbout Bob Dylan, er Bob Dylan,About Michael Jordan, majority ", - "creationDate": "2011-06-22T10:03:28.337Z", - "hasCreator": [ - { - "id": 10995116279491, - "firstName": "Ouwo Moussa", - "lastName": "Maazou", - "knows": [ - { - "id": 13194139535450, - "firstName": "Christopher", - "lastName": "Jones" - } - ] - } - ] - }, - { - "id": 549755864899, - "content": "ok", - "creationDate": "2011-06-22T09:50:14.117Z", - "hasCreator": [ - { - "id": 10995116279491, - "firstName": "Ouwo Moussa", - "lastName": "Maazou", - "knows": [ - { - "id": 13194139535450, - "firstName": "Christopher", - "lastName": "Jones" - } - ] - } - ] - }, - { - "id": 549755864898, - "content": "yes", - "creationDate": "2011-06-22T09:34:53.014Z", - "hasCreator": [ - { - "id": 6597069767708, - "firstName": "Abdou", - "lastName": "Dia", - "knows": [ - { - "id": 13194139535450, - "firstName": "Christopher", - "lastName": "Jones" - } - ] - } - ] - }, - { - "id": 549755864901, - "content": "maybe", - "creationDate": "2011-06-22T07:06:07.735Z", - "hasCreator": [ - { - "id": 15393162789569, - "firstName": "Bechir", - "lastName": "Cardinale" - } - ] - } - ] - } - ] - }' -q8: + query: + '{ mid as var(func: eq(fqid, "post_549755864897")){ c as hasCreator } q(func: uid(mid)) { + ~replyOf (orderdesc: creationDate){ id content creationDate hasCreator{ id firstName lastName + knows @filter(uid(c)){ id firstName lastName } } } } }' + resp: + '{ "q": [ { "~replyOf": [ { "id": 549755864902, "content": "About Jan Hus, ech priest, + philoAbout Islands in the Stream, Bend, Indiana raAbout ", "creationDate": + "2011-06-23T06:36:48.528Z", "hasCreator": [ { "id": 10995116279491, "firstName": "Ouwo Moussa", + "lastName": "Maazou", "knows": [ { "id": 13194139535450, "firstName": "Christopher", "lastName": + "Jones" } ] } ] }, { "id": 549755864909, "content": "maybe", "creationDate": + "2011-06-22T15:56:44.755Z", "hasCreator": [ { "id": 6597069767708, "firstName": "Abdou", + "lastName": "Dia", "knows": [ { "id": 13194139535450, "firstName": "Christopher", "lastName": + "Jones" } ] } ] }, { "id": 549755864900, "content": "yes", "creationDate": + "2011-06-22T13:34:41.791Z", "hasCreator": [ { "id": 2199023256077, "firstName": "Ibrahim Bare", + "lastName": "Ousmane", "knows": [ { "id": 13194139535450, "firstName": "Christopher", + "lastName": "Jones" } ] } ] }, { "id": 549755864904, "content": "About Jan Hus, . Their + defenAbout Bob Dylan, er Bob Dylan,About Michael Jordan, majority ", "creationDate": + "2011-06-22T10:03:28.337Z", "hasCreator": [ { "id": 10995116279491, "firstName": "Ouwo Moussa", + "lastName": "Maazou", "knows": [ { "id": 13194139535450, "firstName": "Christopher", "lastName": + "Jones" } ] } ] }, { "id": 549755864899, "content": "ok", "creationDate": + "2011-06-22T09:50:14.117Z", "hasCreator": [ { "id": 10995116279491, "firstName": "Ouwo Moussa", + "lastName": "Maazou", "knows": [ { "id": 13194139535450, "firstName": "Christopher", "lastName": + "Jones" } ] } ] }, { "id": 549755864898, "content": "yes", "creationDate": + "2011-06-22T09:34:53.014Z", "hasCreator": [ { "id": 6597069767708, "firstName": "Abdou", + "lastName": "Dia", "knows": [ { "id": 13194139535450, "firstName": "Christopher", "lastName": + "Jones" } ] } ] }, { "id": 549755864901, "content": "maybe", "creationDate": + "2011-06-22T07:06:07.735Z", "hasCreator": [ { "id": 15393162789569, "firstName": "Bechir", + "lastName": "Cardinale" } ] } ] } ] }' +q8: tag: IC01 - query: '{ - pid as var(func: type(person)) @filter(eq(id, "4398046514948" )) - nid as var(func: eq(firstName, "Deepak")) + query: '{ pid as var(func: type(person)) @filter(eq(id, "4398046514948" )) nid as var(func: + eq(firstName, "Deepak")) - var(func: uid(pid)) { - f11 as knows{ - dist11 as math(1) - f21 as knows @filter(NOT uid(pid)){ - dist21 as math(2) - f31 as knows @filter(NOT uid(pid)){ - dist31 as math(3) - } - f32 as ~knows @filter(NOT uid(pid)){ - dist32 as math(3) - } - } - f22 as ~knows @filter(NOT uid(pid)){ - dist22 as math(2) - f33 as knows @filter(NOT uid(pid)){ - dist33 as math(3) - } - f34 as ~knows @filter(NOT uid(pid)){ - dist34 as math(3) - } - } - } - f12 as ~knows{ - dist12 as math(1) - f23 as knows @filter(NOT uid(pid)){ - dist23 as math(2) - f35 as knows @filter(NOT uid(pid)){ - dist35 as math(3) - } - f36 as ~knows @filter(NOT uid(pid)){ - dist36 as math(3) - } - } - f24 as ~knows @filter(NOT uid(pid)){ - dist24 as math(2) - f37 as knows @filter(NOT uid(pid)){ - dist37 as math(3) - } - f38 as ~knows @filter(NOT uid(pid)){ - dist38 as math(3) - } - } - } - } + var(func: uid(pid)) { f11 as knows{ dist11 as math(1) f21 as knows @filter(NOT uid(pid)){ dist21 + as math(2) f31 as knows @filter(NOT uid(pid)){ dist31 as math(3) } f32 as ~knows @filter(NOT + uid(pid)){ dist32 as math(3) } } f22 as ~knows @filter(NOT uid(pid)){ dist22 as math(2) f33 as + knows @filter(NOT uid(pid)){ dist33 as math(3) } f34 as ~knows @filter(NOT uid(pid)){ dist34 as + math(3) } } } f12 as ~knows{ dist12 as math(1) f23 as knows @filter(NOT uid(pid)){ dist23 as + math(2) f35 as knows @filter(NOT uid(pid)){ dist35 as math(3) } f36 as ~knows @filter(NOT + uid(pid)){ dist36 as math(3) } } f24 as ~knows @filter(NOT uid(pid)){ dist24 as math(2) f37 as + knows @filter(NOT uid(pid)){ dist37 as math(3) } f38 as ~knows @filter(NOT uid(pid)){ dist38 as + math(3) } } } } - ppl as var(func: uid(f11, f12, f21, f22, f23, f24, f31, f32, f33, f34, f35, f36, f37, f38)) @filter(uid(nid)) + ppl as var(func: uid(f11, f12, f21, f22, f23, f24, f31, f32, f33, f34, f35, f36, f37, f38)) + @filter(uid(nid)) - q(func: uid(ppl), orderasc: lastName, orderasc: id, first: 20) { - distance11: val(dist11) - distance12: val(dist12) - distance21: val(dist21) - distance22: val(dist22) - distance23: val(dist23) - distance24: val(dist24) - distance31: val(dist31) - distance32: val(dist32) - distance33: val(dist33) - distance34: val(dist34) - distance35: val(dist35) - distance36: val(dist36) - distance37: val(dist37) - distance38: val(dist38) - id - lastName - birthday - gender - browserUsed - locationIP - email - language - creationDate - isLocatedIn{ - name - } - studyAt{ - name - isLocatedIn{ - name - } - } - } - }' - resp: ' - { - "q": [ - { - "distance31": 3, - "distance32": 3, - "distance33": 3, - "distance35": 3, - "id": 30786325580679, - "lastName": "Adhia", - "birthday": "1980-11-04T00:00:00Z", - "gender": "male", - "browserUsed": "Internet Explorer", - "locationIP": "41.222.181.85", - "email": [ - "Deepak30786325580679@gmx.com", - "Deepak30786325580679@yahoo.com", - "Deepak30786325580679@gmail.com" - ], - "language": [ - "en", - "ar" - ], - "creationDate": "2012-06-09T16:36:11.499Z", - "isLocatedIn": [ - { - "name": "Dodoma" - } - ], - "studyAt": [ - { - "name": "Aga_Khan_University", - "isLocatedIn": [ - { - "name": "Karachi" - } - ] - } - ] - }, - { - "distance22": 2, - "distance23": 2, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance36": 3, - "distance37": 3, - "distance38": 3, - "id": 2874, - "lastName": "Bose", - "birthday": "1986-02-01T00:00:00Z", - "gender": "male", - "browserUsed": "Firefox", - "locationIP": "61.11.14.149", - "email": [ - "Deepak2874@yahoo.com", - "Deepak2874@gmail.com" - ], - "language": [ - "en", - "hi", - "gu" - ], - "creationDate": "2010-02-24T21:54:09.1Z", - "isLocatedIn": [ - { - "name": "Ghaziabad" - } - ], - "studyAt": [ - { - "name": "Christ_University", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - }, - { - "distance11": 1, - "distance21": 2, - "distance22": 2, - "distance31": 3, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance35": 3, - "distance36": 3, - "distance37": 3, - "id": 24189255812226, - "lastName": "Bose", - "birthday": "1985-08-11T00:00:00Z", - "gender": "male", - "browserUsed": "Internet Explorer", - "locationIP": "27.116.34.188", - "email": [ - "Deepak24189255812226@gmail.com", - "Deepak24189255812226@speedymail.net", - "Deepak24189255812226@gmx.com" - ], - "language": [ - "en", - "mr", - "bn" - ], - "creationDate": "2011-12-07T08:11:20.015Z", - "isLocatedIn": [ - { - "name": "Patna" - } - ] - }, - { - "distance22": 2, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance36": 3, - "distance37": 3, - "id": 2199023257545, - "lastName": "Khan", - "birthday": "1980-10-21T00:00:00Z", - "gender": "male", - "browserUsed": "Chrome", - "locationIP": "49.238.39.235", - "email": [ - "Deepak2199023257545@gmail.com", - "Deepak2199023257545@gmx.com" - ], - "language": [ - "en", - "te", - "ur" - ], - "creationDate": "2010-03-14T17:22:39.914Z", - "isLocatedIn": [ - { - "name": "Guwahati" - } - ], - "studyAt": [ - { - "name": "CMR_Law_School", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - }, - { - "distance21": 2, - "distance22": 2, - "distance23": 2, - "distance31": 3, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance35": 3, - "distance36": 3, - "distance37": 3, - "id": 21990232555586, - "lastName": "Khan", - "birthday": "1980-11-10T00:00:00Z", - "gender": "male", - "browserUsed": "Chrome", - "locationIP": "49.12.225.25", - "email": [ - "Deepak21990232555586@yahoo.com", - "Deepak21990232555586@gmail.com", - "Deepak21990232555586@gmx.com" - ], - "language": [ - "en", - "mr", - "bn" - ], - "creationDate": "2011-09-12T21:30:38.614Z", - "isLocatedIn": [ - { - "name": "Kota" - } - ], - "studyAt": [ - { - "name": "CMR_Law_School", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - }, - { - "distance21": 2, - "distance22": 2, - "distance31": 3, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance35": 3, - "distance36": 3, - "distance37": 3, - "id": 21990232556621, - "lastName": "Khan", - "birthday": "1984-06-12T00:00:00Z", - "gender": "male", - "browserUsed": "Chrome", - "locationIP": "14.140.246.54", - "email": [ - "Deepak21990232556621@gmail.com", - "Deepak21990232556621@hotmail.com" - ], - "language": [ - "en", - "as", - "ta" - ], - "creationDate": "2011-10-16T18:54:45.142Z", - "isLocatedIn": [ - { - "name": "Bandra" - } - ], - "studyAt": [ - { - "name": "CMR_Law_School", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - }, - { - "distance22": 2, - "distance23": 2, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance35": 3, - "distance36": 3, - "distance37": 3, - "id": 4398046513018, - "lastName": "Kumar", - "birthday": "1981-03-02T00:00:00Z", - "gender": "male", - "browserUsed": "Safari", - "locationIP": "101.209.68.58", - "email": [ - "Deepak4398046513018@gmx.com", - "Deepak4398046513018@gmail.com", - "Deepak4398046513018@yahoo.com" - ], - "language": [ - "en", - "hi", - "ur" - ], - "creationDate": "2010-05-19T07:45:57.238Z", - "isLocatedIn": [ - { - "name": "Kollam" - } - ], - "studyAt": [ - { - "name": "Indian_Institute_of_Science", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - }, - { - "distance22": 2, - "distance23": 2, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance35": 3, - "distance36": 3, - "distance37": 3, - "id": 6597069768426, - "lastName": "Kumar", - "birthday": "1980-02-21T00:00:00Z", - "gender": "male", - "browserUsed": "Chrome", - "locationIP": "59.182.74.137", - "email": [ - "Deepak6597069768426@gmail.com", - "Deepak6597069768426@zoho.com", - "Deepak6597069768426@gmx.com" - ], - "language": [ - "en", - "te", - "mr" - ], - "creationDate": "2010-08-20T11:31:57.167Z", - "isLocatedIn": [ - { - "name": "Malappuram" - } - ], - "studyAt": [ - { - "name": "CMR_Law_School", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - }, - { - "distance21": 2, - "distance22": 2, - "distance31": 3, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance35": 3, - "distance36": 3, - "distance37": 3, - "id": 10995116278799, - "lastName": "Kumar", - "birthday": "1982-05-26T00:00:00Z", - "gender": "male", - "browserUsed": "Internet Explorer", - "locationIP": "61.17.75.169", - "email": [ - "Deepak10995116278799@gmail.com", - "Deepak10995116278799@zoho.com", - "Deepak10995116278799@gmx.com", - "Deepak10995116278799@yahoo.com" - ], - "language": [ - "en", - "hi", - "ta" - ], - "creationDate": "2010-12-19T06:01:33.806Z", - "isLocatedIn": [ - { - "name": "Nellore" - } - ], - "studyAt": [ - { - "name": "Rajiv_Gandhi_University_of_Health_Sciences", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - }, - { - "distance23": 2, - "distance31": 3, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance35": 3, - "distance36": 3, - "distance37": 3, - "id": 10995116281487, - "lastName": "Kumar", - "birthday": "1988-06-12T00:00:00Z", - "gender": "male", - "browserUsed": "Firefox", - "locationIP": "14.142.245.184", - "email": [ - "Deepak10995116281487@yahoo.com" - ], - "language": [ - "en", - "ml", - "te" - ], - "creationDate": "2010-11-14T04:37:57.908Z", - "isLocatedIn": [ - { - "name": "English_Bazar" - } - ], - "studyAt": [ - { - "name": "Christ_University", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - }, - { - "distance21": 2, - "distance22": 2, - "distance23": 2, - "distance31": 3, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance35": 3, - "distance36": 3, - "distance37": 3, - "id": 21990232557419, - "lastName": "Kumar", - "birthday": "1983-12-08T00:00:00Z", - "gender": "male", - "browserUsed": "Internet Explorer", - "locationIP": "14.102.188.68", - "email": [ - "Deepak21990232557419@gmail.com", - "Deepak21990232557419@gmx.com" - ], - "language": [ - "en", - "ur", - "or" - ], - "creationDate": "2011-09-12T01:46:02.005Z", - "isLocatedIn": [ - { - "name": "Tezpur" - } - ], - "studyAt": [ - { - "name": "Indian_Institute_of_Science", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - }, - { - "distance31": 3, - "distance33": 3, - "distance35": 3, - "id": 35184372090643, - "lastName": "Kumar", - "birthday": "1984-01-21T00:00:00Z", - "gender": "male", - "browserUsed": "Firefox", - "locationIP": "42.107.228.203", - "email": [ - "Deepak35184372090643@gmail.com", - "Deepak35184372090643@yahoo.com" - ], - "language": [ - "en", - "hi", - "kn" - ], - "creationDate": "2012-09-11T13:35:19.789Z", - "isLocatedIn": [ - { - "name": "Nashik" - } - ], - "studyAt": [ - { - "name": "Ramakrishna_Mission_Residential_College,_Narendrapur", - "isLocatedIn": [ - { - "name": "Kolkata" - } - ] - } - ] - }, - { - "distance23": 2, - "distance32": 3, - "distance33": 3, - "distance35": 3, - "distance37": 3, - "id": 24189255813921, - "lastName": "Nair", - "birthday": "1983-10-25T00:00:00Z", - "gender": "male", - "browserUsed": "Firefox", - "locationIP": "61.95.236.10", - "email": [ - "Deepak24189255813921@gmx.com", - "Deepak24189255813921@yahoo.com", - "Deepak24189255813921@zoho.com", - "Deepak24189255813921@gmail.com" - ], - "language": [ - "en", - "as" - ], - "creationDate": "2011-12-19T21:55:52.83Z", - "isLocatedIn": [ - { - "name": "Gwalior" - } - ], - "studyAt": [ - { - "name": "National_Institute_of_Business_Management", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - }, - { - "distance21": 2, - "distance31": 3, - "distance33": 3, - "distance35": 3, - "id": 28587302325292, - "lastName": "Rao", - "birthday": "1981-08-06T00:00:00Z", - "gender": "male", - "browserUsed": "Opera", - "locationIP": "1.7.203.237", - "email": [ - "Deepak28587302325292@maghreb.cc", - "Deepak28587302325292@yahoo.com", - "Deepak28587302325292@hotmail.com", - "Deepak28587302325292@gmail.com" - ], - "language": [ - "en", - "or", - "mr" - ], - "creationDate": "2012-05-06T19:16:53.342Z", - "isLocatedIn": [ - { - "name": "Asansol" - } - ], - "studyAt": [ - { - "name": "G.H.Raisoni_Institute_of_Information_Technology", - "isLocatedIn": [ - { - "name": "Nagpur" - } - ] - } - ] - }, - { - "distance21": 2, - "distance31": 3, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance35": 3, - "distance36": 3, - "distance37": 3, - "id": 30786325580290, - "lastName": "Rao", - "birthday": "1981-10-14T00:00:00Z", - "gender": "male", - "browserUsed": "Chrome", - "locationIP": "27.4.211.176", - "email": [ - "Deepak30786325580290@hotmail.com", - "Deepak30786325580290@gmail.com", - "Deepak30786325580290@gmx.com" - ], - "language": [ - "en", - "mr", - "ta" - ], - "creationDate": "2012-05-26T14:49:06.671Z", - "isLocatedIn": [ - { - "name": "Munsirhat" - } - ], - "studyAt": [ - { - "name": "Christ_University", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - }, - { - "distance22": 2, - "distance23": 2, - "distance24": 2, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance35": 3, - "distance36": 3, - "distance37": 3, - "distance38": 3, - "id": 2199023258552, - "lastName": "Reddy", - "birthday": "1983-03-15T00:00:00Z", - "gender": "male", - "browserUsed": "Firefox", - "locationIP": "58.146.102.178", - "email": [ - "Deepak2199023258552@gmail.com" - ], - "language": [ - "en", - "hi", - "mr" - ], - "creationDate": "2010-03-21T05:15:01.12Z", - "isLocatedIn": [ - { - "name": "Cuttack" - } - ], - "studyAt": [ - { - "name": "CMR_Law_School", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - }, - { - "distance21": 2, - "distance22": 2, - "distance31": 3, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance35": 3, - "distance36": 3, - "distance37": 3, - "id": 21990232555934, - "lastName": "Reddy", - "birthday": "1986-07-21T00:00:00Z", - "gender": "male", - "browserUsed": "Chrome", - "locationIP": "27.116.22.98", - "email": [ - "Deepak21990232555934@gmail.com", - "Deepak21990232555934@gmx.com", - "Deepak21990232555934@zoho.com" - ], - "language": [ - "en", - "te", - "bn" - ], - "creationDate": "2011-10-17T00:58:35.708Z", - "isLocatedIn": [ - { - "name": "Barrackpore" - } - ], - "studyAt": [ - { - "name": "Rajiv_Gandhi_University_of_Health_Sciences", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - }, - { - "distance21": 2, - "distance22": 2, - "distance23": 2, - "distance31": 3, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance35": 3, - "distance36": 3, - "distance37": 3, - "id": 28587302325768, - "lastName": "Roy", - "birthday": "1980-03-03T00:00:00Z", - "gender": "male", - "browserUsed": "Internet Explorer", - "locationIP": "27.34.252.85", - "email": [ - "Deepak28587302325768@hotmail.com", - "Deepak28587302325768@gmail.com", - "Deepak28587302325768@gmx.com" - ], - "language": [ - "en", - "ml", - "ur" - ], - "creationDate": "2012-03-26T15:22:34.731Z", - "isLocatedIn": [ - { - "name": "Kashipur" - } - ], - "studyAt": [ - { - "name": "The_Oxford_Educational_Institutions", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - }, - { - "distance22": 2, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance36": 3, - "distance37": 3, - "id": 8796093022970, - "lastName": "Sharma", - "birthday": "1986-04-27T00:00:00Z", - "gender": "male", - "browserUsed": "Firefox", - "locationIP": "103.1.198.132", - "email": [ - "Deepak8796093022970@gmx.com", - "Deepak8796093022970@gmail.com" - ], - "language": [ - "en", - "ml", - "bn" - ], - "creationDate": "2010-10-16T11:32:10.76Z", - "isLocatedIn": [ - { - "name": "Brahmavar" - } - ], - "studyAt": [ - { - "name": "International_Management_Institute", - "isLocatedIn": [ - { - "name": "New_Delhi" - } - ] - } - ] - }, - { - "distance31": 3, - "distance32": 3, - "distance33": 3, - "distance34": 3, - "distance35": 3, - "distance36": 3, - "id": 15393162791080, - "lastName": "Sharma", - "birthday": "1987-10-08T00:00:00Z", - "gender": "male", - "browserUsed": "Internet Explorer", - "locationIP": "27.50.4.151", - "email": [ - "Deepak15393162791080@yahoo.com", - "Deepak15393162791080@hotmail.com", - "Deepak15393162791080@gmail.com" - ], - "language": [ - "en", - "te", - "ta" - ], - "creationDate": "2011-04-23T03:00:28.216Z", - "isLocatedIn": [ - { - "name": "Srinagar" - } - ], - "studyAt": [ - { - "name": "Ecumenical_Christian_Centre", - "isLocatedIn": [ - { - "name": "Bangalore" - } - ] - } - ] - } - ] - }' + q(func: uid(ppl), orderasc: lastName, orderasc: id, first: 20) { distance11: val(dist11) + distance12: val(dist12) distance21: val(dist21) distance22: val(dist22) distance23: val(dist23) + distance24: val(dist24) distance31: val(dist31) distance32: val(dist32) distance33: val(dist33) + distance34: val(dist34) distance35: val(dist35) distance36: val(dist36) distance37: val(dist37) + distance38: val(dist38) id lastName birthday gender browserUsed locationIP email language + creationDate isLocatedIn{ name } studyAt{ name isLocatedIn{ name } } } }' + resp: + '{ "q": [ { "distance31": 3, "distance32": 3, "distance33": 3, "distance35": 3, "id": + 30786325580679, "lastName": "Adhia", "birthday": "1980-11-04T00:00:00Z", "gender": "male", + "browserUsed": "Internet Explorer", "locationIP": "41.222.181.85", "email": [ + "Deepak30786325580679@gmx.com", "Deepak30786325580679@yahoo.com", + "Deepak30786325580679@gmail.com" ], "language": [ "en", "ar" ], "creationDate": + "2012-06-09T16:36:11.499Z", "isLocatedIn": [ { "name": "Dodoma" } ], "studyAt": [ { "name": + "Aga_Khan_University", "isLocatedIn": [ { "name": "Karachi" } ] } ] }, { "distance22": 2, + "distance23": 2, "distance32": 3, "distance33": 3, "distance34": 3, "distance36": 3, + "distance37": 3, "distance38": 3, "id": 2874, "lastName": "Bose", "birthday": + "1986-02-01T00:00:00Z", "gender": "male", "browserUsed": "Firefox", "locationIP": + "61.11.14.149", "email": [ "Deepak2874@yahoo.com", "Deepak2874@gmail.com" ], "language": [ "en", + "hi", "gu" ], "creationDate": "2010-02-24T21:54:09.1Z", "isLocatedIn": [ { "name": "Ghaziabad" } + ], "studyAt": [ { "name": "Christ_University", "isLocatedIn": [ { "name": "Bangalore" } ] } ] }, + { "distance11": 1, "distance21": 2, "distance22": 2, "distance31": 3, "distance32": 3, + "distance33": 3, "distance34": 3, "distance35": 3, "distance36": 3, "distance37": 3, "id": + 24189255812226, "lastName": "Bose", "birthday": "1985-08-11T00:00:00Z", "gender": "male", + "browserUsed": "Internet Explorer", "locationIP": "27.116.34.188", "email": [ + "Deepak24189255812226@gmail.com", "Deepak24189255812226@speedymail.net", + "Deepak24189255812226@gmx.com" ], "language": [ "en", "mr", "bn" ], "creationDate": + "2011-12-07T08:11:20.015Z", "isLocatedIn": [ { "name": "Patna" } ] }, { "distance22": 2, + "distance32": 3, "distance33": 3, "distance34": 3, "distance36": 3, "distance37": 3, "id": + 2199023257545, "lastName": "Khan", "birthday": "1980-10-21T00:00:00Z", "gender": "male", + "browserUsed": "Chrome", "locationIP": "49.238.39.235", "email": [ + "Deepak2199023257545@gmail.com", "Deepak2199023257545@gmx.com" ], "language": [ "en", "te", "ur" + ], "creationDate": "2010-03-14T17:22:39.914Z", "isLocatedIn": [ { "name": "Guwahati" } ], + "studyAt": [ { "name": "CMR_Law_School", "isLocatedIn": [ { "name": "Bangalore" } ] } ] }, { + "distance21": 2, "distance22": 2, "distance23": 2, "distance31": 3, "distance32": 3, + "distance33": 3, "distance34": 3, "distance35": 3, "distance36": 3, "distance37": 3, "id": + 21990232555586, "lastName": "Khan", "birthday": "1980-11-10T00:00:00Z", "gender": "male", + "browserUsed": "Chrome", "locationIP": "49.12.225.25", "email": [ + "Deepak21990232555586@yahoo.com", "Deepak21990232555586@gmail.com", + "Deepak21990232555586@gmx.com" ], "language": [ "en", "mr", "bn" ], "creationDate": + "2011-09-12T21:30:38.614Z", "isLocatedIn": [ { "name": "Kota" } ], "studyAt": [ { "name": + "CMR_Law_School", "isLocatedIn": [ { "name": "Bangalore" } ] } ] }, { "distance21": 2, + "distance22": 2, "distance31": 3, "distance32": 3, "distance33": 3, "distance34": 3, + "distance35": 3, "distance36": 3, "distance37": 3, "id": 21990232556621, "lastName": "Khan", + "birthday": "1984-06-12T00:00:00Z", "gender": "male", "browserUsed": "Chrome", "locationIP": + "14.140.246.54", "email": [ "Deepak21990232556621@gmail.com", "Deepak21990232556621@hotmail.com" + ], "language": [ "en", "as", "ta" ], "creationDate": "2011-10-16T18:54:45.142Z", "isLocatedIn": + [ { "name": "Bandra" } ], "studyAt": [ { "name": "CMR_Law_School", "isLocatedIn": [ { "name": + "Bangalore" } ] } ] }, { "distance22": 2, "distance23": 2, "distance32": 3, "distance33": 3, + "distance34": 3, "distance35": 3, "distance36": 3, "distance37": 3, "id": 4398046513018, + "lastName": "Kumar", "birthday": "1981-03-02T00:00:00Z", "gender": "male", "browserUsed": + "Safari", "locationIP": "101.209.68.58", "email": [ "Deepak4398046513018@gmx.com", + "Deepak4398046513018@gmail.com", "Deepak4398046513018@yahoo.com" ], "language": [ "en", "hi", + "ur" ], "creationDate": "2010-05-19T07:45:57.238Z", "isLocatedIn": [ { "name": "Kollam" } ], + "studyAt": [ { "name": "Indian_Institute_of_Science", "isLocatedIn": [ { "name": "Bangalore" } ] + } ] }, { "distance22": 2, "distance23": 2, "distance32": 3, "distance33": 3, "distance34": 3, + "distance35": 3, "distance36": 3, "distance37": 3, "id": 6597069768426, "lastName": "Kumar", + "birthday": "1980-02-21T00:00:00Z", "gender": "male", "browserUsed": "Chrome", "locationIP": + "59.182.74.137", "email": [ "Deepak6597069768426@gmail.com", "Deepak6597069768426@zoho.com", + "Deepak6597069768426@gmx.com" ], "language": [ "en", "te", "mr" ], "creationDate": + "2010-08-20T11:31:57.167Z", "isLocatedIn": [ { "name": "Malappuram" } ], "studyAt": [ { "name": + "CMR_Law_School", "isLocatedIn": [ { "name": "Bangalore" } ] } ] }, { "distance21": 2, + "distance22": 2, "distance31": 3, "distance32": 3, "distance33": 3, "distance34": 3, + "distance35": 3, "distance36": 3, "distance37": 3, "id": 10995116278799, "lastName": "Kumar", + "birthday": "1982-05-26T00:00:00Z", "gender": "male", "browserUsed": "Internet Explorer", + "locationIP": "61.17.75.169", "email": [ "Deepak10995116278799@gmail.com", + "Deepak10995116278799@zoho.com", "Deepak10995116278799@gmx.com", + "Deepak10995116278799@yahoo.com" ], "language": [ "en", "hi", "ta" ], "creationDate": + "2010-12-19T06:01:33.806Z", "isLocatedIn": [ { "name": "Nellore" } ], "studyAt": [ { "name": + "Rajiv_Gandhi_University_of_Health_Sciences", "isLocatedIn": [ { "name": "Bangalore" } ] } ] }, + { "distance23": 2, "distance31": 3, "distance32": 3, "distance33": 3, "distance34": 3, + "distance35": 3, "distance36": 3, "distance37": 3, "id": 10995116281487, "lastName": "Kumar", + "birthday": "1988-06-12T00:00:00Z", "gender": "male", "browserUsed": "Firefox", "locationIP": + "14.142.245.184", "email": [ "Deepak10995116281487@yahoo.com" ], "language": [ "en", "ml", "te" + ], "creationDate": "2010-11-14T04:37:57.908Z", "isLocatedIn": [ { "name": "English_Bazar" } ], + "studyAt": [ { "name": "Christ_University", "isLocatedIn": [ { "name": "Bangalore" } ] } ] }, { + "distance21": 2, "distance22": 2, "distance23": 2, "distance31": 3, "distance32": 3, + "distance33": 3, "distance34": 3, "distance35": 3, "distance36": 3, "distance37": 3, "id": + 21990232557419, "lastName": "Kumar", "birthday": "1983-12-08T00:00:00Z", "gender": "male", + "browserUsed": "Internet Explorer", "locationIP": "14.102.188.68", "email": [ + "Deepak21990232557419@gmail.com", "Deepak21990232557419@gmx.com" ], "language": [ "en", "ur", + "or" ], "creationDate": "2011-09-12T01:46:02.005Z", "isLocatedIn": [ { "name": "Tezpur" } ], + "studyAt": [ { "name": "Indian_Institute_of_Science", "isLocatedIn": [ { "name": "Bangalore" } ] + } ] }, { "distance31": 3, "distance33": 3, "distance35": 3, "id": 35184372090643, "lastName": + "Kumar", "birthday": "1984-01-21T00:00:00Z", "gender": "male", "browserUsed": "Firefox", + "locationIP": "42.107.228.203", "email": [ "Deepak35184372090643@gmail.com", + "Deepak35184372090643@yahoo.com" ], "language": [ "en", "hi", "kn" ], "creationDate": + "2012-09-11T13:35:19.789Z", "isLocatedIn": [ { "name": "Nashik" } ], "studyAt": [ { "name": + "Ramakrishna_Mission_Residential_College,_Narendrapur", "isLocatedIn": [ { "name": "Kolkata" } ] + } ] }, { "distance23": 2, "distance32": 3, "distance33": 3, "distance35": 3, "distance37": 3, + "id": 24189255813921, "lastName": "Nair", "birthday": "1983-10-25T00:00:00Z", "gender": "male", + "browserUsed": "Firefox", "locationIP": "61.95.236.10", "email": [ + "Deepak24189255813921@gmx.com", "Deepak24189255813921@yahoo.com", + "Deepak24189255813921@zoho.com", "Deepak24189255813921@gmail.com" ], "language": [ "en", "as" ], + "creationDate": "2011-12-19T21:55:52.83Z", "isLocatedIn": [ { "name": "Gwalior" } ], "studyAt": + [ { "name": "National_Institute_of_Business_Management", "isLocatedIn": [ { "name": "Bangalore" + } ] } ] }, { "distance21": 2, "distance31": 3, "distance33": 3, "distance35": 3, "id": + 28587302325292, "lastName": "Rao", "birthday": "1981-08-06T00:00:00Z", "gender": "male", + "browserUsed": "Opera", "locationIP": "1.7.203.237", "email": [ + "Deepak28587302325292@maghreb.cc", "Deepak28587302325292@yahoo.com", + "Deepak28587302325292@hotmail.com", "Deepak28587302325292@gmail.com" ], "language": [ "en", + "or", "mr" ], "creationDate": "2012-05-06T19:16:53.342Z", "isLocatedIn": [ { "name": "Asansol" } + ], "studyAt": [ { "name": "G.H.Raisoni_Institute_of_Information_Technology", "isLocatedIn": [ { + "name": "Nagpur" } ] } ] }, { "distance21": 2, "distance31": 3, "distance32": 3, "distance33": + 3, "distance34": 3, "distance35": 3, "distance36": 3, "distance37": 3, "id": 30786325580290, + "lastName": "Rao", "birthday": "1981-10-14T00:00:00Z", "gender": "male", "browserUsed": + "Chrome", "locationIP": "27.4.211.176", "email": [ "Deepak30786325580290@hotmail.com", + "Deepak30786325580290@gmail.com", "Deepak30786325580290@gmx.com" ], "language": [ "en", "mr", + "ta" ], "creationDate": "2012-05-26T14:49:06.671Z", "isLocatedIn": [ { "name": "Munsirhat" } ], + "studyAt": [ { "name": "Christ_University", "isLocatedIn": [ { "name": "Bangalore" } ] } ] }, { + "distance22": 2, "distance23": 2, "distance24": 2, "distance32": 3, "distance33": 3, + "distance34": 3, "distance35": 3, "distance36": 3, "distance37": 3, "distance38": 3, "id": + 2199023258552, "lastName": "Reddy", "birthday": "1983-03-15T00:00:00Z", "gender": "male", + "browserUsed": "Firefox", "locationIP": "58.146.102.178", "email": [ + "Deepak2199023258552@gmail.com" ], "language": [ "en", "hi", "mr" ], "creationDate": + "2010-03-21T05:15:01.12Z", "isLocatedIn": [ { "name": "Cuttack" } ], "studyAt": [ { "name": + "CMR_Law_School", "isLocatedIn": [ { "name": "Bangalore" } ] } ] }, { "distance21": 2, + "distance22": 2, "distance31": 3, "distance32": 3, "distance33": 3, "distance34": 3, + "distance35": 3, "distance36": 3, "distance37": 3, "id": 21990232555934, "lastName": "Reddy", + "birthday": "1986-07-21T00:00:00Z", "gender": "male", "browserUsed": "Chrome", "locationIP": + "27.116.22.98", "email": [ "Deepak21990232555934@gmail.com", "Deepak21990232555934@gmx.com", + "Deepak21990232555934@zoho.com" ], "language": [ "en", "te", "bn" ], "creationDate": + "2011-10-17T00:58:35.708Z", "isLocatedIn": [ { "name": "Barrackpore" } ], "studyAt": [ { "name": + "Rajiv_Gandhi_University_of_Health_Sciences", "isLocatedIn": [ { "name": "Bangalore" } ] } ] }, + { "distance21": 2, "distance22": 2, "distance23": 2, "distance31": 3, "distance32": 3, + "distance33": 3, "distance34": 3, "distance35": 3, "distance36": 3, "distance37": 3, "id": + 28587302325768, "lastName": "Roy", "birthday": "1980-03-03T00:00:00Z", "gender": "male", + "browserUsed": "Internet Explorer", "locationIP": "27.34.252.85", "email": [ + "Deepak28587302325768@hotmail.com", "Deepak28587302325768@gmail.com", + "Deepak28587302325768@gmx.com" ], "language": [ "en", "ml", "ur" ], "creationDate": + "2012-03-26T15:22:34.731Z", "isLocatedIn": [ { "name": "Kashipur" } ], "studyAt": [ { "name": + "The_Oxford_Educational_Institutions", "isLocatedIn": [ { "name": "Bangalore" } ] } ] }, { + "distance22": 2, "distance32": 3, "distance33": 3, "distance34": 3, "distance36": 3, + "distance37": 3, "id": 8796093022970, "lastName": "Sharma", "birthday": "1986-04-27T00:00:00Z", + "gender": "male", "browserUsed": "Firefox", "locationIP": "103.1.198.132", "email": [ + "Deepak8796093022970@gmx.com", "Deepak8796093022970@gmail.com" ], "language": [ "en", "ml", "bn" + ], "creationDate": "2010-10-16T11:32:10.76Z", "isLocatedIn": [ { "name": "Brahmavar" } ], + "studyAt": [ { "name": "International_Management_Institute", "isLocatedIn": [ { "name": + "New_Delhi" } ] } ] }, { "distance31": 3, "distance32": 3, "distance33": 3, "distance34": 3, + "distance35": 3, "distance36": 3, "id": 15393162791080, "lastName": "Sharma", "birthday": + "1987-10-08T00:00:00Z", "gender": "male", "browserUsed": "Internet Explorer", "locationIP": + "27.50.4.151", "email": [ "Deepak15393162791080@yahoo.com", "Deepak15393162791080@hotmail.com", + "Deepak15393162791080@gmail.com" ], "language": [ "en", "te", "ta" ], "creationDate": + "2011-04-23T03:00:28.216Z", "isLocatedIn": [ { "name": "Srinagar" } ], "studyAt": [ { "name": + "Ecumenical_Christian_Centre", "isLocatedIn": [ { "name": "Bangalore" } ] } ] } ] }' q9: tag: IC02 - query: '{ - var(func: type(person))@filter(eq(id, "4398046514948")){ - knows{ - msgs1 as ~hasCreator @filter(le(creationDate, "2011-06-10T14:02:42.274+00:00")) - } - ~knows{ - msgs2 as ~hasCreator @filter(le(creationDate, "2011-06-10T14:02:42.274+00:00")) - } - } - q(func: uid(msgs1,msgs2), orderdesc: creationDate, orderasc: fqid, first:20){ - id - content - creationDate - hasCreator{ - id - firstName - lastName - } - } - }' - resp: ' - { - "q": [ - { - "id": 549756454080, - "content": "duh", - "creationDate": "2011-06-10T11:27:35.591Z", - "hasCreator": [ - { - "id": 13194139533535, - "firstName": "Shweta", - "lastName": "Singh" - } - ] - }, - { - "id": 549755858245, - "content": "About Ethiopian Empire, hiopian Empire also known as Abyssinia, covered a geo", - "creationDate": "2011-06-10T11:23:15.209Z", - "hasCreator": [ - { - "id": 15393162790400, - "firstName": "Jose", - "lastName": "Costa" - } - ] - }, - { - "id": 549756436318, - "content": "About Sigmund Freud, use of free association (in which patients report theirAbout 20 Y.O., d States. The album", - "creationDate": "2011-06-10T09:10:15.474Z", - "hasCreator": [ - { - "id": 2194, - "firstName": "Alexander", - "lastName": "Dobrunov" - } - ] - }, - { - "id": 549756765765, - "content": "maybe", - "creationDate": "2011-06-10T08:46:12.266Z", - "hasCreator": [ - { - "id": 2199023256816, - "firstName": "K.", - "lastName": "Bose" - } - ] - }, - { - "id": 549756523284, - "content": "About T-Pain, he founder of the record label Nappy Boy Entertainment, establ", - "creationDate": "2011-06-10T04:54:12.086Z", - "hasCreator": [ - { - "id": 4398046511667, - "firstName": "John", - "lastName": "Chopra" - } - ] - }, - { - "id": 549756523283, - "content": "About Clint Eastwood, Line of Fire (1993), The Bridges of Madison County (1995),", - "creationDate": "2011-06-10T04:42:04.366Z", - "hasCreator": [ - { - "id": 10995116279521, - "firstName": "Rahul", - "lastName": "Nair" - } - ] - }, - { - "id": 549755858244, - "content": "no", - "creationDate": "2011-06-10T03:32:04.194Z", - "hasCreator": [ - { - "id": 2194, - "firstName": "Alexander", - "lastName": "Dobrunov" - } - ] - }, - { - "id": 549756454075, - "content": "right", - "creationDate": "2011-06-10T02:57:50.697Z", - "hasCreator": [ - { - "id": 8796093024661, - "firstName": "Rahul", - "lastName": "Sharma" - } - ] - }, - { - "id": 549756013206, - "content": "thanks", - "creationDate": "2011-06-09T21:48:49.051Z", - "hasCreator": [ - { - "id": 10995116279390, - "firstName": "Arjun", - "lastName": "Rao" - } - ] - }, - { - "id": 549756346967, - "content": "good", - "creationDate": "2011-06-09T20:35:39.693Z", - "hasCreator": [ - { - "id": 15393162790400, - "firstName": "Jose", - "lastName": "Costa" - } - ] - }, - { - "id": 549756523280, - "content": "About Hamid Karzai, hanistan. After the 2004 presidential electAbout Indonesia, ian h", - "creationDate": "2011-06-09T19:08:21.924Z", - "hasCreator": [ - { - "id": 10995116279521, - "firstName": "Rahul", - "lastName": "Nair" - } - ] - }, - { - "id": 549756454087, - "content": "right", - "creationDate": "2011-06-09T18:36:50.237Z", - "hasCreator": [ - { - "id": 8796093024661, - "firstName": "Rahul", - "lastName": "Sharma" - } - ] - }, - { - "id": 549756454083, - "content": "LOL", - "creationDate": "2011-06-09T18:23:06.521Z", - "hasCreator": [ - { - "id": 4398046514661, - "firstName": "Rajiv", - "lastName": "Singh" - } - ] - }, - { - "id": 549756299858, - "content": "About Hamid Karzai, term as Interim President during the 2About Carl Jung, ", - "creationDate": "2011-06-09T16:36:12.012Z", - "hasCreator": [ - { - "id": 8796093025552, - "firstName": "Arjun", - "lastName": "Nair" - } - ] - }, - { - "id": 549756434913, - "content": "About Sigmund Freud, al psychotherapy by creatingAbout Kelly Clarkson, f the 2000s, as well as alsoAbout D. W. ", - "creationDate": "2011-06-09T14:16:18.699Z", - "hasCreator": [ - { - "id": 2194, - "firstName": "Alexander", - "lastName": "Dobrunov" - } - ] - }, - { - "id": 549756828490, - "content": "About Lebanon, ast. At the end of the war, tAbout She Hates Me, tes Me made it become", - "creationDate": "2011-06-09T14:11:35.666Z", - "hasCreator": [ - { - "id": 13194139537010, - "firstName": "Rahul", - "lastName": "Rao" - } - ] - }, - { - "id": 549755820093, - "content": "yes", - "creationDate": "2011-06-09T10:21:36.487Z", - "hasCreator": [ - { - "id": 10995116279390, - "firstName": "Arjun", - "lastName": "Rao" - } - ] - }, - { - "id": 549755820095, - "content": "About Pope Benedict XVI, ''s closest confidants. Like his predecessAbout Stephen King, lette nominee, and in 2003, the National About Sean Combs, g names). In Au", - "creationDate": "2011-06-09T05:53:54.12Z", - "hasCreator": [ - { - "id": 10995116279390, - "firstName": "Arjun", - "lastName": "Rao" - } - ] - }, - { - "id": 549755936694, - "content": "About Norodom Sihanouk, as The King-Father of Cambodia (PreahmâhaviAbout Boris Yeltsi", - "creationDate": "2011-06-09T04:34:32.795Z", - "hasCreator": [ - { - "id": 13194139533535, - "firstName": "Shweta", - "lastName": "Singh" - } - ] - }, - { - "id": 549756013199, - "content": "thanks", - "creationDate": "2011-06-08T23:24:38.62Z", - "hasCreator": [ - { - "id": 10995116279521, - "firstName": "Rahul", - "lastName": "Nair" - } - ] - } - ] - }' + query: + '{ var(func: type(person))@filter(eq(id, "4398046514948")){ knows{ msgs1 as ~hasCreator + @filter(le(creationDate, "2011-06-10T14:02:42.274+00:00")) } ~knows{ msgs2 as ~hasCreator + @filter(le(creationDate, "2011-06-10T14:02:42.274+00:00")) } } q(func: uid(msgs1,msgs2), + orderdesc: creationDate, orderasc: fqid, first:20){ id content creationDate hasCreator{ id + firstName lastName } } }' + resp: + '{ "q": [ { "id": 549756454080, "content": "duh", "creationDate": "2011-06-10T11:27:35.591Z", + "hasCreator": [ { "id": 13194139533535, "firstName": "Shweta", "lastName": "Singh" } ] }, { + "id": 549755858245, "content": "About Ethiopian Empire, hiopian Empire also known as Abyssinia, + covered a geo", "creationDate": "2011-06-10T11:23:15.209Z", "hasCreator": [ { "id": + 15393162790400, "firstName": "Jose", "lastName": "Costa" } ] }, { "id": 549756436318, "content": + "About Sigmund Freud, use of free association (in which patients report theirAbout 20 Y.O., d + States. The album", "creationDate": "2011-06-10T09:10:15.474Z", "hasCreator": [ { "id": 2194, + "firstName": "Alexander", "lastName": "Dobrunov" } ] }, { "id": 549756765765, "content": + "maybe", "creationDate": "2011-06-10T08:46:12.266Z", "hasCreator": [ { "id": 2199023256816, + "firstName": "K.", "lastName": "Bose" } ] }, { "id": 549756523284, "content": "About T-Pain, he + founder of the record label Nappy Boy Entertainment, establ", "creationDate": + "2011-06-10T04:54:12.086Z", "hasCreator": [ { "id": 4398046511667, "firstName": "John", + "lastName": "Chopra" } ] }, { "id": 549756523283, "content": "About Clint Eastwood, Line of Fire + (1993), The Bridges of Madison County (1995),", "creationDate": "2011-06-10T04:42:04.366Z", + "hasCreator": [ { "id": 10995116279521, "firstName": "Rahul", "lastName": "Nair" } ] }, { "id": + 549755858244, "content": "no", "creationDate": "2011-06-10T03:32:04.194Z", "hasCreator": [ { + "id": 2194, "firstName": "Alexander", "lastName": "Dobrunov" } ] }, { "id": 549756454075, + "content": "right", "creationDate": "2011-06-10T02:57:50.697Z", "hasCreator": [ { "id": + 8796093024661, "firstName": "Rahul", "lastName": "Sharma" } ] }, { "id": 549756013206, + "content": "thanks", "creationDate": "2011-06-09T21:48:49.051Z", "hasCreator": [ { "id": + 10995116279390, "firstName": "Arjun", "lastName": "Rao" } ] }, { "id": 549756346967, "content": + "good", "creationDate": "2011-06-09T20:35:39.693Z", "hasCreator": [ { "id": 15393162790400, + "firstName": "Jose", "lastName": "Costa" } ] }, { "id": 549756523280, "content": "About Hamid + Karzai, hanistan. After the 2004 presidential electAbout Indonesia, ian h", "creationDate": + "2011-06-09T19:08:21.924Z", "hasCreator": [ { "id": 10995116279521, "firstName": "Rahul", + "lastName": "Nair" } ] }, { "id": 549756454087, "content": "right", "creationDate": + "2011-06-09T18:36:50.237Z", "hasCreator": [ { "id": 8796093024661, "firstName": "Rahul", + "lastName": "Sharma" } ] }, { "id": 549756454083, "content": "LOL", "creationDate": + "2011-06-09T18:23:06.521Z", "hasCreator": [ { "id": 4398046514661, "firstName": "Rajiv", + "lastName": "Singh" } ] }, { "id": 549756299858, "content": "About Hamid Karzai, term as Interim + President during the 2About Carl Jung, ", "creationDate": "2011-06-09T16:36:12.012Z", + "hasCreator": [ { "id": 8796093025552, "firstName": "Arjun", "lastName": "Nair" } ] }, { "id": + 549756434913, "content": "About Sigmund Freud, al psychotherapy by creatingAbout Kelly Clarkson, + f the 2000s, as well as alsoAbout D. W. ", "creationDate": "2011-06-09T14:16:18.699Z", + "hasCreator": [ { "id": 2194, "firstName": "Alexander", "lastName": "Dobrunov" } ] }, { "id": + 549756828490, "content": "About Lebanon, ast. At the end of the war, tAbout She Hates Me, tes Me + made it become", "creationDate": "2011-06-09T14:11:35.666Z", "hasCreator": [ { "id": + 13194139537010, "firstName": "Rahul", "lastName": "Rao" } ] }, { "id": 549755820093, "content": + "yes", "creationDate": "2011-06-09T10:21:36.487Z", "hasCreator": [ { "id": 10995116279390, + "firstName": "Arjun", "lastName": "Rao" } ] }, { "id": 549755820095, "content": "About Pope + Benedict XVI, ''s closest confidants. Like his predecessAbout Stephen King, lette nominee, and + in 2003, the National About Sean Combs, g names). In Au", "creationDate": + "2011-06-09T05:53:54.12Z", "hasCreator": [ { "id": 10995116279390, "firstName": "Arjun", + "lastName": "Rao" } ] }, { "id": 549755936694, "content": "About Norodom Sihanouk, as The + King-Father of Cambodia (PreahmâhaviAbout Boris Yeltsi", "creationDate": + "2011-06-09T04:34:32.795Z", "hasCreator": [ { "id": 13194139533535, "firstName": "Shweta", + "lastName": "Singh" } ] }, { "id": 549756013199, "content": "thanks", "creationDate": + "2011-06-08T23:24:38.62Z", "hasCreator": [ { "id": 10995116279521, "firstName": "Rahul", + "lastName": "Nair" } ] } ] }' q10: tag: IC04 - query: '{ - var(func: type(person))@filter(eq(id, "933")) { - knows { - p1 as ~hasCreator @filter(lt(creationDate, "2011-10-10T14:02:42.274+00:00") AND type(post)) - } - ~knows { - p2 as ~hasCreator @filter(lt(creationDate, "2011-10-10T14:02:42.274+00:00")AND type(post)) - } - } + query: '{ var(func: type(person))@filter(eq(id, "933")) { knows { p1 as ~hasCreator + @filter(lt(creationDate, "2011-10-10T14:02:42.274+00:00") AND type(post)) } ~knows { p2 as + ~hasCreator @filter(lt(creationDate, "2011-10-10T14:02:42.274+00:00")AND type(post)) } } - var(func: uid(p1,p2)) @filter(le(creationDate, "2011-06-10T14:02:42.274+00:00")) { - oldTags as hasTag - } + var(func: uid(p1,p2)) @filter(le(creationDate, "2011-06-10T14:02:42.274+00:00")) { oldTags as + hasTag } - pbw as var(func: uid(p1,p2)) @filter(gt(creationDate, "2011-06-10T14:02:42.274+00:00")) + pbw as var(func: uid(p1,p2)) @filter(gt(creationDate, "2011-06-10T14:02:42.274+00:00")) - var(func: uid(pbw)) { - newTags as hasTag @filter(NOT uid(oldTags)) - } + var(func: uid(pbw)) { newTags as hasTag @filter(NOT uid(oldTags)) } - var(func: uid(newTags)) { - pc as count(~hasTag) @filter(uid(pbw)) - } + var(func: uid(newTags)) { pc as count(~hasTag) @filter(uid(pbw)) } - q(func: uid(newTags), orderdesc: val(pc), first: 10) { - name - val(pc) - } - }' - resp: '{ - "q": [ - { - "name": "Maurice_Ravel", - "val(pc)": 3 - }, - { - "name": "Mohammad_Reza_Pahlavi", - "val(pc)": 2 - }, - { - "name": "99_Problems", - "val(pc)": 1 - } - ] - }' + q(func: uid(newTags), orderdesc: val(pc), first: 10) { name val(pc) } }' + resp: + '{ "q": [ { "name": "Maurice_Ravel", "val(pc)": 3 }, { "name": "Mohammad_Reza_Pahlavi", + "val(pc)": 2 }, { "name": "99_Problems", "val(pc)": 1 } ] }' q11: tag: IC05 - query: '{ - pid as var(func: type(person))@filter(eq(id, "102")) - - var(func: uid(pid)){ - f11 as knows{ - f21 as knows @filter(NOT uid(pid)) - f22 as ~knows @filter(NOT uid(pid)) - } - f12 as ~knows{ - f23 as knows @filter(NOT uid(pid)) - f24 as ~knows @filter(NOT uid(pid)) - } - } - + query: '{ pid as var(func: type(person))@filter(eq(id, "102")) + + var(func: uid(pid)){ f11 as knows{ f21 as knows @filter(NOT uid(pid)) f22 as ~knows @filter(NOT + uid(pid)) } f12 as ~knows{ f23 as knows @filter(NOT uid(pid)) f24 as ~knows @filter(NOT + uid(pid)) } } + f as var(func: uid(f11, f12, f21, f22, f23, f24)) - vr as var(func: uid(f)) @cascade { - id - forums as ~hasMember @facets(ge(joinDate, "2011-07-18T18:52:55.426+00:00")){ - id - } - } + vr as var(func: uid(f)) @cascade { id forums as ~hasMember @facets(ge(joinDate, + "2011-07-18T18:52:55.426+00:00")){ id } } - var(func: uid(vr)) { - pr as ~hasCreator @filter(ge(creationDate, "2011-07-18T18:52:55.426+00:00") AND uid_in(~containerOf, uid(forums)) AND type(post)) - } + var(func: uid(vr)) { pr as ~hasCreator @filter(ge(creationDate, "2011-07-18T18:52:55.426+00:00") + AND uid_in(~containerOf, uid(forums)) AND type(post)) } - var(func: uid(pr)) @cascade{ - id - creationDate - hasCreator{ - id - } - c as math(1) - ~containerOf @filter(eq(title, "Group for Buddy_Holly in Aligarh")){ - fposts as math(c) - } - } + var(func: uid(pr)) @cascade{ id creationDate hasCreator{ id } c as math(1) ~containerOf + @filter(eq(title, "Group for Buddy_Holly in Aligarh")){ fposts as math(c) } } - q(func: uid(fposts), orderdesc: val(fposts)) { - fqid - title - val(fposts) - } - }' - resp: '{ - "q": [ - { - "fqid": "forum_618475321331", - "title": "Group for Buddy_Holly in Aligarh", - "val(fposts)": 33 - } - ] - }' + q(func: uid(fposts), orderdesc: val(fposts)) { fqid title val(fposts) } }' + resp: + '{ "q": [ { "fqid": "forum_618475321331", "title": "Group for Buddy_Holly in Aligarh", + "val(fposts)": 33 } ] }' q12: tag: IC06 - query: '{ - pid as var(func: type(person))@filter(eq(id, "102")) - var(func: uid(pid)){ - f11 as knows{ - f12 as knows @filter(NOT uid(pid)) - f13 as ~knows @filter(NOT uid(pid)) - } - f21 as ~knows{ - f22 as knows @filter(NOT uid(pid)) - f23 as ~knows @filter(NOT uid(pid)) - } - } - tag as var(func: eq(name, "Rumi")) { - posts as ~hasTag @filter(type(post)) - } - var(func: uid(f11 ,f12, f13, f21, f22, f23)){ - tc as math(1) - ~hasCreator @filter(uid(posts)) { - otherTag as hasTag { - tagCount as math(tc) - } - } - } - tags as var(func: uid(otherTag)) @filter(NOT uid(tag)) - q(func: uid(tags), orderdesc: val(tagCount), first:10){ - name - postCount: val(tagCount) - } - }' - resp: ' - { - "q": [ - { - "name": "Henry_IV_of_France", - "postCount": 6 - }, - { - "name": "Peggy_Lee", - "postCount": 5 - }, - { - "name": "Mary_J._Blige", - "postCount": 5 - }, - { - "name": "Thomas_Edison", - "postCount": 4 - }, - { - "name": "P._G._Wodehouse", - "postCount": 4 - }, - { - "name": "Jacques_Offenbach", - "postCount": 4 - }, - { - "name": "Meryl_Streep", - "postCount": 4 - }, - { - "name": "Roger_Federer", - "postCount": 4 - }, - { - "name": "Sarah_McLachlan", - "postCount": 3 - }, - { - "name": "Jay-Z", - "postCount": 3 - } - ] - }' + query: + '{ pid as var(func: type(person))@filter(eq(id, "102")) var(func: uid(pid)){ f11 as knows{ f12 + as knows @filter(NOT uid(pid)) f13 as ~knows @filter(NOT uid(pid)) } f21 as ~knows{ f22 as knows + @filter(NOT uid(pid)) f23 as ~knows @filter(NOT uid(pid)) } } tag as var(func: eq(name, "Rumi")) + { posts as ~hasTag @filter(type(post)) } var(func: uid(f11 ,f12, f13, f21, f22, f23)){ tc as + math(1) ~hasCreator @filter(uid(posts)) { otherTag as hasTag { tagCount as math(tc) } } } tags + as var(func: uid(otherTag)) @filter(NOT uid(tag)) q(func: uid(tags), orderdesc: val(tagCount), + first:10){ name postCount: val(tagCount) } }' + resp: + '{ "q": [ { "name": "Henry_IV_of_France", "postCount": 6 }, { "name": "Peggy_Lee", "postCount": + 5 }, { "name": "Mary_J._Blige", "postCount": 5 }, { "name": "Thomas_Edison", "postCount": 4 }, { + "name": "P._G._Wodehouse", "postCount": 4 }, { "name": "Jacques_Offenbach", "postCount": 4 }, { + "name": "Meryl_Streep", "postCount": 4 }, { "name": "Roger_Federer", "postCount": 4 }, { "name": + "Sarah_McLachlan", "postCount": 3 }, { "name": "Jay-Z", "postCount": 3 } ] }' q13: tag: IC07 - query: '{ - pid as var(func: type(person))@filter(eq(id, "102")) - var(func: uid(pid))@cascade { - messages as ~hasCreator { - personLikes as ~likes - } - friends1 as knows{ - friend1 as math(1) - } - friends2 as ~knows{ - friend2 as math(1) - } - } + query: '{ pid as var(func: type(person))@filter(eq(id, "102")) var(func: uid(pid))@cascade { + messages as ~hasCreator { personLikes as ~likes } friends1 as knows{ friend1 as math(1) } + friends2 as ~knows{ friend2 as math(1) } } - q(func: uid(friends1, friends2, personLikes), orderdesc: id, first:20) @filter(uid_in(likes, uid(messages) )){ - isFriend2: val(friend2) - isFriend1: val(friend1) - id - firstName - lastName - likes @facets(orderdesc: creationDate) @filter(uid(messages)) (first:1){ - id - creationDate - } - } - }' - resp: ' - { - "q": [ - { - "isFriend1": 1, - "id": 32985348835356, - "firstName": "Sirak", - "lastName": "Dego", - "likes": [ - { - "id": 137439165539, - "creationDate": "2010-05-28T03:42:06.013Z", - "likes|creationDate": "2012-09-02T13:22:05.986+00:00" - } - ] - }, - { - "isFriend1": 1, - "id": 32985348833796, - "firstName": "Eugene", - "lastName": "Roindefo", - "likes": [ - { - "id": 687194982445, - "creationDate": "2011-10-25T03:52:33.775Z", - "likes|creationDate": "2012-08-29T11:59:24.376+00:00" - } - ] - }, - { - "id": 30786325580709, - "firstName": "Maria", - "lastName": "Adhia", - "likes": [ - { - "id": 1030792495067, - "creationDate": "2012-07-15T09:13:03.666Z", - "likes|creationDate": "2012-07-17T12:32:40.126+00:00" - } - ] - }, - { - "isFriend1": 1, - "id": 30786325580521, - "firstName": "A. K.", - "lastName": "Kapoor", - "likes": [ - { - "id": 206158645460, - "creationDate": "2010-07-25T20:55:24.529Z", - "likes|creationDate": "2012-09-04T00:30:34.431+00:00" - } - ] - }, - { - "isFriend1": 1, - "id": 30786325579731, - "firstName": "Angel", - "lastName": "Dego", - "likes": [ - { - "id": 755914459308, - "creationDate": "2011-12-21T19:23:33.148Z", - "likes|creationDate": "2012-07-17T06:54:31.413+00:00" - } - ] - }, - { - "id": 30786325579579, - "firstName": "John", - "lastName": "Murray", - "likes": [ - { - "id": 1030792495067, - "creationDate": "2012-07-15T09:13:03.666Z", - "likes|creationDate": "2012-08-03T11:44:46.719+00:00" - } - ] - }, - { - "isFriend1": 1, - "id": 30786325579016, - "firstName": "Anucha", - "lastName": "Paphunga", - "likes": [ - { - "id": 274878122242, - "creationDate": "2010-09-12T00:25:25.967Z", - "likes|creationDate": "2012-09-05T13:29:08.889+00:00" - } - ] - }, - { - "isFriend1": 1, - "id": 30786325578258, - "firstName": "Angel", - "lastName": "Melaku", - "likes": [ - { - "id": 549756028924, - "creationDate": "2011-06-09T04:49:24.699Z", - "likes|creationDate": "2012-08-26T12:42:22.138+00:00" - } - ] - }, - { - "id": 30786325577877, - "firstName": "Gary", - "lastName": "Hill", - "likes": [ - { - "id": 274878974105, - "creationDate": "2010-10-16T02:41:59.6Z", - "likes|creationDate": "2012-06-08T15:19:17.784+00:00" - } - ] - }, - { - "id": 28587302325553, - "firstName": "Jan", - "lastName": "Andrle", - "likes": [ - { - "id": 137439467278, - "creationDate": "2010-05-10T05:04:31.487Z", - "likes|creationDate": "2012-05-13T23:59:36.997+00:00" - } - ] - }, - { - "id": 28587302325465, - "firstName": "Francis", - "lastName": "Sotto", - "likes": [ - { - "id": 137439467278, - "creationDate": "2010-05-10T05:04:31.487Z", - "likes|creationDate": "2012-05-28T21:38:55.530+00:00" - } - ] - }, - { - "id": 28587302325298, - "firstName": "Yacine", - "lastName": "Abdeslam", - "likes": [ - { - "id": 137439467278, - "creationDate": "2010-05-10T05:04:31.487Z", - "likes|creationDate": "2012-03-29T09:18:21.406+00:00" - } - ] - }, - { - "id": 28587302325169, - "firstName": "Stefano", - "lastName": "Bianchi", - "likes": [ - { - "id": 274878974105, - "creationDate": "2010-10-16T02:41:59.6Z", - "likes|creationDate": "2012-03-26T19:33:06.543+00:00" - } - ] - }, - { - "id": 28587302325046, - "firstName": "Abraham", - "lastName": "Raghu", - "likes": [ - { - "id": 137439467278, - "creationDate": "2010-05-10T05:04:31.487Z", - "likes|creationDate": "2012-03-30T07:06:27.795+00:00" - } - ] - }, - { - "id": 28587302325012, - "firstName": "Josef", - "lastName": "Lederer", - "likes": [ - { - "id": 274878974105, - "creationDate": "2010-10-16T02:41:59.6Z", - "likes|creationDate": "2012-04-28T05:28:48.748+00:00" - } - ] - }, - { - "id": 28587302324990, - "firstName": "Abdoulatifou", - "lastName": "Tsiranana", - "likes": [ - { - "id": 274878974105, - "creationDate": "2010-10-16T02:41:59.6Z", - "likes|creationDate": "2012-05-04T21:25:23.472+00:00" - } - ] - }, - { - "id": 28587302324670, - "firstName": "Faisal", - "lastName": "Abdel Fattah", - "likes": [ - { - "id": 274878974105, - "creationDate": "2010-10-16T02:41:59.6Z", - "likes|creationDate": "2012-04-30T14:28:59.031+00:00" - } - ] - }, - { - "isFriend1": 1, - "id": 28587302323895, - "firstName": "พงศธร สุภิญโญ", - "lastName": "Bua", - "likes": [ - { - "id": 206158645460, - "creationDate": "2010-07-25T20:55:24.529Z", - "likes|creationDate": "2012-08-17T22:26:16.180+00:00" - } - ] - }, - { - "isFriend1": 1, - "id": 28587302323175, - "firstName": "Aisso", - "lastName": "Gerima", - "likes": [ - { - "id": 274878122242, - "creationDate": "2010-09-12T00:25:25.967Z", - "likes|creationDate": "2012-06-01T07:12:15.282+00:00" - } - ] - }, - { - "isFriend1": 1, - "id": 28587302322530, - "firstName": "David", - "lastName": "Taylor", - "likes": [ - { - "id": 755914459308, - "creationDate": "2011-12-21T19:23:33.148Z", - "likes|creationDate": "2012-08-14T00:46:37.967+00:00" - } - ] - } - ] - }' + q(func: uid(friends1, friends2, personLikes), orderdesc: id, first:20) @filter(uid_in(likes, + uid(messages) )){ isFriend2: val(friend2) isFriend1: val(friend1) id firstName lastName likes + @facets(orderdesc: creationDate) @filter(uid(messages)) (first:1){ id creationDate } } }' + resp: + '{ "q": [ { "isFriend1": 1, "id": 32985348835356, "firstName": "Sirak", "lastName": "Dego", + "likes": [ { "id": 137439165539, "creationDate": "2010-05-28T03:42:06.013Z", + "likes|creationDate": "2012-09-02T13:22:05.986+00:00" } ] }, { "isFriend1": 1, "id": + 32985348833796, "firstName": "Eugene", "lastName": "Roindefo", "likes": [ { "id": 687194982445, + "creationDate": "2011-10-25T03:52:33.775Z", "likes|creationDate": + "2012-08-29T11:59:24.376+00:00" } ] }, { "id": 30786325580709, "firstName": "Maria", "lastName": + "Adhia", "likes": [ { "id": 1030792495067, "creationDate": "2012-07-15T09:13:03.666Z", + "likes|creationDate": "2012-07-17T12:32:40.126+00:00" } ] }, { "isFriend1": 1, "id": + 30786325580521, "firstName": "A. K.", "lastName": "Kapoor", "likes": [ { "id": 206158645460, + "creationDate": "2010-07-25T20:55:24.529Z", "likes|creationDate": + "2012-09-04T00:30:34.431+00:00" } ] }, { "isFriend1": 1, "id": 30786325579731, "firstName": + "Angel", "lastName": "Dego", "likes": [ { "id": 755914459308, "creationDate": + "2011-12-21T19:23:33.148Z", "likes|creationDate": "2012-07-17T06:54:31.413+00:00" } ] }, { "id": + 30786325579579, "firstName": "John", "lastName": "Murray", "likes": [ { "id": 1030792495067, + "creationDate": "2012-07-15T09:13:03.666Z", "likes|creationDate": + "2012-08-03T11:44:46.719+00:00" } ] }, { "isFriend1": 1, "id": 30786325579016, "firstName": + "Anucha", "lastName": "Paphunga", "likes": [ { "id": 274878122242, "creationDate": + "2010-09-12T00:25:25.967Z", "likes|creationDate": "2012-09-05T13:29:08.889+00:00" } ] }, { + "isFriend1": 1, "id": 30786325578258, "firstName": "Angel", "lastName": "Melaku", "likes": [ { + "id": 549756028924, "creationDate": "2011-06-09T04:49:24.699Z", "likes|creationDate": + "2012-08-26T12:42:22.138+00:00" } ] }, { "id": 30786325577877, "firstName": "Gary", "lastName": + "Hill", "likes": [ { "id": 274878974105, "creationDate": "2010-10-16T02:41:59.6Z", + "likes|creationDate": "2012-06-08T15:19:17.784+00:00" } ] }, { "id": 28587302325553, + "firstName": "Jan", "lastName": "Andrle", "likes": [ { "id": 137439467278, "creationDate": + "2010-05-10T05:04:31.487Z", "likes|creationDate": "2012-05-13T23:59:36.997+00:00" } ] }, { "id": + 28587302325465, "firstName": "Francis", "lastName": "Sotto", "likes": [ { "id": 137439467278, + "creationDate": "2010-05-10T05:04:31.487Z", "likes|creationDate": + "2012-05-28T21:38:55.530+00:00" } ] }, { "id": 28587302325298, "firstName": "Yacine", + "lastName": "Abdeslam", "likes": [ { "id": 137439467278, "creationDate": + "2010-05-10T05:04:31.487Z", "likes|creationDate": "2012-03-29T09:18:21.406+00:00" } ] }, { "id": + 28587302325169, "firstName": "Stefano", "lastName": "Bianchi", "likes": [ { "id": 274878974105, + "creationDate": "2010-10-16T02:41:59.6Z", "likes|creationDate": "2012-03-26T19:33:06.543+00:00" + } ] }, { "id": 28587302325046, "firstName": "Abraham", "lastName": "Raghu", "likes": [ { "id": + 137439467278, "creationDate": "2010-05-10T05:04:31.487Z", "likes|creationDate": + "2012-03-30T07:06:27.795+00:00" } ] }, { "id": 28587302325012, "firstName": "Josef", "lastName": + "Lederer", "likes": [ { "id": 274878974105, "creationDate": "2010-10-16T02:41:59.6Z", + "likes|creationDate": "2012-04-28T05:28:48.748+00:00" } ] }, { "id": 28587302324990, + "firstName": "Abdoulatifou", "lastName": "Tsiranana", "likes": [ { "id": 274878974105, + "creationDate": "2010-10-16T02:41:59.6Z", "likes|creationDate": "2012-05-04T21:25:23.472+00:00" + } ] }, { "id": 28587302324670, "firstName": "Faisal", "lastName": "Abdel Fattah", "likes": [ { + "id": 274878974105, "creationDate": "2010-10-16T02:41:59.6Z", "likes|creationDate": + "2012-04-30T14:28:59.031+00:00" } ] }, { "isFriend1": 1, "id": 28587302323895, "firstName": + "พงศธร สุภิญโญ", "lastName": "Bua", "likes": [ { "id": 206158645460, "creationDate": + "2010-07-25T20:55:24.529Z", "likes|creationDate": "2012-08-17T22:26:16.180+00:00" } ] }, { + "isFriend1": 1, "id": 28587302323175, "firstName": "Aisso", "lastName": "Gerima", "likes": [ { + "id": 274878122242, "creationDate": "2010-09-12T00:25:25.967Z", "likes|creationDate": + "2012-06-01T07:12:15.282+00:00" } ] }, { "isFriend1": 1, "id": 28587302322530, "firstName": + "David", "lastName": "Taylor", "likes": [ { "id": 755914459308, "creationDate": + "2011-12-21T19:23:33.148Z", "likes|creationDate": "2012-08-14T00:46:37.967+00:00" } ] } ] }' q14: tag: IC08 - query: '{ - var(func: type(person))@filter(eq(id, "4398046514948"))@cascade{ - ~hasCreator{ - replies as ~replyOf - } - } - q(func: uid(replies), orderdesc: creationDate, orderasc: id, first:20 ){ - id - content - creationDate - hasCreator{ - id - firstName - lastName - } - } - }' - resp: ' - { - "q":[ - { - "id":1030792574454, - "content":"good", - "creationDate":"2012-09-02T13:06:03.784Z", - "hasCreator":[ - { - "id":4398046511667, - "firstName":"John", - "lastName":"Chopra" - } - ] - }, - { - "id":1030792574449, - "content":"roflol", - "creationDate":"2012-09-02T04:35:03.877Z", - "hasCreator":[ - { - "id":19791209301054, - "firstName":"Ana", - "lastName":"Alves" - } - ] - }, - { - "id":1030792574453, - "content":"good", - "creationDate":"2012-09-02T04:26:48.008Z", - "hasCreator":[ - { - "id":4398046513018, - "firstName":"Deepak", - "lastName":"Kumar" - } - ] - }, - { - "id":1030792278590, - "content":"About Bing Crosby, s. The company also developed equipmentAbout Fiji, ation i", - "creationDate":"2012-08-31T04:27:46.054Z", - "hasCreator":[ - { - "id":26388279067551, - "firstName":"Anand", - "lastName":"Rao" - } - ] - }, - { - "id":1030792571689, - "content":"ok", - "creationDate":"2012-08-13T14:20:23.266Z", - "hasCreator":[ - { - "id":8796093025528, - "firstName":"Wei", - "lastName":"Li" - } - ] - }, - { - "id":1030792635989, - "content":"yes", - "creationDate":"2012-08-06T09:47:16.093Z", - "hasCreator":[ - { - "id":2199023259059, - "firstName":"Joseph", - "lastName":"Chopra" - } - ] - }, - { - "id":1030792635986, - "content":"About William Pitt the Younger, ithout anAbout Tony Bennett, o — that About Ukraine, GDP g", - "creationDate":"2012-08-06T09:42:08.981Z", - "hasCreator":[ - { - "id":2199023258456, - "firstName":"Alfonso", - "lastName":"Campos" - } - ] - }, - { - "id":1030792521966, - "content":"About John McEnroe, mmy Connors and About Ehud Olmert, nt against formeAbout Amy Winehouse, ted at number", - "creationDate":"2012-08-06T04:05:25.263Z", - "hasCreator":[ - { - "id":6597069767432, - "firstName":"Abhishek", - "lastName":"Rao" - } - ] - }, - { - "id":1030792521953, - "content":"good", - "creationDate":"2012-08-06T00:22:06.917Z", - "hasCreator":[ - { - "id":21990232555934, - "firstName":"Deepak", - "lastName":"Reddy" - } - ] - }, - { - "id":1030792521952, - "content":"maybe", - "creationDate":"2012-08-05T21:26:40.818Z", - "hasCreator":[ - { - "id":609, - "firstName":"Shweta", - "lastName":"Sharma" - } - ] - }, - { - "id":1030792521962, - "content":"thx", - "creationDate":"2012-08-05T19:18:39.998Z", - "hasCreator":[ - { - "id":8796093022765, - "firstName":"Rahul", - "lastName":"Singh" - } - ] - }, - { - "id":1030792521957, - "content":"right", - "creationDate":"2012-08-05T17:08:47.684Z", - "hasCreator":[ - { - "id":2874, - "firstName":"Deepak", - "lastName":"Bose" - } - ] - }, - { - "id":1030792521954, - "content":"About Ehud Olmert, nterim Prime MiAbout Gordon Brown, erformed poorlyAbout Quentin Tarant", - "creationDate":"2012-08-05T16:02:27.975Z", - "hasCreator":[ - { - "id":26388279067183, - "firstName":"Shweta", - "lastName":"Sharma" - } - ] - }, - { - "id":1030792359095, - "content":"yes", - "creationDate":"2012-07-21T08:05:13.263Z", - "hasCreator":[ - { - "id":21990232556992, - "firstName":"Shweta", - "lastName":"Kumar" - } - ] - }, - { - "id":1030792359091, - "content":"About Mahmud of Ghazni, zni in modern-day Afghanistan into the wealthy capital of an extensive empire which coveredAbout São Tomé and Príncipe, ão Tomé and Príncipe held presidentia", - "creationDate":"2012-07-20T20:21:48.762Z", - "hasCreator":[ - { - "id":10995116280723, - "firstName":"Abhishek", - "lastName":"Sharma" - } - ] - }, - { - "id":1030792359092, - "content":"no", - "creationDate":"2012-07-20T17:47:11.493Z", - "hasCreator":[ - { - "id":17592186048023, - "firstName":"Abhishek", - "lastName":"Reddy" - } - ] - }, - { - "id":1030792359090, - "content":"roflol", - "creationDate":"2012-07-20T16:48:47.505Z", - "hasCreator":[ - { - "id":8796093025410, - "firstName":"Priyanka", - "lastName":"Singh" - } - ] - }, - { - "id":1030792359098, - "content":"roflol", - "creationDate":"2012-07-20T08:32:07.044Z", - "hasCreator":[ - { - "id":19791209300814, - "firstName":"A.", - "lastName":"Kapoor" - } - ] - }, - { - "id":1030792359130, - "content":"fine", - "creationDate":"2012-07-12T12:42:46.077Z", - "hasCreator":[ - { - "id":2199023258155, - "firstName":"Rahul", - "lastName":"Rao" - } - ] - }, - { - "id":1030792359122, - "content":"I see", - "creationDate":"2012-07-12T05:24:53.898Z", - "hasCreator":[ - { - "id":17592186048023, - "firstName":"Abhishek", - "lastName":"Reddy" - } - ] - } - ] - }' + query: + '{ var(func: type(person))@filter(eq(id, "4398046514948"))@cascade{ ~hasCreator{ replies as + ~replyOf } } q(func: uid(replies), orderdesc: creationDate, orderasc: id, first:20 ){ id content + creationDate hasCreator{ id firstName lastName } } }' + resp: + '{ "q":[ { "id":1030792574454, "content":"good", "creationDate":"2012-09-02T13:06:03.784Z", + "hasCreator":[ { "id":4398046511667, "firstName":"John", "lastName":"Chopra" } ] }, { + "id":1030792574449, "content":"roflol", "creationDate":"2012-09-02T04:35:03.877Z", + "hasCreator":[ { "id":19791209301054, "firstName":"Ana", "lastName":"Alves" } ] }, { + "id":1030792574453, "content":"good", "creationDate":"2012-09-02T04:26:48.008Z", "hasCreator":[ + { "id":4398046513018, "firstName":"Deepak", "lastName":"Kumar" } ] }, { "id":1030792278590, + "content":"About Bing Crosby, s. The company also developed equipmentAbout Fiji, ation i", + "creationDate":"2012-08-31T04:27:46.054Z", "hasCreator":[ { "id":26388279067551, + "firstName":"Anand", "lastName":"Rao" } ] }, { "id":1030792571689, "content":"ok", + "creationDate":"2012-08-13T14:20:23.266Z", "hasCreator":[ { "id":8796093025528, + "firstName":"Wei", "lastName":"Li" } ] }, { "id":1030792635989, "content":"yes", + "creationDate":"2012-08-06T09:47:16.093Z", "hasCreator":[ { "id":2199023259059, + "firstName":"Joseph", "lastName":"Chopra" } ] }, { "id":1030792635986, "content":"About William + Pitt the Younger, ithout anAbout Tony Bennett, o — that About Ukraine, GDP g", + "creationDate":"2012-08-06T09:42:08.981Z", "hasCreator":[ { "id":2199023258456, + "firstName":"Alfonso", "lastName":"Campos" } ] }, { "id":1030792521966, "content":"About John + McEnroe, mmy Connors and About Ehud Olmert, nt against formeAbout Amy Winehouse, ted at number", + "creationDate":"2012-08-06T04:05:25.263Z", "hasCreator":[ { "id":6597069767432, + "firstName":"Abhishek", "lastName":"Rao" } ] }, { "id":1030792521953, "content":"good", + "creationDate":"2012-08-06T00:22:06.917Z", "hasCreator":[ { "id":21990232555934, + "firstName":"Deepak", "lastName":"Reddy" } ] }, { "id":1030792521952, "content":"maybe", + "creationDate":"2012-08-05T21:26:40.818Z", "hasCreator":[ { "id":609, "firstName":"Shweta", + "lastName":"Sharma" } ] }, { "id":1030792521962, "content":"thx", + "creationDate":"2012-08-05T19:18:39.998Z", "hasCreator":[ { "id":8796093022765, + "firstName":"Rahul", "lastName":"Singh" } ] }, { "id":1030792521957, "content":"right", + "creationDate":"2012-08-05T17:08:47.684Z", "hasCreator":[ { "id":2874, "firstName":"Deepak", + "lastName":"Bose" } ] }, { "id":1030792521954, "content":"About Ehud Olmert, nterim Prime + MiAbout Gordon Brown, erformed poorlyAbout Quentin Tarant", + "creationDate":"2012-08-05T16:02:27.975Z", "hasCreator":[ { "id":26388279067183, + "firstName":"Shweta", "lastName":"Sharma" } ] }, { "id":1030792359095, "content":"yes", + "creationDate":"2012-07-21T08:05:13.263Z", "hasCreator":[ { "id":21990232556992, + "firstName":"Shweta", "lastName":"Kumar" } ] }, { "id":1030792359091, "content":"About Mahmud of + Ghazni, zni in modern-day Afghanistan into the wealthy capital of an extensive empire which + coveredAbout São Tomé and Príncipe, ão Tomé and Príncipe held presidentia", + "creationDate":"2012-07-20T20:21:48.762Z", "hasCreator":[ { "id":10995116280723, + "firstName":"Abhishek", "lastName":"Sharma" } ] }, { "id":1030792359092, "content":"no", + "creationDate":"2012-07-20T17:47:11.493Z", "hasCreator":[ { "id":17592186048023, + "firstName":"Abhishek", "lastName":"Reddy" } ] }, { "id":1030792359090, "content":"roflol", + "creationDate":"2012-07-20T16:48:47.505Z", "hasCreator":[ { "id":8796093025410, + "firstName":"Priyanka", "lastName":"Singh" } ] }, { "id":1030792359098, "content":"roflol", + "creationDate":"2012-07-20T08:32:07.044Z", "hasCreator":[ { "id":19791209300814, + "firstName":"A.", "lastName":"Kapoor" } ] }, { "id":1030792359130, "content":"fine", + "creationDate":"2012-07-12T12:42:46.077Z", "hasCreator":[ { "id":2199023258155, + "firstName":"Rahul", "lastName":"Rao" } ] }, { "id":1030792359122, "content":"I see", + "creationDate":"2012-07-12T05:24:53.898Z", "hasCreator":[ { "id":17592186048023, + "firstName":"Abhishek", "lastName":"Reddy" } ] } ] }' q15: tag: IC09 - query: '{ - pid as var(func: type(person))@filter(eq(id, "4398046514948")) - var(func: uid(pid)){ - f11 as knows{ - f21 as knows @filter(NOT uid(pid)) - f22 as ~knows @filter(NOT uid(pid)) - } - f12 as ~knows{ - f23 as knows @filter(NOT uid(pid)) - f24 as ~knows @filter(NOT uid(pid)) - } - } - var(func: uid(f11, f12, f21, f22, f23, f24) ){ - msgs as ~hasCreator @filter(le(creationDate, "2011-06-10T14:02:42.274+00:00" )) - } + query: '{ pid as var(func: type(person))@filter(eq(id, "4398046514948")) var(func: uid(pid)){ f11 + as knows{ f21 as knows @filter(NOT uid(pid)) f22 as ~knows @filter(NOT uid(pid)) } f12 as + ~knows{ f23 as knows @filter(NOT uid(pid)) f24 as ~knows @filter(NOT uid(pid)) } } var(func: + uid(f11, f12, f21, f22, f23, f24) ){ msgs as ~hasCreator @filter(le(creationDate, + "2011-06-10T14:02:42.274+00:00" )) } - q1(func: uid(msgs), orderdesc: creationDate, orderasc: id, first:20){ - id - content - creationDate - hasCreator{ - id - firstName - lastName - } - } - }' - resp: ' - { - "q1":[ - { - "id":549756657940, - "content":"fine", - "creationDate":"2011-06-10T13:56:00.791Z", - "hasCreator":[ - { - "id":13194139536019, - "firstName":"Said Suwailim", - "lastName":"Al-Shoon" - } - ] - }, - { - "id":549756765767, - "content":"About Misty Mountain Hop, ide of the Black Dog single, but still received considerable F", - "creationDate":"2011-06-10T13:42:22.948Z", - "hasCreator":[ - { - "id":4398046511145, - "firstName":"John", - "lastName":"Kumar" - } - ] - }, - { - "id":549756527217, - "content":"About Francis of Assisi, r scene. In 1224, he received the stigmata, making him the first recorded person to bear the wounds of Christ''s Passion.", - "creationDate":"2011-06-10T13:09:23.012Z", - "hasCreator":[ - { - "id":2783, - "firstName":"Rafael", - "lastName":"Alonso" - } - ] - }, - { - "id":549755988758, - "content":"no", - "creationDate":"2011-06-10T12:59:25.702Z", - "hasCreator":[ - { - "id":13194139536501, - "firstName":"Yang", - "lastName":"Zhang" - } - ] - }, - { - "id":549756828497, - "content":"yes", - "creationDate":"2011-06-10T12:33:37.68Z", - "hasCreator":[ - { - "id":8796093025361, - "firstName":"Arjun", - "lastName":"Khan" - } - ] - }, - { - "id":549756812779, - "content":"About Constantine the Great, 22 May 337), also known as Constantine I or Sain", - "creationDate":"2011-06-10T12:30:21.154Z", - "hasCreator":[ - { - "id":10995116278259, - "firstName":"Rahul", - "lastName":"Singh" - } - ] - }, - { - "id":549756812775, - "content":"cool", - "creationDate":"2011-06-10T12:24:17.811Z", - "hasCreator":[ - { - "id":10995116281248, - "firstName":"Arjun", - "lastName":"Sharma" - } - ] - }, - { - "id":549756333087, - "content":"thx", - "creationDate":"2011-06-10T12:08:46.175Z", - "hasCreator":[ - { - "id":6597069767117, - "firstName":"Eli", - "lastName":"Peretz" - } - ] - }, - { - "id":549756635642, - "content":"no", - "creationDate":"2011-06-10T12:01:47.407Z", - "hasCreator":[ - { - "id":6597069767242, - "firstName":"Salim Ahmed", - "lastName":"Binalshibh" - } - ] - }, - { - "id":549755858247, - "content":"maybe", - "creationDate":"2011-06-10T11:49:17.782Z", - "hasCreator":[ - { - "id":6597069767747, - "firstName":"Fali Sam", - "lastName":"Nariman" - } - ] - }, - { - "id":549756657938, - "content":"roflol", - "creationDate":"2011-06-10T11:46:39.373Z", - "hasCreator":[ - { - "id":3748, - "firstName":"Chen", - "lastName":"Yang" - } - ] - }, - { - "id":549755970443, - "content":"LOL", - "creationDate":"2011-06-10T11:44:56.482Z", - "hasCreator":[ - { - "id":13194139534652, - "firstName":"Rodrigo", - "lastName":"Alves" - } - ] - }, - { - "id":549756098361, - "content":"yes", - "creationDate":"2011-06-10T11:37:08.4Z", - "hasCreator":[ - { - "id":15393162790796, - "firstName":"Bingbing", - "lastName":"Xu" - } - ] - }, - { - "id":549756657937, - "content":"About Augustine of Hippo, oman Empire was starting to disintegrate, Augustine developed the concept of the About Francis Bacon, served both as Attorney General a", - "creationDate":"2011-06-10T11:30:38.153Z", - "hasCreator":[ - { - "id":3412, - "firstName":"Lei", - "lastName":"Wang" - } - ] - }, - { - "id":549756454086, - "content":"thanks", - "creationDate":"2011-06-10T11:28:54.455Z", - "hasCreator":[ - { - "id":2199023256181, - "firstName":"John", - "lastName":"Rao" - } - ] - }, - { - "id":549756454080, - "content":"duh", - "creationDate":"2011-06-10T11:27:35.591Z", - "hasCreator":[ - { - "id":13194139533535, - "firstName":"Shweta", - "lastName":"Singh" - } - ] - }, - { - "id":549756812772, - "content":"right", - "creationDate":"2011-06-10T11:26:56.247Z", - "hasCreator":[ - { - "id":8796093023060, - "firstName":"Karim", - "lastName":"Akhmadiyeva" - } - ] - }, - { - "id":549755858245, - "content":"About Ethiopian Empire, hiopian Empire also known as Abyssinia, covered a geo", - "creationDate":"2011-06-10T11:23:15.209Z", - "hasCreator":[ - { - "id":15393162790400, - "firstName":"Jose", - "lastName":"Costa" - } - ] - }, - { - "id":549756812778, - "content":"good", - "creationDate":"2011-06-10T11:05:22.351Z", - "hasCreator":[ - { - "id":15393162789787, - "firstName":"Bakhytzan", - "lastName":"Aab" - } - ] - }, - { - "id":549756330472, - "content":"", - "creationDate":"2011-06-10T11:00:54.828Z", - "hasCreator":[ - { - "id":2199023256097, - "firstName":"Walter", - "lastName":"Schmidt" - } - ] - } - ] - }' + q1(func: uid(msgs), orderdesc: creationDate, orderasc: id, first:20){ id content creationDate + hasCreator{ id firstName lastName } } }' + resp: + '{ "q1":[ { "id":549756657940, "content":"fine", "creationDate":"2011-06-10T13:56:00.791Z", + "hasCreator":[ { "id":13194139536019, "firstName":"Said Suwailim", "lastName":"Al-Shoon" } ] }, + { "id":549756765767, "content":"About Misty Mountain Hop, ide of the Black Dog single, but still + received considerable F", "creationDate":"2011-06-10T13:42:22.948Z", "hasCreator":[ { + "id":4398046511145, "firstName":"John", "lastName":"Kumar" } ] }, { "id":549756527217, + "content":"About Francis of Assisi, r scene. In 1224, he received the stigmata, making him the + first recorded person to bear the wounds of Christ''s Passion.", + "creationDate":"2011-06-10T13:09:23.012Z", "hasCreator":[ { "id":2783, "firstName":"Rafael", + "lastName":"Alonso" } ] }, { "id":549755988758, "content":"no", + "creationDate":"2011-06-10T12:59:25.702Z", "hasCreator":[ { "id":13194139536501, + "firstName":"Yang", "lastName":"Zhang" } ] }, { "id":549756828497, "content":"yes", + "creationDate":"2011-06-10T12:33:37.68Z", "hasCreator":[ { "id":8796093025361, + "firstName":"Arjun", "lastName":"Khan" } ] }, { "id":549756812779, "content":"About Constantine + the Great, 22 May 337), also known as Constantine I or Sain", + "creationDate":"2011-06-10T12:30:21.154Z", "hasCreator":[ { "id":10995116278259, + "firstName":"Rahul", "lastName":"Singh" } ] }, { "id":549756812775, "content":"cool", + "creationDate":"2011-06-10T12:24:17.811Z", "hasCreator":[ { "id":10995116281248, + "firstName":"Arjun", "lastName":"Sharma" } ] }, { "id":549756333087, "content":"thx", + "creationDate":"2011-06-10T12:08:46.175Z", "hasCreator":[ { "id":6597069767117, + "firstName":"Eli", "lastName":"Peretz" } ] }, { "id":549756635642, "content":"no", + "creationDate":"2011-06-10T12:01:47.407Z", "hasCreator":[ { "id":6597069767242, + "firstName":"Salim Ahmed", "lastName":"Binalshibh" } ] }, { "id":549755858247, + "content":"maybe", "creationDate":"2011-06-10T11:49:17.782Z", "hasCreator":[ { + "id":6597069767747, "firstName":"Fali Sam", "lastName":"Nariman" } ] }, { "id":549756657938, + "content":"roflol", "creationDate":"2011-06-10T11:46:39.373Z", "hasCreator":[ { "id":3748, + "firstName":"Chen", "lastName":"Yang" } ] }, { "id":549755970443, "content":"LOL", + "creationDate":"2011-06-10T11:44:56.482Z", "hasCreator":[ { "id":13194139534652, + "firstName":"Rodrigo", "lastName":"Alves" } ] }, { "id":549756098361, "content":"yes", + "creationDate":"2011-06-10T11:37:08.4Z", "hasCreator":[ { "id":15393162790796, + "firstName":"Bingbing", "lastName":"Xu" } ] }, { "id":549756657937, "content":"About Augustine + of Hippo, oman Empire was starting to disintegrate, Augustine developed the concept of the About + Francis Bacon, served both as Attorney General a", "creationDate":"2011-06-10T11:30:38.153Z", + "hasCreator":[ { "id":3412, "firstName":"Lei", "lastName":"Wang" } ] }, { "id":549756454086, + "content":"thanks", "creationDate":"2011-06-10T11:28:54.455Z", "hasCreator":[ { + "id":2199023256181, "firstName":"John", "lastName":"Rao" } ] }, { "id":549756454080, + "content":"duh", "creationDate":"2011-06-10T11:27:35.591Z", "hasCreator":[ { + "id":13194139533535, "firstName":"Shweta", "lastName":"Singh" } ] }, { "id":549756812772, + "content":"right", "creationDate":"2011-06-10T11:26:56.247Z", "hasCreator":[ { + "id":8796093023060, "firstName":"Karim", "lastName":"Akhmadiyeva" } ] }, { "id":549755858245, + "content":"About Ethiopian Empire, hiopian Empire also known as Abyssinia, covered a geo", + "creationDate":"2011-06-10T11:23:15.209Z", "hasCreator":[ { "id":15393162790400, + "firstName":"Jose", "lastName":"Costa" } ] }, { "id":549756812778, "content":"good", + "creationDate":"2011-06-10T11:05:22.351Z", "hasCreator":[ { "id":15393162789787, + "firstName":"Bakhytzan", "lastName":"Aab" } ] }, { "id":549756330472, "content":"", + "creationDate":"2011-06-10T11:00:54.828Z", "hasCreator":[ { "id":2199023256097, + "firstName":"Walter", "lastName":"Schmidt" } ] } ] }' q16: tag: IC10 - query: '{ - pid as var(func: type(person))@filter(eq(id, "933")) - var(func: uid(pid)){ - exf1 as knows{ - f1 as knows - f2 as ~knows - } - exf2 as ~knows{ - f3 as knows - f4 as ~knows - } - } - friendsOfInterest as var(func:uid(f1,f2,f3,f4)) @filter(NOT uid(exf1, exf2, pid)) - var(func: uid(pid)){ - tagsOfInterest as hasInterest (orderasc: fqid) - } - var(func: uid(friendsOfInterest)){ - common as count(~hasCreator) @filter(uid_in(hasTag, uid(tagsOfInterest)) AND type(post)) - } - var(func: uid(friendsOfInterest)){ - uncommon as count(~hasCreator) @filter(NOT uid_in(hasTag, uid(tagsOfInterest)) AND type(post)) - } - var(func: uid(friendsOfInterest) ){ - interest as math(common - uncommon ) - } - q(func: uid(friendsOfInterest), orderdesc: val(interest), first:10){ - fqid - firstName - lastName - gender - isLocatedIn{ - name - } - co: val(common) - un: val(uncommon) - interest: val(interest) - } - }' - resp: ' - { - "q":[ - { - "fqid":"person_30786325578932", - "firstName":"Alexander", - "lastName":"Hleb", - "gender":"female", - "isLocatedIn":[ - { - "name":"Barysaw" - } - ], - "co":10, - "un":0, - "interest":10 - }, - { - "fqid":"person_2788", - "firstName":"Peter", - "lastName":"Schmidt", - "gender":"female", - "isLocatedIn":[ - { - "name":"Wernigerode" - } - ], - "co":7, - "un":0, - "interest":7 - }, - { - "fqid":"person_30786325580189", - "firstName":"Carlos", - "lastName":"Alonso", - "gender":"female", - "isLocatedIn":[ - { - "name":"Madrid" - } - ], - "co":1, - "un":0, - "interest":1 - }, - { - "fqid":"person_30786325578711", - "firstName":"Aad De", - "lastName":"Bos", - "gender":"female", - "isLocatedIn":[ - { - "name":"Maastricht" - } - ], - "co":0, - "un":0, - "interest":0 - }, - { - "fqid":"person_30786325580642", - "firstName":"Heikki", - "lastName":"Blomqvist", - "gender":"male", - "isLocatedIn":[ - { - "name":"Helsinki" - } - ], - "co":0, - "un":0, - "interest":0 - }, - { - "fqid":"person_28587302325169", - "firstName":"Stefano", - "lastName":"Bianchi", - "gender":"male", - "isLocatedIn":[ - { - "name":"Florence" - } - ], - "co":1, - "un":1, - "interest":0 - }, - { - "fqid":"person_32985348836951", - "firstName":"Ismael", - "lastName":"Lo", - "gender":"female", - "isLocatedIn":[ - { - "name":"Dosso" - } - ], - "co":0, - "un":0, - "interest":0 - }, - { - "fqid":"person_32985348833670", - "firstName":"Alfred", - "lastName":"Berg", - "gender":"male", - "isLocatedIn":[ - { - "name":"Amsterdam" - } - ], - "co":0, - "un":0, - "interest":0 - }, - { - "fqid":"person_32985348834284", - "firstName":"Bobby", - "lastName":"Garcia", - "gender":"female", - "isLocatedIn":[ - { - "name":"Legazpi" - } - ], - "co":0, - "un":0, - "interest":0 - }, - { - "fqid":"person_30786325580376", - "firstName":"Bibit", - "lastName":"Budjana", - "gender":"female", - "isLocatedIn":[ - { - "name":"Medan" - } - ], - "co":0, - "un":0, - "interest":0 - } - ] - }' + query: + '{ pid as var(func: type(person))@filter(eq(id, "933")) var(func: uid(pid)){ exf1 as knows{ f1 + as knows f2 as ~knows } exf2 as ~knows{ f3 as knows f4 as ~knows } } friendsOfInterest as + var(func:uid(f1,f2,f3,f4)) @filter(NOT uid(exf1, exf2, pid)) var(func: uid(pid)){ tagsOfInterest + as hasInterest (orderasc: fqid) } var(func: uid(friendsOfInterest)){ common as + count(~hasCreator) @filter(uid_in(hasTag, uid(tagsOfInterest)) AND type(post)) } var(func: + uid(friendsOfInterest)){ uncommon as count(~hasCreator) @filter(NOT uid_in(hasTag, + uid(tagsOfInterest)) AND type(post)) } var(func: uid(friendsOfInterest) ){ interest as + math(common - uncommon ) } q(func: uid(friendsOfInterest), orderdesc: val(interest), first:10){ + fqid firstName lastName gender isLocatedIn{ name } co: val(common) un: val(uncommon) interest: + val(interest) } }' + resp: + '{ "q":[ { "fqid":"person_30786325578932", "firstName":"Alexander", "lastName":"Hleb", + "gender":"female", "isLocatedIn":[ { "name":"Barysaw" } ], "co":10, "un":0, "interest":10 }, { + "fqid":"person_2788", "firstName":"Peter", "lastName":"Schmidt", "gender":"female", + "isLocatedIn":[ { "name":"Wernigerode" } ], "co":7, "un":0, "interest":7 }, { + "fqid":"person_30786325580189", "firstName":"Carlos", "lastName":"Alonso", "gender":"female", + "isLocatedIn":[ { "name":"Madrid" } ], "co":1, "un":0, "interest":1 }, { + "fqid":"person_30786325578711", "firstName":"Aad De", "lastName":"Bos", "gender":"female", + "isLocatedIn":[ { "name":"Maastricht" } ], "co":0, "un":0, "interest":0 }, { + "fqid":"person_30786325580642", "firstName":"Heikki", "lastName":"Blomqvist", "gender":"male", + "isLocatedIn":[ { "name":"Helsinki" } ], "co":0, "un":0, "interest":0 }, { + "fqid":"person_28587302325169", "firstName":"Stefano", "lastName":"Bianchi", "gender":"male", + "isLocatedIn":[ { "name":"Florence" } ], "co":1, "un":1, "interest":0 }, { + "fqid":"person_32985348836951", "firstName":"Ismael", "lastName":"Lo", "gender":"female", + "isLocatedIn":[ { "name":"Dosso" } ], "co":0, "un":0, "interest":0 }, { + "fqid":"person_32985348833670", "firstName":"Alfred", "lastName":"Berg", "gender":"male", + "isLocatedIn":[ { "name":"Amsterdam" } ], "co":0, "un":0, "interest":0 }, { + "fqid":"person_32985348834284", "firstName":"Bobby", "lastName":"Garcia", "gender":"female", + "isLocatedIn":[ { "name":"Legazpi" } ], "co":0, "un":0, "interest":0 }, { + "fqid":"person_30786325580376", "firstName":"Bibit", "lastName":"Budjana", "gender":"female", + "isLocatedIn":[ { "name":"Medan" } ], "co":0, "un":0, "interest":0 } ] }' q17: tag: IC11 - query: '{ - pid as var(func: type(person))@filter(eq(id, "4398046514948")) - var(func: uid(pid)){ - f1 as knows @filter(NOT uid(pid)){ - f11 as knows @filter(NOT uid(pid)) - f12 as ~knows @filter(NOT uid(pid)) - } - f2 as ~knows @filter(NOT uid(pid)){ - f21 as knows @filter(NOT uid(pid)) - f22 as ~knows @filter(NOT uid(pid)) - } - } - friendsAndFoF as var(func:uid(f1, f2, f11, f12, f21, f22)) - country as var(func: eq(name, "Sri_Lanka")) - organisation as var(func: type(organisation)) @filter(uid_in(isLocatedIn, uid(country))) - relevantFriends as var(func: uid(friendsAndFoF))@filter(uid_in(workAt, uid(organisation))) - q(func: uid(relevantFriends), orderasc: id) @cascade{ - id - firstName - lastName - workAt @filter( uid(organisation)) @facets(workFrom) @facets(le(workFrom, "2007-12-31T18:52:55.426+00:00")){ - id - name - } - } - }' - resp: ' - { - "q": [ - { - "id": 8796093025833, - "firstName": "Rahul", - "lastName": "Khan", - "workAt": [ - { - "id": 1226, - "name": "SriLankan_Airlines", - "workAt|workFrom": "2006" - } - ] - }, - { - "id": 15393162791199, - "firstName": "Alawwe", - "lastName": "Fernando", - "workAt": [ - { - "id": 1226, - "name": "SriLankan_Airlines", - "workAt|workFrom": "2004" - } - ] - }, - { - "id": 19791209300504, - "firstName": "M", - "lastName": "Perera", - "workAt": [ - { - "id": 1226, - "name": "SriLankan_Airlines", - "workAt|workFrom": "2007" - }, - { - "id": 1228, - "name": "Expo_Aviation", - "workAt|workFrom": "2006" - } - ] - }, - { - "id": 21990232557705, - "firstName": "Ernest B", - "lastName": "Goenka", - "workAt": [ - { - "id": 1226, - "name": "SriLankan_Airlines", - "workAt|workFrom": "2001" - } - ] - }, - { - "id": 24189255811381, - "firstName": "Mahinda", - "lastName": "De Silva", - "workAt": [ - { - "id": 1228, - "name": "Expo_Aviation", - "workAt|workFrom": "2004" - } - ] - }, - { - "id": 30786325580960, - "firstName": "Duleep", - "lastName": "Banda", - "workAt": [ - { - "id": 1230, - "name": "Deccan_Lanka", - "workAt|workFrom": "2004" - }, - { - "id": 1228, - "name": "Expo_Aviation", - "workAt|workFrom": "2004" - } - ] - }, - { - "id": 32985348836556, - "firstName": "Maithripala", - "lastName": "Gunasekera", - "workAt": [ - { - "id": 1229, - "name": "Mihin_Lanka", - "workAt|workFrom": "2005" - } - ] - } - ] - }' + query: + '{ pid as var(func: type(person))@filter(eq(id, "4398046514948")) var(func: uid(pid)){ f1 as + knows @filter(NOT uid(pid)){ f11 as knows @filter(NOT uid(pid)) f12 as ~knows @filter(NOT + uid(pid)) } f2 as ~knows @filter(NOT uid(pid)){ f21 as knows @filter(NOT uid(pid)) f22 as ~knows + @filter(NOT uid(pid)) } } friendsAndFoF as var(func:uid(f1, f2, f11, f12, f21, f22)) country as + var(func: eq(name, "Sri_Lanka")) organisation as var(func: type(organisation)) + @filter(uid_in(isLocatedIn, uid(country))) relevantFriends as var(func: + uid(friendsAndFoF))@filter(uid_in(workAt, uid(organisation))) q(func: uid(relevantFriends), + orderasc: id) @cascade{ id firstName lastName workAt @filter( uid(organisation)) + @facets(workFrom) @facets(le(workFrom, "2007-12-31T18:52:55.426+00:00")){ id name } } }' + resp: + '{ "q": [ { "id": 8796093025833, "firstName": "Rahul", "lastName": "Khan", "workAt": [ { "id": + 1226, "name": "SriLankan_Airlines", "workAt|workFrom": "2006" } ] }, { "id": 15393162791199, + "firstName": "Alawwe", "lastName": "Fernando", "workAt": [ { "id": 1226, "name": + "SriLankan_Airlines", "workAt|workFrom": "2004" } ] }, { "id": 19791209300504, "firstName": "M", + "lastName": "Perera", "workAt": [ { "id": 1226, "name": "SriLankan_Airlines", "workAt|workFrom": + "2007" }, { "id": 1228, "name": "Expo_Aviation", "workAt|workFrom": "2006" } ] }, { "id": + 21990232557705, "firstName": "Ernest B", "lastName": "Goenka", "workAt": [ { "id": 1226, "name": + "SriLankan_Airlines", "workAt|workFrom": "2001" } ] }, { "id": 24189255811381, "firstName": + "Mahinda", "lastName": "De Silva", "workAt": [ { "id": 1228, "name": "Expo_Aviation", + "workAt|workFrom": "2004" } ] }, { "id": 30786325580960, "firstName": "Duleep", "lastName": + "Banda", "workAt": [ { "id": 1230, "name": "Deccan_Lanka", "workAt|workFrom": "2004" }, { "id": + 1228, "name": "Expo_Aviation", "workAt|workFrom": "2004" } ] }, { "id": 32985348836556, + "firstName": "Maithripala", "lastName": "Gunasekera", "workAt": [ { "id": 1229, "name": + "Mihin_Lanka", "workAt|workFrom": "2005" } ] } ] }' q18: tag: IC12 - query: '{ - mainTagClass as var(func: eq(name, "Artist")) @recurse{ - subClasses as ~isSubclassOf - } - var(func: uid(mainTagClass, subClasses) ){ - tags as ~hasType - } - var(func: type(person))@filter(eq(id, "102")){ - friends1 as knows - friends2 as ~knows - } - friends as var(func: uid(friends1, friends2), first:5000) - relevantPosts as var(func: type(post)) @filter(uid_in(hasTag, uid(tags))) - var(func: uid(relevantPosts)){ - ~replyOf @filter(uid_in(hasCreator, uid(friends))){ - relevantFriends as hasCreator - } - } - var(func: uid(relevantFriends)){ - replyCount as count(~hasCreator) @filter(uid_in(replyOf, uid(relevantPosts) )) - } - q(func: uid(relevantFriends), orderdesc: val(replyCount), first:20){ - id - firstName - lastName - replyCount : val(replyCount) - } - }' - resp: ' - { - "q":[ - { - "id":6597069767242, - "firstName":"Salim Ahmed", - "lastName":"Binalshibh", - "replyCount":882 - }, - { - "id":2783, - "firstName":"Rafael", - "lastName":"Alonso", - "replyCount":832 - }, - { - "id":6597069770047, - "firstName":"Edward", - "lastName":"Popov", - "replyCount":272 - }, - { - "id":4398046514225, - "firstName":"Ricardo", - "lastName":"Calvert", - "replyCount":246 - }, - { - "id":6597069768780, - "firstName":"Carlos", - "lastName":"Martins", - "replyCount":220 - }, - { - "id":3587, - "firstName":"Ahmad", - "lastName":"Chedid", - "replyCount":205 - }, - { - "id":2199023259354, - "firstName":"Aisso", - "lastName":"Mamo", - "replyCount":185 - }, - { - "id":2845, - "firstName":"Frederick", - "lastName":"Kawawa", - "replyCount":181 - }, - { - "id":318, - "firstName":"Claude", - "lastName":"Radafison", - "replyCount":181 - }, - { - "id":10995116281261, - "firstName":"Aleksandr", - "lastName":"Basov", - "replyCount":164 - }, - { - "id":24189255811566, - "firstName":"The", - "lastName":"Kunda", - "replyCount":154 - }, - { - "id":1355, - "firstName":"Peter", - "lastName":"Taylor", - "replyCount":145 - }, - { - "id":2199023257239, - "firstName":"Mikhail", - "lastName":"Basov", - "replyCount":115 - }, - { - "id":6597069766850, - "firstName":"Claude", - "lastName":"Aly", - "replyCount":109 - }, - { - "id":3688, - "firstName":"Ismail Omar", - "lastName":"Mamo", - "replyCount":103 - }, - { - "id":6597069767470, - "firstName":"George", - "lastName":"Antoniou", - "replyCount":100 - }, - { - "id":26388279067534, - "firstName":"Emperor of Brazil", - "lastName":"Dom Pedro II", - "replyCount":97 - }, - { - "id":24189255813579, - "firstName":"Alfred", - "lastName":"Jong", - "replyCount":69 - }, - { - "id":19791209303109, - "firstName":"Bing", - "lastName":"Yang", - "replyCount":44 - }, - { - "id":19791209300020, - "firstName":"Akira", - "lastName":"Yamamoto", - "replyCount":39 - } - ] - }' + query: + '{ mainTagClass as var(func: eq(name, "Artist")) @recurse{ subClasses as ~isSubclassOf } + var(func: uid(mainTagClass, subClasses) ){ tags as ~hasType } var(func: + type(person))@filter(eq(id, "102")){ friends1 as knows friends2 as ~knows } friends as var(func: + uid(friends1, friends2), first:5000) relevantPosts as var(func: type(post)) + @filter(uid_in(hasTag, uid(tags))) var(func: uid(relevantPosts)){ ~replyOf + @filter(uid_in(hasCreator, uid(friends))){ relevantFriends as hasCreator } } var(func: + uid(relevantFriends)){ replyCount as count(~hasCreator) @filter(uid_in(replyOf, + uid(relevantPosts) )) } q(func: uid(relevantFriends), orderdesc: val(replyCount), first:20){ id + firstName lastName replyCount : val(replyCount) } }' + resp: + '{ "q":[ { "id":6597069767242, "firstName":"Salim Ahmed", "lastName":"Binalshibh", + "replyCount":882 }, { "id":2783, "firstName":"Rafael", "lastName":"Alonso", "replyCount":832 }, + { "id":6597069770047, "firstName":"Edward", "lastName":"Popov", "replyCount":272 }, { + "id":4398046514225, "firstName":"Ricardo", "lastName":"Calvert", "replyCount":246 }, { + "id":6597069768780, "firstName":"Carlos", "lastName":"Martins", "replyCount":220 }, { "id":3587, + "firstName":"Ahmad", "lastName":"Chedid", "replyCount":205 }, { "id":2199023259354, + "firstName":"Aisso", "lastName":"Mamo", "replyCount":185 }, { "id":2845, + "firstName":"Frederick", "lastName":"Kawawa", "replyCount":181 }, { "id":318, + "firstName":"Claude", "lastName":"Radafison", "replyCount":181 }, { "id":10995116281261, + "firstName":"Aleksandr", "lastName":"Basov", "replyCount":164 }, { "id":24189255811566, + "firstName":"The", "lastName":"Kunda", "replyCount":154 }, { "id":1355, "firstName":"Peter", + "lastName":"Taylor", "replyCount":145 }, { "id":2199023257239, "firstName":"Mikhail", + "lastName":"Basov", "replyCount":115 }, { "id":6597069766850, "firstName":"Claude", + "lastName":"Aly", "replyCount":109 }, { "id":3688, "firstName":"Ismail Omar", "lastName":"Mamo", + "replyCount":103 }, { "id":6597069767470, "firstName":"George", "lastName":"Antoniou", + "replyCount":100 }, { "id":26388279067534, "firstName":"Emperor of Brazil", "lastName":"Dom + Pedro II", "replyCount":97 }, { "id":24189255813579, "firstName":"Alfred", "lastName":"Jong", + "replyCount":69 }, { "id":19791209303109, "firstName":"Bing", "lastName":"Yang", "replyCount":44 + }, { "id":19791209300020, "firstName":"Akira", "lastName":"Yamamoto", "replyCount":39 } ] }' q19: tag: IC13 - query: '{ - A as var(func: eq(fqid, "398046514948")) - M as var(func: eq(fqid, "28587302326035")) - path as shortest(from: uid(A), to: uid(M)) { - knows - ~knows - } - path(func: uid(path)) { - id - } - }' - resp: '{ - "path": [] - }' \ No newline at end of file + query: + '{ A as var(func: eq(fqid, "398046514948")) M as var(func: eq(fqid, "28587302326035")) path as + shortest(from: uid(A), to: uid(M)) { knows ~knows } path(func: uid(path)) { id } }' + resp: '{ "path": [] }' diff --git a/types/scalar_types_test.go b/types/scalar_types_test.go index a82964516d9..961d5c596c3 100644 --- a/types/scalar_types_test.go +++ b/types/scalar_types_test.go @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Hypermode Inc. and Contributors + * Copyright (C) 2025 Hypermode Inc. and Contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 6ae473fce7d17305e87813f4b19753e30bc9c1b7 Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:53:15 -0500 Subject: [PATCH 03/16] more cleanup --- go.mod | 3 +- .../input/auth-directive.graphql | 146 +++-- .../input/custom-directive.graphql | 17 +- .../input/extended-types.graphql | 32 +- .../input/generate-directive.graphql | 47 +- .../input/single-extended-type.graphql | 4 +- .../output/auth-directive.graphql | 490 +++++++-------- .../output/custom-directive.graphql | 325 +++++----- .../output/extended-types.graphql | 559 +++++++++--------- .../output/generate-directive.graphql | 493 +++++++-------- .../output/single-extended-type.graphql | 325 +++++----- .../schemagen/input/apollo-federation.graphql | 44 +- .../input/auth-on-interfaces.graphql | 53 +- .../schemagen/input/authorization.graphql | 145 +++-- .../input/comments-and-descriptions.graphql | 46 +- .../input/created-updated-directives.graphql | 16 +- ...custom-dql-query-with-subscription.graphql | 38 +- .../schemagen/input/custom-mutation.graphql | 15 +- .../input/custom-nested-types.graphql | 34 +- .../input/custom-query-mixed-types.graphql | 15 +- .../custom-query-not-dgraph-type.graphql | 20 +- .../custom-query-with-dgraph-type.graphql | 11 +- .../schemagen/input/deprecated.graphql | 6 +- ...e-on-concrete-type-with-interfaces.graphql | 16 +- ...-reverse-directive-with-interfaces.graphql | 16 +- ...ing-directive-with-similar-queries.graphql | 8 +- .../input/field-with-id-directive.graphql | 20 +- .../field-with-multiple-@id-fields.graphql | 18 +- ...erse-predicate-in-dgraph-directive.graphql | 14 +- .../filter-cleanSchema-all-empty.graphql | 8 +- .../input/filter-cleanSchema-circular.graphql | 20 +- ...filter-cleanSchema-custom-mutation.graphql | 15 +- .../filter-cleanSchema-directLink.graphql | 14 +- .../input/generate-directive.graphql | 47 +- .../testdata/schemagen/input/geo-type.graphql | 16 +- .../schemagen/input/hasfilter.graphql | 8 +- .../custom_bench/profiling/docker-compose.yml | 45 +- ocagent/docker-compose.yml | 75 +-- protos/pb.proto | 4 +- protos/pb/pb_grpc.pb.go | 2 +- systest/1million/alpha.yml | 7 +- systest/1million/docker-compose.yml | 25 +- systest/21million/bulk/alpha.yml | 7 +- systest/21million/bulk/docker-compose.yml | 25 +- systest/21million/live/docker-compose.yml | 35 +- systest/acl/restore/docker-compose.yml | 52 +- systest/audit/docker-compose.yml | 12 +- systest/audit_encrypted/docker-compose.yml | 14 +- .../127-Namespace/docker-compose.yml | 98 +-- .../acl-nonAcl/docker-compose.yml | 180 +++--- .../deleted-namespace/docker-compose.yml | 94 +-- systest/backup/encryption/docker-compose.yml | 148 ++--- systest/backup/filesystem/docker-compose.yml | 147 ++--- systest/backup/minio-large/docker-compose.yml | 119 ++-- systest/backup/minio/docker-compose.yml | 119 ++-- .../backup/multi-tenancy/docker-compose.yml | 133 ++--- systest/bgindex/docker-compose.yml | 44 +- systest/bulk_live/bulk/alpha.yml | 5 +- systest/bulk_live/bulk/alpha_acl.yml | 6 +- systest/bulk_live/bulk/docker-compose.yml | 21 +- systest/bulk_live/live/docker-compose.yml | 36 +- systest/cdc/docker-compose.yml | 11 +- systest/cloud/docker-compose.yml | 15 +- systest/export/docker-compose.yml | 108 ++-- systest/group-delete/docker-compose.yml | 74 +-- systest/ldbc/alpha.yml | 7 +- systest/ldbc/docker-compose.yml | 17 +- systest/license/docker-compose.yml | 35 +- systest/loader-benchmark/docker-compose.yml | 4 +- systest/loader/docker-compose.yml | 56 +- systest/multi-tenancy/docker-compose.yml | 14 +- systest/online-restore/docker-compose.yml | 368 ++++++------ systest/plugin/docker-compose.yml | 46 +- test.sh | 20 +- testutil/testaudit/docker-compose.yml | 14 +- tlstest/acl/docker-compose.yml | 67 ++- tlstest/certrequest/docker-compose.yml | 44 +- .../certrequireandverify/docker-compose.yml | 45 +- tlstest/certverifyifgiven/docker-compose.yml | 45 +- .../ha_6_node/docker-compose.yml | 51 +- .../multi_group/docker-compose.yml | 34 +- .../single_node/docker-compose.yml | 16 +- .../all_routes_tls/docker-compose.yml | 44 +- tlstest/zero_https/no_tls/docker-compose.yml | 34 +- worker/docker-compose.yml | 187 +++--- 85 files changed, 3084 insertions(+), 2829 deletions(-) diff --git a/go.mod b/go.mod index 7447bc92743..ab678ae103d 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,7 @@ module github.com/hypermodeinc/dgraph/v24 go 1.22.7 + toolchain go1.23.4 require ( @@ -165,4 +166,4 @@ require ( gotest.tools/v3 v3.5.1 // indirect ) -retract v24.0.3 // should have been a minor release instead of a patch \ No newline at end of file +retract v24.0.3 // should have been a minor release instead of a patch diff --git a/graphql/schema/testdata/apolloservice/input/auth-directive.graphql b/graphql/schema/testdata/apolloservice/input/auth-directive.graphql index 0684e15dc66..8933b8c641e 100644 --- a/graphql/schema/testdata/apolloservice/input/auth-directive.graphql +++ b/graphql/schema/testdata/apolloservice/input/auth-directive.graphql @@ -1,66 +1,88 @@ -type Todo @secret(field: "pwd") @auth( - password: { rule: "{$ROLE: { eq: \"Admin\" } }"}, +type Todo + @secret(field: "pwd") + @auth( + password: { rule: "{$ROLE: { eq: \"Admin\" } }" } query: { - or: [ - { rule: """ - query($X_MyApp_User: String!) { - queryTodo { - owner (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - }""" }, - { rule: """ - query($X_MyApp_User: String!) { - queryTodo { - sharedWith (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - }""" }, - { rule: """ - query { - queryTodo(filter: { isPublic: true }) { - id - } - }""" }, - ] - }, - add: { rule: """ - query($X_MyApp_User: String!) { - queryTodo { - owner (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - }""" }, - update: { rule: """ - query($X_MyApp_User: String!) { - queryTodo { - owner (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - }""" }, -) { - id: ID! - title: String - text: String - isPublic: Boolean @search - dateCompleted: String @search - sharedWith: [User] - owner: User @hasInverse(field: "todos") - somethingPrivate: String + or: [ + { + rule: """ + query($X_MyApp_User: String!) { + queryTodo { + owner (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + } + """ + } + { + rule: """ + query($X_MyApp_User: String!) { + queryTodo { + sharedWith (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + } + """ + } + { + rule: """ + query { + queryTodo(filter: { isPublic: true }) { + id + } + } + """ + } + ] + } + add: { + rule: """ + query($X_MyApp_User: String!) { + queryTodo { + owner (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + } + """ + } + update: { + rule: """ + query($X_MyApp_User: String!) { + queryTodo { + owner (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + } + """ + } + ) { + id: ID! + title: String + text: String + isPublic: Boolean @search + dateCompleted: String @search + sharedWith: [User] + owner: User @hasInverse(field: "todos") + somethingPrivate: String } -type User @key(fields: "username") @auth( - update: { rule: """ - query($X_MyApp_User: String!) { - queryUser(filter: { username: { eq: $X_MyApp_User }}) { - username - } - }""" } -){ - username: String! @id - todos: [Todo] +type User + @key(fields: "username") + @auth( + update: { + rule: """ + query($X_MyApp_User: String!) { + queryUser(filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + """ + } + ) { + username: String! @id + todos: [Todo] } diff --git a/graphql/schema/testdata/apolloservice/input/custom-directive.graphql b/graphql/schema/testdata/apolloservice/input/custom-directive.graphql index 98d045fd88e..4fd7539cdc1 100644 --- a/graphql/schema/testdata/apolloservice/input/custom-directive.graphql +++ b/graphql/schema/testdata/apolloservice/input/custom-directive.graphql @@ -1,16 +1,13 @@ type User @remote { - id: ID! - name: String! + id: ID! + name: String! } -type Car @key(fields: "id"){ - id: ID! - name: String! +type Car @key(fields: "id") { + id: ID! + name: String! } type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: { - url: "http://my-api.com", - method: "GET" - }) -} \ No newline at end of file + getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) +} diff --git a/graphql/schema/testdata/apolloservice/input/extended-types.graphql b/graphql/schema/testdata/apolloservice/input/extended-types.graphql index eb78c603171..ac47a37029d 100644 --- a/graphql/schema/testdata/apolloservice/input/extended-types.graphql +++ b/graphql/schema/testdata/apolloservice/input/extended-types.graphql @@ -1,22 +1,22 @@ type Mission @key(fields: "id") { - id: ID! - crew: [Astronaut] @provides(fields: "name age") - designation: String! - startDate: String - endDate: String + id: ID! + crew: [Astronaut] @provides(fields: "name age") + designation: String! + startDate: String + endDate: String } type Astronaut @key(fields: "id") @extends { - id: ID! @external - name: String @external - age: Int @external - missions: [Mission] + id: ID! @external + name: String @external + age: Int @external + missions: [Mission] } - extend type Product @key(fields: "upc") { - upc: String! @id @external - price: Int @external - weight: Int @external - inStock: Boolean - shippingEstimate: Float @requires(fields: "price weight") - } \ No newline at end of file +extend type Product @key(fields: "upc") { + upc: String! @id @external + price: Int @external + weight: Int @external + inStock: Boolean + shippingEstimate: Float @requires(fields: "price weight") +} diff --git a/graphql/schema/testdata/apolloservice/input/generate-directive.graphql b/graphql/schema/testdata/apolloservice/input/generate-directive.graphql index d45f95ace3e..baa3a69aadc 100644 --- a/graphql/schema/testdata/apolloservice/input/generate-directive.graphql +++ b/graphql/schema/testdata/apolloservice/input/generate-directive.graphql @@ -1,37 +1,22 @@ -interface Character @secret(field: "password") @generate( - query: { - get: false, - password: false - }, - subscription: false -) { - id: ID! - name: String! @search(by: [exact]) - friends: [Character] +interface Character + @secret(field: "password") + @generate(query: { get: false, password: false }, subscription: false) { + id: ID! + name: String! @search(by: [exact]) + friends: [Character] } -type Human implements Character @generate( - query: { - aggregate: true - }, - subscription: true -) { - totalCredits: Int +type Human implements Character @generate(query: { aggregate: true }, subscription: true) { + totalCredits: Int } -type Person @withSubscription @generate( - query: { - get: false, - query: true, - password: true, - aggregate: false - }, - mutation: { - add: false, - delete: false - }, +type Person + @withSubscription + @generate( + query: { get: false, query: true, password: true, aggregate: false } + mutation: { add: false, delete: false } subscription: false -) { - id: ID! - name: String! + ) { + id: ID! + name: String! } diff --git a/graphql/schema/testdata/apolloservice/input/single-extended-type.graphql b/graphql/schema/testdata/apolloservice/input/single-extended-type.graphql index fc4475d6c72..25d36656200 100644 --- a/graphql/schema/testdata/apolloservice/input/single-extended-type.graphql +++ b/graphql/schema/testdata/apolloservice/input/single-extended-type.graphql @@ -1,4 +1,4 @@ extend type Product @key(fields: "id") { - id: String! @id @external - name: String! + id: String! @id @external + name: String! } diff --git a/graphql/schema/testdata/apolloservice/output/auth-directive.graphql b/graphql/schema/testdata/apolloservice/output/auth-directive.graphql index c0691c4c405..b4176863fde 100644 --- a/graphql/schema/testdata/apolloservice/output/auth-directive.graphql +++ b/graphql/schema/testdata/apolloservice/output/auth-directive.graphql @@ -3,21 +3,22 @@ ####################### type Todo @secret(field: "pwd") { - id: ID! - title: String - text: String - isPublic: Boolean @search - dateCompleted: String @search - sharedWith(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - owner(filter: UserFilter): User @hasInverse(field: "todos") - somethingPrivate: String - sharedWithAggregate(filter: UserFilter): UserAggregateResult + id: ID! + title: String + text: String + isPublic: Boolean @search + dateCompleted: String @search + sharedWith(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + owner(filter: UserFilter): User @hasInverse(field: "todos") + somethingPrivate: String + sharedWithAggregate(filter: UserFilter): UserAggregateResult } type User @key(fields: "username") { - username: String! @id - todos(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] @hasInverse(field: owner) - todosAggregate(filter: TodoFilter): TodoAggregateResult + username: String! @id + todos(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + @hasInverse(field: owner) + todosAggregate(filter: TodoFilter): TodoAggregateResult } ####################### @@ -36,162 +37,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -208,72 +209,72 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -281,53 +282,53 @@ input StringHashFilter { ####################### type AddTodoPayload { - todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - numUids: Int + todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + numUids: Int } type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteTodoPayload { - todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - msg: String - numUids: Int + todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + msg: String + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type TodoAggregateResult { - count: Int - titleMin: String - titleMax: String - textMin: String - textMax: String - dateCompletedMin: String - dateCompletedMax: String - somethingPrivateMin: String - somethingPrivateMax: String + count: Int + titleMin: String + titleMax: String + textMin: String + textMax: String + dateCompletedMin: String + dateCompletedMax: String + somethingPrivateMin: String + somethingPrivateMax: String } type UpdateTodoPayload { - todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - numUids: Int + todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - usernameMin: String - usernameMax: String + count: Int + usernameMin: String + usernameMax: String } ####################### @@ -335,29 +336,29 @@ type UserAggregateResult { ####################### enum TodoHasFilter { - title - text - isPublic - dateCompleted - sharedWith - owner - somethingPrivate + title + text + isPublic + dateCompleted + sharedWith + owner + somethingPrivate } enum TodoOrderable { - title - text - dateCompleted - somethingPrivate + title + text + dateCompleted + somethingPrivate } enum UserHasFilter { - username - todos + username + todos } enum UserOrderable { - username + username } ####################### @@ -365,94 +366,94 @@ enum UserOrderable { ####################### input AddTodoInput { - title: String - text: String - isPublic: Boolean - dateCompleted: String - sharedWith: [UserRef] - owner: UserRef - somethingPrivate: String - pwd: String! + title: String + text: String + isPublic: Boolean + dateCompleted: String + sharedWith: [UserRef] + owner: UserRef + somethingPrivate: String + pwd: String! } input AddUserInput { - username: String! - todos: [TodoRef] + username: String! + todos: [TodoRef] } input TodoFilter { - id: [ID!] - isPublic: Boolean - dateCompleted: StringTermFilter - has: [TodoHasFilter] - and: [TodoFilter] - or: [TodoFilter] - not: TodoFilter + id: [ID!] + isPublic: Boolean + dateCompleted: StringTermFilter + has: [TodoHasFilter] + and: [TodoFilter] + or: [TodoFilter] + not: TodoFilter } input TodoOrder { - asc: TodoOrderable - desc: TodoOrderable - then: TodoOrder + asc: TodoOrderable + desc: TodoOrderable + then: TodoOrder } input TodoPatch { - title: String - text: String - isPublic: Boolean - dateCompleted: String - sharedWith: [UserRef] - owner: UserRef - somethingPrivate: String - pwd: String + title: String + text: String + isPublic: Boolean + dateCompleted: String + sharedWith: [UserRef] + owner: UserRef + somethingPrivate: String + pwd: String } input TodoRef { - id: ID - title: String - text: String - isPublic: Boolean - dateCompleted: String - sharedWith: [UserRef] - owner: UserRef - somethingPrivate: String - pwd: String + id: ID + title: String + text: String + isPublic: Boolean + dateCompleted: String + sharedWith: [UserRef] + owner: UserRef + somethingPrivate: String + pwd: String } input UpdateTodoInput { - filter: TodoFilter! - set: TodoPatch - remove: TodoPatch + filter: TodoFilter! + set: TodoPatch + remove: TodoPatch } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - username: StringHashFilter - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + username: StringHashFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - username: String - todos: [TodoRef] + username: String + todos: [TodoRef] } input UserRef { - username: String - todos: [TodoRef] + username: String + todos: [TodoRef] } ####################### @@ -460,13 +461,13 @@ input UserRef { ####################### type Query { - getTodo(id: ID!): Todo - checkTodoPassword(id: ID!, pwd: String!): Todo - queryTodo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - aggregateTodo(filter: TodoFilter): TodoAggregateResult - getUser(username: String!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getTodo(id: ID!): Todo + checkTodoPassword(id: ID!, pwd: String!): Todo + queryTodo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + aggregateTodo(filter: TodoFilter): TodoAggregateResult + getUser(username: String!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -474,11 +475,10 @@ type Query { ####################### type Mutation { - addTodo(input: [AddTodoInput!]!): AddTodoPayload - updateTodo(input: UpdateTodoInput!): UpdateTodoPayload - deleteTodo(filter: TodoFilter!): DeleteTodoPayload - addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addTodo(input: [AddTodoInput!]!): AddTodoPayload + updateTodo(input: UpdateTodoInput!): UpdateTodoPayload + deleteTodo(filter: TodoFilter!): DeleteTodoPayload + addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } - diff --git a/graphql/schema/testdata/apolloservice/output/custom-directive.graphql b/graphql/schema/testdata/apolloservice/output/custom-directive.graphql index 2b45898ccf6..40f8465f862 100644 --- a/graphql/schema/testdata/apolloservice/output/custom-directive.graphql +++ b/graphql/schema/testdata/apolloservice/output/custom-directive.graphql @@ -3,13 +3,13 @@ ####################### type User @remote { - id: ID! - name: String! + id: ID! + name: String! } type Car @key(fields: "id") { - id: ID! - name: String! + id: ID! + name: String! } ####################### @@ -28,162 +28,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -200,72 +200,72 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -273,25 +273,25 @@ input StringHashFilter { ####################### type AddCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + numUids: Int } type CarAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - msg: String - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + msg: String + numUids: Int } type UpdateCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + numUids: Int } ####################### @@ -299,11 +299,11 @@ type UpdateCarPayload { ####################### enum CarHasFilter { - name + name } enum CarOrderable { - name + name } ####################### @@ -311,36 +311,36 @@ enum CarOrderable { ####################### input AddCarInput { - name: String! + name: String! } input CarFilter { - id: [ID!] - has: [CarHasFilter] - and: [CarFilter] - or: [CarFilter] - not: CarFilter + id: [ID!] + has: [CarHasFilter] + and: [CarFilter] + or: [CarFilter] + not: CarFilter } input CarOrder { - asc: CarOrderable - desc: CarOrderable - then: CarOrder + asc: CarOrderable + desc: CarOrderable + then: CarOrder } input CarPatch { - name: String + name: String } input CarRef { - id: ID - name: String + id: ID + name: String } input UpdateCarInput { - filter: CarFilter! - set: CarPatch - remove: CarPatch + filter: CarFilter! + set: CarPatch + remove: CarPatch } ####################### @@ -348,10 +348,10 @@ input UpdateCarInput { ####################### type Query { - getMyFavoriteUsers(id: ID!): [User] - getCar(id: ID!): Car - queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - aggregateCar(filter: CarFilter): CarAggregateResult + getMyFavoriteUsers(id: ID!): [User] + getCar(id: ID!): Car + queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + aggregateCar(filter: CarFilter): CarAggregateResult } ####################### @@ -359,8 +359,7 @@ type Query { ####################### type Mutation { - addCar(input: [AddCarInput!]!): AddCarPayload - updateCar(input: UpdateCarInput!): UpdateCarPayload - deleteCar(filter: CarFilter!): DeleteCarPayload + addCar(input: [AddCarInput!]!): AddCarPayload + updateCar(input: UpdateCarInput!): UpdateCarPayload + deleteCar(filter: CarFilter!): DeleteCarPayload } - diff --git a/graphql/schema/testdata/apolloservice/output/extended-types.graphql b/graphql/schema/testdata/apolloservice/output/extended-types.graphql index 6c841cb5359..e42a2323f20 100644 --- a/graphql/schema/testdata/apolloservice/output/extended-types.graphql +++ b/graphql/schema/testdata/apolloservice/output/extended-types.graphql @@ -3,27 +3,27 @@ ####################### type Mission @key(fields: "id") { - id: ID! - crew: [Astronaut] @provides(fields: "name age") - designation: String! - startDate: String - endDate: String + id: ID! + crew: [Astronaut] @provides(fields: "name age") + designation: String! + startDate: String + endDate: String } type Astronaut @key(fields: "id") @extends { - id: ID! @external - name: String @external - age: Int @external - missions(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] - missionsAggregate(filter: MissionFilter): MissionAggregateResult + id: ID! @external + name: String @external + age: Int @external + missions(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] + missionsAggregate(filter: MissionFilter): MissionAggregateResult } type Product @key(fields: "upc") @extends { - upc: String! @id @external - price: Int @external - weight: Int @external - inStock: Boolean - shippingEstimate: Float @requires(fields: "price weight") + upc: String! @id @external + price: Int @external + weight: Int @external + inStock: Boolean + shippingEstimate: Float @requires(fields: "price weight") } ####################### @@ -42,162 +42,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -214,72 +214,72 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -287,83 +287,83 @@ input StringHashFilter { ####################### type AddAstronautPayload { - astronaut(filter: AstronautFilter, order: AstronautOrder, first: Int, offset: Int): [Astronaut] - numUids: Int + astronaut(filter: AstronautFilter, order: AstronautOrder, first: Int, offset: Int): [Astronaut] + numUids: Int } type AddMissionPayload { - mission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] - numUids: Int + mission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] + numUids: Int } type AddProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } type AstronautAggregateResult { - count: Int - idMin: ID - idMax: ID - nameMin: String - nameMax: String - ageMin: Int - ageMax: Int - ageSum: Int - ageAvg: Float + count: Int + idMin: ID + idMax: ID + nameMin: String + nameMax: String + ageMin: Int + ageMax: Int + ageSum: Int + ageAvg: Float } type DeleteAstronautPayload { - astronaut(filter: AstronautFilter, order: AstronautOrder, first: Int, offset: Int): [Astronaut] - msg: String - numUids: Int + astronaut(filter: AstronautFilter, order: AstronautOrder, first: Int, offset: Int): [Astronaut] + msg: String + numUids: Int } type DeleteMissionPayload { - mission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] - msg: String - numUids: Int + mission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] + msg: String + numUids: Int } type DeleteProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - msg: String - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + msg: String + numUids: Int } type MissionAggregateResult { - count: Int - designationMin: String - designationMax: String - startDateMin: String - startDateMax: String - endDateMin: String - endDateMax: String + count: Int + designationMin: String + designationMax: String + startDateMin: String + startDateMax: String + endDateMin: String + endDateMax: String } type ProductAggregateResult { - count: Int - upcMin: String - upcMax: String - shippingEstimateMin: Float - shippingEstimateMax: Float - shippingEstimateSum: Float - shippingEstimateAvg: Float + count: Int + upcMin: String + upcMax: String + shippingEstimateMin: Float + shippingEstimateMax: Float + shippingEstimateSum: Float + shippingEstimateAvg: Float } type UpdateAstronautPayload { - astronaut(filter: AstronautFilter, order: AstronautOrder, first: Int, offset: Int): [Astronaut] - numUids: Int + astronaut(filter: AstronautFilter, order: AstronautOrder, first: Int, offset: Int): [Astronaut] + numUids: Int } type UpdateMissionPayload { - mission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] - numUids: Int + mission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] + numUids: Int } type UpdateProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } ####################### @@ -371,39 +371,39 @@ type UpdateProductPayload { ####################### enum AstronautHasFilter { - name - age - missions + name + age + missions } enum AstronautOrderable { - id - name - age + id + name + age } enum MissionHasFilter { - crew - designation - startDate - endDate + crew + designation + startDate + endDate } enum MissionOrderable { - designation - startDate - endDate + designation + startDate + endDate } enum ProductHasFilter { - upc - inStock - shippingEstimate + upc + inStock + shippingEstimate } enum ProductOrderable { - upc - shippingEstimate + upc + shippingEstimate } ####################### @@ -411,123 +411,123 @@ enum ProductOrderable { ####################### input AddAstronautInput { - id: ID! - name: String - age: Int - missions: [MissionRef] + id: ID! + name: String + age: Int + missions: [MissionRef] } input AddMissionInput { - crew: [AstronautRef] - designation: String! - startDate: String - endDate: String + crew: [AstronautRef] + designation: String! + startDate: String + endDate: String } input AddProductInput { - upc: String! - inStock: Boolean - shippingEstimate: Float + upc: String! + inStock: Boolean + shippingEstimate: Float } input AstronautFilter { - id: [ID!] - has: [AstronautHasFilter] - and: [AstronautFilter] - or: [AstronautFilter] - not: AstronautFilter + id: [ID!] + has: [AstronautHasFilter] + and: [AstronautFilter] + or: [AstronautFilter] + not: AstronautFilter } input AstronautOrder { - asc: AstronautOrderable - desc: AstronautOrderable - then: AstronautOrder + asc: AstronautOrderable + desc: AstronautOrderable + then: AstronautOrder } input AstronautPatch { - name: String - age: Int - missions: [MissionRef] + name: String + age: Int + missions: [MissionRef] } input AstronautRef { - id: ID - name: String - age: Int - missions: [MissionRef] + id: ID + name: String + age: Int + missions: [MissionRef] } input MissionFilter { - id: [ID!] - has: [MissionHasFilter] - and: [MissionFilter] - or: [MissionFilter] - not: MissionFilter + id: [ID!] + has: [MissionHasFilter] + and: [MissionFilter] + or: [MissionFilter] + not: MissionFilter } input MissionOrder { - asc: MissionOrderable - desc: MissionOrderable - then: MissionOrder + asc: MissionOrderable + desc: MissionOrderable + then: MissionOrder } input MissionPatch { - crew: [AstronautRef] - designation: String - startDate: String - endDate: String + crew: [AstronautRef] + designation: String + startDate: String + endDate: String } input MissionRef { - id: ID - crew: [AstronautRef] - designation: String - startDate: String - endDate: String + id: ID + crew: [AstronautRef] + designation: String + startDate: String + endDate: String } input ProductFilter { - upc: StringHashFilter - has: [ProductHasFilter] - and: [ProductFilter] - or: [ProductFilter] - not: ProductFilter + upc: StringHashFilter + has: [ProductHasFilter] + and: [ProductFilter] + or: [ProductFilter] + not: ProductFilter } input ProductOrder { - asc: ProductOrderable - desc: ProductOrderable - then: ProductOrder + asc: ProductOrderable + desc: ProductOrderable + then: ProductOrder } input ProductPatch { - upc: String - inStock: Boolean - shippingEstimate: Float + upc: String + inStock: Boolean + shippingEstimate: Float } input ProductRef { - upc: String - inStock: Boolean - shippingEstimate: Float + upc: String + inStock: Boolean + shippingEstimate: Float } input UpdateAstronautInput { - filter: AstronautFilter! - set: AstronautPatch - remove: AstronautPatch + filter: AstronautFilter! + set: AstronautPatch + remove: AstronautPatch } input UpdateMissionInput { - filter: MissionFilter! - set: MissionPatch - remove: MissionPatch + filter: MissionFilter! + set: MissionPatch + remove: MissionPatch } input UpdateProductInput { - filter: ProductFilter! - set: ProductPatch - remove: ProductPatch + filter: ProductFilter! + set: ProductPatch + remove: ProductPatch } ####################### @@ -535,9 +535,9 @@ input UpdateProductInput { ####################### type Query { - getMission(id: ID!): Mission - queryMission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] - aggregateMission(filter: MissionFilter): MissionAggregateResult + getMission(id: ID!): Mission + queryMission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] + aggregateMission(filter: MissionFilter): MissionAggregateResult } ####################### @@ -545,14 +545,13 @@ type Query { ####################### type Mutation { - addMission(input: [AddMissionInput!]!): AddMissionPayload - updateMission(input: UpdateMissionInput!): UpdateMissionPayload - deleteMission(filter: MissionFilter!): DeleteMissionPayload - addAstronaut(input: [AddAstronautInput!]!): AddAstronautPayload - updateAstronaut(input: UpdateAstronautInput!): UpdateAstronautPayload - deleteAstronaut(filter: AstronautFilter!): DeleteAstronautPayload - addProduct(input: [AddProductInput!]!, upsert: Boolean): AddProductPayload - updateProduct(input: UpdateProductInput!): UpdateProductPayload - deleteProduct(filter: ProductFilter!): DeleteProductPayload + addMission(input: [AddMissionInput!]!): AddMissionPayload + updateMission(input: UpdateMissionInput!): UpdateMissionPayload + deleteMission(filter: MissionFilter!): DeleteMissionPayload + addAstronaut(input: [AddAstronautInput!]!): AddAstronautPayload + updateAstronaut(input: UpdateAstronautInput!): UpdateAstronautPayload + deleteAstronaut(filter: AstronautFilter!): DeleteAstronautPayload + addProduct(input: [AddProductInput!]!, upsert: Boolean): AddProductPayload + updateProduct(input: UpdateProductInput!): UpdateProductPayload + deleteProduct(filter: ProductFilter!): DeleteProductPayload } - diff --git a/graphql/schema/testdata/apolloservice/output/generate-directive.graphql b/graphql/schema/testdata/apolloservice/output/generate-directive.graphql index fa52c6cff2d..105fd500c73 100644 --- a/graphql/schema/testdata/apolloservice/output/generate-directive.graphql +++ b/graphql/schema/testdata/apolloservice/output/generate-directive.graphql @@ -3,23 +3,23 @@ ####################### interface Character @secret(field: "password") { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } type Human @secret(field: "password") { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - totalCredits: Int - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + totalCredits: Int + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } type Person @withSubscription { - id: ID! - name: String! + id: ID! + name: String! } ####################### @@ -38,162 +38,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -210,72 +210,72 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -283,57 +283,57 @@ input StringHashFilter { ####################### type AddHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type CharacterAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - msg: String - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + msg: String + numUids: Int } type DeleteHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - msg: String - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + msg: String + numUids: Int } type HumanAggregateResult { - count: Int - nameMin: String - nameMax: String - totalCreditsMin: Int - totalCreditsMax: Int - totalCreditsSum: Int - totalCreditsAvg: Float + count: Int + nameMin: String + nameMax: String + totalCreditsMin: Int + totalCreditsMax: Int + totalCreditsSum: Int + totalCreditsAvg: Float } type PersonAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type UpdateCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + numUids: Int } type UpdateHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type UpdatePersonPayload { - person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - numUids: Int + person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + numUids: Int } ####################### @@ -341,31 +341,31 @@ type UpdatePersonPayload { ####################### enum CharacterHasFilter { - name - friends + name + friends } enum CharacterOrderable { - name + name } enum HumanHasFilter { - name - friends - totalCredits + name + friends + totalCredits } enum HumanOrderable { - name - totalCredits + name + totalCredits } enum PersonHasFilter { - name + name } enum PersonOrderable { - name + name } ####################### @@ -373,106 +373,106 @@ enum PersonOrderable { ####################### input AddHumanInput { - name: String! - friends: [CharacterRef] - totalCredits: Int - password: String! + name: String! + friends: [CharacterRef] + totalCredits: Int + password: String! } input CharacterFilter { - id: [ID!] - name: StringExactFilter - has: [CharacterHasFilter] - and: [CharacterFilter] - or: [CharacterFilter] - not: CharacterFilter + id: [ID!] + name: StringExactFilter + has: [CharacterHasFilter] + and: [CharacterFilter] + or: [CharacterFilter] + not: CharacterFilter } input CharacterOrder { - asc: CharacterOrderable - desc: CharacterOrderable - then: CharacterOrder + asc: CharacterOrderable + desc: CharacterOrderable + then: CharacterOrder } input CharacterPatch { - name: String - friends: [CharacterRef] - password: String + name: String + friends: [CharacterRef] + password: String } input CharacterRef { - id: ID! + id: ID! } input HumanFilter { - id: [ID!] - name: StringExactFilter - has: [HumanHasFilter] - and: [HumanFilter] - or: [HumanFilter] - not: HumanFilter + id: [ID!] + name: StringExactFilter + has: [HumanHasFilter] + and: [HumanFilter] + or: [HumanFilter] + not: HumanFilter } input HumanOrder { - asc: HumanOrderable - desc: HumanOrderable - then: HumanOrder + asc: HumanOrderable + desc: HumanOrderable + then: HumanOrder } input HumanPatch { - name: String - friends: [CharacterRef] - totalCredits: Int - password: String + name: String + friends: [CharacterRef] + totalCredits: Int + password: String } input HumanRef { - id: ID - name: String - friends: [CharacterRef] - totalCredits: Int - password: String + id: ID + name: String + friends: [CharacterRef] + totalCredits: Int + password: String } input PersonFilter { - id: [ID!] - has: [PersonHasFilter] - and: [PersonFilter] - or: [PersonFilter] - not: PersonFilter + id: [ID!] + has: [PersonHasFilter] + and: [PersonFilter] + or: [PersonFilter] + not: PersonFilter } input PersonOrder { - asc: PersonOrderable - desc: PersonOrderable - then: PersonOrder + asc: PersonOrderable + desc: PersonOrderable + then: PersonOrder } input PersonPatch { - name: String + name: String } input PersonRef { - id: ID - name: String + id: ID + name: String } input UpdateCharacterInput { - filter: CharacterFilter! - set: CharacterPatch - remove: CharacterPatch + filter: CharacterFilter! + set: CharacterPatch + remove: CharacterPatch } input UpdateHumanInput { - filter: HumanFilter! - set: HumanPatch - remove: HumanPatch + filter: HumanFilter! + set: HumanPatch + remove: HumanPatch } input UpdatePersonInput { - filter: PersonFilter! - set: PersonPatch - remove: PersonPatch + filter: PersonFilter! + set: PersonPatch + remove: PersonPatch } ####################### @@ -480,13 +480,18 @@ input UpdatePersonInput { ####################### type Query { - queryCharacter(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult - getHuman(id: ID!): Human - checkHumanPassword(id: ID!, password: String!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult - queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + queryCharacter( + filter: CharacterFilter + order: CharacterOrder + first: Int + offset: Int + ): [Character] + aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult + getHuman(id: ID!): Human + checkHumanPassword(id: ID!, password: String!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult + queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] } ####################### @@ -494,12 +499,12 @@ type Query { ####################### type Mutation { - updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload - deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload - addHuman(input: [AddHumanInput!]!): AddHumanPayload - updateHuman(input: UpdateHumanInput!): UpdateHumanPayload - deleteHuman(filter: HumanFilter!): DeleteHumanPayload - updatePerson(input: UpdatePersonInput!): UpdatePersonPayload + updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload + deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload + addHuman(input: [AddHumanInput!]!): AddHumanPayload + updateHuman(input: UpdateHumanInput!): UpdateHumanPayload + deleteHuman(filter: HumanFilter!): DeleteHumanPayload + updatePerson(input: UpdatePersonInput!): UpdatePersonPayload } ####################### @@ -507,8 +512,8 @@ type Mutation { ####################### type Subscription { - getHuman(id: ID!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult - queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + getHuman(id: ID!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult + queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] } diff --git a/graphql/schema/testdata/apolloservice/output/single-extended-type.graphql b/graphql/schema/testdata/apolloservice/output/single-extended-type.graphql index 26449632304..4d2ba0e5251 100644 --- a/graphql/schema/testdata/apolloservice/output/single-extended-type.graphql +++ b/graphql/schema/testdata/apolloservice/output/single-extended-type.graphql @@ -3,8 +3,8 @@ ####################### type Product @key(fields: "id") @extends { - id: String! @id @external - name: String! + id: String! @id @external + name: String! } ####################### @@ -23,162 +23,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange{ - min: Int! - max: Int! +input IntRange { + min: Int! + max: Int! } -input FloatRange{ - min: Float! - max: Float! +input FloatRange { + min: Float! + max: Float! } -input Int64Range{ - min: Int64! - max: Int64! +input Int64Range { + min: Int64! + max: Int64! } -input DateTimeRange{ - min: DateTime! - max: DateTime! +input DateTimeRange { + min: DateTime! + max: DateTime! } -input StringRange{ - min: String! - max: String! +input StringRange { + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -195,72 +195,72 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -268,27 +268,27 @@ input StringHashFilter { ####################### type AddProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } type DeleteProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - msg: String - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + msg: String + numUids: Int } type ProductAggregateResult { - count: Int - idMin: String - idMax: String - nameMin: String - nameMax: String + count: Int + idMin: String + idMax: String + nameMin: String + nameMax: String } type UpdateProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } ####################### @@ -296,13 +296,13 @@ type UpdateProductPayload { ####################### enum ProductHasFilter { - id - name + id + name } enum ProductOrderable { - id - name + id + name } ####################### @@ -310,38 +310,38 @@ enum ProductOrderable { ####################### input AddProductInput { - id: String! - name: String! + id: String! + name: String! } input ProductFilter { - id: StringHashFilter - has: [ProductHasFilter] - and: [ProductFilter] - or: [ProductFilter] - not: ProductFilter + id: StringHashFilter + has: [ProductHasFilter] + and: [ProductFilter] + or: [ProductFilter] + not: ProductFilter } input ProductOrder { - asc: ProductOrderable - desc: ProductOrderable - then: ProductOrder + asc: ProductOrderable + desc: ProductOrderable + then: ProductOrder } input ProductPatch { - id: String - name: String + id: String + name: String } input ProductRef { - id: String - name: String + id: String + name: String } input UpdateProductInput { - filter: ProductFilter! - set: ProductPatch - remove: ProductPatch + filter: ProductFilter! + set: ProductPatch + remove: ProductPatch } ####################### @@ -349,8 +349,7 @@ input UpdateProductInput { ####################### type Mutation { - addProduct(input: [AddProductInput!]!, upsert: Boolean): AddProductPayload - updateProduct(input: UpdateProductInput!): UpdateProductPayload - deleteProduct(filter: ProductFilter!): DeleteProductPayload + addProduct(input: [AddProductInput!]!, upsert: Boolean): AddProductPayload + updateProduct(input: UpdateProductInput!): UpdateProductPayload + deleteProduct(filter: ProductFilter!): DeleteProductPayload } - diff --git a/graphql/schema/testdata/schemagen/input/apollo-federation.graphql b/graphql/schema/testdata/schemagen/input/apollo-federation.graphql index dfa0f683cb5..0ff5a079196 100644 --- a/graphql/schema/testdata/schemagen/input/apollo-federation.graphql +++ b/graphql/schema/testdata/schemagen/input/apollo-federation.graphql @@ -1,36 +1,36 @@ extend type Product @key(fields: "id") { - id: ID! @external - name: String! @external - price: Int @external - weight: Int @external - reviews: [Reviews] @requires(fields: "price weight") + id: ID! @external + name: String! @external + price: Int @external + weight: Int @external + reviews: [Reviews] @requires(fields: "price weight") } type Reviews @key(fields: "id") { - id: ID! - review: String! - user: User @provides(fields: "age") + id: ID! + review: String! + user: User @provides(fields: "age") } -type Student @key(fields: "id"){ - id: ID! - name: String! - age: Int! +type Student @key(fields: "id") { + id: ID! + name: String! + age: Int! } -type School @key(fields: "id"){ - id: ID! - students: [Student] @provides(fields: "name") +type School @key(fields: "id") { + id: ID! + students: [Student] @provides(fields: "name") } extend type User @key(fields: "name") { - id: ID! @external - name: String! @id @external - age: Int! @external - reviews: [Reviews] + id: ID! @external + name: String! @id @external + age: Int! @external + reviews: [Reviews] } type Country { - code: String! @id - name: String! -} \ No newline at end of file + code: String! @id + name: String! +} diff --git a/graphql/schema/testdata/schemagen/input/auth-on-interfaces.graphql b/graphql/schema/testdata/schemagen/input/auth-on-interfaces.graphql index 6a8812cc6fe..0a8b000a83b 100644 --- a/graphql/schema/testdata/schemagen/input/auth-on-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/input/auth-on-interfaces.graphql @@ -4,28 +4,37 @@ type Author { posts: [Post] @hasInverse(field: author) } -interface Post @secret(field: "pwd") @auth( - password: { rule: "{$ROLE: { eq: \"Admin\" } }"}, - query: { rule: """ - query($TEXT: String!) { - queryPost(filter: { text : {eq: $TEXT } } ) { - id - } - }""" } -){ - id: ID! - text: String @search(by: [exact]) - datePublished: DateTime @search - author: Author! +interface Post + @secret(field: "pwd") + @auth( + password: { rule: "{$ROLE: { eq: \"Admin\" } }" } + query: { + rule: """ + query($TEXT: String!) { + queryPost(filter: { text : {eq: $TEXT } } ) { + id + } + } + """ + } + ) { + id: ID! + text: String @search(by: [exact]) + datePublished: DateTime @search + author: Author! } -type Question implements Post @auth( - query: { rule: """ - query($ANS: Boolean!) { - queryQuestion(filter: { answered: $ANS } ) { - id - } - }""" } -){ - answered: Boolean @search +type Question implements Post + @auth( + query: { + rule: """ + query($ANS: Boolean!) { + queryQuestion(filter: { answered: $ANS } ) { + id + } + } + """ + } + ) { + answered: Boolean @search } diff --git a/graphql/schema/testdata/schemagen/input/authorization.graphql b/graphql/schema/testdata/schemagen/input/authorization.graphql index 3737fded560..d303a7f39ec 100644 --- a/graphql/schema/testdata/schemagen/input/authorization.graphql +++ b/graphql/schema/testdata/schemagen/input/authorization.graphql @@ -1,66 +1,87 @@ -type Todo @secret(field: "pwd") @auth( - password: { rule: "{$ROLE: { eq: \"Admin\" } }"}, +type Todo + @secret(field: "pwd") + @auth( + password: { rule: "{$ROLE: { eq: \"Admin\" } }" } query: { - or: [ - { rule: """ - query($X_MyApp_User: String!) { - queryTodo { - owner (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - }""" }, - { rule: """ - query($X_MyApp_User: String!) { - queryTodo { - sharedWith (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - }""" }, - { rule: """ - query { - queryTodo(filter: { isPublic: true }) { - id - } - }""" }, - ] - }, - add: { rule: """ - query($X_MyApp_User: String!) { - queryTodo { - owner (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - }""" }, - update: { rule: """ - query($X_MyApp_User: String!) { - queryTodo { - owner (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - }""" }, -) { - id: ID! - title: String - text: String - isPublic: Boolean @search - dateCompleted: String @search - sharedWith: [User] - owner: User @hasInverse(field: "todos") - somethingPrivate: String + or: [ + { + rule: """ + query($X_MyApp_User: String!) { + queryTodo { + owner (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + } + """ + } + { + rule: """ + query($X_MyApp_User: String!) { + queryTodo { + sharedWith (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + } + """ + } + { + rule: """ + query { + queryTodo(filter: { isPublic: true }) { + id + } + } + """ + } + ] + } + add: { + rule: """ + query($X_MyApp_User: String!) { + queryTodo { + owner (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + } + """ + } + update: { + rule: """ + query($X_MyApp_User: String!) { + queryTodo { + owner (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + } + """ + } + ) { + id: ID! + title: String + text: String + isPublic: Boolean @search + dateCompleted: String @search + sharedWith: [User] + owner: User @hasInverse(field: "todos") + somethingPrivate: String } -type User @auth( - update: { rule: """ - query($X_MyApp_User: String!) { - queryUser(filter: { username: { eq: $X_MyApp_User }}) { - username - } - }""" } -){ - username: String! @id - todos: [Todo] +type User + @auth( + update: { + rule: """ + query($X_MyApp_User: String!) { + queryUser(filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + """ + } + ) { + username: String! @id + todos: [Todo] } diff --git a/graphql/schema/testdata/schemagen/input/comments-and-descriptions.graphql b/graphql/schema/testdata/schemagen/input/comments-and-descriptions.graphql index 856d2a0111c..faca2a07614 100644 --- a/graphql/schema/testdata/schemagen/input/comments-and-descriptions.graphql +++ b/graphql/schema/testdata/schemagen/input/comments-and-descriptions.graphql @@ -4,23 +4,22 @@ Desc """ interface I { - """ - Desc - """ - s: String! + """ + Desc + """ + s: String! } """ Desc """ type T implements I { - # # comment - id: ID! # comment - - """ - Desc - """ - i: Int + # # comment + id: ID! # comment + """ + Desc + """ + i: Int } # comment @@ -29,12 +28,12 @@ type T implements I { Desc """ enum AnEnum { - AVal + AVal - """ - Desc - """ - AnotherVal + """ + Desc + """ + AnotherVal } """ @@ -46,11 +45,10 @@ union A_Union = T Desc """ input AnInput { - # # comment - id: ID! # comment - - """ - Desc - """ - i: Int -} \ No newline at end of file + # # comment + id: ID! # comment + """ + Desc + """ + i: Int +} diff --git a/graphql/schema/testdata/schemagen/input/created-updated-directives.graphql b/graphql/schema/testdata/schemagen/input/created-updated-directives.graphql index a25ed3a9228..a1b32463776 100644 --- a/graphql/schema/testdata/schemagen/input/created-updated-directives.graphql +++ b/graphql/schema/testdata/schemagen/input/created-updated-directives.graphql @@ -1,13 +1,13 @@ type Booking { - id: ID! - name: String! - created: DateTime! @default(add: {value:"$now"}) - updated: DateTime! @default(add: {value:"$now"}, update: {value:"$now"}) + id: ID! + name: String! + created: DateTime! @default(add: { value: "$now" }) + updated: DateTime! @default(add: { value: "$now" }, update: { value: "$now" }) } type BookingXID { - id: String! @id - name: String! - created: DateTime! @default(add: {value:"$now"}) - updated: DateTime! @default(add: {value:"$now"}, update: {value:"$now"}) + id: String! @id + name: String! + created: DateTime! @default(add: { value: "$now" }) + updated: DateTime! @default(add: { value: "$now" }, update: { value: "$now" }) } diff --git a/graphql/schema/testdata/schemagen/input/custom-dql-query-with-subscription.graphql b/graphql/schema/testdata/schemagen/input/custom-dql-query-with-subscription.graphql index 9e780434213..709c46a69a4 100644 --- a/graphql/schema/testdata/schemagen/input/custom-dql-query-with-subscription.graphql +++ b/graphql/schema/testdata/schemagen/input/custom-dql-query-with-subscription.graphql @@ -1,26 +1,30 @@ type Tweets { - id: ID! - text: String! @search(by: [fulltext]) - author: User - timestamp: DateTime! @search + id: ID! + text: String! @search(by: [fulltext]) + author: User + timestamp: DateTime! @search } type User { - screenName: String! @id - followers: Int @search - tweets: [Tweets] @hasInverse(field: author) + screenName: String! @id + followers: Int @search + tweets: [Tweets] @hasInverse(field: author) } type UserTweetCount @remote { - screenName: String - tweetCount: Int + screenName: String + tweetCount: Int } type Query { - queryUserTweetCounts : [UserTweetCount] @withSubscription @custom(dql: """ - query { - queryUserTweetCounts(func: type(User)) { - screenName: User.screenName - tweetCount: count(User.tweets) - } - } - """) + queryUserTweetCounts: [UserTweetCount] + @withSubscription + @custom( + dql: """ + query { + queryUserTweetCounts(func: type(User)) { + screenName: User.screenName + tweetCount: count(User.tweets) + } + } + """ + ) } diff --git a/graphql/schema/testdata/schemagen/input/custom-mutation.graphql b/graphql/schema/testdata/schemagen/input/custom-mutation.graphql index eb05a193445..4403e543935 100644 --- a/graphql/schema/testdata/schemagen/input/custom-mutation.graphql +++ b/graphql/schema/testdata/schemagen/input/custom-mutation.graphql @@ -1,16 +1,13 @@ type User { - id: ID! - name: String! + id: ID! + name: String! } input UpdateFavouriteUserInput { - name: String! + name: String! } type Mutation { - createMyFavouriteUsers(input: [UpdateFavouriteUserInput!]!): [User] @custom(http: { - url: "http://my-api.com", - method: "POST", - body: "{ data: $input }" - }) -} \ No newline at end of file + createMyFavouriteUsers(input: [UpdateFavouriteUserInput!]!): [User] + @custom(http: { url: "http://my-api.com", method: "POST", body: "{ data: $input }" }) +} diff --git a/graphql/schema/testdata/schemagen/input/custom-nested-types.graphql b/graphql/schema/testdata/schemagen/input/custom-nested-types.graphql index 80365d98233..3b197fd85ed 100644 --- a/graphql/schema/testdata/schemagen/input/custom-nested-types.graphql +++ b/graphql/schema/testdata/schemagen/input/custom-nested-types.graphql @@ -1,39 +1,33 @@ type Car @remote { - id: ID! - name: String! + id: ID! + name: String! } interface Person @remote { - age: Int! + age: Int! } type User implements Person @remote { - id: ID! - name: String! - cars: [Car] + id: ID! + name: String! + cars: [Car] } input UserInput { - name: String! - age: Int! - cars: [CarInput] + name: String! + age: Int! + cars: [CarInput] } input CarInput { - name: String! + name: String! } type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: { - url: "http://my-api.com", - method: "GET" - }) + getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) } type Mutation { - createMyFavouriteUsers(input: [UserInput!]!): [User] @custom(http: { - url: "http://my-api.com", - method: "POST", - body: "$input" - }) -} \ No newline at end of file + createMyFavouriteUsers(input: [UserInput!]!): [User] + @custom(http: { url: "http://my-api.com", method: "POST", body: "$input" }) +} diff --git a/graphql/schema/testdata/schemagen/input/custom-query-mixed-types.graphql b/graphql/schema/testdata/schemagen/input/custom-query-mixed-types.graphql index 35eda6632fb..5cd9ac8ce22 100644 --- a/graphql/schema/testdata/schemagen/input/custom-query-mixed-types.graphql +++ b/graphql/schema/testdata/schemagen/input/custom-query-mixed-types.graphql @@ -1,16 +1,13 @@ type User @remote { - id: ID! - name: String! + id: ID! + name: String! } type Car { - id: ID! - name: String! + id: ID! + name: String! } type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: { - url: "http://my-api.com", - method: "GET" - }) -} \ No newline at end of file + getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) +} diff --git a/graphql/schema/testdata/schemagen/input/custom-query-not-dgraph-type.graphql b/graphql/schema/testdata/schemagen/input/custom-query-not-dgraph-type.graphql index b4fd6be2c36..b902eb3003a 100644 --- a/graphql/schema/testdata/schemagen/input/custom-query-not-dgraph-type.graphql +++ b/graphql/schema/testdata/schemagen/input/custom-query-not-dgraph-type.graphql @@ -1,23 +1,17 @@ type User @remote { - id: ID! - name: String! + id: ID! + name: String! } input UserInput { - name: String! + name: String! } type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: { - url: "http://my-api.com", - method: "GET" - }) + getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) } type Mutation { - createMyFavouriteUsers(input: [UserInput!]!): [User] @custom(http: { - url: "http://my-api.com", - method: "POST", - body: "{ data: $input }" - }) -} \ No newline at end of file + createMyFavouriteUsers(input: [UserInput!]!): [User] + @custom(http: { url: "http://my-api.com", method: "POST", body: "{ data: $input }" }) +} diff --git a/graphql/schema/testdata/schemagen/input/custom-query-with-dgraph-type.graphql b/graphql/schema/testdata/schemagen/input/custom-query-with-dgraph-type.graphql index 64618d4e2a7..800fe5ef8d7 100644 --- a/graphql/schema/testdata/schemagen/input/custom-query-with-dgraph-type.graphql +++ b/graphql/schema/testdata/schemagen/input/custom-query-with-dgraph-type.graphql @@ -1,11 +1,8 @@ type User { - id: ID! - name: String! + id: ID! + name: String! } type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: { - url: "http://my-api.com", - method: "GET" - }) -} \ No newline at end of file + getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) +} diff --git a/graphql/schema/testdata/schemagen/input/deprecated.graphql b/graphql/schema/testdata/schemagen/input/deprecated.graphql index 5cac66b0d7a..7c9f7d5a90f 100644 --- a/graphql/schema/testdata/schemagen/input/deprecated.graphql +++ b/graphql/schema/testdata/schemagen/input/deprecated.graphql @@ -1,6 +1,4 @@ type Atype { - iamDeprecated: String @deprecated - soAmI: String! @deprecated(reason: "because") + iamDeprecated: String @deprecated + soAmI: String! @deprecated(reason: "because") } - - diff --git a/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql b/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql index 4308ecd0cc7..614fd6d22d5 100644 --- a/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql @@ -1,15 +1,15 @@ interface Movie { - id: ID! - name: String! - director: [Director] @dgraph(pred: "directed.movies") + id: ID! + name: String! + director: [Director] @dgraph(pred: "directed.movies") } type OscarMovie implements Movie { - year: Int! + year: Int! } type Director { - id: ID! - name: String! - directed: [OscarMovie] @dgraph(pred: "~directed.movies") -} \ No newline at end of file + id: ID! + name: String! + directed: [OscarMovie] @dgraph(pred: "~directed.movies") +} diff --git a/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-with-interfaces.graphql b/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-with-interfaces.graphql index cb49fe6bfe5..5c170a28843 100644 --- a/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-with-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-with-interfaces.graphql @@ -1,15 +1,15 @@ interface Movie { - id: ID! - name: String! - director: [Director] @dgraph(pred: "~directed.movies") + id: ID! + name: String! + director: [Director] @dgraph(pred: "~directed.movies") } type OscarMovie implements Movie { - year: Int! + year: Int! } type Director { - id: ID! - name: String! - directed: [OscarMovie] @dgraph(pred: "directed.movies") -} \ No newline at end of file + id: ID! + name: String! + directed: [OscarMovie] @dgraph(pred: "directed.movies") +} diff --git a/graphql/schema/testdata/schemagen/input/embedding-directive-with-similar-queries.graphql b/graphql/schema/testdata/schemagen/input/embedding-directive-with-similar-queries.graphql index 880173cea36..2d036781ccb 100644 --- a/graphql/schema/testdata/schemagen/input/embedding-directive-with-similar-queries.graphql +++ b/graphql/schema/testdata/schemagen/input/embedding-directive-with-similar-queries.graphql @@ -8,14 +8,14 @@ type Product { product_vector: [Float!] @embedding @search(by: ["hnsw(metric: euclidean, exponent: 4)"]) } -type Purchase @lambdaOnMutate(add: true){ +type Purchase @lambdaOnMutate(add: true) { user: User @hasInverse(field: "purchase_history") product: Product date: DateTime @search(by: [day]) } -type User { - email: String! @id - purchase_history: [Purchase] +type User { + email: String! @id + purchase_history: [Purchase] user_vector: [Float!] @embedding @search(by: ["hnsw"]) } diff --git a/graphql/schema/testdata/schemagen/input/field-with-id-directive.graphql b/graphql/schema/testdata/schemagen/input/field-with-id-directive.graphql index 19676b1d59e..cfbb59eb899 100644 --- a/graphql/schema/testdata/schemagen/input/field-with-id-directive.graphql +++ b/graphql/schema/testdata/schemagen/input/field-with-id-directive.graphql @@ -1,18 +1,18 @@ type Post { - postID: ID - content: String! - author: Author! - genre: Genre + postID: ID + content: String! + author: Author! + genre: Genre } type Author { - id: ID - name: String! @id @search(by: [regexp]) - pen_name: String - posts: [Post] + id: ID + name: String! @id @search(by: [regexp]) + pen_name: String + posts: [Post] } type Genre { - # This will add exact index on name field, overwriting the default "hash" index for field of type "String! @id". - name: String! @id @search(by: [exact]) + # This will add exact index on name field, overwriting the default "hash" index for field of type "String! @id". + name: String! @id @search(by: [exact]) } diff --git a/graphql/schema/testdata/schemagen/input/field-with-multiple-@id-fields.graphql b/graphql/schema/testdata/schemagen/input/field-with-multiple-@id-fields.graphql index 8aafec5cb50..3618d035892 100644 --- a/graphql/schema/testdata/schemagen/input/field-with-multiple-@id-fields.graphql +++ b/graphql/schema/testdata/schemagen/input/field-with-multiple-@id-fields.graphql @@ -1,17 +1,17 @@ type Post { - postID: ID - content: String! - author: Author! - genre: Genre + postID: ID + content: String! + author: Author! + genre: Genre } type Author { - id: ID - name: String! @id @search(by: [regexp]) - pen_name: String! @id - posts: [Post] + id: ID + name: String! @id @search(by: [regexp]) + pen_name: String! @id + posts: [Post] } type Genre { - name: String! @id + name: String! @id } diff --git a/graphql/schema/testdata/schemagen/input/field-with-reverse-predicate-in-dgraph-directive.graphql b/graphql/schema/testdata/schemagen/input/field-with-reverse-predicate-in-dgraph-directive.graphql index 32fa5273031..a9582bbd6d9 100644 --- a/graphql/schema/testdata/schemagen/input/field-with-reverse-predicate-in-dgraph-directive.graphql +++ b/graphql/schema/testdata/schemagen/input/field-with-reverse-predicate-in-dgraph-directive.graphql @@ -1,11 +1,11 @@ type Movie { - id: ID! - name: String! - director: [MovieDirector] @dgraph(pred: "~directed.movies") + id: ID! + name: String! + director: [MovieDirector] @dgraph(pred: "~directed.movies") } type MovieDirector { - id: ID! - name: String! - directed: [Movie] @dgraph(pred: "directed.movies") -} \ No newline at end of file + id: ID! + name: String! + directed: [Movie] @dgraph(pred: "directed.movies") +} diff --git a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-all-empty.graphql b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-all-empty.graphql index 9c489b6aa88..cdd875a2951 100644 --- a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-all-empty.graphql +++ b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-all-empty.graphql @@ -1,12 +1,12 @@ type X { - name: [Y] - f1: [Y] @dgraph(pred: "f1") + name: [Y] + f1: [Y] @dgraph(pred: "f1") } type Y { - f1: [X] @dgraph(pred: "~f1") + f1: [X] @dgraph(pred: "~f1") } type Z { - add:[X] + add: [X] } diff --git a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-circular.graphql b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-circular.graphql index 560f7b855da..60fd057a02e 100644 --- a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-circular.graphql +++ b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-circular.graphql @@ -1,14 +1,14 @@ -type X{ - f1: [Y] @dgraph(pred: "f1") - f3: [Z] @dgraph(pred: "~f3") +type X { + f1: [Y] @dgraph(pred: "f1") + f3: [Z] @dgraph(pred: "~f3") } -type Y{ - f1: [X] @dgraph(pred: "~f1") - f2: [Z] @dgraph(pred: "f2") +type Y { + f1: [X] @dgraph(pred: "~f1") + f2: [Z] @dgraph(pred: "f2") } -type Z{ - f2: [Y] @dgraph(pred: "~f2") - f3: [X] @dgraph(pred: "f3") -} \ No newline at end of file +type Z { + f2: [Y] @dgraph(pred: "~f2") + f3: [X] @dgraph(pred: "f3") +} diff --git a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-custom-mutation.graphql b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-custom-mutation.graphql index c3704e34625..417f85018b7 100644 --- a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-custom-mutation.graphql +++ b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-custom-mutation.graphql @@ -1,16 +1,13 @@ type User { - id: ID! - name: String! + id: ID! + name: String! } input UserInput { - name: String! + name: String! } type Mutation { - addMyFavouriteUsers(input: [UserInput!]!): [User] @custom(http: { - url: "http://my-api.com", - method: "POST", - body: "{ data: $input }" - }) -} \ No newline at end of file + addMyFavouriteUsers(input: [UserInput!]!): [User] + @custom(http: { url: "http://my-api.com", method: "POST", body: "{ data: $input }" }) +} diff --git a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-directLink.graphql b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-directLink.graphql index e66f9a3cf86..e670f6c7fa1 100644 --- a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-directLink.graphql +++ b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-directLink.graphql @@ -1,14 +1,14 @@ type X { - f1: [Y] @dgraph(pred: "f1") - name: String - id: ID + f1: [Y] @dgraph(pred: "f1") + name: String + id: ID } type Y { - f2: [Z] @dgraph(pred: "~f2") - f1: [X] @dgraph(pred: "~f1") + f2: [Z] @dgraph(pred: "~f2") + f1: [X] @dgraph(pred: "~f1") } type Z { - f2: [Y] @dgraph(pred: "f2") -} \ No newline at end of file + f2: [Y] @dgraph(pred: "f2") +} diff --git a/graphql/schema/testdata/schemagen/input/generate-directive.graphql b/graphql/schema/testdata/schemagen/input/generate-directive.graphql index d45f95ace3e..baa3a69aadc 100644 --- a/graphql/schema/testdata/schemagen/input/generate-directive.graphql +++ b/graphql/schema/testdata/schemagen/input/generate-directive.graphql @@ -1,37 +1,22 @@ -interface Character @secret(field: "password") @generate( - query: { - get: false, - password: false - }, - subscription: false -) { - id: ID! - name: String! @search(by: [exact]) - friends: [Character] +interface Character + @secret(field: "password") + @generate(query: { get: false, password: false }, subscription: false) { + id: ID! + name: String! @search(by: [exact]) + friends: [Character] } -type Human implements Character @generate( - query: { - aggregate: true - }, - subscription: true -) { - totalCredits: Int +type Human implements Character @generate(query: { aggregate: true }, subscription: true) { + totalCredits: Int } -type Person @withSubscription @generate( - query: { - get: false, - query: true, - password: true, - aggregate: false - }, - mutation: { - add: false, - delete: false - }, +type Person + @withSubscription + @generate( + query: { get: false, query: true, password: true, aggregate: false } + mutation: { add: false, delete: false } subscription: false -) { - id: ID! - name: String! + ) { + id: ID! + name: String! } diff --git a/graphql/schema/testdata/schemagen/input/geo-type.graphql b/graphql/schema/testdata/schemagen/input/geo-type.graphql index 9326165f8d5..e5b3f7f28ef 100644 --- a/graphql/schema/testdata/schemagen/input/geo-type.graphql +++ b/graphql/schema/testdata/schemagen/input/geo-type.graphql @@ -1,10 +1,10 @@ type Hotel { - id: ID! - name: String! - location: Point @search - secretLocation: Point - area: Polygon @search - secretArea: Polygon - branches: MultiPolygon @search - secretBranches: MultiPolygon + id: ID! + name: String! + location: Point @search + secretLocation: Point + area: Polygon @search + secretArea: Polygon + branches: MultiPolygon @search + secretBranches: MultiPolygon } diff --git a/graphql/schema/testdata/schemagen/input/hasfilter.graphql b/graphql/schema/testdata/schemagen/input/hasfilter.graphql index 2d59534caaa..4421587ba5f 100644 --- a/graphql/schema/testdata/schemagen/input/hasfilter.graphql +++ b/graphql/schema/testdata/schemagen/input/hasfilter.graphql @@ -1,11 +1,11 @@ interface I { - id: ID! + id: ID! } type T implements I { - text: String + text: String } type B { - name: String -} \ No newline at end of file + name: String +} diff --git a/graphql/testdata/custom_bench/profiling/docker-compose.yml b/graphql/testdata/custom_bench/profiling/docker-compose.yml index 54e82ce89f6..38ec673f0cd 100644 --- a/graphql/testdata/custom_bench/profiling/docker-compose.yml +++ b/graphql/testdata/custom_bench/profiling/docker-compose.yml @@ -13,20 +13,21 @@ services: labels: cluster: test ports: - - 8180:8180 - - 9180:9180 + - 8180:8180 + - 9180:9180 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./p - target: /data/alpha1/p - read_only: false - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" -o 100 --my=alpha1:7180 --lru_mb=1024 --zero=zero1:5180 - --logtostderr -v=2 --raft="idx=1;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./p + target: /data/alpha1/p + read_only: false + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" -o 100 + --my=alpha1:7180 --lru_mb=1024 --zero=zero1:5180 --logtostderr -v=2 --raft="idx=1;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" zero1: image: dgraph/dgraph:local container_name: zero1 @@ -38,14 +39,14 @@ services: labels: cluster: test ports: - - 5180:5180 - - 6180:6180 + - 5180:5180 + - 6180:6180 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" -o 100 --raft="idx=1;" --my=zero1:5180 --logtostderr -v=2 - --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" -o 100 + --raft="idx=1;" --my=zero1:5180 --logtostderr -v=2 --bindall volumes: {} - diff --git a/ocagent/docker-compose.yml b/ocagent/docker-compose.yml index 7f92ec39829..6f479c5b84f 100644 --- a/ocagent/docker-compose.yml +++ b/ocagent/docker-compose.yml @@ -7,15 +7,16 @@ services: labels: cluster: test ports: - - 8180:8180 - - 9180:9180 + - 8180:8180 + - 9180:9180 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" -o 100 --my=alpha1:7180 --zero=zero1:5180 --logtostderr -v=2 - --trace "jaeger=http://ocagent:14268;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" -o 100 + --my=alpha1:7180 --zero=zero1:5180 --logtostderr -v=2 --trace "jaeger=http://ocagent:14268;" zero1: image: dgraph/dgraph:local container_name: zero1 @@ -23,15 +24,17 @@ services: labels: cluster: test ports: - - 5180:5180 - - 6180:6180 + - 5180:5180 + - 6180:6180 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" -o 100 --raft="idx=1" --my=zero1:5180 --replicas=3 --logtostderr -v=2 --bindall - --trace "jaeger=http://ocagent:14268;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" -o 100 + --raft="idx=1" --my=zero1:5180 --replicas=3 --logtostderr -v=2 --bindall --trace + "jaeger=http://ocagent:14268;" ocagent: image: omnition/opencensus-agent:0.1.6 container_name: ocagent @@ -42,32 +45,32 @@ services: - 55678 - 55679:55679 volumes: - - type: bind - source: ./ocagent-config.yaml - target: /conf/ocagent-config.yaml - read_only: true + - type: bind + source: ./ocagent-config.yaml + target: /conf/ocagent-config.yaml + read_only: true command: --config /conf/ocagent-config.yaml datadog: image: datadog/agent:latest container_name: datadog working_dir: /working/datadog volumes: - - type: bind - source: /var/run/docker.sock - target: /var/run/docker.sock - read_only: true - - type: bind - source: /proc/ - target: /proc/ - read_only: true - - type: bind - source: /sys/fs/cgroup/ - target: /host/sys/fs/cgroup - read_only: true + - type: bind + source: /var/run/docker.sock + target: /var/run/docker.sock + read_only: true + - type: bind + source: /proc/ + target: /proc/ + read_only: true + - type: bind + source: /sys/fs/cgroup/ + target: /host/sys/fs/cgroup + read_only: true environment: - - DD_API_KEY - - DD_APM_ENABLED=true - - DD_APM_NON_LOCAL_TRAFFIC=true + - DD_API_KEY + - DD_APM_ENABLED=true + - DD_APM_NON_LOCAL_TRAFFIC=true ports: - - 8126:8126 + - 8126:8126 volumes: {} diff --git a/protos/pb.proto b/protos/pb.proto index ab753487633..efc072e6c0d 100644 --- a/protos/pb.proto +++ b/protos/pb.proto @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 Hypermode Inc. and Contributors + * Copyright (C) 2025 Hypermode Inc. and Contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -809,4 +809,4 @@ message TaskStatusResponse { uint64 task_meta = 1; } -// vim: expandtab sw=2 ts=2 +// vim: expandtab sw=2 ts=2 \ No newline at end of file diff --git a/protos/pb/pb_grpc.pb.go b/protos/pb/pb_grpc.pb.go index b6789c6725e..a4f63aa38c5 100644 --- a/protos/pb/pb_grpc.pb.go +++ b/protos/pb/pb_grpc.pb.go @@ -1,5 +1,5 @@ // -// Copyright (C) 2017 Hypermode Inc. and Contributors +// Copyright (C) 2025 Hypermode Inc. and Contributors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/systest/1million/alpha.yml b/systest/1million/alpha.yml index 11c4e610295..282aa286aa7 100644 --- a/systest/1million/alpha.yml +++ b/systest/1million/alpha.yml @@ -17,6 +17,7 @@ services: source: ./out/0/p target: /posting read_only: false - command: /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 -p=/posting --logtostderr - -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + command: + /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 + --zero=zero1:5080 -p=/posting --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" diff --git a/systest/1million/docker-compose.yml b/systest/1million/docker-compose.yml index dbae94c69cc..ab643fbf6d2 100644 --- a/systest/1million/docker-compose.yml +++ b/systest/1million/docker-compose.yml @@ -6,18 +6,19 @@ services: labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: volume - source: data - target: /data - read_only: false - command: /gobin/dgraph zero --telemetry "reports=false; sentry=false;" --raft="idx=1" --my=zero1:5080 --logtostderr - -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: volume + source: data + target: /data + read_only: false + command: + /gobin/dgraph zero --telemetry "reports=false; sentry=false;" --raft="idx=1" --my=zero1:5080 + --logtostderr -v=2 --bindall volumes: data: {} diff --git a/systest/21million/bulk/alpha.yml b/systest/21million/bulk/alpha.yml index 11c4e610295..282aa286aa7 100644 --- a/systest/21million/bulk/alpha.yml +++ b/systest/21million/bulk/alpha.yml @@ -17,6 +17,7 @@ services: source: ./out/0/p target: /posting read_only: false - command: /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 -p=/posting --logtostderr - -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + command: + /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 + --zero=zero1:5080 -p=/posting --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" diff --git a/systest/21million/bulk/docker-compose.yml b/systest/21million/bulk/docker-compose.yml index dbae94c69cc..ab643fbf6d2 100644 --- a/systest/21million/bulk/docker-compose.yml +++ b/systest/21million/bulk/docker-compose.yml @@ -6,18 +6,19 @@ services: labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: volume - source: data - target: /data - read_only: false - command: /gobin/dgraph zero --telemetry "reports=false; sentry=false;" --raft="idx=1" --my=zero1:5080 --logtostderr - -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: volume + source: data + target: /data + read_only: false + command: + /gobin/dgraph zero --telemetry "reports=false; sentry=false;" --raft="idx=1" --my=zero1:5080 + --logtostderr -v=2 --bindall volumes: data: {} diff --git a/systest/21million/live/docker-compose.yml b/systest/21million/live/docker-compose.yml index e03e13f2c01..59fce08925d 100644 --- a/systest/21million/live/docker-compose.yml +++ b/systest/21million/live/docker-compose.yml @@ -8,28 +8,29 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr - -v=2 - --security "whitelist=0.0.0.0/0;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 + --zero=zero1:5080 --logtostderr -v=2 --security "whitelist=0.0.0.0/0;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 --logtostderr - -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 + --logtostderr -v=2 --bindall diff --git a/systest/acl/restore/docker-compose.yml b/systest/acl/restore/docker-compose.yml index 6760c2b1bdf..355b120cdbe 100644 --- a/systest/acl/restore/docker-compose.yml +++ b/systest/acl/restore/docker-compose.yml @@ -6,24 +6,25 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./data/backups - target: /backups - read_only: false - - type: bind - source: ./acl-secret - target: /secret/hmac - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=1; group=1" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/secret/hmac;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./data/backups + target: /backups + read_only: false + - type: bind + source: ./acl-secret + target: /secret/hmac + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=1; group=1" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl "secret-file=/secret/hmac;" deploy: resources: limits: @@ -34,15 +35,16 @@ services: labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft='idx=1' --my=zero1:5080 --logtostderr - -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --raft='idx=1' --my=zero1:5080 --logtostderr -v=2 --bindall deploy: resources: limits: diff --git a/systest/audit/docker-compose.yml b/systest/audit/docker-compose.yml index 4c2ff95beef..95f95031fe7 100644 --- a/systest/audit/docker-compose.yml +++ b/systest/audit/docker-compose.yml @@ -14,9 +14,10 @@ services: - type: bind source: ./audit_dir/aa target: /audit_dir - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --raft="idx=1;group=1" --my=alpha1:7080 --zero=zero1:5080 - --logtostderr --audit "output=/audit_dir;" -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --raft="idx=1;group=1" --my=alpha1:7080 --zero=zero1:5080 --logtostderr --audit + "output=/audit_dir;" -v=2 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 @@ -33,6 +34,7 @@ services: - type: bind source: ./audit_dir/za target: /audit_dir - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall - --audit "output=/audit_dir;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --raft="idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall --audit "output=/audit_dir;" volumes: {} diff --git a/systest/audit_encrypted/docker-compose.yml b/systest/audit_encrypted/docker-compose.yml index cb41f951d49..1e12b6d7313 100644 --- a/systest/audit_encrypted/docker-compose.yml +++ b/systest/audit_encrypted/docker-compose.yml @@ -18,9 +18,11 @@ services: source: ../../ee/enc/test-fixtures/enc-key target: /dgraph-enc/enc-key read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --raft="idx=1;group=1" --my=alpha1:7080 --zero=zero1:5080 - --logtostderr --audit "output=/audit_dir;encrypt-file=/dgraph-enc/enc-key" -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --raft="idx=1;group=1" --my=alpha1:7080 --zero=zero1:5080 --logtostderr --audit + "output=/audit_dir;encrypt-file=/dgraph-enc/enc-key" -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 @@ -41,6 +43,8 @@ services: source: ../../ee/enc/test-fixtures/enc-key target: /dgraph-enc/enc-key read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall - --audit "output=/audit_dir;encrypt-file=/dgraph-enc/enc-key" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --raft="idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall --audit + "output=/audit_dir;encrypt-file=/dgraph-enc/enc-key" volumes: {} diff --git a/systest/backup/advanced-scenarios/127-Namespace/docker-compose.yml b/systest/backup/advanced-scenarios/127-Namespace/docker-compose.yml index 33ea56caae5..06f2f1d881b 100755 --- a/systest/backup/advanced-scenarios/127-Namespace/docker-compose.yml +++ b/systest/backup/advanced-scenarios/127-Namespace/docker-compose.yml @@ -10,38 +10,41 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../acl/restore/acl-secret - target: /secret/hmac - read_only: true - - data-volume:/data/backups/ + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../acl/restore/acl-secret + target: /secret/hmac + read_only: true + - data-volume:/data/backups/ + + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=1; group=1;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl "secret-file=/secret/hmac;" - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=1; group=1;" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/secret/hmac;" - zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall alpha2: image: dgraph/dgraph:local @@ -51,36 +54,39 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../acl/restore/acl-secret - target: /secret/hmac - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero2:5080 - --logtostderr -v=2 --raft "idx=1; group=1;" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/secret/hmac;" - + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../acl/restore/acl-secret + target: /secret/hmac + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero2:5080 --logtostderr -v=2 --raft "idx=1; group=1;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl "secret-file=/secret/hmac;" + zero2: image: dgraph/dgraph:local working_dir: /data/zero2 labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero2:5080 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero2:5080 --logtostderr -v=2 --bindall volumes: data-volume: diff --git a/systest/backup/advanced-scenarios/acl-nonAcl/docker-compose.yml b/systest/backup/advanced-scenarios/acl-nonAcl/docker-compose.yml index ba784648091..b6c2c452ab7 100755 --- a/systest/backup/advanced-scenarios/acl-nonAcl/docker-compose.yml +++ b/systest/backup/advanced-scenarios/acl-nonAcl/docker-compose.yml @@ -2,7 +2,7 @@ # version: "3.5" services: -#For acl to non-acl + #For acl to non-acl # acl setup alpha1: image: dgraph/dgraph:local @@ -12,37 +12,40 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../acl/restore/acl-secret - target: /secret/hmac - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=1; group=1;" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/secret/hmac;" - + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../acl/restore/acl-secret + target: /secret/hmac + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=1; group=1;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl "secret-file=/secret/hmac;" + zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall # non-acl setup alpha2: @@ -53,33 +56,38 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero2:5080 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero2:5080 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + zero2: image: dgraph/dgraph:local working_dir: /data/zero2 labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero2:5080 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero2:5080 --logtostderr -v=2 --bindall -#For non-acl to acl + #For non-acl to acl # acl setup alpha3: image: dgraph/dgraph:local @@ -89,37 +97,40 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../acl/restore/acl-secret - target: /secret/hmac - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero3:5080 - --logtostderr -v=2 --raft "idx=1; group=1;" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/secret/hmac;" - + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../acl/restore/acl-secret + target: /secret/hmac + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero3:5080 --logtostderr -v=2 --raft "idx=1; group=1;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl "secret-file=/secret/hmac;" + zero3: image: dgraph/dgraph:local working_dir: /data/zero3 labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero3:5080 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero3:5080 --logtostderr -v=2 --bindall # non-acl setup alpha4: @@ -130,30 +141,35 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha4:7080 --zero=zero4:5080 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha4:7080 --zero=zero4:5080 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + zero4: image: dgraph/dgraph:local working_dir: /data/zero4 labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero4:5080 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero4:5080 --logtostderr -v=2 --bindall volumes: data-volume: diff --git a/systest/backup/advanced-scenarios/deleted-namespace/docker-compose.yml b/systest/backup/advanced-scenarios/deleted-namespace/docker-compose.yml index 547979b7f04..9d022c80e94 100755 --- a/systest/backup/advanced-scenarios/deleted-namespace/docker-compose.yml +++ b/systest/backup/advanced-scenarios/deleted-namespace/docker-compose.yml @@ -10,21 +10,22 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../acl/restore/acl-secret - target: /secret/hmac - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=1; group=1;" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/secret/hmac;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../acl/restore/acl-secret + target: /secret/hmac + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=1; group=1;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl "secret-file=/secret/hmac;" zero1: image: dgraph/dgraph:local @@ -32,15 +33,17 @@ services: labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall alpha2: image: dgraph/dgraph:local @@ -50,21 +53,22 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../acl/restore/acl-secret - target: /secret/hmac - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero2:5080 - --logtostderr -v=2 --raft "idx=1; group=1;" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/secret/hmac;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../acl/restore/acl-secret + target: /secret/hmac + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero2:5080 --logtostderr -v=2 --raft "idx=1; group=1;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl "secret-file=/secret/hmac;" zero2: image: dgraph/dgraph:local @@ -72,14 +76,16 @@ services: labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - data-volume:/data/backups/ - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero2:5080 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - data-volume:/data/backups/ + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero2:5080 --logtostderr -v=2 --bindall volumes: data-volume: diff --git a/systest/backup/encryption/docker-compose.yml b/systest/backup/encryption/docker-compose.yml index 8a61f5faf8e..baf8f379223 100644 --- a/systest/backup/encryption/docker-compose.yml +++ b/systest/backup/encryption/docker-compose.yml @@ -6,97 +6,113 @@ services: labels: cluster: test env_file: - - ../../backup.env + - ../../backup.env ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../ee/enc/test-fixtures/enc-key - target: /dgraph-enc/enc-key - read_only: true - - type: bind - source: ../../../tlstest/mtls_internal/tls/alpha1 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --encryption="key-file=/dgraph-enc/enc-key;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../ee/enc/test-fixtures/enc-key + target: /dgraph-enc/enc-key + read_only: true + - type: bind + source: ../../../tlstest/mtls_internal/tls/alpha1 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 + --encryption="key-file=/dgraph-enc/enc-key;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 labels: cluster: test env_file: - - ../../backup.env + - ../../backup.env ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../ee/enc/test-fixtures/enc-key - target: /dgraph-enc/enc-key - read_only: true - - type: bind - source: ../../../tlstest/mtls_internal/tls/alpha2 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 --encryption="key-file=/dgraph-enc/enc-key;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha2.crt; client-key=/dgraph-tls/client.alpha2.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../ee/enc/test-fixtures/enc-key + target: /dgraph-enc/enc-key + read_only: true + - type: bind + source: ../../../tlstest/mtls_internal/tls/alpha2 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 + --encryption="key-file=/dgraph-enc/enc-key;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha2.crt; client-key=/dgraph-tls/client.alpha2.key;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 labels: cluster: test env_file: - - ../../backup.env + - ../../backup.env ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../ee/enc/test-fixtures/enc-key - target: /dgraph-enc/enc-key - read_only: true - - type: bind - source: ../../../tlstest/mtls_internal/tls/alpha3 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 --encryption="key-file=/dgraph-enc/enc-key;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha3.crt; client-key=/dgraph-tls/client.alpha3.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../ee/enc/test-fixtures/enc-key + target: /dgraph-enc/enc-key + read_only: true + - type: bind + source: ../../../tlstest/mtls_internal/tls/alpha3 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 + --encryption="key-file=/dgraph-enc/enc-key;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha3.crt; client-key=/dgraph-tls/client.alpha3.key;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../tlstest/mtls_internal/tls/zero1 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; client-key=/dgraph-tls/client.zero1.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../tlstest/mtls_internal/tls/zero1 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --raft="idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall --tls + "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; + client-key=/dgraph-tls/client.zero1.key;" minio: image: minio/minio:latest env_file: diff --git a/systest/backup/filesystem/docker-compose.yml b/systest/backup/filesystem/docker-compose.yml index 1e60b85a248..de638991497 100644 --- a/systest/backup/filesystem/docker-compose.yml +++ b/systest/backup/filesystem/docker-compose.yml @@ -8,93 +8,106 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./data/backups - target: /data/backups/ - read_only: false - - type: bind - source: ../../../tlstest/mtls_internal/tls/alpha1 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./data/backups + target: /data/backups/ + read_only: false + - type: bind + source: ../../../tlstest/mtls_internal/tls/alpha1 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./data/backups - target: /data/backups/ - read_only: false - - type: bind - source: ../../../tlstest/mtls_internal/tls/alpha2 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha2.crt; client-key=/dgraph-tls/client.alpha2.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./data/backups + target: /data/backups/ + read_only: false + - type: bind + source: ../../../tlstest/mtls_internal/tls/alpha2 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha2.crt; client-key=/dgraph-tls/client.alpha2.key;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./data/backups - target: /data/backups/ - read_only: false - - type: bind - source: ../../../tlstest/mtls_internal/tls/alpha3 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha3.crt; client-key=/dgraph-tls/client.alpha3.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./data/backups + target: /data/backups/ + read_only: false + - type: bind + source: ../../../tlstest/mtls_internal/tls/alpha3 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha3.crt; client-key=/dgraph-tls/client.alpha3.key;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./data/backups - target: /data/backups/ - read_only: false - - type: bind - source: ../../../tlstest/mtls_internal/tls/zero1 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; client-key=/dgraph-tls/client.zero1.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./data/backups + target: /data/backups/ + read_only: false + - type: bind + source: ../../../tlstest/mtls_internal/tls/zero1 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall --tls + "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; + client-key=/dgraph-tls/client.zero1.key;" volumes: {} diff --git a/systest/backup/minio-large/docker-compose.yml b/systest/backup/minio-large/docker-compose.yml index 3f85e9da41b..2f271b0081d 100644 --- a/systest/backup/minio-large/docker-compose.yml +++ b/systest/backup/minio-large/docker-compose.yml @@ -10,20 +10,23 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../tlstest/mtls_internal/tls/alpha1 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../tlstest/mtls_internal/tls/alpha1 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 @@ -32,20 +35,23 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../tlstest/mtls_internal/tls/alpha2 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha2.crt; client-key=/dgraph-tls/client.alpha2.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../tlstest/mtls_internal/tls/alpha2 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha2.crt; client-key=/dgraph-tls/client.alpha2.key;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 @@ -54,26 +60,29 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../tlstest/mtls_internal/tls/alpha3 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha3.crt; client-key=/dgraph-tls/client.alpha3.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../tlstest/mtls_internal/tls/alpha3 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha3.crt; client-key=/dgraph-tls/client.alpha3.key;" minio: image: minio/minio:${MINIO_IMAGE_ARCH:-RELEASE.2020-11-13T20-10-18Z} env_file: - - ../../backup.env + - ../../backup.env ports: - - "9001" + - "9001" command: minio server /data/minio --address :9001 zero1: image: dgraph/dgraph:local @@ -81,17 +90,21 @@ services: labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../tlstest/mtls_internal/tls/zero1 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; client-key=/dgraph-tls/client.zero1.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../tlstest/mtls_internal/tls/zero1 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall --tls + "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; + client-key=/dgraph-tls/client.zero1.key;" volumes: {} diff --git a/systest/backup/minio/docker-compose.yml b/systest/backup/minio/docker-compose.yml index 0e52d9bdf73..550d8d659b6 100644 --- a/systest/backup/minio/docker-compose.yml +++ b/systest/backup/minio/docker-compose.yml @@ -10,20 +10,23 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../tlstest/mtls_internal/tls/alpha1 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../tlstest/mtls_internal/tls/alpha1 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 @@ -32,20 +35,23 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../tlstest/mtls_internal/tls/alpha2 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha2.crt; client-key=/dgraph-tls/client.alpha2.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../tlstest/mtls_internal/tls/alpha2 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha2.crt; client-key=/dgraph-tls/client.alpha2.key;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 @@ -54,44 +60,51 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../tlstest/mtls_internal/tls/alpha3 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha3.crt; client-key=/dgraph-tls/client.alpha3.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../tlstest/mtls_internal/tls/alpha3 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha3.crt; client-key=/dgraph-tls/client.alpha3.key;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../../tlstest/mtls_internal/tls/zero1 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; client-key=/dgraph-tls/client.zero1.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../../tlstest/mtls_internal/tls/zero1 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall --tls + "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; + client-key=/dgraph-tls/client.zero1.key;" minio: image: minio/minio:${MINIO_IMAGE_ARCH:-RELEASE.2020-11-13T20-10-18Z} env_file: - - ../../backup.env + - ../../backup.env ports: - - "9001" + - "9001" command: minio server /data/minio --address :9001 volumes: {} diff --git a/systest/backup/multi-tenancy/docker-compose.yml b/systest/backup/multi-tenancy/docker-compose.yml index 1bbfd0cded3..01d526942d5 100644 --- a/systest/backup/multi-tenancy/docker-compose.yml +++ b/systest/backup/multi-tenancy/docker-compose.yml @@ -8,92 +8,93 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./acl-secret - target: /secret/hmac - read_only: true - - type: bind - source: ./data/backups - target: /data/backups/ - read_only: false - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr - -v=2 --raft "idx=1; group=1;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/secret/hmac;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./acl-secret + target: /secret/hmac + read_only: true + - type: bind + source: ./data/backups + target: /data/backups/ + read_only: false + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=1; group=1;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl "secret-file=/secret/hmac;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./acl-secret - target: /secret/hmac - read_only: true - - type: bind - source: ./data/backups - target: /data/backups/ - read_only: false - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero1:5080 --logtostderr - -v=2 --raft "idx=2; group=2;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/secret/hmac;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./acl-secret + target: /secret/hmac + read_only: true + - type: bind + source: ./data/backups + target: /data/backups/ + read_only: false + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=2; group=2;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl "secret-file=/secret/hmac;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./acl-secret - target: /secret/hmac - read_only: true - - type: bind - source: ./data/backups - target: /data/backups/ - read_only: false - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero1:5080 --logtostderr - -v=2 --raft "idx=3; group=3;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/secret/hmac;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./acl-secret + target: /secret/hmac + read_only: true + - type: bind + source: ./data/backups + target: /data/backups/ + read_only: false + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=3; group=3;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl "secret-file=/secret/hmac;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./data/backups - target: /data/backups/ - read_only: false - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --replicas=1 --logtostderr - -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./data/backups + target: /data/backups/ + read_only: false + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall volumes: {} diff --git a/systest/bgindex/docker-compose.yml b/systest/bgindex/docker-compose.yml index c7f668ebb72..908a844b375 100644 --- a/systest/bgindex/docker-compose.yml +++ b/systest/bgindex/docker-compose.yml @@ -8,33 +8,35 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../ee/acl/hmac-secret - target: /secret/hmac - read_only: true - command: /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 - --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/secret/hmac;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../ee/acl/hmac-secret + target: /secret/hmac + read_only: true + command: + /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 + --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl "secret-file=/secret/hmac;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 + --logtostderr -v=2 --bindall volumes: {} diff --git a/systest/bulk_live/bulk/alpha.yml b/systest/bulk_live/bulk/alpha.yml index 16381913e82..9684012e92b 100644 --- a/systest/bulk_live/bulk/alpha.yml +++ b/systest/bulk_live/bulk/alpha.yml @@ -17,5 +17,6 @@ services: source: ./data/out/0/p target: /posting read_only: false - command: /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 -p=/posting - --security "whitelist=0.0.0.0/0;" + command: + /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 + --zero=zero1:5080 --logtostderr -v=2 -p=/posting --security "whitelist=0.0.0.0/0;" diff --git a/systest/bulk_live/bulk/alpha_acl.yml b/systest/bulk_live/bulk/alpha_acl.yml index 0083864c114..e583f9341d4 100644 --- a/systest/bulk_live/bulk/alpha_acl.yml +++ b/systest/bulk_live/bulk/alpha_acl.yml @@ -21,5 +21,7 @@ services: source: ../../../ee/acl/hmac-secret target: /dgraph-acl/hmac-secret read_only: true - command: /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 -p=/posting - --security "whitelist=0.0.0.0/0;" --acl "secret-file=/dgraph-acl/hmac-secret; " + command: + /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 + --zero=zero1:5080 --logtostderr -v=2 -p=/posting --security "whitelist=0.0.0.0/0;" --acl + "secret-file=/dgraph-acl/hmac-secret; " diff --git a/systest/bulk_live/bulk/docker-compose.yml b/systest/bulk_live/bulk/docker-compose.yml index aab260d9366..0a836554b94 100644 --- a/systest/bulk_live/bulk/docker-compose.yml +++ b/systest/bulk_live/bulk/docker-compose.yml @@ -5,9 +5,9 @@ services: minio: image: minio/minio:RELEASE.2020-11-13T20-10-18Z ports: - - "9001" + - "9001" env_file: - - ../../backup.env + - ../../backup.env command: minio server /data/minio --address :9001 zero1: image: dgraph/dgraph:local @@ -15,15 +15,16 @@ services: labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph zero --telemetry "reports=false; sentry=false;" --raft='idx=1' --my=zero1:5080 --logtostderr -v=2 - --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph zero --telemetry "reports=false; sentry=false;" --raft='idx=1' --my=zero1:5080 + --logtostderr -v=2 --bindall deploy: resources: limits: diff --git a/systest/bulk_live/live/docker-compose.yml b/systest/bulk_live/live/docker-compose.yml index f2ca5012f7c..c6389b67a22 100644 --- a/systest/bulk_live/live/docker-compose.yml +++ b/systest/bulk_live/live/docker-compose.yml @@ -8,16 +8,17 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr - -v=2 --raft='idx=1; group=1;' - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 + --zero=zero1:5080 --logtostderr -v=2 --raft='idx=1; group=1;' --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" deploy: resources: limits: @@ -35,15 +36,16 @@ services: labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph zero --telemetry "reports=false; sentry=false;" --raft='idx=1' --my=zero1:5080 --logtostderr -v=2 - --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph zero --telemetry "reports=false; sentry=false;" --raft='idx=1' --my=zero1:5080 + --logtostderr -v=2 --bindall deploy: resources: limits: diff --git a/systest/cdc/docker-compose.yml b/systest/cdc/docker-compose.yml index dea23f9a1e3..be44ad6a2be 100644 --- a/systest/cdc/docker-compose.yml +++ b/systest/cdc/docker-compose.yml @@ -16,9 +16,10 @@ services: - type: bind source: ./cdc_logs target: /cdc - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr - --cdc "file=/cdc;" -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr --cdc "file=/cdc;" -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 @@ -32,5 +33,7 @@ services: source: $GOPATH/bin target: /gobin read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --my=zero1:5080 --logtostderr -v=2 --bindall + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --my=zero1:5080 --logtostderr -v=2 --bindall volumes: {} diff --git a/systest/cloud/docker-compose.yml b/systest/cloud/docker-compose.yml index f968318cc2c..adb7124b548 100644 --- a/systest/cloud/docker-compose.yml +++ b/systest/cloud/docker-compose.yml @@ -14,13 +14,15 @@ services: source: $GOPATH/bin target: /gobin read_only: true - command: /gobin/dgraph zero --telemetry "reports=false; sentry=false;" --my=zero1:5080 --raft="idx=1" --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 + command: + /gobin/dgraph zero --telemetry "reports=false; sentry=false;" --my=zero1:5080 --raft="idx=1" + --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 alpha1: image: dgraph/dgraph:local working_dir: /data/alpha1 env_file: - - ./../../dgraph/minio.env + - ./../../dgraph/minio.env volumes: - type: bind source: $GOPATH/bin @@ -36,10 +38,11 @@ services: labels: cluster: test service: alpha - command: /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" - --limit "shared-instance=true" + command: + /gobin/dgraph alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 + --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 + --logtostderr -v=2 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl + "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" --limit "shared-instance=true" minio: image: minio/minio:latest diff --git a/systest/export/docker-compose.yml b/systest/export/docker-compose.yml index d7309eaa5b0..bec9294c9df 100644 --- a/systest/export/docker-compose.yml +++ b/systest/export/docker-compose.yml @@ -8,72 +8,75 @@ services: labels: cluster: test env_file: - - export.env + - export.env ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: volume - source: data - target: /data - read_only: false - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr - -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: volume + source: data + target: /data + read_only: false + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 labels: cluster: test env_file: - - export.env + - export.env ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: volume - source: data - target: /data - read_only: false - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero1:5080 --logtostderr - -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: volume + source: data + target: /data + read_only: false + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 labels: cluster: test env_file: - - export.env + - export.env ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: volume - source: data - target: /data - read_only: false - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero1:5080 --logtostderr - -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: volume + source: data + target: /data + read_only: false + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" minio: image: minio/minio:${MINIO_IMAGE_ARCH:-RELEASE.2020-11-13T20-10-18Z} env_file: - - export.env + - export.env ports: - - "9001" + - "9001" command: minio server /data/minio --address :9001 zero1: image: dgraph/dgraph:local @@ -81,14 +84,15 @@ services: labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 --replicas=3 --logtostderr - -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --raft="idx=1;" --my=zero1:5080 --replicas=3 --logtostderr -v=2 --bindall volumes: data: {} diff --git a/systest/group-delete/docker-compose.yml b/systest/group-delete/docker-compose.yml index 9b1875b739f..ff57b135d11 100644 --- a/systest/group-delete/docker-compose.yml +++ b/systest/group-delete/docker-compose.yml @@ -8,61 +8,65 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr - -v=2 --raft "group=1" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "group=1" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero1:5080 --logtostderr - -v=2 --raft "group=2" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "group=2" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero1:5080 --logtostderr - -v=2 --raft "group=3" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "group=3" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 --replicas=1 --logtostderr - -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --raft="idx=1;" --my=zero1:5080 --replicas=1 --logtostderr -v=2 --bindall volumes: {} diff --git a/systest/ldbc/alpha.yml b/systest/ldbc/alpha.yml index 37acb1b0601..f240ae0f783 100644 --- a/systest/ldbc/alpha.yml +++ b/systest/ldbc/alpha.yml @@ -17,6 +17,7 @@ services: source: ./out/0/p target: /posting read_only: false - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 -p=/posting --logtostderr - -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 -p=/posting --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" diff --git a/systest/ldbc/docker-compose.yml b/systest/ldbc/docker-compose.yml index 1707a8e8473..f699a4b3f10 100644 --- a/systest/ldbc/docker-compose.yml +++ b/systest/ldbc/docker-compose.yml @@ -6,12 +6,13 @@ services: labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft="idx=1" --my=zero1:5080 --logtostderr - -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --raft="idx=1" --my=zero1:5080 --logtostderr -v=2 --bindall diff --git a/systest/license/docker-compose.yml b/systest/license/docker-compose.yml index 0386dd87f20..695b7aa4278 100644 --- a/systest/license/docker-compose.yml +++ b/systest/license/docker-compose.yml @@ -8,28 +8,31 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr - -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --raft="idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall volumes: {} diff --git a/systest/loader-benchmark/docker-compose.yml b/systest/loader-benchmark/docker-compose.yml index d60294298cd..127165f9810 100644 --- a/systest/loader-benchmark/docker-compose.yml +++ b/systest/loader-benchmark/docker-compose.yml @@ -16,7 +16,9 @@ services: source: $GOPATH/bin target: /gobin read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" -o 100 --my=zero1:5180 --logtostderr --bindall + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" -o 100 + --my=zero1:5180 --logtostderr --bindall dg1: image: dgraph/dgraph:local diff --git a/systest/loader/docker-compose.yml b/systest/loader/docker-compose.yml index b1bacfdd1df..a439634f8a3 100644 --- a/systest/loader/docker-compose.yml +++ b/systest/loader/docker-compose.yml @@ -8,37 +8,43 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../tlstest/mtls_internal/tls/alpha1 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../tlstest/mtls_internal/tls/alpha1 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../tlstest/mtls_internal/tls/zero1 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; client-key=/dgraph-tls/client.zero1.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../tlstest/mtls_internal/tls/zero1 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.zero1.crt; client-key=/dgraph-tls/client.zero1.key;" volumes: {} diff --git a/systest/multi-tenancy/docker-compose.yml b/systest/multi-tenancy/docker-compose.yml index eb4d425dbaf..6287a3544b0 100644 --- a/systest/multi-tenancy/docker-compose.yml +++ b/systest/multi-tenancy/docker-compose.yml @@ -14,7 +14,10 @@ services: source: $GOPATH/bin target: /gobin read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --my=zero1:5080 --raft="idx=1" --logtostderr -v=2 --bindall --expose_trace --profile_mode block --block_rate 10 --limit refill-interval=20s --limit uid-lease=50 + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --my=zero1:5080 --raft="idx=1" --logtostderr -v=2 --bindall --expose_trace --profile_mode + block --block_rate 10 --limit refill-interval=20s --limit uid-lease=50 alpha1: image: dgraph/dgraph:local working_dir: /data/alpha1 @@ -37,6 +40,9 @@ services: labels: cluster: test service: alpha - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --encryption "key-file=/dgraph-enc/enc-key;" --my=alpha1:7080 --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --acl "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --encryption "key-file=/dgraph-enc/enc-key;" --my=alpha1:7080 + --zero=zero1:5080,zero2:5080,zero3:5080 --expose_trace --profile_mode block --block_rate 10 + --logtostderr -v=2 --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --acl + "secret-file=/dgraph-acl/hmac-secret; access-ttl=20s;" diff --git a/systest/online-restore/docker-compose.yml b/systest/online-restore/docker-compose.yml index 1601a0e87c7..8c87362b51b 100644 --- a/systest/online-restore/docker-compose.yml +++ b/systest/online-restore/docker-compose.yml @@ -6,226 +6,248 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./keys - target: /data/keys - read_only: true - - type: bind - source: ./backup - target: /data/backup2 - read_only: true - - type: volume - source: backup - target: /data/backup - read_only: false - - type: bind - source: ../../tlstest/mtls_internal/tls/alpha1 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=1;" --encryption "key-file=/data/keys/enc_key;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./keys + target: /data/keys + read_only: true + - type: bind + source: ./backup + target: /data/backup2 + read_only: true + - type: volume + source: backup + target: /data/backup + read_only: false + - type: bind + source: ../../tlstest/mtls_internal/tls/alpha1 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=1;" --encryption + "key-file=/data/keys/enc_key;" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 depends_on: - - alpha1 + - alpha1 labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./backup - target: /data/backup2 - read_only: true - - type: bind - source: ./keys - target: /data/keys - read_only: true - - type: volume - source: backup - target: /data/backup - read_only: false - - type: bind - source: ../../tlstest/mtls_internal/tls/alpha2 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=2;" --encryption "key-file=/data/keys/enc_key;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha2.crt; client-key=/dgraph-tls/client.alpha2.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./backup + target: /data/backup2 + read_only: true + - type: bind + source: ./keys + target: /data/keys + read_only: true + - type: volume + source: backup + target: /data/backup + read_only: false + - type: bind + source: ../../tlstest/mtls_internal/tls/alpha2 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=2;" --encryption + "key-file=/data/keys/enc_key;" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha2.crt; client-key=/dgraph-tls/client.alpha2.key;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 depends_on: - - alpha2 + - alpha2 labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./keys - target: /data/keys - read_only: true - - type: bind - source: ./backup - target: /data/backup2 - read_only: true - - type: volume - source: backup - target: /data/backup - read_only: false - - type: bind - source: ../../tlstest/mtls_internal/tls/alpha3 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=3;" --encryption "key-file=/data/keys/enc_key;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha3.crt; client-key=/dgraph-tls/client.alpha3.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./keys + target: /data/keys + read_only: true + - type: bind + source: ./backup + target: /data/backup2 + read_only: true + - type: volume + source: backup + target: /data/backup + read_only: false + - type: bind + source: ../../tlstest/mtls_internal/tls/alpha3 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=3;" --encryption + "key-file=/data/keys/enc_key;" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha3.crt; client-key=/dgraph-tls/client.alpha3.key;" alpha4: image: dgraph/dgraph:local working_dir: /data/alpha4 depends_on: - - alpha3 + - alpha3 labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./keys - target: /data/keys - read_only: true - - type: bind - source: ./backup - target: /data/backup2 - read_only: true - - type: volume - source: backup - target: /data/backup - read_only: false - - type: bind - source: ../../tlstest/mtls_internal/tls/alpha4 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha4:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=4;" --encryption "key-file=/data/keys/enc_key;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha4.crt; client-key=/dgraph-tls/client.alpha4.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./keys + target: /data/keys + read_only: true + - type: bind + source: ./backup + target: /data/backup2 + read_only: true + - type: volume + source: backup + target: /data/backup + read_only: false + - type: bind + source: ../../tlstest/mtls_internal/tls/alpha4 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha4:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=4;" --encryption + "key-file=/data/keys/enc_key;" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha4.crt; client-key=/dgraph-tls/client.alpha4.key;" alpha5: image: dgraph/dgraph:local working_dir: /data/alpha5 depends_on: - - alpha4 + - alpha4 labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./keys - target: /data/keys - read_only: true - - type: bind - source: ./backup - target: /data/backup2 - read_only: true - - type: volume - source: backup - target: /data/backup - read_only: false - - type: bind - source: ../../tlstest/mtls_internal/tls/alpha5 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha5:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=5;" --encryption "key-file=/data/keys/enc_key;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha5.crt; client-key=/dgraph-tls/client.alpha5.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./keys + target: /data/keys + read_only: true + - type: bind + source: ./backup + target: /data/backup2 + read_only: true + - type: volume + source: backup + target: /data/backup + read_only: false + - type: bind + source: ../../tlstest/mtls_internal/tls/alpha5 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha5:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=5;" --encryption + "key-file=/data/keys/enc_key;" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha5.crt; client-key=/dgraph-tls/client.alpha5.key;" alpha6: image: dgraph/dgraph:local working_dir: /data/alpha6 depends_on: - - alpha5 + - alpha5 labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ./keys - target: /data/keys - read_only: true - - type: bind - source: ./backup - target: /data/backup2 - read_only: true - - type: volume - source: backup - target: /data/backup - read_only: false - - type: bind - source: ../../tlstest/mtls_internal/tls/alpha6 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha6:7080 --zero=zero1:5080 - --logtostderr -v=2 --raft "idx=6;" --encryption "key-file=/data/keys/enc_key;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha6.crt; client-key=/dgraph-tls/client.alpha6.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ./keys + target: /data/keys + read_only: true + - type: bind + source: ./backup + target: /data/backup2 + read_only: true + - type: volume + source: backup + target: /data/backup + read_only: false + - type: bind + source: ../../tlstest/mtls_internal/tls/alpha6 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha6:7080 --zero=zero1:5080 --logtostderr -v=2 --raft "idx=6;" --encryption + "key-file=/data/keys/enc_key;" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha6.crt; client-key=/dgraph-tls/client.alpha6.key;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../tlstest/mtls_internal/tls/zero1 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --replicas=3 --logtostderr -v=2 --bindall - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; client-key=/dgraph-tls/client.zero1.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../tlstest/mtls_internal/tls/zero1 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --replicas=3 --logtostderr -v=2 --bindall --tls + "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; + client-key=/dgraph-tls/client.zero1.key;" volumes: backup: {} diff --git a/systest/plugin/docker-compose.yml b/systest/plugin/docker-compose.yml index 38a9002a1f9..8630004be54 100644 --- a/systest/plugin/docker-compose.yml +++ b/systest/plugin/docker-compose.yml @@ -8,34 +8,36 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../testutil/custom_plugins - target: /plugins - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr - --custom_tokenizers=/plugins/0.so,/plugins/1.so,/plugins/2.so,/plugins/3.so - -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../testutil/custom_plugins + target: /plugins + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr + --custom_tokenizers=/plugins/0.so,/plugins/1.so,/plugins/2.so,/plugins/3.so -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 --logtostderr -v=2 - --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --raft="idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall volumes: {} diff --git a/test.sh b/test.sh index 71c17ee89fb..d006a2ea02f 100755 --- a/test.sh +++ b/test.sh @@ -44,16 +44,16 @@ function Usage { options: - -h --help output this help message - -u --unit run unit tests only - -c --cluster run unit tests and custom cluster test - -C --cluster-only run custom cluster tests only - -f --full run all tests (unit, custom cluster, and systest tests) - -F --systest-only run systest tests only - --oss run tests with 'oss' tagging - -v --verbose run tests in verbose mode - -n --no-cache re-run test even if previous result is in cache - --short run tests with -short=true + -h --help output this help message + -u --unit run unit tests only + -c --cluster run unit tests and custom cluster test + -C --cluster-only run custom cluster tests only + -f --full run all tests (unit, custom cluster, and systest tests) + -F --systest-only run systest tests only + --oss run tests with 'oss' tagging + -v --verbose run tests in verbose mode + -n --no-cache re-run test even if previous result is in cache + --short run tests with -short=true notes: diff --git a/testutil/testaudit/docker-compose.yml b/testutil/testaudit/docker-compose.yml index cb41f951d49..1e12b6d7313 100644 --- a/testutil/testaudit/docker-compose.yml +++ b/testutil/testaudit/docker-compose.yml @@ -18,9 +18,11 @@ services: source: ../../ee/enc/test-fixtures/enc-key target: /dgraph-enc/enc-key read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --raft="idx=1;group=1" --my=alpha1:7080 --zero=zero1:5080 - --logtostderr --audit "output=/audit_dir;encrypt-file=/dgraph-enc/enc-key" -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --raft="idx=1;group=1" --my=alpha1:7080 --zero=zero1:5080 --logtostderr --audit + "output=/audit_dir;encrypt-file=/dgraph-enc/enc-key" -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 @@ -41,6 +43,8 @@ services: source: ../../ee/enc/test-fixtures/enc-key target: /dgraph-enc/enc-key read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall - --audit "output=/audit_dir;encrypt-file=/dgraph-enc/enc-key" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --raft="idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall --audit + "output=/audit_dir;encrypt-file=/dgraph-enc/enc-key" volumes: {} diff --git a/tlstest/acl/docker-compose.yml b/tlstest/acl/docker-compose.yml index a0cff7a35f9..ce08be3214e 100644 --- a/tlstest/acl/docker-compose.yml +++ b/tlstest/acl/docker-compose.yml @@ -6,42 +6,49 @@ services: labels: cluster: test ports: - - 8080 - - 9080 + - 8080 + - 9080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../ee/acl/hmac-secret - target: /dgraph-acl/hmac-secret - read_only: true - - type: bind - source: ../mtls_internal/tls/alpha1 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 - --acl "secret-file=/dgraph-acl/hmac-secret;" - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key; client-auth-type=VERIFYIFGIVEN;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../ee/acl/hmac-secret + target: /dgraph-acl/hmac-secret + read_only: true + - type: bind + source: ../mtls_internal/tls/alpha1 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --acl + "secret-file=/dgraph-acl/hmac-secret;" --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key; + client-auth-type=VERIFYIFGIVEN;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - 5080 - - 6080 + - 5080 + - 6080 volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../mtls_internal/tls/zero1 - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; client-key=/dgraph-tls/client.zero1.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../mtls_internal/tls/zero1 + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.zero1.crt; client-key=/dgraph-tls/client.zero1.key;" volumes: {} diff --git a/tlstest/certrequest/docker-compose.yml b/tlstest/certrequest/docker-compose.yml index 6049b8920ee..d29d53679fe 100644 --- a/tlstest/certrequest/docker-compose.yml +++ b/tlstest/certrequest/docker-compose.yml @@ -8,32 +8,36 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../tls - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; client-auth-type=REQUEST; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../tls + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + client-auth-type=REQUEST; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall volumes: {} diff --git a/tlstest/certrequireandverify/docker-compose.yml b/tlstest/certrequireandverify/docker-compose.yml index 379382b300d..9f748105c30 100644 --- a/tlstest/certrequireandverify/docker-compose.yml +++ b/tlstest/certrequireandverify/docker-compose.yml @@ -8,32 +8,37 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../tls - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; client-auth-type=REQUIREANDVERIFY; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../tls + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + client-auth-type=REQUIREANDVERIFY; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall volumes: {} diff --git a/tlstest/certverifyifgiven/docker-compose.yml b/tlstest/certverifyifgiven/docker-compose.yml index 7a129eafbe7..7b1b6b9c17e 100644 --- a/tlstest/certverifyifgiven/docker-compose.yml +++ b/tlstest/certverifyifgiven/docker-compose.yml @@ -8,32 +8,37 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../tls - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; client-auth-type=VERIFYIFGIVEN; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../tls + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + client-auth-type=VERIFYIFGIVEN; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall volumes: {} diff --git a/tlstest/mtls_internal/ha_6_node/docker-compose.yml b/tlstest/mtls_internal/ha_6_node/docker-compose.yml index 910f1a13dfc..c5af70b410c 100644 --- a/tlstest/mtls_internal/ha_6_node/docker-compose.yml +++ b/tlstest/mtls_internal/ha_6_node/docker-compose.yml @@ -17,9 +17,12 @@ services: source: ../tls/alpha1 target: /dgraph-tls read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 @@ -37,9 +40,12 @@ services: source: ../tls/alpha2 target: /dgraph-tls read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha2.crt; client-key=/dgraph-tls/client.alpha2.key;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha2.crt; client-key=/dgraph-tls/client.alpha2.key;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 @@ -57,9 +63,12 @@ services: source: ../tls/alpha3 target: /dgraph-tls read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha3.crt; client-key=/dgraph-tls/client.alpha3.key;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha3.crt; client-key=/dgraph-tls/client.alpha3.key;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 @@ -77,8 +86,12 @@ services: source: ../tls/zero1 target: /dgraph-tls read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --replicas 3 --my=zero1:5080 --logtostderr -v=2 --bindall - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; client-key=/dgraph-tls/client.zero1.key;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --replicas 3 --my=zero1:5080 --logtostderr -v=2 --bindall --tls + "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; + client-key=/dgraph-tls/client.zero1.key;" zero2: image: dgraph/dgraph:local working_dir: /data/zero2 @@ -96,8 +109,12 @@ services: source: ../tls/zero2 target: /dgraph-tls read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=2;" --replicas 3 --my=zero2:5080 --logtostderr --peer zero1:5080 -v=2 --bindall - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero2.crt; client-key=/dgraph-tls/client.zero2.key;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=2;" --replicas 3 --my=zero2:5080 --logtostderr --peer zero1:5080 -v=2 --bindall --tls + "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero2.crt; + client-key=/dgraph-tls/client.zero2.key;" zero3: image: dgraph/dgraph:local working_dir: /data/zero3 @@ -115,6 +132,10 @@ services: source: ../tls/zero3 target: /dgraph-tls read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=3;" --replicas 3 --my=zero3:5080 --logtostderr --peer zero1:5080 -v=2 --bindall - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero3.crt; client-key=/dgraph-tls/client.zero3.key;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=3;" --replicas 3 --my=zero3:5080 --logtostderr --peer zero1:5080 -v=2 --bindall --tls + "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; + server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero3.crt; + client-key=/dgraph-tls/client.zero3.key;" volumes: {} diff --git a/tlstest/mtls_internal/multi_group/docker-compose.yml b/tlstest/mtls_internal/multi_group/docker-compose.yml index bff1ba96bac..04005c0e7f1 100644 --- a/tlstest/mtls_internal/multi_group/docker-compose.yml +++ b/tlstest/mtls_internal/multi_group/docker-compose.yml @@ -17,9 +17,12 @@ services: source: ../tls/alpha1 target: /dgraph-tls read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 @@ -37,9 +40,12 @@ services: source: ../tls/alpha2 target: /dgraph-tls read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha2.crt; client-key=/dgraph-tls/client.alpha2.key;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha2:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha2.crt; client-key=/dgraph-tls/client.alpha2.key;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 @@ -57,9 +63,12 @@ services: source: ../tls/alpha3 target: /dgraph-tls read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha3.crt; client-key=/dgraph-tls/client.alpha3.key;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha3:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha3.crt; client-key=/dgraph-tls/client.alpha3.key;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 @@ -77,6 +86,9 @@ services: source: ../tls/zero1 target: /dgraph-tls read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; client-key=/dgraph-tls/client.zero1.key;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.zero1.crt; client-key=/dgraph-tls/client.zero1.key;" volumes: {} diff --git a/tlstest/mtls_internal/single_node/docker-compose.yml b/tlstest/mtls_internal/single_node/docker-compose.yml index 8f3f694eded..db3c2ef1bac 100644 --- a/tlstest/mtls_internal/single_node/docker-compose.yml +++ b/tlstest/mtls_internal/single_node/docker-compose.yml @@ -17,9 +17,12 @@ services: source: ../tls/alpha1 target: /dgraph-tls read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.alpha1.crt; client-key=/dgraph-tls/client.alpha1.key;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 @@ -37,6 +40,9 @@ services: source: ../tls/zero1 target: /dgraph-tls read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; client-cert=/dgraph-tls/client.zero1.crt; client-key=/dgraph-tls/client.zero1.key;" + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key; internal-port=true; + client-cert=/dgraph-tls/client.zero1.crt; client-key=/dgraph-tls/client.zero1.key;" volumes: {} diff --git a/tlstest/zero_https/all_routes_tls/docker-compose.yml b/tlstest/zero_https/all_routes_tls/docker-compose.yml index fee993a930c..ea2df9f5599 100644 --- a/tlstest/zero_https/all_routes_tls/docker-compose.yml +++ b/tlstest/zero_https/all_routes_tls/docker-compose.yml @@ -8,32 +8,36 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - - type: bind - source: ../../tls - target: /dgraph-tls - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall - --tls "ca-cert=/dgraph-tls/ca.crt; server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + - type: bind + source: ../../tls + target: /dgraph-tls + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft + "idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall --tls "ca-cert=/dgraph-tls/ca.crt; + server-cert=/dgraph-tls/node.crt; server-key=/dgraph-tls/node.key;" volumes: {} diff --git a/tlstest/zero_https/no_tls/docker-compose.yml b/tlstest/zero_https/no_tls/docker-compose.yml index ce2c03d36f5..4836b253ba7 100644 --- a/tlstest/zero_https/no_tls/docker-compose.yml +++ b/tlstest/zero_https/no_tls/docker-compose.yml @@ -8,27 +8,31 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 - --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" + --my=alpha1:7080 --zero=zero1:5080 --logtostderr -v=2 --security + "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" zero1: image: dgraph/dgraph:local working_dir: /data/zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --raft="idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" + --raft="idx=1;" --my=zero1:5080 --logtostderr -v=2 --bindall volumes: {} diff --git a/worker/docker-compose.yml b/worker/docker-compose.yml index a4d314ab884..c53623159dc 100644 --- a/worker/docker-compose.yml +++ b/worker/docker-compose.yml @@ -8,105 +8,118 @@ services: labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --trace "jaeger=http://jaeger:14268;" --my=alpha1:7080 - --zero=zero1:5080,zero2:5080,zero3:5080 --logtostderr -v=2 --raft "idx=1; group=1; - snapshot-after-entries=100; snapshot-after-duration=1m" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --trace + "jaeger=http://jaeger:14268;" --my=alpha1:7080 --zero=zero1:5080,zero2:5080,zero3:5080 + --logtostderr -v=2 --raft "idx=1; group=1; snapshot-after-entries=100; + snapshot-after-duration=1m" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" alpha2: image: dgraph/dgraph:local working_dir: /data/alpha2 labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --trace "jaeger=http://jaeger:14268;" --my=alpha2:7080 - --zero=zero1:5080,zero2:5080,zero3:5080 --logtostderr -v=2 --raft "idx=2; group=1; - snapshot-after-entries=100; snapshot-after-duration=1m" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --trace + "jaeger=http://jaeger:14268;" --my=alpha2:7080 --zero=zero1:5080,zero2:5080,zero3:5080 + --logtostderr -v=2 --raft "idx=2; group=1; snapshot-after-entries=100; + snapshot-after-duration=1m" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" alpha3: image: dgraph/dgraph:local working_dir: /data/alpha3 labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --trace "jaeger=http://jaeger:14268;" --my=alpha3:7080 - --zero=zero1:5080,zero2:5080,zero3:5080 --logtostderr -v=2 --raft "idx=3; group=1; - snapshot-after-entries=100; snapshot-after-duration=1m" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --trace + "jaeger=http://jaeger:14268;" --my=alpha3:7080 --zero=zero1:5080,zero2:5080,zero3:5080 + --logtostderr -v=2 --raft "idx=3; group=1; snapshot-after-entries=100; + snapshot-after-duration=1m" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" alpha4: image: dgraph/dgraph:local working_dir: /data/alpha4 labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --trace "jaeger=http://jaeger:14268;" --my=alpha4:7080 - --zero=zero1:5080,zero2:5080,zero3:5080 --logtostderr -v=2 --raft "idx=4; group=2; - snapshot-after-entries=100; snapshot-after-duration=1m" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --trace + "jaeger=http://jaeger:14268;" --my=alpha4:7080 --zero=zero1:5080,zero2:5080,zero3:5080 + --logtostderr -v=2 --raft "idx=4; group=2; snapshot-after-entries=100; + snapshot-after-duration=1m" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" alpha5: image: dgraph/dgraph:local working_dir: /data/alpha5 labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --trace "jaeger=http://jaeger:14268;" --my=alpha5:7080 - --zero=zero1:5080,zero2:5080,zero3:5080 --logtostderr -v=2 --raft "idx=5; group=2; - snapshot-after-entries=100; snapshot-after-duration=1m" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --trace + "jaeger=http://jaeger:14268;" --my=alpha5:7080 --zero=zero1:5080,zero2:5080,zero3:5080 + --logtostderr -v=2 --raft "idx=5; group=2; snapshot-after-entries=100; + snapshot-after-duration=1m" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" alpha6: image: dgraph/dgraph:local working_dir: /data/alpha6 labels: cluster: test ports: - - "8080" - - "9080" + - "8080" + - "9080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --trace "jaeger=http://jaeger:14268;" --my=alpha6:7080 - --zero=zero1:5080,zero2:5080,zero3:5080 --logtostderr -v=2 --raft "idx=6; group=2; - snapshot-after-entries=100; snapshot-after-duration=1m" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} alpha --telemetry "reports=false; sentry=false;" --trace + "jaeger=http://jaeger:14268;" --my=alpha6:7080 --zero=zero1:5080,zero2:5080,zero3:5080 + --logtostderr -v=2 --raft "idx=6; group=2; snapshot-after-entries=100; + snapshot-after-duration=1m" --security "whitelist=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16;" jaeger: image: jaegertracing/all-in-one:1.18 working_dir: /working/jaeger environment: - - SPAN_STORAGE_TYPE=badger + - SPAN_STORAGE_TYPE=badger ports: - - "14268" - - "16686" - command: --badger.ephemeral=false --badger.directory-key /working/jaeger --badger.directory-value + - "14268" + - "16686" + command: + --badger.ephemeral=false --badger.directory-key /working/jaeger --badger.directory-value /working/jaeger zero1: image: dgraph/dgraph:local @@ -114,47 +127,53 @@ services: labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --trace "jaeger=http://jaeger:14268;" --raft='idx=1' - --my=zero1:5080 --replicas=3 --logtostderr -v=2 --bindall + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --trace + "jaeger=http://jaeger:14268;" --raft='idx=1' --my=zero1:5080 --replicas=3 --logtostderr -v=2 + --bindall zero2: image: dgraph/dgraph:local working_dir: /data/zero2 depends_on: - - zero1 + - zero1 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --trace "jaeger=http://jaeger:14268;" --raft='idx=2' - --my=zero2:5080 --replicas=3 --logtostderr -v=2 --peer=zero1:5080 + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --trace + "jaeger=http://jaeger:14268;" --raft='idx=2' --my=zero2:5080 --replicas=3 --logtostderr -v=2 + --peer=zero1:5080 zero3: image: dgraph/dgraph:local working_dir: /data/zero3 depends_on: - - zero2 + - zero2 labels: cluster: test ports: - - "5080" - - "6080" + - "5080" + - "6080" volumes: - - type: bind - source: $GOPATH/bin - target: /gobin - read_only: true - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --trace "jaeger=http://jaeger:14268;" --raft='idx=3' - --my=zero3:5080 --replicas=3 --logtostderr -v=2 --peer=zero1:5080 + - type: bind + source: $GOPATH/bin + target: /gobin + read_only: true + command: + /gobin/dgraph ${COVERAGE_OUTPUT} zero --telemetry "reports=false; sentry=false;" --trace + "jaeger=http://jaeger:14268;" --raft='idx=3' --my=zero3:5080 --replicas=3 --logtostderr -v=2 + --peer=zero1:5080 volumes: {} From 4177b0d4a7f39cb3aaabebf7451b9a517602bd29 Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:31:15 -0500 Subject: [PATCH 04/16] revert GraphQL schema testdata formatting From 2cb34bc05e4b8a81bec5dec2682a17652384018f Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:39:08 -0500 Subject: [PATCH 05/16] Update add_mutation_test.yaml --- graphql/resolve/add_mutation_test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql/resolve/add_mutation_test.yaml b/graphql/resolve/add_mutation_test.yaml index 1f91c6b4844..235da3d745e 100644 --- a/graphql/resolve/add_mutation_test.yaml +++ b/graphql/resolve/add_mutation_test.yaml @@ -629,7 +629,7 @@ dgraph.type } } - error2: { "message": failed to rewrite mutation payload because ID \"0x123\" isn't a Country } + error2: { "message": failed to rewrite mutation payload because ID "0x123" isn't a Country } - name: Add mutation with invalid reference gqlmutation: | From baec52fbee5f3d4274a3d2173e2343225c642727 Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:49:05 -0500 Subject: [PATCH 06/16] Update pb.pb.go From 3d3476be66505f611513d0896592fb05b287d18e Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:58:57 -0500 Subject: [PATCH 07/16] Update pb.pb.go --- protos/pb/pb.pb.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protos/pb/pb.pb.go b/protos/pb/pb.pb.go index 513d4084f0c..1e477252fdb 100644 --- a/protos/pb/pb.pb.go +++ b/protos/pb/pb.pb.go @@ -1,5 +1,5 @@ // -// Copyright (C) 2017 Hypermode Inc. and Contributors +// Copyright (C) 2025 Hypermode Inc. and Contributors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. From 31f85ecd882437391478dc3535d8047dc683cdf0 Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 15:04:05 -0500 Subject: [PATCH 08/16] Update pb.pb.go --- protos/pb/pb.pb.go | 43 ++++++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/protos/pb/pb.pb.go b/protos/pb/pb.pb.go index 1e477252fdb..3cc29dd7d8a 100644 --- a/protos/pb/pb.pb.go +++ b/protos/pb/pb.pb.go @@ -2572,29 +2572,26 @@ type RestoreRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - GroupId uint32 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - RestoreTs uint64 `protobuf:"varint,2,opt,name=restore_ts,json=restoreTs,proto3" json:"restore_ts,omitempty"` - Location string `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"` - BackupId string `protobuf:"bytes,4,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` - // Credentials when using a minio or S3 bucket as the backup location. - AccessKey string `protobuf:"bytes,5,opt,name=access_key,json=accessKey,proto3" json:"access_key,omitempty"` - SecretKey Sensitive `protobuf:"bytes,6,opt,name=secret_key,json=secretKey,proto3" json:"secret_key,omitempty"` - SessionToken Sensitive `protobuf:"bytes,7,opt,name=session_token,json=sessionToken,proto3" json:"session_token,omitempty"` - Anonymous bool `protobuf:"varint,8,opt,name=anonymous,proto3" json:"anonymous,omitempty"` - // Info needed to process encrypted backups. - EncryptionKeyFile string `protobuf:"bytes,9,opt,name=encryption_key_file,json=encryptionKeyFile,proto3" json:"encryption_key_file,omitempty"` - // Vault options - VaultAddr string `protobuf:"bytes,10,opt,name=vault_addr,json=vaultAddr,proto3" json:"vault_addr,omitempty"` - VaultRoleidFile string `protobuf:"bytes,11,opt,name=vault_roleid_file,json=vaultRoleidFile,proto3" json:"vault_roleid_file,omitempty"` - VaultSecretidFile string `protobuf:"bytes,12,opt,name=vault_secretid_file,json=vaultSecretidFile,proto3" json:"vault_secretid_file,omitempty"` - VaultPath string `protobuf:"bytes,13,opt,name=vault_path,json=vaultPath,proto3" json:"vault_path,omitempty"` - VaultField string `protobuf:"bytes,14,opt,name=vault_field,json=vaultField,proto3" json:"vault_field,omitempty"` - VaultFormat string `protobuf:"bytes,15,opt,name=vault_format,json=vaultFormat,proto3" json:"vault_format,omitempty"` - BackupNum uint64 `protobuf:"varint,16,opt,name=backup_num,json=backupNum,proto3" json:"backup_num,omitempty"` - IncrementalFrom uint64 `protobuf:"varint,17,opt,name=incremental_from,json=incrementalFrom,proto3" json:"incremental_from,omitempty"` - IsPartial bool `protobuf:"varint,18,opt,name=is_partial,json=isPartial,proto3" json:"is_partial,omitempty"` - FromNamespace uint64 `protobuf:"varint,19,opt,name=fromNamespace,proto3" json:"fromNamespace,omitempty"` - IsNamespaceAwareRestore bool `protobuf:"varint,20,opt,name=isNamespaceAwareRestore,proto3" json:"isNamespaceAwareRestore,omitempty"` + GroupId uint32 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + RestoreTs uint64 `protobuf:"varint,2,opt,name=restore_ts,json=restoreTs,proto3" json:"restore_ts,omitempty"` + Location string `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"` + BackupId string `protobuf:"bytes,4,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` + AccessKey string `protobuf:"bytes,5,opt,name=access_key,json=accessKey,proto3" json:"access_key,omitempty"` // Credentials when using a minio or S3 bucket as the backup location. + SecretKey Sensitive `protobuf:"bytes,6,opt,name=secret_key,json=secretKey,proto3" json:"secret_key,omitempty"` + SessionToken Sensitive `protobuf:"bytes,7,opt,name=session_token,json=sessionToken,proto3" json:"session_token,omitempty"` + Anonymous bool `protobuf:"varint,8,opt,name=anonymous,proto3" json:"anonymous,omitempty"` + EncryptionKeyFile string `protobuf:"bytes,9,opt,name=encryption_key_file,json=encryptionKeyFile,proto3" json:"encryption_key_file,omitempty"` // Info needed to process encrypted backups. + VaultAddr string `protobuf:"bytes,10,opt,name=vault_addr,json=vaultAddr,proto3" json:"vault_addr,omitempty"` // Vault options + VaultRoleidFile string `protobuf:"bytes,11,opt,name=vault_roleid_file,json=vaultRoleidFile,proto3" json:"vault_roleid_file,omitempty"` + VaultSecretidFile string `protobuf:"bytes,12,opt,name=vault_secretid_file,json=vaultSecretidFile,proto3" json:"vault_secretid_file,omitempty"` + VaultPath string `protobuf:"bytes,13,opt,name=vault_path,json=vaultPath,proto3" json:"vault_path,omitempty"` + VaultField string `protobuf:"bytes,14,opt,name=vault_field,json=vaultField,proto3" json:"vault_field,omitempty"` + VaultFormat string `protobuf:"bytes,15,opt,name=vault_format,json=vaultFormat,proto3" json:"vault_format,omitempty"` + BackupNum uint64 `protobuf:"varint,16,opt,name=backup_num,json=backupNum,proto3" json:"backup_num,omitempty"` + IncrementalFrom uint64 `protobuf:"varint,17,opt,name=incremental_from,json=incrementalFrom,proto3" json:"incremental_from,omitempty"` + IsPartial bool `protobuf:"varint,18,opt,name=is_partial,json=isPartial,proto3" json:"is_partial,omitempty"` + FromNamespace uint64 `protobuf:"varint,19,opt,name=fromNamespace,proto3" json:"fromNamespace,omitempty"` + IsNamespaceAwareRestore bool `protobuf:"varint,20,opt,name=isNamespaceAwareRestore,proto3" json:"isNamespaceAwareRestore,omitempty"` } func (x *RestoreRequest) Reset() { From 7f86636d3c777aa1f4573dcb7ec9acf536252b5f Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 15:24:46 -0500 Subject: [PATCH 09/16] ignore whitespace variation --- .github/workflows/ci-dgraph-core-tests.yml | 2 +- .github/workflows/ci-dgraph-systest-tests.yml | 2 +- .github/workflows/ci-dgraph-vector-tests.yml | 2 +- protos/pb/pb.pb.go | 43 ++++++++++--------- 4 files changed, 26 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci-dgraph-core-tests.yml b/.github/workflows/ci-dgraph-core-tests.yml index d74b51150ed..02f66f2231e 100644 --- a/.github/workflows/ci-dgraph-core-tests.yml +++ b/.github/workflows/ci-dgraph-core-tests.yml @@ -38,7 +38,7 @@ jobs: cd ./protos go mod tidy make regenerate - git diff --exit-code -- . + git diff -b --exit-code -- . - name: Make Linux Build and Docker Image run: make docker-image - name: Build Test Binary diff --git a/.github/workflows/ci-dgraph-systest-tests.yml b/.github/workflows/ci-dgraph-systest-tests.yml index a50d0e868e1..f4b8bc133bb 100644 --- a/.github/workflows/ci-dgraph-systest-tests.yml +++ b/.github/workflows/ci-dgraph-systest-tests.yml @@ -36,7 +36,7 @@ jobs: cd ./protos go mod tidy make regenerate - git diff --exit-code -- . + git diff -b --exit-code -- . - name: Make Linux Build and Docker Image run: make docker-image - name: Install gotestsum diff --git a/.github/workflows/ci-dgraph-vector-tests.yml b/.github/workflows/ci-dgraph-vector-tests.yml index 737421fee43..921026eb914 100644 --- a/.github/workflows/ci-dgraph-vector-tests.yml +++ b/.github/workflows/ci-dgraph-vector-tests.yml @@ -36,7 +36,7 @@ jobs: cd ./protos go mod tidy make regenerate - git diff --exit-code -- . + git diff -b --exit-code -- . - name: Make Linux Build and Docker Image run: make docker-image - name: Install gotestsum diff --git a/protos/pb/pb.pb.go b/protos/pb/pb.pb.go index 3cc29dd7d8a..89056cd2509 100644 --- a/protos/pb/pb.pb.go +++ b/protos/pb/pb.pb.go @@ -2572,26 +2572,29 @@ type RestoreRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - GroupId uint32 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - RestoreTs uint64 `protobuf:"varint,2,opt,name=restore_ts,json=restoreTs,proto3" json:"restore_ts,omitempty"` - Location string `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"` - BackupId string `protobuf:"bytes,4,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` - AccessKey string `protobuf:"bytes,5,opt,name=access_key,json=accessKey,proto3" json:"access_key,omitempty"` // Credentials when using a minio or S3 bucket as the backup location. - SecretKey Sensitive `protobuf:"bytes,6,opt,name=secret_key,json=secretKey,proto3" json:"secret_key,omitempty"` - SessionToken Sensitive `protobuf:"bytes,7,opt,name=session_token,json=sessionToken,proto3" json:"session_token,omitempty"` - Anonymous bool `protobuf:"varint,8,opt,name=anonymous,proto3" json:"anonymous,omitempty"` - EncryptionKeyFile string `protobuf:"bytes,9,opt,name=encryption_key_file,json=encryptionKeyFile,proto3" json:"encryption_key_file,omitempty"` // Info needed to process encrypted backups. - VaultAddr string `protobuf:"bytes,10,opt,name=vault_addr,json=vaultAddr,proto3" json:"vault_addr,omitempty"` // Vault options - VaultRoleidFile string `protobuf:"bytes,11,opt,name=vault_roleid_file,json=vaultRoleidFile,proto3" json:"vault_roleid_file,omitempty"` - VaultSecretidFile string `protobuf:"bytes,12,opt,name=vault_secretid_file,json=vaultSecretidFile,proto3" json:"vault_secretid_file,omitempty"` - VaultPath string `protobuf:"bytes,13,opt,name=vault_path,json=vaultPath,proto3" json:"vault_path,omitempty"` - VaultField string `protobuf:"bytes,14,opt,name=vault_field,json=vaultField,proto3" json:"vault_field,omitempty"` - VaultFormat string `protobuf:"bytes,15,opt,name=vault_format,json=vaultFormat,proto3" json:"vault_format,omitempty"` - BackupNum uint64 `protobuf:"varint,16,opt,name=backup_num,json=backupNum,proto3" json:"backup_num,omitempty"` - IncrementalFrom uint64 `protobuf:"varint,17,opt,name=incremental_from,json=incrementalFrom,proto3" json:"incremental_from,omitempty"` - IsPartial bool `protobuf:"varint,18,opt,name=is_partial,json=isPartial,proto3" json:"is_partial,omitempty"` - FromNamespace uint64 `protobuf:"varint,19,opt,name=fromNamespace,proto3" json:"fromNamespace,omitempty"` - IsNamespaceAwareRestore bool `protobuf:"varint,20,opt,name=isNamespaceAwareRestore,proto3" json:"isNamespaceAwareRestore,omitempty"` + GroupId uint32 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + RestoreTs uint64 `protobuf:"varint,2,opt,name=restore_ts,json=restoreTs,proto3" json:"restore_ts,omitempty"` + Location string `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"` + BackupId string `protobuf:"bytes,4,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` + AccessKey string `protobuf:"bytes,5,opt,name=access_key,json=accessKey,proto3" json:"access_key,omitempty"` + // Credentials when using a minio or S3 bucket as the backup location. + SecretKey Sensitive `protobuf:"bytes,6,opt,name=secret_key,json=secretKey,proto3" json:"secret_key,omitempty"` + SessionToken Sensitive `protobuf:"bytes,7,opt,name=session_token,json=sessionToken,proto3" json:"session_token,omitempty"` + Anonymous bool `protobuf:"varint,8,opt,name=anonymous,proto3" json:"anonymous,omitempty"` + EncryptionKeyFile string `protobuf:"bytes,9,opt,name=encryption_key_file,json=encryptionKeyFile,proto3" json:"encryption_key_file,omitempty"` + // Info needed to process encrypted backups. + VaultAddr string `protobuf:"bytes,10,opt,name=vault_addr,json=vaultAddr,proto3" json:"vault_addr,omitempty"` + // Vault options + VaultRoleidFile string `protobuf:"bytes,11,opt,name=vault_roleid_file,json=vaultRoleidFile,proto3" json:"vault_roleid_file,omitempty"` + VaultSecretidFile string `protobuf:"bytes,12,opt,name=vault_secretid_file,json=vaultSecretidFile,proto3" json:"vault_secretid_file,omitempty"` + VaultPath string `protobuf:"bytes,13,opt,name=vault_path,json=vaultPath,proto3" json:"vault_path,omitempty"` + VaultField string `protobuf:"bytes,14,opt,name=vault_field,json=vaultField,proto3" json:"vault_field,omitempty"` + VaultFormat string `protobuf:"bytes,15,opt,name=vault_format,json=vaultFormat,proto3" json:"vault_format,omitempty"` + BackupNum uint64 `protobuf:"varint,16,opt,name=backup_num,json=backupNum,proto3" json:"backup_num,omitempty"` + IncrementalFrom uint64 `protobuf:"varint,17,opt,name=incremental_from,json=incrementalFrom,proto3" json:"incremental_from,omitempty"` + IsPartial bool `protobuf:"varint,18,opt,name=is_partial,json=isPartial,proto3" json:"is_partial,omitempty"` + FromNamespace uint64 `protobuf:"varint,19,opt,name=fromNamespace,proto3" json:"fromNamespace,omitempty"` + IsNamespaceAwareRestore bool `protobuf:"varint,20,opt,name=isNamespaceAwareRestore,proto3" json:"isNamespaceAwareRestore,omitempty"` } func (x *RestoreRequest) Reset() { From 98ea300af237b3b12cbffd96bd0cb3081563d283 Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 15:27:30 -0500 Subject: [PATCH 10/16] Update pb.pb.go --- protos/pb/pb.pb.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/protos/pb/pb.pb.go b/protos/pb/pb.pb.go index 89056cd2509..1e477252fdb 100644 --- a/protos/pb/pb.pb.go +++ b/protos/pb/pb.pb.go @@ -2576,15 +2576,15 @@ type RestoreRequest struct { RestoreTs uint64 `protobuf:"varint,2,opt,name=restore_ts,json=restoreTs,proto3" json:"restore_ts,omitempty"` Location string `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"` BackupId string `protobuf:"bytes,4,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` - AccessKey string `protobuf:"bytes,5,opt,name=access_key,json=accessKey,proto3" json:"access_key,omitempty"` // Credentials when using a minio or S3 bucket as the backup location. - SecretKey Sensitive `protobuf:"bytes,6,opt,name=secret_key,json=secretKey,proto3" json:"secret_key,omitempty"` - SessionToken Sensitive `protobuf:"bytes,7,opt,name=session_token,json=sessionToken,proto3" json:"session_token,omitempty"` - Anonymous bool `protobuf:"varint,8,opt,name=anonymous,proto3" json:"anonymous,omitempty"` - EncryptionKeyFile string `protobuf:"bytes,9,opt,name=encryption_key_file,json=encryptionKeyFile,proto3" json:"encryption_key_file,omitempty"` + AccessKey string `protobuf:"bytes,5,opt,name=access_key,json=accessKey,proto3" json:"access_key,omitempty"` + SecretKey Sensitive `protobuf:"bytes,6,opt,name=secret_key,json=secretKey,proto3" json:"secret_key,omitempty"` + SessionToken Sensitive `protobuf:"bytes,7,opt,name=session_token,json=sessionToken,proto3" json:"session_token,omitempty"` + Anonymous bool `protobuf:"varint,8,opt,name=anonymous,proto3" json:"anonymous,omitempty"` // Info needed to process encrypted backups. - VaultAddr string `protobuf:"bytes,10,opt,name=vault_addr,json=vaultAddr,proto3" json:"vault_addr,omitempty"` + EncryptionKeyFile string `protobuf:"bytes,9,opt,name=encryption_key_file,json=encryptionKeyFile,proto3" json:"encryption_key_file,omitempty"` // Vault options + VaultAddr string `protobuf:"bytes,10,opt,name=vault_addr,json=vaultAddr,proto3" json:"vault_addr,omitempty"` VaultRoleidFile string `protobuf:"bytes,11,opt,name=vault_roleid_file,json=vaultRoleidFile,proto3" json:"vault_roleid_file,omitempty"` VaultSecretidFile string `protobuf:"bytes,12,opt,name=vault_secretid_file,json=vaultSecretidFile,proto3" json:"vault_secretid_file,omitempty"` VaultPath string `protobuf:"bytes,13,opt,name=vault_path,json=vaultPath,proto3" json:"vault_path,omitempty"` From 5084e98c9558ba6fde26a8c26454cafa7afd21d9 Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 15:35:53 -0500 Subject: [PATCH 11/16] exclude graphql from prettier --- .trunk/configs/.prettierignore | 2 + .../input/auth-directive.graphql | 146 ++-- .../input/custom-directive.graphql | 17 +- .../input/extended-types.graphql | 32 +- .../input/generate-directive.graphql | 47 +- .../input/single-extended-type.graphql | 4 +- .../output/auth-directive.graphql | 490 +++++------ .../output/custom-directive.graphql | 325 +++---- .../output/extended-types.graphql | 559 ++++++------ .../output/generate-directive.graphql | 493 ++++++----- .../output/single-extended-type.graphql | 325 +++---- .../schemagen/input/apollo-federation.graphql | 44 +- .../input/auth-on-interfaces.graphql | 53 +- .../schemagen/input/authorization.graphql | 145 ++-- .../input/comments-and-descriptions.graphql | 46 +- .../input/created-updated-directives.graphql | 16 +- ...custom-dql-query-with-subscription.graphql | 38 +- .../schemagen/input/custom-mutation.graphql | 15 +- .../input/custom-nested-types.graphql | 34 +- .../input/custom-query-mixed-types.graphql | 15 +- .../custom-query-not-dgraph-type.graphql | 20 +- .../custom-query-with-dgraph-type.graphql | 11 +- .../schemagen/input/deprecated.graphql | 6 +- ...e-on-concrete-type-with-interfaces.graphql | 16 +- ...-reverse-directive-with-interfaces.graphql | 16 +- ...ing-directive-with-similar-queries.graphql | 8 +- .../input/field-with-id-directive.graphql | 20 +- .../field-with-multiple-@id-fields.graphql | 18 +- ...erse-predicate-in-dgraph-directive.graphql | 14 +- .../filter-cleanSchema-all-empty.graphql | 8 +- .../input/filter-cleanSchema-circular.graphql | 20 +- ...filter-cleanSchema-custom-mutation.graphql | 15 +- .../filter-cleanSchema-directLink.graphql | 14 +- .../input/generate-directive.graphql | 47 +- .../testdata/schemagen/input/geo-type.graphql | 16 +- .../schemagen/input/hasfilter.graphql | 8 +- .../schemagen/input/password-type.graphql | 4 +- .../input/searchables-references.graphql | 16 +- .../schemagen/input/searchables.graphql | 58 +- .../input/single-type-with-enum.graphql | 2 +- .../schemagen/input/single-type.graphql | 10 +- ...ype-implements-multiple-interfaces.graphql | 12 +- .../type-with-arguments-on-field.graphql | 10 +- ...e-with-custom-field-on-dgraph-type.graphql | 23 +- ...-with-custom-fields-on-remote-type.graphql | 23 +- .../input/type-without-orderables.graphql | 10 +- .../testdata/schemagen/input/union.graphql | 39 +- .../output/apollo-federation.graphql | 767 ++++++++-------- .../output/auth-on-interfaces.graphql | 583 ++++++------- .../schemagen/output/authorization.graphql | 542 ++++++------ .../output/comments-and-descriptions.graphql | 477 +++++----- .../output/created-updated-directives.graphql | 503 +++++------ ...custom-dql-query-with-subscription.graphql | 483 +++++------ .../schemagen/output/custom-mutation.graphql | 342 ++++---- .../output/custom-nested-types.graphql | 294 ++++--- .../output/custom-query-mixed-types.graphql | 343 ++++---- .../custom-query-not-dgraph-type.graphql | 278 +++--- .../custom-query-with-dgraph-type.graphql | 339 ++++---- .../schemagen/output/deprecated.graphql | 345 ++++---- ...e-on-concrete-type-with-interfaces.graphql | 536 ++++++------ ...-reverse-directive-with-interfaces.graphql | 534 ++++++------ ...ing-directive-with-similar-queries.graphql | 603 +++++++------ .../output/field-with-id-directive.graphql | 529 ++++++----- .../field-with-multiple-@id-fields.graphql | 531 ++++++------ ...erse-predicate-in-dgraph-directive.graphql | 451 +++++----- .../filter-cleanSchema-all-empty.graphql | 367 ++++---- .../filter-cleanSchema-circular.graphql | 441 +++++----- ...filter-cleanSchema-custom-mutation.graphql | 342 ++++---- .../filter-cleanSchema-directLink.graphql | 407 +++++---- .../output/generate-directive.graphql | 535 ++++++------ .../schemagen/output/geo-type.graphql | 403 +++++---- ...se-with-interface-having-directive.graphql | 654 +++++++------- .../output/hasInverse-with-interface.graphql | 667 +++++++------- ...Inverse-with-type-having-directive.graphql | 654 +++++++------- .../schemagen/output/hasInverse.graphql | 385 ++++---- .../hasInverse_withSubscription.graphql | 390 +++++---- .../schemagen/output/hasfilter.graphql | 423 +++++---- .../ignore-unsupported-directive.graphql | 383 ++++---- .../output/interface-with-dgraph-pred.graphql | 527 ++++++----- .../interface-with-id-directive.graphql | 525 ++++++----- .../output/interface-with-no-ids.graphql | 459 +++++----- ...interfaces-with-types-and-password.graphql | 712 ++++++++------- .../output/interfaces-with-types.graphql | 692 ++++++++------- .../schemagen/output/lambda-directive.graphql | 359 ++++---- .../schemagen/output/language-tags.graphql | 575 ++++++------ .../no-id-field-with-searchables.graphql | 331 ++++--- .../schemagen/output/no-id-field.graphql | 493 ++++++----- .../schemagen/output/password-type.graphql | 357 ++++---- .../testdata/schemagen/output/random.graphql | 347 ++++---- .../output/searchables-references.graphql | 481 +++++----- .../schemagen/output/searchables.graphql | 763 ++++++++-------- .../output/single-type-with-enum.graphql | 369 ++++---- .../schemagen/output/single-type.graphql | 389 +++++---- ...ype-implements-multiple-interfaces.graphql | 542 ++++++------ .../schemagen/output/type-reference.graphql | 433 +++++---- .../type-with-arguments-on-field.graphql | 445 +++++----- ...e-with-custom-field-on-dgraph-type.graphql | 418 +++++---- ...-with-custom-fields-on-remote-type.graphql | 352 ++++---- .../output/type-without-orderables.graphql | 345 ++++---- .../testdata/schemagen/output/union.graphql | 820 +++++++++--------- 100 files changed, 14134 insertions(+), 14441 deletions(-) create mode 100644 .trunk/configs/.prettierignore diff --git a/.trunk/configs/.prettierignore b/.trunk/configs/.prettierignore new file mode 100644 index 00000000000..ca6af3c6845 --- /dev/null +++ b/.trunk/configs/.prettierignore @@ -0,0 +1,2 @@ +# Ignore all HTML files: +**/*.graphql \ No newline at end of file diff --git a/graphql/schema/testdata/apolloservice/input/auth-directive.graphql b/graphql/schema/testdata/apolloservice/input/auth-directive.graphql index 8933b8c641e..0684e15dc66 100644 --- a/graphql/schema/testdata/apolloservice/input/auth-directive.graphql +++ b/graphql/schema/testdata/apolloservice/input/auth-directive.graphql @@ -1,88 +1,66 @@ -type Todo - @secret(field: "pwd") - @auth( - password: { rule: "{$ROLE: { eq: \"Admin\" } }" } +type Todo @secret(field: "pwd") @auth( + password: { rule: "{$ROLE: { eq: \"Admin\" } }"}, query: { - or: [ - { - rule: """ - query($X_MyApp_User: String!) { - queryTodo { - owner (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - } - """ - } - { - rule: """ - query($X_MyApp_User: String!) { - queryTodo { - sharedWith (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - } - """ - } - { - rule: """ - query { - queryTodo(filter: { isPublic: true }) { - id - } - } - """ - } - ] - } - add: { - rule: """ - query($X_MyApp_User: String!) { - queryTodo { - owner (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - } - """ - } - update: { - rule: """ - query($X_MyApp_User: String!) { - queryTodo { - owner (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - } - """ - } - ) { - id: ID! - title: String - text: String - isPublic: Boolean @search - dateCompleted: String @search - sharedWith: [User] - owner: User @hasInverse(field: "todos") - somethingPrivate: String + or: [ + { rule: """ + query($X_MyApp_User: String!) { + queryTodo { + owner (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + }""" }, + { rule: """ + query($X_MyApp_User: String!) { + queryTodo { + sharedWith (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + }""" }, + { rule: """ + query { + queryTodo(filter: { isPublic: true }) { + id + } + }""" }, + ] + }, + add: { rule: """ + query($X_MyApp_User: String!) { + queryTodo { + owner (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + }""" }, + update: { rule: """ + query($X_MyApp_User: String!) { + queryTodo { + owner (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + }""" }, +) { + id: ID! + title: String + text: String + isPublic: Boolean @search + dateCompleted: String @search + sharedWith: [User] + owner: User @hasInverse(field: "todos") + somethingPrivate: String } -type User - @key(fields: "username") - @auth( - update: { - rule: """ - query($X_MyApp_User: String!) { - queryUser(filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - """ - } - ) { - username: String! @id - todos: [Todo] +type User @key(fields: "username") @auth( + update: { rule: """ + query($X_MyApp_User: String!) { + queryUser(filter: { username: { eq: $X_MyApp_User }}) { + username + } + }""" } +){ + username: String! @id + todos: [Todo] } diff --git a/graphql/schema/testdata/apolloservice/input/custom-directive.graphql b/graphql/schema/testdata/apolloservice/input/custom-directive.graphql index 4fd7539cdc1..98d045fd88e 100644 --- a/graphql/schema/testdata/apolloservice/input/custom-directive.graphql +++ b/graphql/schema/testdata/apolloservice/input/custom-directive.graphql @@ -1,13 +1,16 @@ type User @remote { - id: ID! - name: String! + id: ID! + name: String! } -type Car @key(fields: "id") { - id: ID! - name: String! +type Car @key(fields: "id"){ + id: ID! + name: String! } type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) -} + getMyFavoriteUsers(id: ID!): [User] @custom(http: { + url: "http://my-api.com", + method: "GET" + }) +} \ No newline at end of file diff --git a/graphql/schema/testdata/apolloservice/input/extended-types.graphql b/graphql/schema/testdata/apolloservice/input/extended-types.graphql index ac47a37029d..eb78c603171 100644 --- a/graphql/schema/testdata/apolloservice/input/extended-types.graphql +++ b/graphql/schema/testdata/apolloservice/input/extended-types.graphql @@ -1,22 +1,22 @@ type Mission @key(fields: "id") { - id: ID! - crew: [Astronaut] @provides(fields: "name age") - designation: String! - startDate: String - endDate: String + id: ID! + crew: [Astronaut] @provides(fields: "name age") + designation: String! + startDate: String + endDate: String } type Astronaut @key(fields: "id") @extends { - id: ID! @external - name: String @external - age: Int @external - missions: [Mission] + id: ID! @external + name: String @external + age: Int @external + missions: [Mission] } -extend type Product @key(fields: "upc") { - upc: String! @id @external - price: Int @external - weight: Int @external - inStock: Boolean - shippingEstimate: Float @requires(fields: "price weight") -} + extend type Product @key(fields: "upc") { + upc: String! @id @external + price: Int @external + weight: Int @external + inStock: Boolean + shippingEstimate: Float @requires(fields: "price weight") + } \ No newline at end of file diff --git a/graphql/schema/testdata/apolloservice/input/generate-directive.graphql b/graphql/schema/testdata/apolloservice/input/generate-directive.graphql index baa3a69aadc..d45f95ace3e 100644 --- a/graphql/schema/testdata/apolloservice/input/generate-directive.graphql +++ b/graphql/schema/testdata/apolloservice/input/generate-directive.graphql @@ -1,22 +1,37 @@ -interface Character - @secret(field: "password") - @generate(query: { get: false, password: false }, subscription: false) { - id: ID! - name: String! @search(by: [exact]) - friends: [Character] +interface Character @secret(field: "password") @generate( + query: { + get: false, + password: false + }, + subscription: false +) { + id: ID! + name: String! @search(by: [exact]) + friends: [Character] } -type Human implements Character @generate(query: { aggregate: true }, subscription: true) { - totalCredits: Int +type Human implements Character @generate( + query: { + aggregate: true + }, + subscription: true +) { + totalCredits: Int } -type Person - @withSubscription - @generate( - query: { get: false, query: true, password: true, aggregate: false } - mutation: { add: false, delete: false } +type Person @withSubscription @generate( + query: { + get: false, + query: true, + password: true, + aggregate: false + }, + mutation: { + add: false, + delete: false + }, subscription: false - ) { - id: ID! - name: String! +) { + id: ID! + name: String! } diff --git a/graphql/schema/testdata/apolloservice/input/single-extended-type.graphql b/graphql/schema/testdata/apolloservice/input/single-extended-type.graphql index 25d36656200..fc4475d6c72 100644 --- a/graphql/schema/testdata/apolloservice/input/single-extended-type.graphql +++ b/graphql/schema/testdata/apolloservice/input/single-extended-type.graphql @@ -1,4 +1,4 @@ extend type Product @key(fields: "id") { - id: String! @id @external - name: String! + id: String! @id @external + name: String! } diff --git a/graphql/schema/testdata/apolloservice/output/auth-directive.graphql b/graphql/schema/testdata/apolloservice/output/auth-directive.graphql index b4176863fde..c0691c4c405 100644 --- a/graphql/schema/testdata/apolloservice/output/auth-directive.graphql +++ b/graphql/schema/testdata/apolloservice/output/auth-directive.graphql @@ -3,22 +3,21 @@ ####################### type Todo @secret(field: "pwd") { - id: ID! - title: String - text: String - isPublic: Boolean @search - dateCompleted: String @search - sharedWith(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - owner(filter: UserFilter): User @hasInverse(field: "todos") - somethingPrivate: String - sharedWithAggregate(filter: UserFilter): UserAggregateResult + id: ID! + title: String + text: String + isPublic: Boolean @search + dateCompleted: String @search + sharedWith(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + owner(filter: UserFilter): User @hasInverse(field: "todos") + somethingPrivate: String + sharedWithAggregate(filter: UserFilter): UserAggregateResult } type User @key(fields: "username") { - username: String! @id - todos(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - @hasInverse(field: owner) - todosAggregate(filter: TodoFilter): TodoAggregateResult + username: String! @id + todos(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] @hasInverse(field: owner) + todosAggregate(filter: TodoFilter): TodoAggregateResult } ####################### @@ -37,162 +36,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -209,72 +208,72 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -282,53 +281,53 @@ input StringHashFilter { ####################### type AddTodoPayload { - todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - numUids: Int + todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + numUids: Int } type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteTodoPayload { - todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - msg: String - numUids: Int + todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + msg: String + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type TodoAggregateResult { - count: Int - titleMin: String - titleMax: String - textMin: String - textMax: String - dateCompletedMin: String - dateCompletedMax: String - somethingPrivateMin: String - somethingPrivateMax: String + count: Int + titleMin: String + titleMax: String + textMin: String + textMax: String + dateCompletedMin: String + dateCompletedMax: String + somethingPrivateMin: String + somethingPrivateMax: String } type UpdateTodoPayload { - todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - numUids: Int + todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - usernameMin: String - usernameMax: String + count: Int + usernameMin: String + usernameMax: String } ####################### @@ -336,29 +335,29 @@ type UserAggregateResult { ####################### enum TodoHasFilter { - title - text - isPublic - dateCompleted - sharedWith - owner - somethingPrivate + title + text + isPublic + dateCompleted + sharedWith + owner + somethingPrivate } enum TodoOrderable { - title - text - dateCompleted - somethingPrivate + title + text + dateCompleted + somethingPrivate } enum UserHasFilter { - username - todos + username + todos } enum UserOrderable { - username + username } ####################### @@ -366,94 +365,94 @@ enum UserOrderable { ####################### input AddTodoInput { - title: String - text: String - isPublic: Boolean - dateCompleted: String - sharedWith: [UserRef] - owner: UserRef - somethingPrivate: String - pwd: String! + title: String + text: String + isPublic: Boolean + dateCompleted: String + sharedWith: [UserRef] + owner: UserRef + somethingPrivate: String + pwd: String! } input AddUserInput { - username: String! - todos: [TodoRef] + username: String! + todos: [TodoRef] } input TodoFilter { - id: [ID!] - isPublic: Boolean - dateCompleted: StringTermFilter - has: [TodoHasFilter] - and: [TodoFilter] - or: [TodoFilter] - not: TodoFilter + id: [ID!] + isPublic: Boolean + dateCompleted: StringTermFilter + has: [TodoHasFilter] + and: [TodoFilter] + or: [TodoFilter] + not: TodoFilter } input TodoOrder { - asc: TodoOrderable - desc: TodoOrderable - then: TodoOrder + asc: TodoOrderable + desc: TodoOrderable + then: TodoOrder } input TodoPatch { - title: String - text: String - isPublic: Boolean - dateCompleted: String - sharedWith: [UserRef] - owner: UserRef - somethingPrivate: String - pwd: String + title: String + text: String + isPublic: Boolean + dateCompleted: String + sharedWith: [UserRef] + owner: UserRef + somethingPrivate: String + pwd: String } input TodoRef { - id: ID - title: String - text: String - isPublic: Boolean - dateCompleted: String - sharedWith: [UserRef] - owner: UserRef - somethingPrivate: String - pwd: String + id: ID + title: String + text: String + isPublic: Boolean + dateCompleted: String + sharedWith: [UserRef] + owner: UserRef + somethingPrivate: String + pwd: String } input UpdateTodoInput { - filter: TodoFilter! - set: TodoPatch - remove: TodoPatch + filter: TodoFilter! + set: TodoPatch + remove: TodoPatch } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - username: StringHashFilter - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + username: StringHashFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - username: String - todos: [TodoRef] + username: String + todos: [TodoRef] } input UserRef { - username: String - todos: [TodoRef] + username: String + todos: [TodoRef] } ####################### @@ -461,13 +460,13 @@ input UserRef { ####################### type Query { - getTodo(id: ID!): Todo - checkTodoPassword(id: ID!, pwd: String!): Todo - queryTodo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - aggregateTodo(filter: TodoFilter): TodoAggregateResult - getUser(username: String!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getTodo(id: ID!): Todo + checkTodoPassword(id: ID!, pwd: String!): Todo + queryTodo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + aggregateTodo(filter: TodoFilter): TodoAggregateResult + getUser(username: String!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -475,10 +474,11 @@ type Query { ####################### type Mutation { - addTodo(input: [AddTodoInput!]!): AddTodoPayload - updateTodo(input: UpdateTodoInput!): UpdateTodoPayload - deleteTodo(filter: TodoFilter!): DeleteTodoPayload - addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addTodo(input: [AddTodoInput!]!): AddTodoPayload + updateTodo(input: UpdateTodoInput!): UpdateTodoPayload + deleteTodo(filter: TodoFilter!): DeleteTodoPayload + addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } + diff --git a/graphql/schema/testdata/apolloservice/output/custom-directive.graphql b/graphql/schema/testdata/apolloservice/output/custom-directive.graphql index 40f8465f862..2b45898ccf6 100644 --- a/graphql/schema/testdata/apolloservice/output/custom-directive.graphql +++ b/graphql/schema/testdata/apolloservice/output/custom-directive.graphql @@ -3,13 +3,13 @@ ####################### type User @remote { - id: ID! - name: String! + id: ID! + name: String! } type Car @key(fields: "id") { - id: ID! - name: String! + id: ID! + name: String! } ####################### @@ -28,162 +28,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -200,72 +200,72 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -273,25 +273,25 @@ input StringHashFilter { ####################### type AddCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + numUids: Int } type CarAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - msg: String - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + msg: String + numUids: Int } type UpdateCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + numUids: Int } ####################### @@ -299,11 +299,11 @@ type UpdateCarPayload { ####################### enum CarHasFilter { - name + name } enum CarOrderable { - name + name } ####################### @@ -311,36 +311,36 @@ enum CarOrderable { ####################### input AddCarInput { - name: String! + name: String! } input CarFilter { - id: [ID!] - has: [CarHasFilter] - and: [CarFilter] - or: [CarFilter] - not: CarFilter + id: [ID!] + has: [CarHasFilter] + and: [CarFilter] + or: [CarFilter] + not: CarFilter } input CarOrder { - asc: CarOrderable - desc: CarOrderable - then: CarOrder + asc: CarOrderable + desc: CarOrderable + then: CarOrder } input CarPatch { - name: String + name: String } input CarRef { - id: ID - name: String + id: ID + name: String } input UpdateCarInput { - filter: CarFilter! - set: CarPatch - remove: CarPatch + filter: CarFilter! + set: CarPatch + remove: CarPatch } ####################### @@ -348,10 +348,10 @@ input UpdateCarInput { ####################### type Query { - getMyFavoriteUsers(id: ID!): [User] - getCar(id: ID!): Car - queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - aggregateCar(filter: CarFilter): CarAggregateResult + getMyFavoriteUsers(id: ID!): [User] + getCar(id: ID!): Car + queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + aggregateCar(filter: CarFilter): CarAggregateResult } ####################### @@ -359,7 +359,8 @@ type Query { ####################### type Mutation { - addCar(input: [AddCarInput!]!): AddCarPayload - updateCar(input: UpdateCarInput!): UpdateCarPayload - deleteCar(filter: CarFilter!): DeleteCarPayload + addCar(input: [AddCarInput!]!): AddCarPayload + updateCar(input: UpdateCarInput!): UpdateCarPayload + deleteCar(filter: CarFilter!): DeleteCarPayload } + diff --git a/graphql/schema/testdata/apolloservice/output/extended-types.graphql b/graphql/schema/testdata/apolloservice/output/extended-types.graphql index e42a2323f20..6c841cb5359 100644 --- a/graphql/schema/testdata/apolloservice/output/extended-types.graphql +++ b/graphql/schema/testdata/apolloservice/output/extended-types.graphql @@ -3,27 +3,27 @@ ####################### type Mission @key(fields: "id") { - id: ID! - crew: [Astronaut] @provides(fields: "name age") - designation: String! - startDate: String - endDate: String + id: ID! + crew: [Astronaut] @provides(fields: "name age") + designation: String! + startDate: String + endDate: String } type Astronaut @key(fields: "id") @extends { - id: ID! @external - name: String @external - age: Int @external - missions(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] - missionsAggregate(filter: MissionFilter): MissionAggregateResult + id: ID! @external + name: String @external + age: Int @external + missions(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] + missionsAggregate(filter: MissionFilter): MissionAggregateResult } type Product @key(fields: "upc") @extends { - upc: String! @id @external - price: Int @external - weight: Int @external - inStock: Boolean - shippingEstimate: Float @requires(fields: "price weight") + upc: String! @id @external + price: Int @external + weight: Int @external + inStock: Boolean + shippingEstimate: Float @requires(fields: "price weight") } ####################### @@ -42,162 +42,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -214,72 +214,72 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -287,83 +287,83 @@ input StringHashFilter { ####################### type AddAstronautPayload { - astronaut(filter: AstronautFilter, order: AstronautOrder, first: Int, offset: Int): [Astronaut] - numUids: Int + astronaut(filter: AstronautFilter, order: AstronautOrder, first: Int, offset: Int): [Astronaut] + numUids: Int } type AddMissionPayload { - mission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] - numUids: Int + mission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] + numUids: Int } type AddProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } type AstronautAggregateResult { - count: Int - idMin: ID - idMax: ID - nameMin: String - nameMax: String - ageMin: Int - ageMax: Int - ageSum: Int - ageAvg: Float + count: Int + idMin: ID + idMax: ID + nameMin: String + nameMax: String + ageMin: Int + ageMax: Int + ageSum: Int + ageAvg: Float } type DeleteAstronautPayload { - astronaut(filter: AstronautFilter, order: AstronautOrder, first: Int, offset: Int): [Astronaut] - msg: String - numUids: Int + astronaut(filter: AstronautFilter, order: AstronautOrder, first: Int, offset: Int): [Astronaut] + msg: String + numUids: Int } type DeleteMissionPayload { - mission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] - msg: String - numUids: Int + mission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] + msg: String + numUids: Int } type DeleteProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - msg: String - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + msg: String + numUids: Int } type MissionAggregateResult { - count: Int - designationMin: String - designationMax: String - startDateMin: String - startDateMax: String - endDateMin: String - endDateMax: String + count: Int + designationMin: String + designationMax: String + startDateMin: String + startDateMax: String + endDateMin: String + endDateMax: String } type ProductAggregateResult { - count: Int - upcMin: String - upcMax: String - shippingEstimateMin: Float - shippingEstimateMax: Float - shippingEstimateSum: Float - shippingEstimateAvg: Float + count: Int + upcMin: String + upcMax: String + shippingEstimateMin: Float + shippingEstimateMax: Float + shippingEstimateSum: Float + shippingEstimateAvg: Float } type UpdateAstronautPayload { - astronaut(filter: AstronautFilter, order: AstronautOrder, first: Int, offset: Int): [Astronaut] - numUids: Int + astronaut(filter: AstronautFilter, order: AstronautOrder, first: Int, offset: Int): [Astronaut] + numUids: Int } type UpdateMissionPayload { - mission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] - numUids: Int + mission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] + numUids: Int } type UpdateProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } ####################### @@ -371,39 +371,39 @@ type UpdateProductPayload { ####################### enum AstronautHasFilter { - name - age - missions + name + age + missions } enum AstronautOrderable { - id - name - age + id + name + age } enum MissionHasFilter { - crew - designation - startDate - endDate + crew + designation + startDate + endDate } enum MissionOrderable { - designation - startDate - endDate + designation + startDate + endDate } enum ProductHasFilter { - upc - inStock - shippingEstimate + upc + inStock + shippingEstimate } enum ProductOrderable { - upc - shippingEstimate + upc + shippingEstimate } ####################### @@ -411,123 +411,123 @@ enum ProductOrderable { ####################### input AddAstronautInput { - id: ID! - name: String - age: Int - missions: [MissionRef] + id: ID! + name: String + age: Int + missions: [MissionRef] } input AddMissionInput { - crew: [AstronautRef] - designation: String! - startDate: String - endDate: String + crew: [AstronautRef] + designation: String! + startDate: String + endDate: String } input AddProductInput { - upc: String! - inStock: Boolean - shippingEstimate: Float + upc: String! + inStock: Boolean + shippingEstimate: Float } input AstronautFilter { - id: [ID!] - has: [AstronautHasFilter] - and: [AstronautFilter] - or: [AstronautFilter] - not: AstronautFilter + id: [ID!] + has: [AstronautHasFilter] + and: [AstronautFilter] + or: [AstronautFilter] + not: AstronautFilter } input AstronautOrder { - asc: AstronautOrderable - desc: AstronautOrderable - then: AstronautOrder + asc: AstronautOrderable + desc: AstronautOrderable + then: AstronautOrder } input AstronautPatch { - name: String - age: Int - missions: [MissionRef] + name: String + age: Int + missions: [MissionRef] } input AstronautRef { - id: ID - name: String - age: Int - missions: [MissionRef] + id: ID + name: String + age: Int + missions: [MissionRef] } input MissionFilter { - id: [ID!] - has: [MissionHasFilter] - and: [MissionFilter] - or: [MissionFilter] - not: MissionFilter + id: [ID!] + has: [MissionHasFilter] + and: [MissionFilter] + or: [MissionFilter] + not: MissionFilter } input MissionOrder { - asc: MissionOrderable - desc: MissionOrderable - then: MissionOrder + asc: MissionOrderable + desc: MissionOrderable + then: MissionOrder } input MissionPatch { - crew: [AstronautRef] - designation: String - startDate: String - endDate: String + crew: [AstronautRef] + designation: String + startDate: String + endDate: String } input MissionRef { - id: ID - crew: [AstronautRef] - designation: String - startDate: String - endDate: String + id: ID + crew: [AstronautRef] + designation: String + startDate: String + endDate: String } input ProductFilter { - upc: StringHashFilter - has: [ProductHasFilter] - and: [ProductFilter] - or: [ProductFilter] - not: ProductFilter + upc: StringHashFilter + has: [ProductHasFilter] + and: [ProductFilter] + or: [ProductFilter] + not: ProductFilter } input ProductOrder { - asc: ProductOrderable - desc: ProductOrderable - then: ProductOrder + asc: ProductOrderable + desc: ProductOrderable + then: ProductOrder } input ProductPatch { - upc: String - inStock: Boolean - shippingEstimate: Float + upc: String + inStock: Boolean + shippingEstimate: Float } input ProductRef { - upc: String - inStock: Boolean - shippingEstimate: Float + upc: String + inStock: Boolean + shippingEstimate: Float } input UpdateAstronautInput { - filter: AstronautFilter! - set: AstronautPatch - remove: AstronautPatch + filter: AstronautFilter! + set: AstronautPatch + remove: AstronautPatch } input UpdateMissionInput { - filter: MissionFilter! - set: MissionPatch - remove: MissionPatch + filter: MissionFilter! + set: MissionPatch + remove: MissionPatch } input UpdateProductInput { - filter: ProductFilter! - set: ProductPatch - remove: ProductPatch + filter: ProductFilter! + set: ProductPatch + remove: ProductPatch } ####################### @@ -535,9 +535,9 @@ input UpdateProductInput { ####################### type Query { - getMission(id: ID!): Mission - queryMission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] - aggregateMission(filter: MissionFilter): MissionAggregateResult + getMission(id: ID!): Mission + queryMission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] + aggregateMission(filter: MissionFilter): MissionAggregateResult } ####################### @@ -545,13 +545,14 @@ type Query { ####################### type Mutation { - addMission(input: [AddMissionInput!]!): AddMissionPayload - updateMission(input: UpdateMissionInput!): UpdateMissionPayload - deleteMission(filter: MissionFilter!): DeleteMissionPayload - addAstronaut(input: [AddAstronautInput!]!): AddAstronautPayload - updateAstronaut(input: UpdateAstronautInput!): UpdateAstronautPayload - deleteAstronaut(filter: AstronautFilter!): DeleteAstronautPayload - addProduct(input: [AddProductInput!]!, upsert: Boolean): AddProductPayload - updateProduct(input: UpdateProductInput!): UpdateProductPayload - deleteProduct(filter: ProductFilter!): DeleteProductPayload + addMission(input: [AddMissionInput!]!): AddMissionPayload + updateMission(input: UpdateMissionInput!): UpdateMissionPayload + deleteMission(filter: MissionFilter!): DeleteMissionPayload + addAstronaut(input: [AddAstronautInput!]!): AddAstronautPayload + updateAstronaut(input: UpdateAstronautInput!): UpdateAstronautPayload + deleteAstronaut(filter: AstronautFilter!): DeleteAstronautPayload + addProduct(input: [AddProductInput!]!, upsert: Boolean): AddProductPayload + updateProduct(input: UpdateProductInput!): UpdateProductPayload + deleteProduct(filter: ProductFilter!): DeleteProductPayload } + diff --git a/graphql/schema/testdata/apolloservice/output/generate-directive.graphql b/graphql/schema/testdata/apolloservice/output/generate-directive.graphql index 105fd500c73..fa52c6cff2d 100644 --- a/graphql/schema/testdata/apolloservice/output/generate-directive.graphql +++ b/graphql/schema/testdata/apolloservice/output/generate-directive.graphql @@ -3,23 +3,23 @@ ####################### interface Character @secret(field: "password") { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } type Human @secret(field: "password") { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - totalCredits: Int - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + totalCredits: Int + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } type Person @withSubscription { - id: ID! - name: String! + id: ID! + name: String! } ####################### @@ -38,162 +38,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -210,72 +210,72 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -283,57 +283,57 @@ input StringHashFilter { ####################### type AddHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type CharacterAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - msg: String - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + msg: String + numUids: Int } type DeleteHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - msg: String - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + msg: String + numUids: Int } type HumanAggregateResult { - count: Int - nameMin: String - nameMax: String - totalCreditsMin: Int - totalCreditsMax: Int - totalCreditsSum: Int - totalCreditsAvg: Float + count: Int + nameMin: String + nameMax: String + totalCreditsMin: Int + totalCreditsMax: Int + totalCreditsSum: Int + totalCreditsAvg: Float } type PersonAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type UpdateCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + numUids: Int } type UpdateHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type UpdatePersonPayload { - person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - numUids: Int + person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + numUids: Int } ####################### @@ -341,31 +341,31 @@ type UpdatePersonPayload { ####################### enum CharacterHasFilter { - name - friends + name + friends } enum CharacterOrderable { - name + name } enum HumanHasFilter { - name - friends - totalCredits + name + friends + totalCredits } enum HumanOrderable { - name - totalCredits + name + totalCredits } enum PersonHasFilter { - name + name } enum PersonOrderable { - name + name } ####################### @@ -373,106 +373,106 @@ enum PersonOrderable { ####################### input AddHumanInput { - name: String! - friends: [CharacterRef] - totalCredits: Int - password: String! + name: String! + friends: [CharacterRef] + totalCredits: Int + password: String! } input CharacterFilter { - id: [ID!] - name: StringExactFilter - has: [CharacterHasFilter] - and: [CharacterFilter] - or: [CharacterFilter] - not: CharacterFilter + id: [ID!] + name: StringExactFilter + has: [CharacterHasFilter] + and: [CharacterFilter] + or: [CharacterFilter] + not: CharacterFilter } input CharacterOrder { - asc: CharacterOrderable - desc: CharacterOrderable - then: CharacterOrder + asc: CharacterOrderable + desc: CharacterOrderable + then: CharacterOrder } input CharacterPatch { - name: String - friends: [CharacterRef] - password: String + name: String + friends: [CharacterRef] + password: String } input CharacterRef { - id: ID! + id: ID! } input HumanFilter { - id: [ID!] - name: StringExactFilter - has: [HumanHasFilter] - and: [HumanFilter] - or: [HumanFilter] - not: HumanFilter + id: [ID!] + name: StringExactFilter + has: [HumanHasFilter] + and: [HumanFilter] + or: [HumanFilter] + not: HumanFilter } input HumanOrder { - asc: HumanOrderable - desc: HumanOrderable - then: HumanOrder + asc: HumanOrderable + desc: HumanOrderable + then: HumanOrder } input HumanPatch { - name: String - friends: [CharacterRef] - totalCredits: Int - password: String + name: String + friends: [CharacterRef] + totalCredits: Int + password: String } input HumanRef { - id: ID - name: String - friends: [CharacterRef] - totalCredits: Int - password: String + id: ID + name: String + friends: [CharacterRef] + totalCredits: Int + password: String } input PersonFilter { - id: [ID!] - has: [PersonHasFilter] - and: [PersonFilter] - or: [PersonFilter] - not: PersonFilter + id: [ID!] + has: [PersonHasFilter] + and: [PersonFilter] + or: [PersonFilter] + not: PersonFilter } input PersonOrder { - asc: PersonOrderable - desc: PersonOrderable - then: PersonOrder + asc: PersonOrderable + desc: PersonOrderable + then: PersonOrder } input PersonPatch { - name: String + name: String } input PersonRef { - id: ID - name: String + id: ID + name: String } input UpdateCharacterInput { - filter: CharacterFilter! - set: CharacterPatch - remove: CharacterPatch + filter: CharacterFilter! + set: CharacterPatch + remove: CharacterPatch } input UpdateHumanInput { - filter: HumanFilter! - set: HumanPatch - remove: HumanPatch + filter: HumanFilter! + set: HumanPatch + remove: HumanPatch } input UpdatePersonInput { - filter: PersonFilter! - set: PersonPatch - remove: PersonPatch + filter: PersonFilter! + set: PersonPatch + remove: PersonPatch } ####################### @@ -480,18 +480,13 @@ input UpdatePersonInput { ####################### type Query { - queryCharacter( - filter: CharacterFilter - order: CharacterOrder - first: Int - offset: Int - ): [Character] - aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult - getHuman(id: ID!): Human - checkHumanPassword(id: ID!, password: String!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult - queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + queryCharacter(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult + getHuman(id: ID!): Human + checkHumanPassword(id: ID!, password: String!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult + queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] } ####################### @@ -499,12 +494,12 @@ type Query { ####################### type Mutation { - updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload - deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload - addHuman(input: [AddHumanInput!]!): AddHumanPayload - updateHuman(input: UpdateHumanInput!): UpdateHumanPayload - deleteHuman(filter: HumanFilter!): DeleteHumanPayload - updatePerson(input: UpdatePersonInput!): UpdatePersonPayload + updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload + deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload + addHuman(input: [AddHumanInput!]!): AddHumanPayload + updateHuman(input: UpdateHumanInput!): UpdateHumanPayload + deleteHuman(filter: HumanFilter!): DeleteHumanPayload + updatePerson(input: UpdatePersonInput!): UpdatePersonPayload } ####################### @@ -512,8 +507,8 @@ type Mutation { ####################### type Subscription { - getHuman(id: ID!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult - queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + getHuman(id: ID!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult + queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] } diff --git a/graphql/schema/testdata/apolloservice/output/single-extended-type.graphql b/graphql/schema/testdata/apolloservice/output/single-extended-type.graphql index 4d2ba0e5251..26449632304 100644 --- a/graphql/schema/testdata/apolloservice/output/single-extended-type.graphql +++ b/graphql/schema/testdata/apolloservice/output/single-extended-type.graphql @@ -3,8 +3,8 @@ ####################### type Product @key(fields: "id") @extends { - id: String! @id @external - name: String! + id: String! @id @external + name: String! } ####################### @@ -23,162 +23,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -195,72 +195,72 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -268,27 +268,27 @@ input StringHashFilter { ####################### type AddProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } type DeleteProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - msg: String - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + msg: String + numUids: Int } type ProductAggregateResult { - count: Int - idMin: String - idMax: String - nameMin: String - nameMax: String + count: Int + idMin: String + idMax: String + nameMin: String + nameMax: String } type UpdateProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } ####################### @@ -296,13 +296,13 @@ type UpdateProductPayload { ####################### enum ProductHasFilter { - id - name + id + name } enum ProductOrderable { - id - name + id + name } ####################### @@ -310,38 +310,38 @@ enum ProductOrderable { ####################### input AddProductInput { - id: String! - name: String! + id: String! + name: String! } input ProductFilter { - id: StringHashFilter - has: [ProductHasFilter] - and: [ProductFilter] - or: [ProductFilter] - not: ProductFilter + id: StringHashFilter + has: [ProductHasFilter] + and: [ProductFilter] + or: [ProductFilter] + not: ProductFilter } input ProductOrder { - asc: ProductOrderable - desc: ProductOrderable - then: ProductOrder + asc: ProductOrderable + desc: ProductOrderable + then: ProductOrder } input ProductPatch { - id: String - name: String + id: String + name: String } input ProductRef { - id: String - name: String + id: String + name: String } input UpdateProductInput { - filter: ProductFilter! - set: ProductPatch - remove: ProductPatch + filter: ProductFilter! + set: ProductPatch + remove: ProductPatch } ####################### @@ -349,7 +349,8 @@ input UpdateProductInput { ####################### type Mutation { - addProduct(input: [AddProductInput!]!, upsert: Boolean): AddProductPayload - updateProduct(input: UpdateProductInput!): UpdateProductPayload - deleteProduct(filter: ProductFilter!): DeleteProductPayload + addProduct(input: [AddProductInput!]!, upsert: Boolean): AddProductPayload + updateProduct(input: UpdateProductInput!): UpdateProductPayload + deleteProduct(filter: ProductFilter!): DeleteProductPayload } + diff --git a/graphql/schema/testdata/schemagen/input/apollo-federation.graphql b/graphql/schema/testdata/schemagen/input/apollo-federation.graphql index 0ff5a079196..dfa0f683cb5 100644 --- a/graphql/schema/testdata/schemagen/input/apollo-federation.graphql +++ b/graphql/schema/testdata/schemagen/input/apollo-federation.graphql @@ -1,36 +1,36 @@ extend type Product @key(fields: "id") { - id: ID! @external - name: String! @external - price: Int @external - weight: Int @external - reviews: [Reviews] @requires(fields: "price weight") + id: ID! @external + name: String! @external + price: Int @external + weight: Int @external + reviews: [Reviews] @requires(fields: "price weight") } type Reviews @key(fields: "id") { - id: ID! - review: String! - user: User @provides(fields: "age") + id: ID! + review: String! + user: User @provides(fields: "age") } -type Student @key(fields: "id") { - id: ID! - name: String! - age: Int! +type Student @key(fields: "id"){ + id: ID! + name: String! + age: Int! } -type School @key(fields: "id") { - id: ID! - students: [Student] @provides(fields: "name") +type School @key(fields: "id"){ + id: ID! + students: [Student] @provides(fields: "name") } extend type User @key(fields: "name") { - id: ID! @external - name: String! @id @external - age: Int! @external - reviews: [Reviews] + id: ID! @external + name: String! @id @external + age: Int! @external + reviews: [Reviews] } type Country { - code: String! @id - name: String! -} + code: String! @id + name: String! +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/auth-on-interfaces.graphql b/graphql/schema/testdata/schemagen/input/auth-on-interfaces.graphql index 0a8b000a83b..6a8812cc6fe 100644 --- a/graphql/schema/testdata/schemagen/input/auth-on-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/input/auth-on-interfaces.graphql @@ -4,37 +4,28 @@ type Author { posts: [Post] @hasInverse(field: author) } -interface Post - @secret(field: "pwd") - @auth( - password: { rule: "{$ROLE: { eq: \"Admin\" } }" } - query: { - rule: """ - query($TEXT: String!) { - queryPost(filter: { text : {eq: $TEXT } } ) { - id - } - } - """ - } - ) { - id: ID! - text: String @search(by: [exact]) - datePublished: DateTime @search - author: Author! +interface Post @secret(field: "pwd") @auth( + password: { rule: "{$ROLE: { eq: \"Admin\" } }"}, + query: { rule: """ + query($TEXT: String!) { + queryPost(filter: { text : {eq: $TEXT } } ) { + id + } + }""" } +){ + id: ID! + text: String @search(by: [exact]) + datePublished: DateTime @search + author: Author! } -type Question implements Post - @auth( - query: { - rule: """ - query($ANS: Boolean!) { - queryQuestion(filter: { answered: $ANS } ) { - id - } - } - """ - } - ) { - answered: Boolean @search +type Question implements Post @auth( + query: { rule: """ + query($ANS: Boolean!) { + queryQuestion(filter: { answered: $ANS } ) { + id + } + }""" } +){ + answered: Boolean @search } diff --git a/graphql/schema/testdata/schemagen/input/authorization.graphql b/graphql/schema/testdata/schemagen/input/authorization.graphql index d303a7f39ec..3737fded560 100644 --- a/graphql/schema/testdata/schemagen/input/authorization.graphql +++ b/graphql/schema/testdata/schemagen/input/authorization.graphql @@ -1,87 +1,66 @@ -type Todo - @secret(field: "pwd") - @auth( - password: { rule: "{$ROLE: { eq: \"Admin\" } }" } +type Todo @secret(field: "pwd") @auth( + password: { rule: "{$ROLE: { eq: \"Admin\" } }"}, query: { - or: [ - { - rule: """ - query($X_MyApp_User: String!) { - queryTodo { - owner (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - } - """ - } - { - rule: """ - query($X_MyApp_User: String!) { - queryTodo { - sharedWith (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - } - """ - } - { - rule: """ - query { - queryTodo(filter: { isPublic: true }) { - id - } - } - """ - } - ] - } - add: { - rule: """ - query($X_MyApp_User: String!) { - queryTodo { - owner (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - } - """ - } - update: { - rule: """ - query($X_MyApp_User: String!) { - queryTodo { - owner (filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - } - """ - } - ) { - id: ID! - title: String - text: String - isPublic: Boolean @search - dateCompleted: String @search - sharedWith: [User] - owner: User @hasInverse(field: "todos") - somethingPrivate: String + or: [ + { rule: """ + query($X_MyApp_User: String!) { + queryTodo { + owner (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + }""" }, + { rule: """ + query($X_MyApp_User: String!) { + queryTodo { + sharedWith (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + }""" }, + { rule: """ + query { + queryTodo(filter: { isPublic: true }) { + id + } + }""" }, + ] + }, + add: { rule: """ + query($X_MyApp_User: String!) { + queryTodo { + owner (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + }""" }, + update: { rule: """ + query($X_MyApp_User: String!) { + queryTodo { + owner (filter: { username: { eq: $X_MyApp_User }}) { + username + } + } + }""" }, +) { + id: ID! + title: String + text: String + isPublic: Boolean @search + dateCompleted: String @search + sharedWith: [User] + owner: User @hasInverse(field: "todos") + somethingPrivate: String } -type User - @auth( - update: { - rule: """ - query($X_MyApp_User: String!) { - queryUser(filter: { username: { eq: $X_MyApp_User }}) { - username - } - } - """ - } - ) { - username: String! @id - todos: [Todo] +type User @auth( + update: { rule: """ + query($X_MyApp_User: String!) { + queryUser(filter: { username: { eq: $X_MyApp_User }}) { + username + } + }""" } +){ + username: String! @id + todos: [Todo] } diff --git a/graphql/schema/testdata/schemagen/input/comments-and-descriptions.graphql b/graphql/schema/testdata/schemagen/input/comments-and-descriptions.graphql index faca2a07614..856d2a0111c 100644 --- a/graphql/schema/testdata/schemagen/input/comments-and-descriptions.graphql +++ b/graphql/schema/testdata/schemagen/input/comments-and-descriptions.graphql @@ -4,22 +4,23 @@ Desc """ interface I { - """ - Desc - """ - s: String! + """ + Desc + """ + s: String! } """ Desc """ type T implements I { - # # comment - id: ID! # comment - """ - Desc - """ - i: Int + # # comment + id: ID! # comment + + """ + Desc + """ + i: Int } # comment @@ -28,12 +29,12 @@ type T implements I { Desc """ enum AnEnum { - AVal + AVal - """ - Desc - """ - AnotherVal + """ + Desc + """ + AnotherVal } """ @@ -45,10 +46,11 @@ union A_Union = T Desc """ input AnInput { - # # comment - id: ID! # comment - """ - Desc - """ - i: Int -} + # # comment + id: ID! # comment + + """ + Desc + """ + i: Int +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/created-updated-directives.graphql b/graphql/schema/testdata/schemagen/input/created-updated-directives.graphql index a1b32463776..a25ed3a9228 100644 --- a/graphql/schema/testdata/schemagen/input/created-updated-directives.graphql +++ b/graphql/schema/testdata/schemagen/input/created-updated-directives.graphql @@ -1,13 +1,13 @@ type Booking { - id: ID! - name: String! - created: DateTime! @default(add: { value: "$now" }) - updated: DateTime! @default(add: { value: "$now" }, update: { value: "$now" }) + id: ID! + name: String! + created: DateTime! @default(add: {value:"$now"}) + updated: DateTime! @default(add: {value:"$now"}, update: {value:"$now"}) } type BookingXID { - id: String! @id - name: String! - created: DateTime! @default(add: { value: "$now" }) - updated: DateTime! @default(add: { value: "$now" }, update: { value: "$now" }) + id: String! @id + name: String! + created: DateTime! @default(add: {value:"$now"}) + updated: DateTime! @default(add: {value:"$now"}, update: {value:"$now"}) } diff --git a/graphql/schema/testdata/schemagen/input/custom-dql-query-with-subscription.graphql b/graphql/schema/testdata/schemagen/input/custom-dql-query-with-subscription.graphql index 709c46a69a4..9e780434213 100644 --- a/graphql/schema/testdata/schemagen/input/custom-dql-query-with-subscription.graphql +++ b/graphql/schema/testdata/schemagen/input/custom-dql-query-with-subscription.graphql @@ -1,30 +1,26 @@ type Tweets { - id: ID! - text: String! @search(by: [fulltext]) - author: User - timestamp: DateTime! @search + id: ID! + text: String! @search(by: [fulltext]) + author: User + timestamp: DateTime! @search } type User { - screenName: String! @id - followers: Int @search - tweets: [Tweets] @hasInverse(field: author) + screenName: String! @id + followers: Int @search + tweets: [Tweets] @hasInverse(field: author) } type UserTweetCount @remote { - screenName: String - tweetCount: Int + screenName: String + tweetCount: Int } type Query { - queryUserTweetCounts: [UserTweetCount] - @withSubscription - @custom( - dql: """ - query { - queryUserTweetCounts(func: type(User)) { - screenName: User.screenName - tweetCount: count(User.tweets) - } - } - """ - ) + queryUserTweetCounts : [UserTweetCount] @withSubscription @custom(dql: """ + query { + queryUserTweetCounts(func: type(User)) { + screenName: User.screenName + tweetCount: count(User.tweets) + } + } + """) } diff --git a/graphql/schema/testdata/schemagen/input/custom-mutation.graphql b/graphql/schema/testdata/schemagen/input/custom-mutation.graphql index 4403e543935..eb05a193445 100644 --- a/graphql/schema/testdata/schemagen/input/custom-mutation.graphql +++ b/graphql/schema/testdata/schemagen/input/custom-mutation.graphql @@ -1,13 +1,16 @@ type User { - id: ID! - name: String! + id: ID! + name: String! } input UpdateFavouriteUserInput { - name: String! + name: String! } type Mutation { - createMyFavouriteUsers(input: [UpdateFavouriteUserInput!]!): [User] - @custom(http: { url: "http://my-api.com", method: "POST", body: "{ data: $input }" }) -} + createMyFavouriteUsers(input: [UpdateFavouriteUserInput!]!): [User] @custom(http: { + url: "http://my-api.com", + method: "POST", + body: "{ data: $input }" + }) +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/custom-nested-types.graphql b/graphql/schema/testdata/schemagen/input/custom-nested-types.graphql index 3b197fd85ed..80365d98233 100644 --- a/graphql/schema/testdata/schemagen/input/custom-nested-types.graphql +++ b/graphql/schema/testdata/schemagen/input/custom-nested-types.graphql @@ -1,33 +1,39 @@ type Car @remote { - id: ID! - name: String! + id: ID! + name: String! } interface Person @remote { - age: Int! + age: Int! } type User implements Person @remote { - id: ID! - name: String! - cars: [Car] + id: ID! + name: String! + cars: [Car] } input UserInput { - name: String! - age: Int! - cars: [CarInput] + name: String! + age: Int! + cars: [CarInput] } input CarInput { - name: String! + name: String! } type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) + getMyFavoriteUsers(id: ID!): [User] @custom(http: { + url: "http://my-api.com", + method: "GET" + }) } type Mutation { - createMyFavouriteUsers(input: [UserInput!]!): [User] - @custom(http: { url: "http://my-api.com", method: "POST", body: "$input" }) -} + createMyFavouriteUsers(input: [UserInput!]!): [User] @custom(http: { + url: "http://my-api.com", + method: "POST", + body: "$input" + }) +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/custom-query-mixed-types.graphql b/graphql/schema/testdata/schemagen/input/custom-query-mixed-types.graphql index 5cd9ac8ce22..35eda6632fb 100644 --- a/graphql/schema/testdata/schemagen/input/custom-query-mixed-types.graphql +++ b/graphql/schema/testdata/schemagen/input/custom-query-mixed-types.graphql @@ -1,13 +1,16 @@ type User @remote { - id: ID! - name: String! + id: ID! + name: String! } type Car { - id: ID! - name: String! + id: ID! + name: String! } type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) -} + getMyFavoriteUsers(id: ID!): [User] @custom(http: { + url: "http://my-api.com", + method: "GET" + }) +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/custom-query-not-dgraph-type.graphql b/graphql/schema/testdata/schemagen/input/custom-query-not-dgraph-type.graphql index b902eb3003a..b4fd6be2c36 100644 --- a/graphql/schema/testdata/schemagen/input/custom-query-not-dgraph-type.graphql +++ b/graphql/schema/testdata/schemagen/input/custom-query-not-dgraph-type.graphql @@ -1,17 +1,23 @@ type User @remote { - id: ID! - name: String! + id: ID! + name: String! } input UserInput { - name: String! + name: String! } type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) + getMyFavoriteUsers(id: ID!): [User] @custom(http: { + url: "http://my-api.com", + method: "GET" + }) } type Mutation { - createMyFavouriteUsers(input: [UserInput!]!): [User] - @custom(http: { url: "http://my-api.com", method: "POST", body: "{ data: $input }" }) -} + createMyFavouriteUsers(input: [UserInput!]!): [User] @custom(http: { + url: "http://my-api.com", + method: "POST", + body: "{ data: $input }" + }) +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/custom-query-with-dgraph-type.graphql b/graphql/schema/testdata/schemagen/input/custom-query-with-dgraph-type.graphql index 800fe5ef8d7..64618d4e2a7 100644 --- a/graphql/schema/testdata/schemagen/input/custom-query-with-dgraph-type.graphql +++ b/graphql/schema/testdata/schemagen/input/custom-query-with-dgraph-type.graphql @@ -1,8 +1,11 @@ type User { - id: ID! - name: String! + id: ID! + name: String! } type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) -} + getMyFavoriteUsers(id: ID!): [User] @custom(http: { + url: "http://my-api.com", + method: "GET" + }) +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/deprecated.graphql b/graphql/schema/testdata/schemagen/input/deprecated.graphql index 7c9f7d5a90f..5cac66b0d7a 100644 --- a/graphql/schema/testdata/schemagen/input/deprecated.graphql +++ b/graphql/schema/testdata/schemagen/input/deprecated.graphql @@ -1,4 +1,6 @@ type Atype { - iamDeprecated: String @deprecated - soAmI: String! @deprecated(reason: "because") + iamDeprecated: String @deprecated + soAmI: String! @deprecated(reason: "because") } + + diff --git a/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql b/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql index 614fd6d22d5..4308ecd0cc7 100644 --- a/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql @@ -1,15 +1,15 @@ interface Movie { - id: ID! - name: String! - director: [Director] @dgraph(pred: "directed.movies") + id: ID! + name: String! + director: [Director] @dgraph(pred: "directed.movies") } type OscarMovie implements Movie { - year: Int! + year: Int! } type Director { - id: ID! - name: String! - directed: [OscarMovie] @dgraph(pred: "~directed.movies") -} + id: ID! + name: String! + directed: [OscarMovie] @dgraph(pred: "~directed.movies") +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-with-interfaces.graphql b/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-with-interfaces.graphql index 5c170a28843..cb49fe6bfe5 100644 --- a/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-with-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/input/dgraph-reverse-directive-with-interfaces.graphql @@ -1,15 +1,15 @@ interface Movie { - id: ID! - name: String! - director: [Director] @dgraph(pred: "~directed.movies") + id: ID! + name: String! + director: [Director] @dgraph(pred: "~directed.movies") } type OscarMovie implements Movie { - year: Int! + year: Int! } type Director { - id: ID! - name: String! - directed: [OscarMovie] @dgraph(pred: "directed.movies") -} + id: ID! + name: String! + directed: [OscarMovie] @dgraph(pred: "directed.movies") +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/embedding-directive-with-similar-queries.graphql b/graphql/schema/testdata/schemagen/input/embedding-directive-with-similar-queries.graphql index 2d036781ccb..880173cea36 100644 --- a/graphql/schema/testdata/schemagen/input/embedding-directive-with-similar-queries.graphql +++ b/graphql/schema/testdata/schemagen/input/embedding-directive-with-similar-queries.graphql @@ -8,14 +8,14 @@ type Product { product_vector: [Float!] @embedding @search(by: ["hnsw(metric: euclidean, exponent: 4)"]) } -type Purchase @lambdaOnMutate(add: true) { +type Purchase @lambdaOnMutate(add: true){ user: User @hasInverse(field: "purchase_history") product: Product date: DateTime @search(by: [day]) } -type User { - email: String! @id - purchase_history: [Purchase] +type User { + email: String! @id + purchase_history: [Purchase] user_vector: [Float!] @embedding @search(by: ["hnsw"]) } diff --git a/graphql/schema/testdata/schemagen/input/field-with-id-directive.graphql b/graphql/schema/testdata/schemagen/input/field-with-id-directive.graphql index cfbb59eb899..19676b1d59e 100644 --- a/graphql/schema/testdata/schemagen/input/field-with-id-directive.graphql +++ b/graphql/schema/testdata/schemagen/input/field-with-id-directive.graphql @@ -1,18 +1,18 @@ type Post { - postID: ID - content: String! - author: Author! - genre: Genre + postID: ID + content: String! + author: Author! + genre: Genre } type Author { - id: ID - name: String! @id @search(by: [regexp]) - pen_name: String - posts: [Post] + id: ID + name: String! @id @search(by: [regexp]) + pen_name: String + posts: [Post] } type Genre { - # This will add exact index on name field, overwriting the default "hash" index for field of type "String! @id". - name: String! @id @search(by: [exact]) + # This will add exact index on name field, overwriting the default "hash" index for field of type "String! @id". + name: String! @id @search(by: [exact]) } diff --git a/graphql/schema/testdata/schemagen/input/field-with-multiple-@id-fields.graphql b/graphql/schema/testdata/schemagen/input/field-with-multiple-@id-fields.graphql index 3618d035892..8aafec5cb50 100644 --- a/graphql/schema/testdata/schemagen/input/field-with-multiple-@id-fields.graphql +++ b/graphql/schema/testdata/schemagen/input/field-with-multiple-@id-fields.graphql @@ -1,17 +1,17 @@ type Post { - postID: ID - content: String! - author: Author! - genre: Genre + postID: ID + content: String! + author: Author! + genre: Genre } type Author { - id: ID - name: String! @id @search(by: [regexp]) - pen_name: String! @id - posts: [Post] + id: ID + name: String! @id @search(by: [regexp]) + pen_name: String! @id + posts: [Post] } type Genre { - name: String! @id + name: String! @id } diff --git a/graphql/schema/testdata/schemagen/input/field-with-reverse-predicate-in-dgraph-directive.graphql b/graphql/schema/testdata/schemagen/input/field-with-reverse-predicate-in-dgraph-directive.graphql index a9582bbd6d9..32fa5273031 100644 --- a/graphql/schema/testdata/schemagen/input/field-with-reverse-predicate-in-dgraph-directive.graphql +++ b/graphql/schema/testdata/schemagen/input/field-with-reverse-predicate-in-dgraph-directive.graphql @@ -1,11 +1,11 @@ type Movie { - id: ID! - name: String! - director: [MovieDirector] @dgraph(pred: "~directed.movies") + id: ID! + name: String! + director: [MovieDirector] @dgraph(pred: "~directed.movies") } type MovieDirector { - id: ID! - name: String! - directed: [Movie] @dgraph(pred: "directed.movies") -} + id: ID! + name: String! + directed: [Movie] @dgraph(pred: "directed.movies") +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-all-empty.graphql b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-all-empty.graphql index cdd875a2951..9c489b6aa88 100644 --- a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-all-empty.graphql +++ b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-all-empty.graphql @@ -1,12 +1,12 @@ type X { - name: [Y] - f1: [Y] @dgraph(pred: "f1") + name: [Y] + f1: [Y] @dgraph(pred: "f1") } type Y { - f1: [X] @dgraph(pred: "~f1") + f1: [X] @dgraph(pred: "~f1") } type Z { - add: [X] + add:[X] } diff --git a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-circular.graphql b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-circular.graphql index 60fd057a02e..560f7b855da 100644 --- a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-circular.graphql +++ b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-circular.graphql @@ -1,14 +1,14 @@ -type X { - f1: [Y] @dgraph(pred: "f1") - f3: [Z] @dgraph(pred: "~f3") +type X{ + f1: [Y] @dgraph(pred: "f1") + f3: [Z] @dgraph(pred: "~f3") } -type Y { - f1: [X] @dgraph(pred: "~f1") - f2: [Z] @dgraph(pred: "f2") +type Y{ + f1: [X] @dgraph(pred: "~f1") + f2: [Z] @dgraph(pred: "f2") } -type Z { - f2: [Y] @dgraph(pred: "~f2") - f3: [X] @dgraph(pred: "f3") -} +type Z{ + f2: [Y] @dgraph(pred: "~f2") + f3: [X] @dgraph(pred: "f3") +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-custom-mutation.graphql b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-custom-mutation.graphql index 417f85018b7..c3704e34625 100644 --- a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-custom-mutation.graphql +++ b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-custom-mutation.graphql @@ -1,13 +1,16 @@ type User { - id: ID! - name: String! + id: ID! + name: String! } input UserInput { - name: String! + name: String! } type Mutation { - addMyFavouriteUsers(input: [UserInput!]!): [User] - @custom(http: { url: "http://my-api.com", method: "POST", body: "{ data: $input }" }) -} + addMyFavouriteUsers(input: [UserInput!]!): [User] @custom(http: { + url: "http://my-api.com", + method: "POST", + body: "{ data: $input }" + }) +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-directLink.graphql b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-directLink.graphql index e670f6c7fa1..e66f9a3cf86 100644 --- a/graphql/schema/testdata/schemagen/input/filter-cleanSchema-directLink.graphql +++ b/graphql/schema/testdata/schemagen/input/filter-cleanSchema-directLink.graphql @@ -1,14 +1,14 @@ type X { - f1: [Y] @dgraph(pred: "f1") - name: String - id: ID + f1: [Y] @dgraph(pred: "f1") + name: String + id: ID } type Y { - f2: [Z] @dgraph(pred: "~f2") - f1: [X] @dgraph(pred: "~f1") + f2: [Z] @dgraph(pred: "~f2") + f1: [X] @dgraph(pred: "~f1") } type Z { - f2: [Y] @dgraph(pred: "f2") -} + f2: [Y] @dgraph(pred: "f2") +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/generate-directive.graphql b/graphql/schema/testdata/schemagen/input/generate-directive.graphql index baa3a69aadc..d45f95ace3e 100644 --- a/graphql/schema/testdata/schemagen/input/generate-directive.graphql +++ b/graphql/schema/testdata/schemagen/input/generate-directive.graphql @@ -1,22 +1,37 @@ -interface Character - @secret(field: "password") - @generate(query: { get: false, password: false }, subscription: false) { - id: ID! - name: String! @search(by: [exact]) - friends: [Character] +interface Character @secret(field: "password") @generate( + query: { + get: false, + password: false + }, + subscription: false +) { + id: ID! + name: String! @search(by: [exact]) + friends: [Character] } -type Human implements Character @generate(query: { aggregate: true }, subscription: true) { - totalCredits: Int +type Human implements Character @generate( + query: { + aggregate: true + }, + subscription: true +) { + totalCredits: Int } -type Person - @withSubscription - @generate( - query: { get: false, query: true, password: true, aggregate: false } - mutation: { add: false, delete: false } +type Person @withSubscription @generate( + query: { + get: false, + query: true, + password: true, + aggregate: false + }, + mutation: { + add: false, + delete: false + }, subscription: false - ) { - id: ID! - name: String! +) { + id: ID! + name: String! } diff --git a/graphql/schema/testdata/schemagen/input/geo-type.graphql b/graphql/schema/testdata/schemagen/input/geo-type.graphql index e5b3f7f28ef..9326165f8d5 100644 --- a/graphql/schema/testdata/schemagen/input/geo-type.graphql +++ b/graphql/schema/testdata/schemagen/input/geo-type.graphql @@ -1,10 +1,10 @@ type Hotel { - id: ID! - name: String! - location: Point @search - secretLocation: Point - area: Polygon @search - secretArea: Polygon - branches: MultiPolygon @search - secretBranches: MultiPolygon + id: ID! + name: String! + location: Point @search + secretLocation: Point + area: Polygon @search + secretArea: Polygon + branches: MultiPolygon @search + secretBranches: MultiPolygon } diff --git a/graphql/schema/testdata/schemagen/input/hasfilter.graphql b/graphql/schema/testdata/schemagen/input/hasfilter.graphql index 4421587ba5f..2d59534caaa 100644 --- a/graphql/schema/testdata/schemagen/input/hasfilter.graphql +++ b/graphql/schema/testdata/schemagen/input/hasfilter.graphql @@ -1,11 +1,11 @@ interface I { - id: ID! + id: ID! } type T implements I { - text: String + text: String } type B { - name: String -} + name: String +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/password-type.graphql b/graphql/schema/testdata/schemagen/input/password-type.graphql index 8e2b746cbf0..508ae881b1a 100644 --- a/graphql/schema/testdata/schemagen/input/password-type.graphql +++ b/graphql/schema/testdata/schemagen/input/password-type.graphql @@ -1,4 +1,4 @@ type Author @secret(field: "pwd") { - name: String! @id - token: String + name: String! @id + token: String } diff --git a/graphql/schema/testdata/schemagen/input/searchables-references.graphql b/graphql/schema/testdata/schemagen/input/searchables-references.graphql index 2cdcf0ef15a..d69dad886ce 100644 --- a/graphql/schema/testdata/schemagen/input/searchables-references.graphql +++ b/graphql/schema/testdata/schemagen/input/searchables-references.graphql @@ -1,13 +1,13 @@ type Author { - id: ID! - name: String! @search(by: [hash]) - dob: DateTime # Have something not search - posts: [Post] # This should have arguments added for a filter on Post + id: ID! + name: String! @search(by: [hash]) + dob: DateTime # Have something not search + posts: [Post] # This should have arguments added for a filter on Post } type Post { - postID: ID! - title: String! @search(by: ["term", "fulltext"]) - text: String @search(by: ["fulltext", "term"]) - datePublished: DateTime # Have something not search + postID: ID! + title: String! @search(by: ["term", "fulltext"]) + text: String @search(by: ["fulltext", "term"]) + datePublished: DateTime # Have something not search } diff --git a/graphql/schema/testdata/schemagen/input/searchables.graphql b/graphql/schema/testdata/schemagen/input/searchables.graphql index 54649df9c55..3690268b843 100644 --- a/graphql/schema/testdata/schemagen/input/searchables.graphql +++ b/graphql/schema/testdata/schemagen/input/searchables.graphql @@ -1,38 +1,38 @@ type Post { - postID: ID! - title: String! @search(by: [term]) - titleByEverything: String! @search(by: ["term", "fulltext", "trigram", "hash"]) - text: String @search(by: [fulltext]) + postID: ID! + title: String! @search(by: [term]) + titleByEverything: String! @search(by: ["term", "fulltext", "trigram", "hash"]) + text: String @search(by: [fulltext]) - tags: [String] @search(by: [trigram]) - tagsHash: [String] @search(by: [hash]) - tagsExact: [String] @search(by: [exact]) + tags: [String] @search(by: [trigram]) + tagsHash: [String] @search(by: [hash]) + tagsExact: [String] @search(by: [exact]) - publishByYear: DateTime @search(by: [year]) - publishByMonth: DateTime @search(by: [month]) - publishByDay: DateTime @search(by: [day]) - publishByHour: DateTime @search(by: [hour]) - publishTimestamp: Int64 @search + publishByYear: DateTime @search(by: [year]) + publishByMonth: DateTime @search(by: [month]) + publishByDay: DateTime @search(by: [day]) + publishByHour: DateTime @search(by: [hour]) + publishTimestamp: Int64 @search - numViewers: Int64 @search(by: [int64]) - numLikes: Int @search - score: Float @search - isPublished: Boolean @search + numViewers: Int64 @search(by: [int64]) + numLikes: Int @search + score: Float @search + isPublished: Boolean @search - postType: PostType @search - postTypeNonNull: PostType! @search - postTypeList: [PostType] @search - postTypeTrigram: PostType @search(by: [trigram]) - postTypeRegexp: PostType @search(by: [regexp]) - postTypeExact: [PostType] @search(by: [exact]) - postTypeHash: PostType @search(by: [hash]) - postTypeRegexpExact: PostType @search(by: ["exact", "regexp"]) - postTypeHashRegexp: PostType @search(by: ["hash", "regexp"]) - postTypeNone: PostType @search(by: []) + postType: PostType @search + postTypeNonNull: PostType! @search + postTypeList: [PostType] @search + postTypeTrigram: PostType @search(by: [trigram]) + postTypeRegexp: PostType @search(by: [regexp]) + postTypeExact: [PostType] @search(by: [exact]) + postTypeHash: PostType @search(by: [hash]) + postTypeRegexpExact: PostType @search(by: ["exact", "regexp"]) + postTypeHashRegexp: PostType @search(by: ["hash", "regexp"]) + postTypeNone: PostType @search(by: []) } enum PostType { - Fact - Question - Opinion + Fact + Question + Opinion } diff --git a/graphql/schema/testdata/schemagen/input/single-type-with-enum.graphql b/graphql/schema/testdata/schemagen/input/single-type-with-enum.graphql index 5ff4d9b3f2e..16a10daf72d 100644 --- a/graphql/schema/testdata/schemagen/input/single-type-with-enum.graphql +++ b/graphql/schema/testdata/schemagen/input/single-type-with-enum.graphql @@ -9,4 +9,4 @@ enum PostType { Statement Question Answer -} +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/single-type.graphql b/graphql/schema/testdata/schemagen/input/single-type.graphql index 714b30895fe..7816c5016a9 100644 --- a/graphql/schema/testdata/schemagen/input/single-type.graphql +++ b/graphql/schema/testdata/schemagen/input/single-type.graphql @@ -1,7 +1,7 @@ type Message { - id: ID! - content: String! - author: String - uniqueId: Int64 - datePosted: DateTime + id: ID! + content: String! + author: String + uniqueId: Int64 + datePosted: DateTime } diff --git a/graphql/schema/testdata/schemagen/input/type-implements-multiple-interfaces.graphql b/graphql/schema/testdata/schemagen/input/type-implements-multiple-interfaces.graphql index 2ab2ef40a70..91cd15ad088 100644 --- a/graphql/schema/testdata/schemagen/input/type-implements-multiple-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/input/type-implements-multiple-interfaces.graphql @@ -1,14 +1,14 @@ interface Character { - id: ID! - name: String! @search(by: [exact]) - friends: [Character] + id: ID! + name: String! @search(by: [exact]) + friends: [Character] } interface Employee { - employeeId: String! - title: String! + employeeId: String! + title: String! } type Human implements Character & Employee { - totalCredits: Int + totalCredits: Int } diff --git a/graphql/schema/testdata/schemagen/input/type-with-arguments-on-field.graphql b/graphql/schema/testdata/schemagen/input/type-with-arguments-on-field.graphql index 29ff7259196..d544aa76608 100644 --- a/graphql/schema/testdata/schemagen/input/type-with-arguments-on-field.graphql +++ b/graphql/schema/testdata/schemagen/input/type-with-arguments-on-field.graphql @@ -1,10 +1,10 @@ interface Abstract { - id: ID! - name(random: Int!, size: String): String! + id: ID! + name(random: Int!, size: String): String! } type Message implements Abstract { - content(pick: Int!, name: String): String! - author: String - datePosted: DateTime + content(pick: Int!, name: String): String! + author: String + datePosted: DateTime } diff --git a/graphql/schema/testdata/schemagen/input/type-with-custom-field-on-dgraph-type.graphql b/graphql/schema/testdata/schemagen/input/type-with-custom-field-on-dgraph-type.graphql index 479626311e3..e7aa5867c77 100644 --- a/graphql/schema/testdata/schemagen/input/type-with-custom-field-on-dgraph-type.graphql +++ b/graphql/schema/testdata/schemagen/input/type-with-custom-field-on-dgraph-type.graphql @@ -1,12 +1,19 @@ type Car { - id: ID! - name: String! + id: ID! + name: String! } type User { - id: ID! - name: String - @custom(http: { url: "http://mock:8888/userNames", method: "GET", body: "{uid: $id}" }) - age: Int! @search - cars: [Car] @custom(http: { url: "http://mock:8888/cars", method: "GET", body: "{uid: $id}" }) -} + id: ID! + name: String @custom(http: { + url: "http://mock:8888/userNames", + method: "GET", + body: "{uid: $id}" + }) + age: Int! @search + cars: [Car] @custom(http: { + url: "http://mock:8888/cars", + method: "GET", + body: "{uid: $id}" + }) +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/type-with-custom-fields-on-remote-type.graphql b/graphql/schema/testdata/schemagen/input/type-with-custom-fields-on-remote-type.graphql index 37dd774b759..a09b70205e9 100644 --- a/graphql/schema/testdata/schemagen/input/type-with-custom-fields-on-remote-type.graphql +++ b/graphql/schema/testdata/schemagen/input/type-with-custom-fields-on-remote-type.graphql @@ -1,12 +1,19 @@ type Car @remote { - id: ID! - name: String! + id: ID! + name: String! } type User { - id: ID! - name: String - @custom(http: { url: "http://mock:8888/userNames", method: "GET", body: "{uid: $id}" }) - age: Int! @search - cars: [Car] @custom(http: { url: "http://mock:8888/cars", method: "GET", body: "{uid: $id}" }) -} + id: ID! + name: String @custom(http: { + url: "http://mock:8888/userNames", + method: "GET", + body: "{uid: $id}" + }) + age: Int! @search + cars: [Car] @custom(http: { + url: "http://mock:8888/cars", + method: "GET", + body: "{uid: $id}" + }) +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/type-without-orderables.graphql b/graphql/schema/testdata/schemagen/input/type-without-orderables.graphql index 2f4037f6af5..773242e89f6 100644 --- a/graphql/schema/testdata/schemagen/input/type-without-orderables.graphql +++ b/graphql/schema/testdata/schemagen/input/type-without-orderables.graphql @@ -1,6 +1,6 @@ type Data { - id: ID! - intList: [Int] - stringList: [String] - metaData: Data -} + id: ID! + intList: [Int] + stringList: [String] + metaData: Data +} \ No newline at end of file diff --git a/graphql/schema/testdata/schemagen/input/union.graphql b/graphql/schema/testdata/schemagen/input/union.graphql index ef10b9da346..d18f80cd9e1 100644 --- a/graphql/schema/testdata/schemagen/input/union.graphql +++ b/graphql/schema/testdata/schemagen/input/union.graphql @@ -1,38 +1,41 @@ interface Character { - id: ID! - name: String! @search(by: [exact]) - friends: [Character] - enemyOf: Resident - appearsIn: [Episode!]! @search + id: ID! + name: String! @search(by: [exact]) + friends: [Character] + enemyOf: Resident + appearsIn: [Episode!]! @search } type Human implements Character { - starships: [Starship] - totalCredits: Int + starships: [Starship] + totalCredits: Int } type Droid implements Character { - primaryFunction: String + primaryFunction: String } enum Episode { - NEWHOPE - EMPIRE - JEDI + NEWHOPE + EMPIRE + JEDI } type Starship { - id: ID! - name: String! @search(by: [term]) - length: Float + id: ID! + name: String! @search(by: [term]) + length: Float } union Resident = Human | Droid | Starship union Tool @remote = Droid | Starship type Planet { - id: ID! - name: String! - residents: [Resident!] @dgraph(pred: "residents") - bestTool: Tool @custom(http: { url: "http://mock:8888/tool/$id", method: "GET" }) + id: ID! + name: String! + residents: [Resident!] @dgraph(pred: "residents") + bestTool: Tool @custom(http: { + url: "http://mock:8888/tool/$id" + method: "GET" + }) } diff --git a/graphql/schema/testdata/schemagen/output/apollo-federation.graphql b/graphql/schema/testdata/schemagen/output/apollo-federation.graphql index 32f175da43f..ff44a7b8041 100644 --- a/graphql/schema/testdata/schemagen/output/apollo-federation.graphql +++ b/graphql/schema/testdata/schemagen/output/apollo-federation.graphql @@ -3,45 +3,43 @@ ####################### type Reviews @key(fields: "id") { - id: ID! - review: String! - user(filter: UserFilter): User @provides(fields: "age") + id: ID! + review: String! + user(filter: UserFilter): User @provides(fields: "age") } type Student @key(fields: "id") { - id: ID! - name: String! - age: Int! + id: ID! + name: String! + age: Int! } type School @key(fields: "id") { - id: ID! - students(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] - @provides(fields: "name") - studentsAggregate(filter: StudentFilter): StudentAggregateResult + id: ID! + students(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] @provides(fields: "name") + studentsAggregate(filter: StudentFilter): StudentAggregateResult } type Country { - code: String! @id - name: String! + code: String! @id + name: String! } type Product @key(fields: "id") @extends { - id: ID! @external - name: String! @external - price: Int @external - weight: Int @external - reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] - @requires(fields: "price weight") - reviewsAggregate(filter: ReviewsFilter): ReviewsAggregateResult + id: ID! @external + name: String! @external + price: Int @external + weight: Int @external + reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] @requires(fields: "price weight") + reviewsAggregate(filter: ReviewsFilter): ReviewsAggregateResult } type User @key(fields: "name") @extends { - id: ID! @external - name: String! @id @external - age: Int! @external - reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] - reviewsAggregate(filter: ReviewsFilter): ReviewsAggregateResult + id: ID! @external + name: String! @id @external + age: Int! @external + reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] + reviewsAggregate(filter: ReviewsFilter): ReviewsAggregateResult } ####################### @@ -60,162 +58,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -227,12 +225,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -241,78 +238,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -324,7 +320,7 @@ scalar _Any scalar _FieldSet type _Service { - sdl: String + sdl: String } directive @external on FIELD_DEFINITION @@ -338,143 +334,143 @@ directive @extends on OBJECT | INTERFACE ####################### type AddCountryPayload { - country(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] - numUids: Int + country(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] + numUids: Int } type AddProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } type AddReviewsPayload { - reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] - numUids: Int + reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] + numUids: Int } type AddSchoolPayload { - school(filter: SchoolFilter, first: Int, offset: Int): [School] - numUids: Int + school(filter: SchoolFilter, first: Int, offset: Int): [School] + numUids: Int } type AddStudentPayload { - student(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] - numUids: Int + student(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] + numUids: Int } type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type CountryAggregateResult { - count: Int - codeMin: String - codeMax: String - nameMin: String - nameMax: String + count: Int + codeMin: String + codeMax: String + nameMin: String + nameMax: String } type DeleteCountryPayload { - country(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] - msg: String - numUids: Int + country(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] + msg: String + numUids: Int } type DeleteProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - msg: String - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + msg: String + numUids: Int } type DeleteReviewsPayload { - reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] - msg: String - numUids: Int + reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] + msg: String + numUids: Int } type DeleteSchoolPayload { - school(filter: SchoolFilter, first: Int, offset: Int): [School] - msg: String - numUids: Int + school(filter: SchoolFilter, first: Int, offset: Int): [School] + msg: String + numUids: Int } type DeleteStudentPayload { - student(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] - msg: String - numUids: Int + student(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] + msg: String + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type ProductAggregateResult { - count: Int - idMin: ID - idMax: ID + count: Int + idMin: ID + idMax: ID } type ReviewsAggregateResult { - count: Int - reviewMin: String - reviewMax: String + count: Int + reviewMin: String + reviewMax: String } type SchoolAggregateResult { - count: Int + count: Int } type StudentAggregateResult { - count: Int - nameMin: String - nameMax: String - ageMin: Int - ageMax: Int - ageSum: Int - ageAvg: Float + count: Int + nameMin: String + nameMax: String + ageMin: Int + ageMax: Int + ageSum: Int + ageAvg: Float } type UpdateCountryPayload { - country(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] - numUids: Int + country(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] + numUids: Int } type UpdateProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } type UpdateReviewsPayload { - reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] - numUids: Int + reviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] + numUids: Int } type UpdateSchoolPayload { - school(filter: SchoolFilter, first: Int, offset: Int): [School] - numUids: Int + school(filter: SchoolFilter, first: Int, offset: Int): [School] + numUids: Int } type UpdateStudentPayload { - student(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] - numUids: Int + student(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - nameMin: String - nameMax: String - ageMin: Int - ageMax: Int - ageSum: Int - ageAvg: Float + count: Int + nameMin: String + nameMax: String + ageMin: Int + ageMax: Int + ageSum: Int + ageAvg: Float } ####################### @@ -482,55 +478,55 @@ type UserAggregateResult { ####################### enum CountryHasFilter { - code - name + code + name } enum CountryOrderable { - code - name + code + name } enum ProductHasFilter { - reviews + reviews } enum ProductOrderable { - id + id } enum ReviewsHasFilter { - review - user + review + user } enum ReviewsOrderable { - review + review } enum SchoolHasFilter { - students + students } enum StudentHasFilter { - name - age + name + age } enum StudentOrderable { - name - age + name + age } enum UserHasFilter { - name - age - reviews + name + age + reviews } enum UserOrderable { - name - age + name + age } ####################### @@ -538,209 +534,209 @@ enum UserOrderable { ####################### input AddCountryInput { - code: String! - name: String! + code: String! + name: String! } input AddProductInput { - id: ID! - reviews: [ReviewsRef] + id: ID! + reviews: [ReviewsRef] } input AddReviewsInput { - review: String! - user: UserRef + review: String! + user: UserRef } input AddSchoolInput { - students: [StudentRef] + students: [StudentRef] } input AddStudentInput { - name: String! - age: Int! + name: String! + age: Int! } input AddUserInput { - name: String! - age: Int! - reviews: [ReviewsRef] + name: String! + age: Int! + reviews: [ReviewsRef] } input CountryFilter { - code: StringHashFilter - has: [CountryHasFilter] - and: [CountryFilter] - or: [CountryFilter] - not: CountryFilter + code: StringHashFilter + has: [CountryHasFilter] + and: [CountryFilter] + or: [CountryFilter] + not: CountryFilter } input CountryOrder { - asc: CountryOrderable - desc: CountryOrderable - then: CountryOrder + asc: CountryOrderable + desc: CountryOrderable + then: CountryOrder } input CountryPatch { - code: String - name: String + code: String + name: String } input CountryRef { - code: String - name: String + code: String + name: String } input ProductFilter { - id: [ID!] - has: [ProductHasFilter] - and: [ProductFilter] - or: [ProductFilter] - not: ProductFilter + id: [ID!] + has: [ProductHasFilter] + and: [ProductFilter] + or: [ProductFilter] + not: ProductFilter } input ProductOrder { - asc: ProductOrderable - desc: ProductOrderable - then: ProductOrder + asc: ProductOrderable + desc: ProductOrderable + then: ProductOrder } input ProductPatch { - reviews: [ReviewsRef] + reviews: [ReviewsRef] } input ProductRef { - id: ID - reviews: [ReviewsRef] + id: ID + reviews: [ReviewsRef] } input ReviewsFilter { - id: [ID!] - has: [ReviewsHasFilter] - and: [ReviewsFilter] - or: [ReviewsFilter] - not: ReviewsFilter + id: [ID!] + has: [ReviewsHasFilter] + and: [ReviewsFilter] + or: [ReviewsFilter] + not: ReviewsFilter } input ReviewsOrder { - asc: ReviewsOrderable - desc: ReviewsOrderable - then: ReviewsOrder + asc: ReviewsOrderable + desc: ReviewsOrderable + then: ReviewsOrder } input ReviewsPatch { - review: String - user: UserRef + review: String + user: UserRef } input ReviewsRef { - id: ID - review: String - user: UserRef + id: ID + review: String + user: UserRef } input SchoolFilter { - id: [ID!] - has: [SchoolHasFilter] - and: [SchoolFilter] - or: [SchoolFilter] - not: SchoolFilter + id: [ID!] + has: [SchoolHasFilter] + and: [SchoolFilter] + or: [SchoolFilter] + not: SchoolFilter } input SchoolPatch { - students: [StudentRef] + students: [StudentRef] } input SchoolRef { - id: ID - students: [StudentRef] + id: ID + students: [StudentRef] } input StudentFilter { - id: [ID!] - has: [StudentHasFilter] - and: [StudentFilter] - or: [StudentFilter] - not: StudentFilter + id: [ID!] + has: [StudentHasFilter] + and: [StudentFilter] + or: [StudentFilter] + not: StudentFilter } input StudentOrder { - asc: StudentOrderable - desc: StudentOrderable - then: StudentOrder + asc: StudentOrderable + desc: StudentOrderable + then: StudentOrder } input StudentPatch { - name: String - age: Int + name: String + age: Int } input StudentRef { - id: ID - name: String - age: Int + id: ID + name: String + age: Int } input UpdateCountryInput { - filter: CountryFilter! - set: CountryPatch - remove: CountryPatch + filter: CountryFilter! + set: CountryPatch + remove: CountryPatch } input UpdateProductInput { - filter: ProductFilter! - set: ProductPatch - remove: ProductPatch + filter: ProductFilter! + set: ProductPatch + remove: ProductPatch } input UpdateReviewsInput { - filter: ReviewsFilter! - set: ReviewsPatch - remove: ReviewsPatch + filter: ReviewsFilter! + set: ReviewsPatch + remove: ReviewsPatch } input UpdateSchoolInput { - filter: SchoolFilter! - set: SchoolPatch - remove: SchoolPatch + filter: SchoolFilter! + set: SchoolPatch + remove: SchoolPatch } input UpdateStudentInput { - filter: StudentFilter! - set: StudentPatch - remove: StudentPatch + filter: StudentFilter! + set: StudentPatch + remove: StudentPatch } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - name: StringHashFilter - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + name: StringHashFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - name: String - age: Int - reviews: [ReviewsRef] + name: String + age: Int + reviews: [ReviewsRef] } input UserRef { - name: String - age: Int - reviews: [ReviewsRef] + name: String + age: Int + reviews: [ReviewsRef] } ####################### @@ -748,26 +744,26 @@ input UserRef { ####################### type Query { - _entities(representations: [_Any!]!): [_Entity]! - _service: _Service! - getReviews(id: ID!): Reviews - queryReviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] - aggregateReviews(filter: ReviewsFilter): ReviewsAggregateResult - getStudent(id: ID!): Student - queryStudent(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] - aggregateStudent(filter: StudentFilter): StudentAggregateResult - getSchool(id: ID!): School - querySchool(filter: SchoolFilter, first: Int, offset: Int): [School] - aggregateSchool(filter: SchoolFilter): SchoolAggregateResult - getCountry(code: String!): Country - queryCountry(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] - aggregateCountry(filter: CountryFilter): CountryAggregateResult - getProduct(id: ID!): Product - queryProduct(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - aggregateProduct(filter: ProductFilter): ProductAggregateResult - getUser(name: String!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + _entities(representations: [_Any!]!): [_Entity]! + _service: _Service! + getReviews(id: ID!): Reviews + queryReviews(filter: ReviewsFilter, order: ReviewsOrder, first: Int, offset: Int): [Reviews] + aggregateReviews(filter: ReviewsFilter): ReviewsAggregateResult + getStudent(id: ID!): Student + queryStudent(filter: StudentFilter, order: StudentOrder, first: Int, offset: Int): [Student] + aggregateStudent(filter: StudentFilter): StudentAggregateResult + getSchool(id: ID!): School + querySchool(filter: SchoolFilter, first: Int, offset: Int): [School] + aggregateSchool(filter: SchoolFilter): SchoolAggregateResult + getCountry(code: String!): Country + queryCountry(filter: CountryFilter, order: CountryOrder, first: Int, offset: Int): [Country] + aggregateCountry(filter: CountryFilter): CountryAggregateResult + getProduct(id: ID!): Product + queryProduct(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + aggregateProduct(filter: ProductFilter): ProductAggregateResult + getUser(name: String!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -775,22 +771,23 @@ type Query { ####################### type Mutation { - addReviews(input: [AddReviewsInput!]!): AddReviewsPayload - updateReviews(input: UpdateReviewsInput!): UpdateReviewsPayload - deleteReviews(filter: ReviewsFilter!): DeleteReviewsPayload - addStudent(input: [AddStudentInput!]!): AddStudentPayload - updateStudent(input: UpdateStudentInput!): UpdateStudentPayload - deleteStudent(filter: StudentFilter!): DeleteStudentPayload - addSchool(input: [AddSchoolInput!]!): AddSchoolPayload - updateSchool(input: UpdateSchoolInput!): UpdateSchoolPayload - deleteSchool(filter: SchoolFilter!): DeleteSchoolPayload - addCountry(input: [AddCountryInput!]!, upsert: Boolean): AddCountryPayload - updateCountry(input: UpdateCountryInput!): UpdateCountryPayload - deleteCountry(filter: CountryFilter!): DeleteCountryPayload - addProduct(input: [AddProductInput!]!): AddProductPayload - updateProduct(input: UpdateProductInput!): UpdateProductPayload - deleteProduct(filter: ProductFilter!): DeleteProductPayload - addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addReviews(input: [AddReviewsInput!]!): AddReviewsPayload + updateReviews(input: UpdateReviewsInput!): UpdateReviewsPayload + deleteReviews(filter: ReviewsFilter!): DeleteReviewsPayload + addStudent(input: [AddStudentInput!]!): AddStudentPayload + updateStudent(input: UpdateStudentInput!): UpdateStudentPayload + deleteStudent(filter: StudentFilter!): DeleteStudentPayload + addSchool(input: [AddSchoolInput!]!): AddSchoolPayload + updateSchool(input: UpdateSchoolInput!): UpdateSchoolPayload + deleteSchool(filter: SchoolFilter!): DeleteSchoolPayload + addCountry(input: [AddCountryInput!]!, upsert: Boolean): AddCountryPayload + updateCountry(input: UpdateCountryInput!): UpdateCountryPayload + deleteCountry(filter: CountryFilter!): DeleteCountryPayload + addProduct(input: [AddProductInput!]!): AddProductPayload + updateProduct(input: UpdateProductInput!): UpdateProductPayload + deleteProduct(filter: ProductFilter!): DeleteProductPayload + addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } + diff --git a/graphql/schema/testdata/schemagen/output/auth-on-interfaces.graphql b/graphql/schema/testdata/schemagen/output/auth-on-interfaces.graphql index 93b04644cdb..79edc9a60e5 100644 --- a/graphql/schema/testdata/schemagen/output/auth-on-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/output/auth-on-interfaces.graphql @@ -3,39 +3,25 @@ ####################### type Author { - id: ID! - name: String! @search(by: [hash]) - posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - @hasInverse(field: author) - postsAggregate(filter: PostFilter): PostAggregateResult -} - -interface Post - @secret(field: "pwd") - @auth( - password: { rule: "{$ROLE: { eq: \"Admin\" } }" } - query: { - rule: "query($TEXT: String!) { \n queryPost(filter: { text : {eq: $TEXT } } ) { \n id \n } \n}" - } - ) { - id: ID! - text: String @search(by: [exact]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) -} - -type Question implements Post - @auth( - query: { - rule: "query($ANS: Boolean!) { \n queryQuestion(filter: { answered: $ANS } ) { \n id \n } \n}" - } - ) - @secret(field: "pwd") { - id: ID! - text: String @search(by: [exact]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) - answered: Boolean @search + id: ID! + name: String! @search(by: [hash]) + posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] @hasInverse(field: author) + postsAggregate(filter: PostFilter): PostAggregateResult +} + +interface Post @secret(field: "pwd") @auth(password: {rule:"{$ROLE: { eq: \"Admin\" } }"}, query: {rule:"query($TEXT: String!) { \n queryPost(filter: { text : {eq: $TEXT } } ) { \n id \n } \n}"}) { + id: ID! + text: String @search(by: [exact]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) +} + +type Question implements Post @auth(query: {rule:"query($ANS: Boolean!) { \n queryQuestion(filter: { answered: $ANS } ) { \n id \n } \n}"}) @secret(field: "pwd") { + id: ID! + text: String @search(by: [exact]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) + answered: Boolean @search } ####################### @@ -54,162 +40,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -221,12 +207,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -235,78 +220,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -314,68 +298,68 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type DeleteQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - msg: String - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type QuestionAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type UpdateQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } ####################### @@ -383,35 +367,35 @@ type UpdateQuestionPayload { ####################### enum AuthorHasFilter { - name - posts + name + posts } enum AuthorOrderable { - name + name } enum PostHasFilter { - text - datePublished - author + text + datePublished + author } enum PostOrderable { - text - datePublished + text + datePublished } enum QuestionHasFilter { - text - datePublished - author - answered + text + datePublished + author + answered } enum QuestionOrderable { - text - datePublished + text + datePublished } ####################### @@ -419,121 +403,121 @@ enum QuestionOrderable { ####################### input AddAuthorInput { - name: String! - posts: [PostRef] + name: String! + posts: [PostRef] } input AddQuestionInput { - text: String - datePublished: DateTime - author: AuthorRef! - answered: Boolean - pwd: String! + text: String + datePublished: DateTime + author: AuthorRef! + answered: Boolean + pwd: String! } input AuthorFilter { - id: [ID!] - name: StringHashFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + name: StringHashFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - posts: [PostRef] + name: String + posts: [PostRef] } input AuthorRef { - id: ID - name: String - posts: [PostRef] + id: ID + name: String + posts: [PostRef] } input PostFilter { - id: [ID!] - text: StringExactFilter - datePublished: DateTimeFilter - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + text: StringExactFilter + datePublished: DateTimeFilter + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - text: String - datePublished: DateTime - author: AuthorRef - pwd: String + text: String + datePublished: DateTime + author: AuthorRef + pwd: String } input PostRef { - id: ID! + id: ID! } input QuestionFilter { - id: [ID!] - text: StringExactFilter - datePublished: DateTimeFilter - answered: Boolean - has: [QuestionHasFilter] - and: [QuestionFilter] - or: [QuestionFilter] - not: QuestionFilter + id: [ID!] + text: StringExactFilter + datePublished: DateTimeFilter + answered: Boolean + has: [QuestionHasFilter] + and: [QuestionFilter] + or: [QuestionFilter] + not: QuestionFilter } input QuestionOrder { - asc: QuestionOrderable - desc: QuestionOrderable - then: QuestionOrder + asc: QuestionOrderable + desc: QuestionOrderable + then: QuestionOrder } input QuestionPatch { - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean - pwd: String + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean + pwd: String } input QuestionRef { - id: ID - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean - pwd: String + id: ID + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean + pwd: String } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } input UpdateQuestionInput { - filter: QuestionFilter! - set: QuestionPatch - remove: QuestionPatch + filter: QuestionFilter! + set: QuestionPatch + remove: QuestionPatch } ####################### @@ -541,17 +525,17 @@ input UpdateQuestionInput { ####################### type Query { - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - getPost(id: ID!): Post - checkPostPassword(id: ID!, pwd: String!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getQuestion(id: ID!): Question - checkQuestionPassword(id: ID!, pwd: String!): Question - queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(id: ID!): Post + checkPostPassword(id: ID!, pwd: String!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getQuestion(id: ID!): Question + checkQuestionPassword(id: ID!, pwd: String!): Question + queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult } ####################### @@ -559,12 +543,13 @@ type Query { ####################### type Mutation { - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload - updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload - deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload + updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload + deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload } + diff --git a/graphql/schema/testdata/schemagen/output/authorization.graphql b/graphql/schema/testdata/schemagen/output/authorization.graphql index 9cd4d757904..2dc4bf64f59 100644 --- a/graphql/schema/testdata/schemagen/output/authorization.graphql +++ b/graphql/schema/testdata/schemagen/output/authorization.graphql @@ -2,49 +2,22 @@ # Input Schema ####################### -type Todo - @secret(field: "pwd") - @auth( - password: { rule: "{$ROLE: { eq: \"Admin\" } }" } - query: { - or: [ - { - rule: "query($X_MyApp_User: String!) { \n queryTodo { \n owner (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}" - } - { - rule: "query($X_MyApp_User: String!) { \n queryTodo {\n sharedWith (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}" - } - { rule: "query { \n queryTodo(filter: { isPublic: true }) {\n id\n }\n}" } - ] - } - add: { - rule: "query($X_MyApp_User: String!) { \n queryTodo {\n owner (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}" - } - update: { - rule: "query($X_MyApp_User: String!) { \n queryTodo {\n owner (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}" - } - ) { - id: ID! - title: String - text: String - isPublic: Boolean @search - dateCompleted: String @search - sharedWith(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - owner(filter: UserFilter): User @hasInverse(field: "todos") - somethingPrivate: String - sharedWithAggregate(filter: UserFilter): UserAggregateResult -} - -type User - @auth( - update: { - rule: "query($X_MyApp_User: String!) { \n queryUser(filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n}" - } - ) { - username: String! @id - todos(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - @hasInverse(field: owner) - todosAggregate(filter: TodoFilter): TodoAggregateResult +type Todo @secret(field: "pwd") @auth(password: {rule:"{$ROLE: { eq: \"Admin\" } }"}, query: {or:[{rule:"query($X_MyApp_User: String!) { \n queryTodo { \n owner (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}"},{rule:"query($X_MyApp_User: String!) { \n queryTodo {\n sharedWith (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}"},{rule:"query { \n queryTodo(filter: { isPublic: true }) {\n id\n }\n}"}]}, add: {rule:"query($X_MyApp_User: String!) { \n queryTodo {\n owner (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}"}, update: {rule:"query($X_MyApp_User: String!) { \n queryTodo {\n owner (filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n }\n}"}) { + id: ID! + title: String + text: String + isPublic: Boolean @search + dateCompleted: String @search + sharedWith(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + owner(filter: UserFilter): User @hasInverse(field: "todos") + somethingPrivate: String + sharedWithAggregate(filter: UserFilter): UserAggregateResult +} + +type User @auth(update: {rule:"query($X_MyApp_User: String!) { \n queryUser(filter: { username: { eq: $X_MyApp_User }}) {\n username\n }\n}"}) { + username: String! @id + todos(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] @hasInverse(field: owner) + todosAggregate(filter: TodoFilter): TodoAggregateResult } ####################### @@ -63,162 +36,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -230,12 +203,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -244,78 +216,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -323,53 +294,53 @@ input StringHashFilter { ####################### type AddTodoPayload { - todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - numUids: Int + todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + numUids: Int } type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteTodoPayload { - todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - msg: String - numUids: Int + todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + msg: String + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type TodoAggregateResult { - count: Int - titleMin: String - titleMax: String - textMin: String - textMax: String - dateCompletedMin: String - dateCompletedMax: String - somethingPrivateMin: String - somethingPrivateMax: String + count: Int + titleMin: String + titleMax: String + textMin: String + textMax: String + dateCompletedMin: String + dateCompletedMax: String + somethingPrivateMin: String + somethingPrivateMax: String } type UpdateTodoPayload { - todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - numUids: Int + todo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - usernameMin: String - usernameMax: String + count: Int + usernameMin: String + usernameMax: String } ####################### @@ -377,29 +348,29 @@ type UserAggregateResult { ####################### enum TodoHasFilter { - title - text - isPublic - dateCompleted - sharedWith - owner - somethingPrivate + title + text + isPublic + dateCompleted + sharedWith + owner + somethingPrivate } enum TodoOrderable { - title - text - dateCompleted - somethingPrivate + title + text + dateCompleted + somethingPrivate } enum UserHasFilter { - username - todos + username + todos } enum UserOrderable { - username + username } ####################### @@ -407,94 +378,94 @@ enum UserOrderable { ####################### input AddTodoInput { - title: String - text: String - isPublic: Boolean - dateCompleted: String - sharedWith: [UserRef] - owner: UserRef - somethingPrivate: String - pwd: String! + title: String + text: String + isPublic: Boolean + dateCompleted: String + sharedWith: [UserRef] + owner: UserRef + somethingPrivate: String + pwd: String! } input AddUserInput { - username: String! - todos: [TodoRef] + username: String! + todos: [TodoRef] } input TodoFilter { - id: [ID!] - isPublic: Boolean - dateCompleted: StringTermFilter - has: [TodoHasFilter] - and: [TodoFilter] - or: [TodoFilter] - not: TodoFilter + id: [ID!] + isPublic: Boolean + dateCompleted: StringTermFilter + has: [TodoHasFilter] + and: [TodoFilter] + or: [TodoFilter] + not: TodoFilter } input TodoOrder { - asc: TodoOrderable - desc: TodoOrderable - then: TodoOrder + asc: TodoOrderable + desc: TodoOrderable + then: TodoOrder } input TodoPatch { - title: String - text: String - isPublic: Boolean - dateCompleted: String - sharedWith: [UserRef] - owner: UserRef - somethingPrivate: String - pwd: String + title: String + text: String + isPublic: Boolean + dateCompleted: String + sharedWith: [UserRef] + owner: UserRef + somethingPrivate: String + pwd: String } input TodoRef { - id: ID - title: String - text: String - isPublic: Boolean - dateCompleted: String - sharedWith: [UserRef] - owner: UserRef - somethingPrivate: String - pwd: String + id: ID + title: String + text: String + isPublic: Boolean + dateCompleted: String + sharedWith: [UserRef] + owner: UserRef + somethingPrivate: String + pwd: String } input UpdateTodoInput { - filter: TodoFilter! - set: TodoPatch - remove: TodoPatch + filter: TodoFilter! + set: TodoPatch + remove: TodoPatch } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - username: StringHashFilter - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + username: StringHashFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - username: String - todos: [TodoRef] + username: String + todos: [TodoRef] } input UserRef { - username: String - todos: [TodoRef] + username: String + todos: [TodoRef] } ####################### @@ -502,13 +473,13 @@ input UserRef { ####################### type Query { - getTodo(id: ID!): Todo - checkTodoPassword(id: ID!, pwd: String!): Todo - queryTodo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] - aggregateTodo(filter: TodoFilter): TodoAggregateResult - getUser(username: String!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getTodo(id: ID!): Todo + checkTodoPassword(id: ID!, pwd: String!): Todo + queryTodo(filter: TodoFilter, order: TodoOrder, first: Int, offset: Int): [Todo] + aggregateTodo(filter: TodoFilter): TodoAggregateResult + getUser(username: String!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -516,10 +487,11 @@ type Query { ####################### type Mutation { - addTodo(input: [AddTodoInput!]!): AddTodoPayload - updateTodo(input: UpdateTodoInput!): UpdateTodoPayload - deleteTodo(filter: TodoFilter!): DeleteTodoPayload - addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addTodo(input: [AddTodoInput!]!): AddTodoPayload + updateTodo(input: UpdateTodoInput!): UpdateTodoPayload + deleteTodo(filter: TodoFilter!): DeleteTodoPayload + addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } + diff --git a/graphql/schema/testdata/schemagen/output/comments-and-descriptions.graphql b/graphql/schema/testdata/schemagen/output/comments-and-descriptions.graphql index c735a4c9271..be37be2b30e 100644 --- a/graphql/schema/testdata/schemagen/output/comments-and-descriptions.graphql +++ b/graphql/schema/testdata/schemagen/output/comments-and-descriptions.graphql @@ -2,53 +2,35 @@ # Input Schema ####################### -""" -Desc -""" +"""Desc""" interface I { - """ - Desc - """ - s: String! + """Desc""" + s: String! } -""" -Desc -""" +"""Desc""" type T implements I { - s: String! - id: ID! - """ - Desc - """ - i: Int + s: String! + id: ID! + """Desc""" + i: Int } -""" -Desc -""" +"""Desc""" enum AnEnum { - AVal - """ - Desc - """ - AnotherVal + AVal + """Desc""" + AnotherVal } -""" -Desc -""" +"""Desc""" union A_Union = T -""" -Desc -""" +"""Desc""" input AnInput { - id: ID! - """ - Desc - """ - i: Int + id: ID! + """Desc""" + i: Int } ####################### @@ -67,162 +49,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -234,12 +216,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -248,78 +229,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -327,46 +307,46 @@ input StringHashFilter { ####################### type AddTPayload { - t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - numUids: Int + t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + numUids: Int } type DeleteIPayload { - i(filter: IFilter, order: IOrder, first: Int, offset: Int): [I] - msg: String - numUids: Int + i(filter: IFilter, order: IOrder, first: Int, offset: Int): [I] + msg: String + numUids: Int } type DeleteTPayload { - t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - msg: String - numUids: Int + t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + msg: String + numUids: Int } type IAggregateResult { - count: Int - sMin: String - sMax: String + count: Int + sMin: String + sMax: String } type TAggregateResult { - count: Int - sMin: String - sMax: String - iMin: Int - iMax: Int - iSum: Int - iAvg: Float + count: Int + sMin: String + sMax: String + iMin: Int + iMax: Int + iSum: Int + iAvg: Float } type UpdateIPayload { - i(filter: IFilter, order: IOrder, first: Int, offset: Int): [I] - numUids: Int + i(filter: IFilter, order: IOrder, first: Int, offset: Int): [I] + numUids: Int } type UpdateTPayload { - t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - numUids: Int + t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + numUids: Int } ####################### @@ -374,25 +354,25 @@ type UpdateTPayload { ####################### enum A_UnionType { - T + T } enum IHasFilter { - s + s } enum IOrderable { - s + s } enum THasFilter { - s - i + s + i } enum TOrderable { - s - i + s + i } ####################### @@ -400,83 +380,75 @@ enum TOrderable { ####################### input A_UnionFilter { - memberTypes: [A_UnionType!] - tFilter: TFilter + memberTypes: [A_UnionType!] + tFilter: TFilter } input A_UnionRef { - tRef: TRef + tRef: TRef } input AddTInput { - s: String! - """ - Desc - """ - i: Int + s: String! + """Desc""" + i: Int } input IFilter { - has: [IHasFilter] - and: [IFilter] - or: [IFilter] - not: IFilter + has: [IHasFilter] + and: [IFilter] + or: [IFilter] + not: IFilter } input IOrder { - asc: IOrderable - desc: IOrderable - then: IOrder + asc: IOrderable + desc: IOrderable + then: IOrder } input IPatch { - """ - Desc - """ - s: String + """Desc""" + s: String } input TFilter { - id: [ID!] - has: [THasFilter] - and: [TFilter] - or: [TFilter] - not: TFilter + id: [ID!] + has: [THasFilter] + and: [TFilter] + or: [TFilter] + not: TFilter } input TOrder { - asc: TOrderable - desc: TOrderable - then: TOrder + asc: TOrderable + desc: TOrderable + then: TOrder } input TPatch { - s: String - """ - Desc - """ - i: Int + s: String + """Desc""" + i: Int } input TRef { - id: ID - s: String - """ - Desc - """ - i: Int + id: ID + s: String + """Desc""" + i: Int } input UpdateIInput { - filter: IFilter! - set: IPatch - remove: IPatch + filter: IFilter! + set: IPatch + remove: IPatch } input UpdateTInput { - filter: TFilter! - set: TPatch - remove: TPatch + filter: TFilter! + set: TPatch + remove: TPatch } ####################### @@ -484,11 +456,11 @@ input UpdateTInput { ####################### type Query { - queryI(filter: IFilter, order: IOrder, first: Int, offset: Int): [I] - aggregateI(filter: IFilter): IAggregateResult - getT(id: ID!): T - queryT(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - aggregateT(filter: TFilter): TAggregateResult + queryI(filter: IFilter, order: IOrder, first: Int, offset: Int): [I] + aggregateI(filter: IFilter): IAggregateResult + getT(id: ID!): T + queryT(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + aggregateT(filter: TFilter): TAggregateResult } ####################### @@ -496,9 +468,10 @@ type Query { ####################### type Mutation { - updateI(input: UpdateIInput!): UpdateIPayload - deleteI(filter: IFilter!): DeleteIPayload - addT(input: [AddTInput!]!): AddTPayload - updateT(input: UpdateTInput!): UpdateTPayload - deleteT(filter: TFilter!): DeleteTPayload + updateI(input: UpdateIInput!): UpdateIPayload + deleteI(filter: IFilter!): DeleteIPayload + addT(input: [AddTInput!]!): AddTPayload + updateT(input: UpdateTInput!): UpdateTPayload + deleteT(filter: TFilter!): DeleteTPayload } + diff --git a/graphql/schema/testdata/schemagen/output/created-updated-directives.graphql b/graphql/schema/testdata/schemagen/output/created-updated-directives.graphql index bede3db1e9b..d7547094db3 100644 --- a/graphql/schema/testdata/schemagen/output/created-updated-directives.graphql +++ b/graphql/schema/testdata/schemagen/output/created-updated-directives.graphql @@ -3,17 +3,17 @@ ####################### type Booking { - id: ID! - name: String! - created: DateTime! @default(add: { value: "$now" }) - updated: DateTime! @default(add: { value: "$now" }, update: { value: "$now" }) + id: ID! + name: String! + created: DateTime! @default(add: {value:"$now"}) + updated: DateTime! @default(add: {value:"$now"}, update: {value:"$now"}) } type BookingXID { - id: String! @id - name: String! - created: DateTime! @default(add: { value: "$now" }) - updated: DateTime! @default(add: { value: "$now" }, update: { value: "$now" }) + id: String! @id + name: String! + created: DateTime! @default(add: {value:"$now"}) + updated: DateTime! @default(add: {value:"$now"}, update: {value:"$now"}) } ####################### @@ -32,162 +32,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -199,12 +199,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -213,78 +212,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -292,72 +290,57 @@ input StringHashFilter { ####################### type AddBookingPayload { - booking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] - numUids: Int + booking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] + numUids: Int } type AddBookingXIDPayload { - bookingXID( - filter: BookingXIDFilter - order: BookingXIDOrder - first: Int - offset: Int - ): [BookingXID] - numUids: Int + bookingXID(filter: BookingXIDFilter, order: BookingXIDOrder, first: Int, offset: Int): [BookingXID] + numUids: Int } type BookingAggregateResult { - count: Int - nameMin: String - nameMax: String - createdMin: DateTime - createdMax: DateTime - updatedMin: DateTime - updatedMax: DateTime + count: Int + nameMin: String + nameMax: String + createdMin: DateTime + createdMax: DateTime + updatedMin: DateTime + updatedMax: DateTime } type BookingXIDAggregateResult { - count: Int - idMin: String - idMax: String - nameMin: String - nameMax: String - createdMin: DateTime - createdMax: DateTime - updatedMin: DateTime - updatedMax: DateTime + count: Int + idMin: String + idMax: String + nameMin: String + nameMax: String + createdMin: DateTime + createdMax: DateTime + updatedMin: DateTime + updatedMax: DateTime } type DeleteBookingPayload { - booking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] - msg: String - numUids: Int + booking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] + msg: String + numUids: Int } type DeleteBookingXIDPayload { - bookingXID( - filter: BookingXIDFilter - order: BookingXIDOrder - first: Int - offset: Int - ): [BookingXID] - msg: String - numUids: Int + bookingXID(filter: BookingXIDFilter, order: BookingXIDOrder, first: Int, offset: Int): [BookingXID] + msg: String + numUids: Int } type UpdateBookingPayload { - booking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] - numUids: Int + booking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] + numUids: Int } type UpdateBookingXIDPayload { - bookingXID( - filter: BookingXIDFilter - order: BookingXIDOrder - first: Int - offset: Int - ): [BookingXID] - numUids: Int + bookingXID(filter: BookingXIDFilter, order: BookingXIDOrder, first: Int, offset: Int): [BookingXID] + numUids: Int } ####################### @@ -365,29 +348,29 @@ type UpdateBookingXIDPayload { ####################### enum BookingHasFilter { - name - created - updated + name + created + updated } enum BookingOrderable { - name - created - updated + name + created + updated } enum BookingXIDHasFilter { - id - name - created - updated + id + name + created + updated } enum BookingXIDOrderable { - id - name - created - updated + id + name + created + updated } ####################### @@ -395,83 +378,83 @@ enum BookingXIDOrderable { ####################### input AddBookingInput { - name: String! - created: DateTime - updated: DateTime + name: String! + created: DateTime + updated: DateTime } input AddBookingXIDInput { - id: String! - name: String! - created: DateTime - updated: DateTime + id: String! + name: String! + created: DateTime + updated: DateTime } input BookingFilter { - id: [ID!] - has: [BookingHasFilter] - and: [BookingFilter] - or: [BookingFilter] - not: BookingFilter + id: [ID!] + has: [BookingHasFilter] + and: [BookingFilter] + or: [BookingFilter] + not: BookingFilter } input BookingOrder { - asc: BookingOrderable - desc: BookingOrderable - then: BookingOrder + asc: BookingOrderable + desc: BookingOrderable + then: BookingOrder } input BookingPatch { - name: String - created: DateTime - updated: DateTime + name: String + created: DateTime + updated: DateTime } input BookingRef { - id: ID - name: String - created: DateTime - updated: DateTime + id: ID + name: String + created: DateTime + updated: DateTime } input BookingXIDFilter { - id: StringHashFilter - has: [BookingXIDHasFilter] - and: [BookingXIDFilter] - or: [BookingXIDFilter] - not: BookingXIDFilter + id: StringHashFilter + has: [BookingXIDHasFilter] + and: [BookingXIDFilter] + or: [BookingXIDFilter] + not: BookingXIDFilter } input BookingXIDOrder { - asc: BookingXIDOrderable - desc: BookingXIDOrderable - then: BookingXIDOrder + asc: BookingXIDOrderable + desc: BookingXIDOrderable + then: BookingXIDOrder } input BookingXIDPatch { - id: String - name: String - created: DateTime - updated: DateTime + id: String + name: String + created: DateTime + updated: DateTime } input BookingXIDRef { - id: String - name: String - created: DateTime - updated: DateTime + id: String + name: String + created: DateTime + updated: DateTime } input UpdateBookingInput { - filter: BookingFilter! - set: BookingPatch - remove: BookingPatch + filter: BookingFilter! + set: BookingPatch + remove: BookingPatch } input UpdateBookingXIDInput { - filter: BookingXIDFilter! - set: BookingXIDPatch - remove: BookingXIDPatch + filter: BookingXIDFilter! + set: BookingXIDPatch + remove: BookingXIDPatch } ####################### @@ -479,17 +462,12 @@ input UpdateBookingXIDInput { ####################### type Query { - getBooking(id: ID!): Booking - queryBooking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] - aggregateBooking(filter: BookingFilter): BookingAggregateResult - getBookingXID(id: String!): BookingXID - queryBookingXID( - filter: BookingXIDFilter - order: BookingXIDOrder - first: Int - offset: Int - ): [BookingXID] - aggregateBookingXID(filter: BookingXIDFilter): BookingXIDAggregateResult + getBooking(id: ID!): Booking + queryBooking(filter: BookingFilter, order: BookingOrder, first: Int, offset: Int): [Booking] + aggregateBooking(filter: BookingFilter): BookingAggregateResult + getBookingXID(id: String!): BookingXID + queryBookingXID(filter: BookingXIDFilter, order: BookingXIDOrder, first: Int, offset: Int): [BookingXID] + aggregateBookingXID(filter: BookingXIDFilter): BookingXIDAggregateResult } ####################### @@ -497,10 +475,11 @@ type Query { ####################### type Mutation { - addBooking(input: [AddBookingInput!]!): AddBookingPayload - updateBooking(input: UpdateBookingInput!): UpdateBookingPayload - deleteBooking(filter: BookingFilter!): DeleteBookingPayload - addBookingXID(input: [AddBookingXIDInput!]!, upsert: Boolean): AddBookingXIDPayload - updateBookingXID(input: UpdateBookingXIDInput!): UpdateBookingXIDPayload - deleteBookingXID(filter: BookingXIDFilter!): DeleteBookingXIDPayload + addBooking(input: [AddBookingInput!]!): AddBookingPayload + updateBooking(input: UpdateBookingInput!): UpdateBookingPayload + deleteBooking(filter: BookingFilter!): DeleteBookingPayload + addBookingXID(input: [AddBookingXIDInput!]!, upsert: Boolean): AddBookingXIDPayload + updateBookingXID(input: UpdateBookingXIDInput!): UpdateBookingXIDPayload + deleteBookingXID(filter: BookingXIDFilter!): DeleteBookingXIDPayload } + diff --git a/graphql/schema/testdata/schemagen/output/custom-dql-query-with-subscription.graphql b/graphql/schema/testdata/schemagen/output/custom-dql-query-with-subscription.graphql index b22910f9157..881b4d5ab04 100644 --- a/graphql/schema/testdata/schemagen/output/custom-dql-query-with-subscription.graphql +++ b/graphql/schema/testdata/schemagen/output/custom-dql-query-with-subscription.graphql @@ -3,23 +3,22 @@ ####################### type Tweets { - id: ID! - text: String! @search(by: [fulltext]) - author(filter: UserFilter): User @hasInverse(field: tweets) - timestamp: DateTime! @search + id: ID! + text: String! @search(by: [fulltext]) + author(filter: UserFilter): User @hasInverse(field: tweets) + timestamp: DateTime! @search } type User { - screenName: String! @id - followers: Int @search - tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] - @hasInverse(field: author) - tweetsAggregate(filter: TweetsFilter): TweetsAggregateResult + screenName: String! @id + followers: Int @search + tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] @hasInverse(field: author) + tweetsAggregate(filter: TweetsFilter): TweetsAggregateResult } type UserTweetCount @remote { - screenName: String - tweetCount: Int + screenName: String + tweetCount: Int } ####################### @@ -38,162 +37,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -205,12 +204,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -219,78 +217,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -298,53 +295,53 @@ input StringHashFilter { ####################### type AddTweetsPayload { - tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] - numUids: Int + tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] + numUids: Int } type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteTweetsPayload { - tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] - msg: String - numUids: Int + tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] + msg: String + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type TweetsAggregateResult { - count: Int - textMin: String - textMax: String - timestampMin: DateTime - timestampMax: DateTime + count: Int + textMin: String + textMax: String + timestampMin: DateTime + timestampMax: DateTime } type UpdateTweetsPayload { - tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] - numUids: Int + tweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - screenNameMin: String - screenNameMax: String - followersMin: Int - followersMax: Int - followersSum: Int - followersAvg: Float + count: Int + screenNameMin: String + screenNameMax: String + followersMin: Int + followersMax: Int + followersSum: Int + followersAvg: Float } ####################### @@ -352,25 +349,25 @@ type UserAggregateResult { ####################### enum TweetsHasFilter { - text - author - timestamp + text + author + timestamp } enum TweetsOrderable { - text - timestamp + text + timestamp } enum UserHasFilter { - screenName - followers - tweets + screenName + followers + tweets } enum UserOrderable { - screenName - followers + screenName + followers } ####################### @@ -378,83 +375,83 @@ enum UserOrderable { ####################### input AddTweetsInput { - text: String! - author: UserRef - timestamp: DateTime! + text: String! + author: UserRef + timestamp: DateTime! } input AddUserInput { - screenName: String! - followers: Int - tweets: [TweetsRef] + screenName: String! + followers: Int + tweets: [TweetsRef] } input TweetsFilter { - id: [ID!] - text: StringFullTextFilter - timestamp: DateTimeFilter - has: [TweetsHasFilter] - and: [TweetsFilter] - or: [TweetsFilter] - not: TweetsFilter + id: [ID!] + text: StringFullTextFilter + timestamp: DateTimeFilter + has: [TweetsHasFilter] + and: [TweetsFilter] + or: [TweetsFilter] + not: TweetsFilter } input TweetsOrder { - asc: TweetsOrderable - desc: TweetsOrderable - then: TweetsOrder + asc: TweetsOrderable + desc: TweetsOrderable + then: TweetsOrder } input TweetsPatch { - text: String - author: UserRef - timestamp: DateTime + text: String + author: UserRef + timestamp: DateTime } input TweetsRef { - id: ID - text: String - author: UserRef - timestamp: DateTime + id: ID + text: String + author: UserRef + timestamp: DateTime } input UpdateTweetsInput { - filter: TweetsFilter! - set: TweetsPatch - remove: TweetsPatch + filter: TweetsFilter! + set: TweetsPatch + remove: TweetsPatch } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - screenName: StringHashFilter - followers: IntFilter - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + screenName: StringHashFilter + followers: IntFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - screenName: String - followers: Int - tweets: [TweetsRef] + screenName: String + followers: Int + tweets: [TweetsRef] } input UserRef { - screenName: String - followers: Int - tweets: [TweetsRef] + screenName: String + followers: Int + tweets: [TweetsRef] } ####################### @@ -462,17 +459,13 @@ input UserRef { ####################### type Query { - queryUserTweetCounts: [UserTweetCount] - @withSubscription - @custom( - dql: "query {\n queryUserTweetCounts(func: type(User)) {\n screenName: User.screenName\n tweetCount: count(User.tweets)\n }\n}" - ) - getTweets(id: ID!): Tweets - queryTweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] - aggregateTweets(filter: TweetsFilter): TweetsAggregateResult - getUser(screenName: String!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + queryUserTweetCounts: [UserTweetCount] @withSubscription @custom(dql: "query {\n queryUserTweetCounts(func: type(User)) {\n screenName: User.screenName\n tweetCount: count(User.tweets)\n }\n}") + getTweets(id: ID!): Tweets + queryTweets(filter: TweetsFilter, order: TweetsOrder, first: Int, offset: Int): [Tweets] + aggregateTweets(filter: TweetsFilter): TweetsAggregateResult + getUser(screenName: String!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -480,12 +473,12 @@ type Query { ####################### type Mutation { - addTweets(input: [AddTweetsInput!]!): AddTweetsPayload - updateTweets(input: UpdateTweetsInput!): UpdateTweetsPayload - deleteTweets(filter: TweetsFilter!): DeleteTweetsPayload - addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addTweets(input: [AddTweetsInput!]!): AddTweetsPayload + updateTweets(input: UpdateTweetsInput!): UpdateTweetsPayload + deleteTweets(filter: TweetsFilter!): DeleteTweetsPayload + addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } ####################### @@ -493,9 +486,5 @@ type Mutation { ####################### type Subscription { - queryUserTweetCounts: [UserTweetCount] - @withSubscription - @custom( - dql: "query {\n queryUserTweetCounts(func: type(User)) {\n screenName: User.screenName\n tweetCount: count(User.tweets)\n }\n}" - ) + queryUserTweetCounts: [UserTweetCount] @withSubscription @custom(dql: "query {\n queryUserTweetCounts(func: type(User)) {\n screenName: User.screenName\n tweetCount: count(User.tweets)\n }\n}") } diff --git a/graphql/schema/testdata/schemagen/output/custom-mutation.graphql b/graphql/schema/testdata/schemagen/output/custom-mutation.graphql index e456c5699a3..cd06b5dde7f 100644 --- a/graphql/schema/testdata/schemagen/output/custom-mutation.graphql +++ b/graphql/schema/testdata/schemagen/output/custom-mutation.graphql @@ -3,12 +3,12 @@ ####################### type User { - id: ID! - name: String! + id: ID! + name: String! } input UpdateFavouriteUserInput { - name: String! + name: String! } ####################### @@ -27,162 +27,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -194,12 +194,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -208,78 +207,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -287,25 +285,25 @@ input StringHashFilter { ####################### type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } ####################### @@ -313,11 +311,11 @@ type UserAggregateResult { ####################### enum UserHasFilter { - name + name } enum UserOrderable { - name + name } ####################### @@ -325,36 +323,36 @@ enum UserOrderable { ####################### input AddUserInput { - name: String! + name: String! } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - id: [ID!] - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + id: [ID!] + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - name: String + name: String } input UserRef { - id: ID - name: String + id: ID + name: String } ####################### @@ -362,9 +360,9 @@ input UserRef { ####################### type Query { - getUser(id: ID!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getUser(id: ID!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -372,9 +370,9 @@ type Query { ####################### type Mutation { - createMyFavouriteUsers(input: [UpdateFavouriteUserInput!]!): [User] - @custom(http: { url: "http://my-api.com", method: "POST", body: "{ data: $input }" }) - addUser(input: [AddUserInput!]!): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + createMyFavouriteUsers(input: [UpdateFavouriteUserInput!]!): [User] @custom(http: {url:"http://my-api.com",method:"POST",body:"{ data: $input }"}) + addUser(input: [AddUserInput!]!): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } + diff --git a/graphql/schema/testdata/schemagen/output/custom-nested-types.graphql b/graphql/schema/testdata/schemagen/output/custom-nested-types.graphql index 8d338393763..7f6026fba36 100644 --- a/graphql/schema/testdata/schemagen/output/custom-nested-types.graphql +++ b/graphql/schema/testdata/schemagen/output/custom-nested-types.graphql @@ -3,29 +3,29 @@ ####################### type Car @remote { - id: ID! - name: String! + id: ID! + name: String! } interface Person @remote { - age: Int! + age: Int! } type User implements Person @remote { - age: Int! - id: ID! - name: String! - cars: [Car] + age: Int! + id: ID! + name: String! + cars: [Car] } input UserInput { - name: String! - age: Int! - cars: [CarInput] + name: String! + age: Int! + cars: [CarInput] } input CarInput { - name: String! + name: String! } ####################### @@ -44,162 +44,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -211,12 +211,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -225,78 +224,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -304,7 +302,7 @@ input StringHashFilter { ####################### type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) + getMyFavoriteUsers(id: ID!): [User] @custom(http: {url:"http://my-api.com",method:"GET"}) } ####################### @@ -312,6 +310,6 @@ type Query { ####################### type Mutation { - createMyFavouriteUsers(input: [UserInput!]!): [User] - @custom(http: { url: "http://my-api.com", method: "POST", body: "$input" }) + createMyFavouriteUsers(input: [UserInput!]!): [User] @custom(http: {url:"http://my-api.com",method:"POST",body:"$input"}) } + diff --git a/graphql/schema/testdata/schemagen/output/custom-query-mixed-types.graphql b/graphql/schema/testdata/schemagen/output/custom-query-mixed-types.graphql index a6817a7b917..df50f1e6ef5 100644 --- a/graphql/schema/testdata/schemagen/output/custom-query-mixed-types.graphql +++ b/graphql/schema/testdata/schemagen/output/custom-query-mixed-types.graphql @@ -3,13 +3,13 @@ ####################### type User @remote { - id: ID! - name: String! + id: ID! + name: String! } type Car { - id: ID! - name: String! + id: ID! + name: String! } ####################### @@ -28,162 +28,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -195,12 +195,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -209,78 +208,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -288,25 +286,25 @@ input StringHashFilter { ####################### type AddCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + numUids: Int } type CarAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - msg: String - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + msg: String + numUids: Int } type UpdateCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + numUids: Int } ####################### @@ -314,11 +312,11 @@ type UpdateCarPayload { ####################### enum CarHasFilter { - name + name } enum CarOrderable { - name + name } ####################### @@ -326,36 +324,36 @@ enum CarOrderable { ####################### input AddCarInput { - name: String! + name: String! } input CarFilter { - id: [ID!] - has: [CarHasFilter] - and: [CarFilter] - or: [CarFilter] - not: CarFilter + id: [ID!] + has: [CarHasFilter] + and: [CarFilter] + or: [CarFilter] + not: CarFilter } input CarOrder { - asc: CarOrderable - desc: CarOrderable - then: CarOrder + asc: CarOrderable + desc: CarOrderable + then: CarOrder } input CarPatch { - name: String + name: String } input CarRef { - id: ID - name: String + id: ID + name: String } input UpdateCarInput { - filter: CarFilter! - set: CarPatch - remove: CarPatch + filter: CarFilter! + set: CarPatch + remove: CarPatch } ####################### @@ -363,10 +361,10 @@ input UpdateCarInput { ####################### type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) - getCar(id: ID!): Car - queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - aggregateCar(filter: CarFilter): CarAggregateResult + getMyFavoriteUsers(id: ID!): [User] @custom(http: {url:"http://my-api.com",method:"GET"}) + getCar(id: ID!): Car + queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + aggregateCar(filter: CarFilter): CarAggregateResult } ####################### @@ -374,7 +372,8 @@ type Query { ####################### type Mutation { - addCar(input: [AddCarInput!]!): AddCarPayload - updateCar(input: UpdateCarInput!): UpdateCarPayload - deleteCar(filter: CarFilter!): DeleteCarPayload + addCar(input: [AddCarInput!]!): AddCarPayload + updateCar(input: UpdateCarInput!): UpdateCarPayload + deleteCar(filter: CarFilter!): DeleteCarPayload } + diff --git a/graphql/schema/testdata/schemagen/output/custom-query-not-dgraph-type.graphql b/graphql/schema/testdata/schemagen/output/custom-query-not-dgraph-type.graphql index 9bc2378b146..6093f603aaa 100644 --- a/graphql/schema/testdata/schemagen/output/custom-query-not-dgraph-type.graphql +++ b/graphql/schema/testdata/schemagen/output/custom-query-not-dgraph-type.graphql @@ -3,12 +3,12 @@ ####################### type User @remote { - id: ID! - name: String! + id: ID! + name: String! } input UserInput { - name: String! + name: String! } ####################### @@ -27,162 +27,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -194,12 +194,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -208,78 +207,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -287,7 +285,7 @@ input StringHashFilter { ####################### type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) + getMyFavoriteUsers(id: ID!): [User] @custom(http: {url:"http://my-api.com",method:"GET"}) } ####################### @@ -295,6 +293,6 @@ type Query { ####################### type Mutation { - createMyFavouriteUsers(input: [UserInput!]!): [User] - @custom(http: { url: "http://my-api.com", method: "POST", body: "{ data: $input }" }) + createMyFavouriteUsers(input: [UserInput!]!): [User] @custom(http: {url:"http://my-api.com",method:"POST",body:"{ data: $input }"}) } + diff --git a/graphql/schema/testdata/schemagen/output/custom-query-with-dgraph-type.graphql b/graphql/schema/testdata/schemagen/output/custom-query-with-dgraph-type.graphql index 99e65582e90..06213dddd25 100644 --- a/graphql/schema/testdata/schemagen/output/custom-query-with-dgraph-type.graphql +++ b/graphql/schema/testdata/schemagen/output/custom-query-with-dgraph-type.graphql @@ -3,8 +3,8 @@ ####################### type User { - id: ID! - name: String! + id: ID! + name: String! } ####################### @@ -23,162 +23,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -190,12 +190,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -204,78 +203,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -283,25 +281,25 @@ input StringHashFilter { ####################### type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } ####################### @@ -309,11 +307,11 @@ type UserAggregateResult { ####################### enum UserHasFilter { - name + name } enum UserOrderable { - name + name } ####################### @@ -321,36 +319,36 @@ enum UserOrderable { ####################### input AddUserInput { - name: String! + name: String! } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - id: [ID!] - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + id: [ID!] + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - name: String + name: String } input UserRef { - id: ID - name: String + id: ID + name: String } ####################### @@ -358,10 +356,10 @@ input UserRef { ####################### type Query { - getMyFavoriteUsers(id: ID!): [User] @custom(http: { url: "http://my-api.com", method: "GET" }) - getUser(id: ID!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getMyFavoriteUsers(id: ID!): [User] @custom(http: {url:"http://my-api.com",method:"GET"}) + getUser(id: ID!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -369,7 +367,8 @@ type Query { ####################### type Mutation { - addUser(input: [AddUserInput!]!): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addUser(input: [AddUserInput!]!): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } + diff --git a/graphql/schema/testdata/schemagen/output/deprecated.graphql b/graphql/schema/testdata/schemagen/output/deprecated.graphql index cd03147a304..cd3a425cc03 100644 --- a/graphql/schema/testdata/schemagen/output/deprecated.graphql +++ b/graphql/schema/testdata/schemagen/output/deprecated.graphql @@ -3,8 +3,8 @@ ####################### type Atype { - iamDeprecated: String @deprecated - soAmI: String! @deprecated(reason: "because") + iamDeprecated: String @deprecated + soAmI: String! @deprecated(reason: "because") } ####################### @@ -23,162 +23,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -190,12 +190,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -204,78 +203,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -283,27 +281,27 @@ input StringHashFilter { ####################### type AddAtypePayload { - atype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] - numUids: Int + atype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] + numUids: Int } type AtypeAggregateResult { - count: Int - iamDeprecatedMin: String - iamDeprecatedMax: String - soAmIMin: String - soAmIMax: String + count: Int + iamDeprecatedMin: String + iamDeprecatedMax: String + soAmIMin: String + soAmIMax: String } type DeleteAtypePayload { - atype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] - msg: String - numUids: Int + atype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] + msg: String + numUids: Int } type UpdateAtypePayload { - atype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] - numUids: Int + atype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] + numUids: Int } ####################### @@ -311,13 +309,13 @@ type UpdateAtypePayload { ####################### enum AtypeHasFilter { - iamDeprecated - soAmI + iamDeprecated + soAmI } enum AtypeOrderable { - iamDeprecated - soAmI + iamDeprecated + soAmI } ####################### @@ -325,37 +323,37 @@ enum AtypeOrderable { ####################### input AddAtypeInput { - iamDeprecated: String - soAmI: String! + iamDeprecated: String + soAmI: String! } input AtypeFilter { - has: [AtypeHasFilter] - and: [AtypeFilter] - or: [AtypeFilter] - not: AtypeFilter + has: [AtypeHasFilter] + and: [AtypeFilter] + or: [AtypeFilter] + not: AtypeFilter } input AtypeOrder { - asc: AtypeOrderable - desc: AtypeOrderable - then: AtypeOrder + asc: AtypeOrderable + desc: AtypeOrderable + then: AtypeOrder } input AtypePatch { - iamDeprecated: String - soAmI: String + iamDeprecated: String + soAmI: String } input AtypeRef { - iamDeprecated: String - soAmI: String + iamDeprecated: String + soAmI: String } input UpdateAtypeInput { - filter: AtypeFilter! - set: AtypePatch - remove: AtypePatch + filter: AtypeFilter! + set: AtypePatch + remove: AtypePatch } ####################### @@ -363,8 +361,8 @@ input UpdateAtypeInput { ####################### type Query { - queryAtype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] - aggregateAtype(filter: AtypeFilter): AtypeAggregateResult + queryAtype(filter: AtypeFilter, order: AtypeOrder, first: Int, offset: Int): [Atype] + aggregateAtype(filter: AtypeFilter): AtypeAggregateResult } ####################### @@ -372,7 +370,8 @@ type Query { ####################### type Mutation { - addAtype(input: [AddAtypeInput!]!): AddAtypePayload - updateAtype(input: UpdateAtypeInput!): UpdateAtypePayload - deleteAtype(filter: AtypeFilter!): DeleteAtypePayload + addAtype(input: [AddAtypeInput!]!): AddAtypePayload + updateAtype(input: UpdateAtypeInput!): UpdateAtypePayload + deleteAtype(filter: AtypeFilter!): DeleteAtypePayload } + diff --git a/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql b/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql index f472615167b..395ddae515b 100644 --- a/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-on-concrete-type-with-interfaces.graphql @@ -3,28 +3,25 @@ ####################### interface Movie { - id: ID! - name: String! - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - @dgraph(pred: "directed.movies") - directorAggregate(filter: DirectorFilter): DirectorAggregateResult + id: ID! + name: String! + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] @dgraph(pred: "directed.movies") + directorAggregate(filter: DirectorFilter): DirectorAggregateResult } type OscarMovie implements Movie { - id: ID! - name: String! - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - @dgraph(pred: "directed.movies") - year: Int! - directorAggregate(filter: DirectorFilter): DirectorAggregateResult + id: ID! + name: String! + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] @dgraph(pred: "directed.movies") + year: Int! + directorAggregate(filter: DirectorFilter): DirectorAggregateResult } type Director { - id: ID! - name: String! - directed(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] - @dgraph(pred: "~directed.movies") - directedAggregate(filter: OscarMovieFilter): OscarMovieAggregateResult + id: ID! + name: String! + directed(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] @dgraph(pred: "~directed.movies") + directedAggregate(filter: OscarMovieFilter): OscarMovieAggregateResult } ####################### @@ -43,162 +40,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -210,12 +207,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -224,78 +220,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -303,83 +298,68 @@ input StringHashFilter { ####################### type AddDirectorPayload { - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - numUids: Int + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + numUids: Int } type AddOscarMoviePayload { - oscarMovie( - filter: OscarMovieFilter - order: OscarMovieOrder - first: Int - offset: Int - ): [OscarMovie] - numUids: Int + oscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] + numUids: Int } type DeleteDirectorPayload { - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - msg: String - numUids: Int + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + msg: String + numUids: Int } type DeleteMoviePayload { - movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - msg: String - numUids: Int + movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + msg: String + numUids: Int } type DeleteOscarMoviePayload { - oscarMovie( - filter: OscarMovieFilter - order: OscarMovieOrder - first: Int - offset: Int - ): [OscarMovie] - msg: String - numUids: Int + oscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] + msg: String + numUids: Int } type DirectorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type MovieAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type OscarMovieAggregateResult { - count: Int - nameMin: String - nameMax: String - yearMin: Int - yearMax: Int - yearSum: Int - yearAvg: Float + count: Int + nameMin: String + nameMax: String + yearMin: Int + yearMax: Int + yearSum: Int + yearAvg: Float } type UpdateDirectorPayload { - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - numUids: Int + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + numUids: Int } type UpdateMoviePayload { - movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - numUids: Int + movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + numUids: Int } type UpdateOscarMoviePayload { - oscarMovie( - filter: OscarMovieFilter - order: OscarMovieOrder - first: Int - offset: Int - ): [OscarMovie] - numUids: Int + oscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] + numUids: Int } ####################### @@ -387,32 +367,32 @@ type UpdateOscarMoviePayload { ####################### enum DirectorHasFilter { - name - directed + name + directed } enum DirectorOrderable { - name + name } enum MovieHasFilter { - name - director + name + director } enum MovieOrderable { - name + name } enum OscarMovieHasFilter { - name - director - year + name + director + year } enum OscarMovieOrderable { - name - year + name + year } ####################### @@ -420,104 +400,104 @@ enum OscarMovieOrderable { ####################### input AddDirectorInput { - name: String! + name: String! } input AddOscarMovieInput { - name: String! - director: [DirectorRef] - year: Int! + name: String! + director: [DirectorRef] + year: Int! } input DirectorFilter { - id: [ID!] - has: [DirectorHasFilter] - and: [DirectorFilter] - or: [DirectorFilter] - not: DirectorFilter + id: [ID!] + has: [DirectorHasFilter] + and: [DirectorFilter] + or: [DirectorFilter] + not: DirectorFilter } input DirectorOrder { - asc: DirectorOrderable - desc: DirectorOrderable - then: DirectorOrder + asc: DirectorOrderable + desc: DirectorOrderable + then: DirectorOrder } input DirectorPatch { - name: String + name: String } input DirectorRef { - id: ID - name: String + id: ID + name: String } input MovieFilter { - id: [ID!] - has: [MovieHasFilter] - and: [MovieFilter] - or: [MovieFilter] - not: MovieFilter + id: [ID!] + has: [MovieHasFilter] + and: [MovieFilter] + or: [MovieFilter] + not: MovieFilter } input MovieOrder { - asc: MovieOrderable - desc: MovieOrderable - then: MovieOrder + asc: MovieOrderable + desc: MovieOrderable + then: MovieOrder } input MoviePatch { - name: String - director: [DirectorRef] + name: String + director: [DirectorRef] } input MovieRef { - id: ID! + id: ID! } input OscarMovieFilter { - id: [ID!] - has: [OscarMovieHasFilter] - and: [OscarMovieFilter] - or: [OscarMovieFilter] - not: OscarMovieFilter + id: [ID!] + has: [OscarMovieHasFilter] + and: [OscarMovieFilter] + or: [OscarMovieFilter] + not: OscarMovieFilter } input OscarMovieOrder { - asc: OscarMovieOrderable - desc: OscarMovieOrderable - then: OscarMovieOrder + asc: OscarMovieOrderable + desc: OscarMovieOrderable + then: OscarMovieOrder } input OscarMoviePatch { - name: String - director: [DirectorRef] - year: Int + name: String + director: [DirectorRef] + year: Int } input OscarMovieRef { - id: ID - name: String - director: [DirectorRef] - year: Int + id: ID + name: String + director: [DirectorRef] + year: Int } input UpdateDirectorInput { - filter: DirectorFilter! - set: DirectorPatch - remove: DirectorPatch + filter: DirectorFilter! + set: DirectorPatch + remove: DirectorPatch } input UpdateMovieInput { - filter: MovieFilter! - set: MoviePatch - remove: MoviePatch + filter: MovieFilter! + set: MoviePatch + remove: MoviePatch } input UpdateOscarMovieInput { - filter: OscarMovieFilter! - set: OscarMoviePatch - remove: OscarMoviePatch + filter: OscarMovieFilter! + set: OscarMoviePatch + remove: OscarMoviePatch } ####################### @@ -525,20 +505,15 @@ input UpdateOscarMovieInput { ####################### type Query { - getMovie(id: ID!): Movie - queryMovie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - aggregateMovie(filter: MovieFilter): MovieAggregateResult - getOscarMovie(id: ID!): OscarMovie - queryOscarMovie( - filter: OscarMovieFilter - order: OscarMovieOrder - first: Int - offset: Int - ): [OscarMovie] - aggregateOscarMovie(filter: OscarMovieFilter): OscarMovieAggregateResult - getDirector(id: ID!): Director - queryDirector(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - aggregateDirector(filter: DirectorFilter): DirectorAggregateResult + getMovie(id: ID!): Movie + queryMovie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + aggregateMovie(filter: MovieFilter): MovieAggregateResult + getOscarMovie(id: ID!): OscarMovie + queryOscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] + aggregateOscarMovie(filter: OscarMovieFilter): OscarMovieAggregateResult + getDirector(id: ID!): Director + queryDirector(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + aggregateDirector(filter: DirectorFilter): DirectorAggregateResult } ####################### @@ -546,12 +521,13 @@ type Query { ####################### type Mutation { - updateMovie(input: UpdateMovieInput!): UpdateMoviePayload - deleteMovie(filter: MovieFilter!): DeleteMoviePayload - addOscarMovie(input: [AddOscarMovieInput!]!): AddOscarMoviePayload - updateOscarMovie(input: UpdateOscarMovieInput!): UpdateOscarMoviePayload - deleteOscarMovie(filter: OscarMovieFilter!): DeleteOscarMoviePayload - addDirector(input: [AddDirectorInput!]!): AddDirectorPayload - updateDirector(input: UpdateDirectorInput!): UpdateDirectorPayload - deleteDirector(filter: DirectorFilter!): DeleteDirectorPayload + updateMovie(input: UpdateMovieInput!): UpdateMoviePayload + deleteMovie(filter: MovieFilter!): DeleteMoviePayload + addOscarMovie(input: [AddOscarMovieInput!]!): AddOscarMoviePayload + updateOscarMovie(input: UpdateOscarMovieInput!): UpdateOscarMoviePayload + deleteOscarMovie(filter: OscarMovieFilter!): DeleteOscarMoviePayload + addDirector(input: [AddDirectorInput!]!): AddDirectorPayload + updateDirector(input: UpdateDirectorInput!): UpdateDirectorPayload + deleteDirector(filter: DirectorFilter!): DeleteDirectorPayload } + diff --git a/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-with-interfaces.graphql b/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-with-interfaces.graphql index 4567be7784e..6cfe972414e 100644 --- a/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-with-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/output/dgraph-reverse-directive-with-interfaces.graphql @@ -3,28 +3,25 @@ ####################### interface Movie { - id: ID! - name: String! - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - @dgraph(pred: "~directed.movies") - directorAggregate(filter: DirectorFilter): DirectorAggregateResult + id: ID! + name: String! + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] @dgraph(pred: "~directed.movies") + directorAggregate(filter: DirectorFilter): DirectorAggregateResult } type OscarMovie implements Movie { - id: ID! - name: String! - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - @dgraph(pred: "~directed.movies") - year: Int! - directorAggregate(filter: DirectorFilter): DirectorAggregateResult + id: ID! + name: String! + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] @dgraph(pred: "~directed.movies") + year: Int! + directorAggregate(filter: DirectorFilter): DirectorAggregateResult } type Director { - id: ID! - name: String! - directed(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] - @dgraph(pred: "directed.movies") - directedAggregate(filter: OscarMovieFilter): OscarMovieAggregateResult + id: ID! + name: String! + directed(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] @dgraph(pred: "directed.movies") + directedAggregate(filter: OscarMovieFilter): OscarMovieAggregateResult } ####################### @@ -43,162 +40,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -210,12 +207,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -224,78 +220,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -303,83 +298,68 @@ input StringHashFilter { ####################### type AddDirectorPayload { - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - numUids: Int + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + numUids: Int } type AddOscarMoviePayload { - oscarMovie( - filter: OscarMovieFilter - order: OscarMovieOrder - first: Int - offset: Int - ): [OscarMovie] - numUids: Int + oscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] + numUids: Int } type DeleteDirectorPayload { - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - msg: String - numUids: Int + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + msg: String + numUids: Int } type DeleteMoviePayload { - movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - msg: String - numUids: Int + movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + msg: String + numUids: Int } type DeleteOscarMoviePayload { - oscarMovie( - filter: OscarMovieFilter - order: OscarMovieOrder - first: Int - offset: Int - ): [OscarMovie] - msg: String - numUids: Int + oscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] + msg: String + numUids: Int } type DirectorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type MovieAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type OscarMovieAggregateResult { - count: Int - nameMin: String - nameMax: String - yearMin: Int - yearMax: Int - yearSum: Int - yearAvg: Float + count: Int + nameMin: String + nameMax: String + yearMin: Int + yearMax: Int + yearSum: Int + yearAvg: Float } type UpdateDirectorPayload { - director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - numUids: Int + director(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + numUids: Int } type UpdateMoviePayload { - movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - numUids: Int + movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + numUids: Int } type UpdateOscarMoviePayload { - oscarMovie( - filter: OscarMovieFilter - order: OscarMovieOrder - first: Int - offset: Int - ): [OscarMovie] - numUids: Int + oscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] + numUids: Int } ####################### @@ -387,32 +367,32 @@ type UpdateOscarMoviePayload { ####################### enum DirectorHasFilter { - name - directed + name + directed } enum DirectorOrderable { - name + name } enum MovieHasFilter { - name - director + name + director } enum MovieOrderable { - name + name } enum OscarMovieHasFilter { - name - director - year + name + director + year } enum OscarMovieOrderable { - name - year + name + year } ####################### @@ -420,103 +400,103 @@ enum OscarMovieOrderable { ####################### input AddDirectorInput { - name: String! - directed: [OscarMovieRef] + name: String! + directed: [OscarMovieRef] } input AddOscarMovieInput { - name: String! - year: Int! + name: String! + year: Int! } input DirectorFilter { - id: [ID!] - has: [DirectorHasFilter] - and: [DirectorFilter] - or: [DirectorFilter] - not: DirectorFilter + id: [ID!] + has: [DirectorHasFilter] + and: [DirectorFilter] + or: [DirectorFilter] + not: DirectorFilter } input DirectorOrder { - asc: DirectorOrderable - desc: DirectorOrderable - then: DirectorOrder + asc: DirectorOrderable + desc: DirectorOrderable + then: DirectorOrder } input DirectorPatch { - name: String - directed: [OscarMovieRef] + name: String + directed: [OscarMovieRef] } input DirectorRef { - id: ID - name: String - directed: [OscarMovieRef] + id: ID + name: String + directed: [OscarMovieRef] } input MovieFilter { - id: [ID!] - has: [MovieHasFilter] - and: [MovieFilter] - or: [MovieFilter] - not: MovieFilter + id: [ID!] + has: [MovieHasFilter] + and: [MovieFilter] + or: [MovieFilter] + not: MovieFilter } input MovieOrder { - asc: MovieOrderable - desc: MovieOrderable - then: MovieOrder + asc: MovieOrderable + desc: MovieOrderable + then: MovieOrder } input MoviePatch { - name: String + name: String } input MovieRef { - id: ID! + id: ID! } input OscarMovieFilter { - id: [ID!] - has: [OscarMovieHasFilter] - and: [OscarMovieFilter] - or: [OscarMovieFilter] - not: OscarMovieFilter + id: [ID!] + has: [OscarMovieHasFilter] + and: [OscarMovieFilter] + or: [OscarMovieFilter] + not: OscarMovieFilter } input OscarMovieOrder { - asc: OscarMovieOrderable - desc: OscarMovieOrderable - then: OscarMovieOrder + asc: OscarMovieOrderable + desc: OscarMovieOrderable + then: OscarMovieOrder } input OscarMoviePatch { - name: String - year: Int + name: String + year: Int } input OscarMovieRef { - id: ID - name: String - year: Int + id: ID + name: String + year: Int } input UpdateDirectorInput { - filter: DirectorFilter! - set: DirectorPatch - remove: DirectorPatch + filter: DirectorFilter! + set: DirectorPatch + remove: DirectorPatch } input UpdateMovieInput { - filter: MovieFilter! - set: MoviePatch - remove: MoviePatch + filter: MovieFilter! + set: MoviePatch + remove: MoviePatch } input UpdateOscarMovieInput { - filter: OscarMovieFilter! - set: OscarMoviePatch - remove: OscarMoviePatch + filter: OscarMovieFilter! + set: OscarMoviePatch + remove: OscarMoviePatch } ####################### @@ -524,20 +504,15 @@ input UpdateOscarMovieInput { ####################### type Query { - getMovie(id: ID!): Movie - queryMovie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - aggregateMovie(filter: MovieFilter): MovieAggregateResult - getOscarMovie(id: ID!): OscarMovie - queryOscarMovie( - filter: OscarMovieFilter - order: OscarMovieOrder - first: Int - offset: Int - ): [OscarMovie] - aggregateOscarMovie(filter: OscarMovieFilter): OscarMovieAggregateResult - getDirector(id: ID!): Director - queryDirector(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] - aggregateDirector(filter: DirectorFilter): DirectorAggregateResult + getMovie(id: ID!): Movie + queryMovie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + aggregateMovie(filter: MovieFilter): MovieAggregateResult + getOscarMovie(id: ID!): OscarMovie + queryOscarMovie(filter: OscarMovieFilter, order: OscarMovieOrder, first: Int, offset: Int): [OscarMovie] + aggregateOscarMovie(filter: OscarMovieFilter): OscarMovieAggregateResult + getDirector(id: ID!): Director + queryDirector(filter: DirectorFilter, order: DirectorOrder, first: Int, offset: Int): [Director] + aggregateDirector(filter: DirectorFilter): DirectorAggregateResult } ####################### @@ -545,12 +520,13 @@ type Query { ####################### type Mutation { - updateMovie(input: UpdateMovieInput!): UpdateMoviePayload - deleteMovie(filter: MovieFilter!): DeleteMoviePayload - addOscarMovie(input: [AddOscarMovieInput!]!): AddOscarMoviePayload - updateOscarMovie(input: UpdateOscarMovieInput!): UpdateOscarMoviePayload - deleteOscarMovie(filter: OscarMovieFilter!): DeleteOscarMoviePayload - addDirector(input: [AddDirectorInput!]!): AddDirectorPayload - updateDirector(input: UpdateDirectorInput!): UpdateDirectorPayload - deleteDirector(filter: DirectorFilter!): DeleteDirectorPayload + updateMovie(input: UpdateMovieInput!): UpdateMoviePayload + deleteMovie(filter: MovieFilter!): DeleteMoviePayload + addOscarMovie(input: [AddOscarMovieInput!]!): AddOscarMoviePayload + updateOscarMovie(input: UpdateOscarMovieInput!): UpdateOscarMoviePayload + deleteOscarMovie(filter: OscarMovieFilter!): DeleteOscarMoviePayload + addDirector(input: [AddDirectorInput!]!): AddDirectorPayload + updateDirector(input: UpdateDirectorInput!): UpdateDirectorPayload + deleteDirector(filter: DirectorFilter!): DeleteDirectorPayload } + diff --git a/graphql/schema/testdata/schemagen/output/embedding-directive-with-similar-queries.graphql b/graphql/schema/testdata/schemagen/output/embedding-directive-with-similar-queries.graphql index 3623d4441fb..f0ecf0a1e0d 100644 --- a/graphql/schema/testdata/schemagen/output/embedding-directive-with-similar-queries.graphql +++ b/graphql/schema/testdata/schemagen/output/embedding-directive-with-similar-queries.graphql @@ -3,31 +3,26 @@ ####################### type Product { - id: String! @id - description: String - title: String - imageUrl: String - product_vector: [Float!] @embedding @search(by: ["hnsw(metric: euclidean, exponent: 4)"]) - vector_distance: Float + id: String! @id + description: String + title: String + imageUrl: String + product_vector: [Float!] @embedding @search(by: ["hnsw(metric: euclidean, exponent: 4)"]) + vector_distance: Float } type Purchase @lambdaOnMutate(add: true) { - user(filter: UserFilter): User @hasInverse(field: "purchase_history") - product(filter: ProductFilter): Product - date: DateTime @search(by: [day]) + user(filter: UserFilter): User @hasInverse(field: "purchase_history") + product(filter: ProductFilter): Product + date: DateTime @search(by: [day]) } type User { - email: String! @id - purchase_history( - filter: PurchaseFilter - order: PurchaseOrder - first: Int - offset: Int - ): [Purchase] @hasInverse(field: user) - user_vector: [Float!] @embedding @search(by: ["hnsw"]) - vector_distance: Float - purchase_historyAggregate(filter: PurchaseFilter): PurchaseAggregateResult + email: String! @id + purchase_history(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] @hasInverse(field: user) + user_vector: [Float!] @embedding @search(by: ["hnsw"]) + vector_distance: Float + purchase_historyAggregate(filter: PurchaseFilter): PurchaseAggregateResult } ####################### @@ -46,162 +41,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -213,12 +208,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -227,78 +221,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -306,75 +299,75 @@ input StringHashFilter { ####################### type AddProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } type AddPurchasePayload { - purchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] - numUids: Int + purchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] + numUids: Int } type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - msg: String - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + msg: String + numUids: Int } type DeletePurchasePayload { - purchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] - msg: String - numUids: Int + purchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] + msg: String + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type ProductAggregateResult { - count: Int - idMin: String - idMax: String - descriptionMin: String - descriptionMax: String - titleMin: String - titleMax: String - imageUrlMin: String - imageUrlMax: String + count: Int + idMin: String + idMax: String + descriptionMin: String + descriptionMax: String + titleMin: String + titleMax: String + imageUrlMin: String + imageUrlMax: String } type PurchaseAggregateResult { - count: Int - dateMin: DateTime - dateMax: DateTime + count: Int + dateMin: DateTime + dateMax: DateTime } type UpdateProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } type UpdatePurchasePayload { - purchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] - numUids: Int + purchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - emailMin: String - emailMax: String + count: Int + emailMin: String + emailMax: String } ####################### @@ -382,48 +375,48 @@ type UserAggregateResult { ####################### enum ProductEmbedding { - product_vector + product_vector } enum ProductHasFilter { - id - description - title - imageUrl - product_vector - vector_distance + id + description + title + imageUrl + product_vector + vector_distance } enum ProductOrderable { - id - description - title - imageUrl + id + description + title + imageUrl } enum PurchaseHasFilter { - user - product - date + user + product + date } enum PurchaseOrderable { - date + date } enum UserEmbedding { - user_vector + user_vector } enum UserHasFilter { - email - purchase_history - user_vector - vector_distance + email + purchase_history + user_vector + vector_distance } enum UserOrderable { - email + email } ####################### @@ -431,123 +424,123 @@ enum UserOrderable { ####################### input AddProductInput { - id: String! - description: String - title: String - imageUrl: String - product_vector: [Float!] + id: String! + description: String + title: String + imageUrl: String + product_vector: [Float!] } input AddPurchaseInput { - user: UserRef - product: ProductRef - date: DateTime + user: UserRef + product: ProductRef + date: DateTime } input AddUserInput { - email: String! - purchase_history: [PurchaseRef] - user_vector: [Float!] + email: String! + purchase_history: [PurchaseRef] + user_vector: [Float!] } input ProductFilter { - id: StringHashFilter - has: [ProductHasFilter] - and: [ProductFilter] - or: [ProductFilter] - not: ProductFilter + id: StringHashFilter + has: [ProductHasFilter] + and: [ProductFilter] + or: [ProductFilter] + not: ProductFilter } input ProductOrder { - asc: ProductOrderable - desc: ProductOrderable - then: ProductOrder + asc: ProductOrderable + desc: ProductOrderable + then: ProductOrder } input ProductPatch { - id: String - description: String - title: String - imageUrl: String - product_vector: [Float!] + id: String + description: String + title: String + imageUrl: String + product_vector: [Float!] } input ProductRef { - id: String - description: String - title: String - imageUrl: String - product_vector: [Float!] + id: String + description: String + title: String + imageUrl: String + product_vector: [Float!] } input PurchaseFilter { - date: DateTimeFilter - has: [PurchaseHasFilter] - and: [PurchaseFilter] - or: [PurchaseFilter] - not: PurchaseFilter + date: DateTimeFilter + has: [PurchaseHasFilter] + and: [PurchaseFilter] + or: [PurchaseFilter] + not: PurchaseFilter } input PurchaseOrder { - asc: PurchaseOrderable - desc: PurchaseOrderable - then: PurchaseOrder + asc: PurchaseOrderable + desc: PurchaseOrderable + then: PurchaseOrder } input PurchasePatch { - user: UserRef - product: ProductRef - date: DateTime + user: UserRef + product: ProductRef + date: DateTime } input PurchaseRef { - user: UserRef - product: ProductRef - date: DateTime + user: UserRef + product: ProductRef + date: DateTime } input UpdateProductInput { - filter: ProductFilter! - set: ProductPatch - remove: ProductPatch + filter: ProductFilter! + set: ProductPatch + remove: ProductPatch } input UpdatePurchaseInput { - filter: PurchaseFilter! - set: PurchasePatch - remove: PurchasePatch + filter: PurchaseFilter! + set: PurchasePatch + remove: PurchasePatch } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - email: StringHashFilter - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + email: StringHashFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - email: String - purchase_history: [PurchaseRef] - user_vector: [Float!] + email: String + purchase_history: [PurchaseRef] + user_vector: [Float!] } input UserRef { - email: String - purchase_history: [PurchaseRef] - user_vector: [Float!] + email: String + purchase_history: [PurchaseRef] + user_vector: [Float!] } ####################### @@ -555,33 +548,18 @@ input UserRef { ####################### type Query { - getProduct(id: String!): Product - querySimilarProductById( - id: String! - by: ProductEmbedding! - topK: Int! - filter: ProductFilter - ): [Product] - querySimilarProductByEmbedding( - by: ProductEmbedding! - topK: Int! - vector: [Float!]! - filter: ProductFilter - ): [Product] - queryProduct(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - aggregateProduct(filter: ProductFilter): ProductAggregateResult - queryPurchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] - aggregatePurchase(filter: PurchaseFilter): PurchaseAggregateResult - getUser(email: String!): User - querySimilarUserById(email: String!, by: UserEmbedding!, topK: Int!, filter: UserFilter): [User] - querySimilarUserByEmbedding( - by: UserEmbedding! - topK: Int! - vector: [Float!]! - filter: UserFilter - ): [User] - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getProduct(id: String!): Product + querySimilarProductById(id: String!, by: ProductEmbedding!, topK: Int!, filter: ProductFilter): [Product] + querySimilarProductByEmbedding(by: ProductEmbedding!, topK: Int!, vector: [Float!]!, filter: ProductFilter): [Product] + queryProduct(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + aggregateProduct(filter: ProductFilter): ProductAggregateResult + queryPurchase(filter: PurchaseFilter, order: PurchaseOrder, first: Int, offset: Int): [Purchase] + aggregatePurchase(filter: PurchaseFilter): PurchaseAggregateResult + getUser(email: String!): User + querySimilarUserById(email: String!, by: UserEmbedding!, topK: Int!, filter: UserFilter): [User] + querySimilarUserByEmbedding(by: UserEmbedding!, topK: Int!, vector: [Float!]!, filter: UserFilter): [User] + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -589,13 +567,14 @@ type Query { ####################### type Mutation { - addProduct(input: [AddProductInput!]!, upsert: Boolean): AddProductPayload - updateProduct(input: UpdateProductInput!): UpdateProductPayload - deleteProduct(filter: ProductFilter!): DeleteProductPayload - addPurchase(input: [AddPurchaseInput!]!): AddPurchasePayload - updatePurchase(input: UpdatePurchaseInput!): UpdatePurchasePayload - deletePurchase(filter: PurchaseFilter!): DeletePurchasePayload - addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addProduct(input: [AddProductInput!]!, upsert: Boolean): AddProductPayload + updateProduct(input: UpdateProductInput!): UpdateProductPayload + deleteProduct(filter: ProductFilter!): DeleteProductPayload + addPurchase(input: [AddPurchaseInput!]!): AddPurchasePayload + updatePurchase(input: UpdatePurchaseInput!): UpdatePurchasePayload + deletePurchase(filter: PurchaseFilter!): DeletePurchasePayload + addUser(input: [AddUserInput!]!, upsert: Boolean): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } + diff --git a/graphql/schema/testdata/schemagen/output/field-with-id-directive.graphql b/graphql/schema/testdata/schemagen/output/field-with-id-directive.graphql index b243dfcd5c1..6a0a246aa85 100644 --- a/graphql/schema/testdata/schemagen/output/field-with-id-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/field-with-id-directive.graphql @@ -3,22 +3,22 @@ ####################### type Post { - postID: ID - content: String! - author(filter: AuthorFilter): Author! - genre(filter: GenreFilter): Genre + postID: ID + content: String! + author(filter: AuthorFilter): Author! + genre(filter: GenreFilter): Genre } type Author { - id: ID - name: String! @id @search(by: [regexp]) - pen_name: String - posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID + name: String! @id @search(by: [regexp]) + pen_name: String + posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + postsAggregate(filter: PostFilter): PostAggregateResult } type Genre { - name: String! @id @search(by: [exact]) + name: String! @id @search(by: [exact]) } ####################### @@ -37,162 +37,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -204,12 +204,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -218,78 +217,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -297,71 +295,71 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + numUids: Int } type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String - pen_nameMin: String - pen_nameMax: String + count: Int + nameMin: String + nameMax: String + pen_nameMin: String + pen_nameMax: String } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeleteGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - msg: String - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type GenreAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type PostAggregateResult { - count: Int - contentMin: String - contentMax: String + count: Int + contentMin: String + contentMax: String } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdateGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -369,32 +367,32 @@ type UpdatePostPayload { ####################### enum AuthorHasFilter { - name - pen_name - posts + name + pen_name + posts } enum AuthorOrderable { - name - pen_name + name + pen_name } enum GenreHasFilter { - name + name } enum GenreOrderable { - name + name } enum PostHasFilter { - content - author - genre + content + author + genre } enum PostOrderable { - content + content } ####################### @@ -402,120 +400,120 @@ enum PostOrderable { ####################### input AddAuthorInput { - name: String! - pen_name: String - posts: [PostRef] + name: String! + pen_name: String + posts: [PostRef] } input AddGenreInput { - name: String! + name: String! } input AddPostInput { - content: String! - author: AuthorRef! - genre: GenreRef + content: String! + author: AuthorRef! + genre: GenreRef } input AuthorFilter { - id: [ID!] - name: StringHashFilter_StringRegExpFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + name: StringHashFilter_StringRegExpFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - pen_name: String - posts: [PostRef] + name: String + pen_name: String + posts: [PostRef] } input AuthorRef { - id: ID - name: String - pen_name: String - posts: [PostRef] + id: ID + name: String + pen_name: String + posts: [PostRef] } input GenreFilter { - name: StringExactFilter - has: [GenreHasFilter] - and: [GenreFilter] - or: [GenreFilter] - not: GenreFilter + name: StringExactFilter + has: [GenreHasFilter] + and: [GenreFilter] + or: [GenreFilter] + not: GenreFilter } input GenreOrder { - asc: GenreOrderable - desc: GenreOrderable - then: GenreOrder + asc: GenreOrderable + desc: GenreOrderable + then: GenreOrder } input GenrePatch { - name: String + name: String } input GenreRef { - name: String! + name: String! } input PostFilter { - postID: [ID!] - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + postID: [ID!] + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - content: String - author: AuthorRef - genre: GenreRef + content: String + author: AuthorRef + genre: GenreRef } input PostRef { - postID: ID - content: String - author: AuthorRef - genre: GenreRef + postID: ID + content: String + author: AuthorRef + genre: GenreRef } input StringHashFilter_StringRegExpFilter { - eq: String - in: [String] - regexp: String + eq: String + in: [String] + regexp: String } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdateGenreInput { - filter: GenreFilter! - set: GenrePatch - remove: GenrePatch + filter: GenreFilter! + set: GenrePatch + remove: GenrePatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -523,15 +521,15 @@ input UpdatePostInput { ####################### type Query { - getPost(postID: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getAuthor(id: ID, name: String): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - getGenre(name: String!): Genre - queryGenre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - aggregateGenre(filter: GenreFilter): GenreAggregateResult + getPost(postID: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getAuthor(id: ID, name: String): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getGenre(name: String!): Genre + queryGenre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + aggregateGenre(filter: GenreFilter): GenreAggregateResult } ####################### @@ -539,13 +537,14 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addAuthor(input: [AddAuthorInput!]!, upsert: Boolean): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - addGenre(input: [AddGenreInput!]!, upsert: Boolean): AddGenrePayload - updateGenre(input: UpdateGenreInput!): UpdateGenrePayload - deleteGenre(filter: GenreFilter!): DeleteGenrePayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addAuthor(input: [AddAuthorInput!]!, upsert: Boolean): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addGenre(input: [AddGenreInput!]!, upsert: Boolean): AddGenrePayload + updateGenre(input: UpdateGenreInput!): UpdateGenrePayload + deleteGenre(filter: GenreFilter!): DeleteGenrePayload } + diff --git a/graphql/schema/testdata/schemagen/output/field-with-multiple-@id-fields.graphql b/graphql/schema/testdata/schemagen/output/field-with-multiple-@id-fields.graphql index 6517ca5ab13..71548212021 100644 --- a/graphql/schema/testdata/schemagen/output/field-with-multiple-@id-fields.graphql +++ b/graphql/schema/testdata/schemagen/output/field-with-multiple-@id-fields.graphql @@ -3,22 +3,22 @@ ####################### type Post { - postID: ID - content: String! - author(filter: AuthorFilter): Author! - genre(filter: GenreFilter): Genre + postID: ID + content: String! + author(filter: AuthorFilter): Author! + genre(filter: GenreFilter): Genre } type Author { - id: ID - name: String! @id @search(by: [regexp]) - pen_name: String! @id - posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID + name: String! @id @search(by: [regexp]) + pen_name: String! @id + posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + postsAggregate(filter: PostFilter): PostAggregateResult } type Genre { - name: String! @id + name: String! @id } ####################### @@ -37,162 +37,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -204,12 +204,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -218,78 +217,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -297,71 +295,71 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + numUids: Int } type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String - pen_nameMin: String - pen_nameMax: String + count: Int + nameMin: String + nameMax: String + pen_nameMin: String + pen_nameMax: String } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeleteGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - msg: String - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type GenreAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type PostAggregateResult { - count: Int - contentMin: String - contentMax: String + count: Int + contentMin: String + contentMax: String } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdateGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -369,32 +367,32 @@ type UpdatePostPayload { ####################### enum AuthorHasFilter { - name - pen_name - posts + name + pen_name + posts } enum AuthorOrderable { - name - pen_name + name + pen_name } enum GenreHasFilter { - name + name } enum GenreOrderable { - name + name } enum PostHasFilter { - content - author - genre + content + author + genre } enum PostOrderable { - content + content } ####################### @@ -402,121 +400,121 @@ enum PostOrderable { ####################### input AddAuthorInput { - name: String! - pen_name: String! - posts: [PostRef] + name: String! + pen_name: String! + posts: [PostRef] } input AddGenreInput { - name: String! + name: String! } input AddPostInput { - content: String! - author: AuthorRef! - genre: GenreRef + content: String! + author: AuthorRef! + genre: GenreRef } input AuthorFilter { - id: [ID!] - name: StringHashFilter_StringRegExpFilter - pen_name: StringHashFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + name: StringHashFilter_StringRegExpFilter + pen_name: StringHashFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - pen_name: String - posts: [PostRef] + name: String + pen_name: String + posts: [PostRef] } input AuthorRef { - id: ID - name: String - pen_name: String - posts: [PostRef] + id: ID + name: String + pen_name: String + posts: [PostRef] } input GenreFilter { - name: StringHashFilter - has: [GenreHasFilter] - and: [GenreFilter] - or: [GenreFilter] - not: GenreFilter + name: StringHashFilter + has: [GenreHasFilter] + and: [GenreFilter] + or: [GenreFilter] + not: GenreFilter } input GenreOrder { - asc: GenreOrderable - desc: GenreOrderable - then: GenreOrder + asc: GenreOrderable + desc: GenreOrderable + then: GenreOrder } input GenrePatch { - name: String + name: String } input GenreRef { - name: String! + name: String! } input PostFilter { - postID: [ID!] - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + postID: [ID!] + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - content: String - author: AuthorRef - genre: GenreRef + content: String + author: AuthorRef + genre: GenreRef } input PostRef { - postID: ID - content: String - author: AuthorRef - genre: GenreRef + postID: ID + content: String + author: AuthorRef + genre: GenreRef } input StringHashFilter_StringRegExpFilter { - eq: String - in: [String] - regexp: String + eq: String + in: [String] + regexp: String } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdateGenreInput { - filter: GenreFilter! - set: GenrePatch - remove: GenrePatch + filter: GenreFilter! + set: GenrePatch + remove: GenrePatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -524,15 +522,15 @@ input UpdatePostInput { ####################### type Query { - getPost(postID: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getAuthor(id: ID, name: String, pen_name: String): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - getGenre(name: String!): Genre - queryGenre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - aggregateGenre(filter: GenreFilter): GenreAggregateResult + getPost(postID: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getAuthor(id: ID, name: String, pen_name: String): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getGenre(name: String!): Genre + queryGenre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + aggregateGenre(filter: GenreFilter): GenreAggregateResult } ####################### @@ -540,13 +538,14 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addAuthor(input: [AddAuthorInput!]!, upsert: Boolean): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - addGenre(input: [AddGenreInput!]!, upsert: Boolean): AddGenrePayload - updateGenre(input: UpdateGenreInput!): UpdateGenrePayload - deleteGenre(filter: GenreFilter!): DeleteGenrePayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addAuthor(input: [AddAuthorInput!]!, upsert: Boolean): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addGenre(input: [AddGenreInput!]!, upsert: Boolean): AddGenrePayload + updateGenre(input: UpdateGenreInput!): UpdateGenrePayload + deleteGenre(filter: GenreFilter!): DeleteGenrePayload } + diff --git a/graphql/schema/testdata/schemagen/output/field-with-reverse-predicate-in-dgraph-directive.graphql b/graphql/schema/testdata/schemagen/output/field-with-reverse-predicate-in-dgraph-directive.graphql index 1d31ebac1cf..31b594c2a7e 100644 --- a/graphql/schema/testdata/schemagen/output/field-with-reverse-predicate-in-dgraph-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/field-with-reverse-predicate-in-dgraph-directive.graphql @@ -3,23 +3,17 @@ ####################### type Movie { - id: ID! - name: String! - director( - filter: MovieDirectorFilter - order: MovieDirectorOrder - first: Int - offset: Int - ): [MovieDirector] @dgraph(pred: "~directed.movies") - directorAggregate(filter: MovieDirectorFilter): MovieDirectorAggregateResult + id: ID! + name: String! + director(filter: MovieDirectorFilter, order: MovieDirectorOrder, first: Int, offset: Int): [MovieDirector] @dgraph(pred: "~directed.movies") + directorAggregate(filter: MovieDirectorFilter): MovieDirectorAggregateResult } type MovieDirector { - id: ID! - name: String! - directed(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - @dgraph(pred: "directed.movies") - directedAggregate(filter: MovieFilter): MovieAggregateResult + id: ID! + name: String! + directed(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] @dgraph(pred: "directed.movies") + directedAggregate(filter: MovieFilter): MovieAggregateResult } ####################### @@ -38,162 +32,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -205,12 +199,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -219,78 +212,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -298,62 +290,47 @@ input StringHashFilter { ####################### type AddMovieDirectorPayload { - movieDirector( - filter: MovieDirectorFilter - order: MovieDirectorOrder - first: Int - offset: Int - ): [MovieDirector] - numUids: Int + movieDirector(filter: MovieDirectorFilter, order: MovieDirectorOrder, first: Int, offset: Int): [MovieDirector] + numUids: Int } type AddMoviePayload { - movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - numUids: Int + movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + numUids: Int } type DeleteMovieDirectorPayload { - movieDirector( - filter: MovieDirectorFilter - order: MovieDirectorOrder - first: Int - offset: Int - ): [MovieDirector] - msg: String - numUids: Int + movieDirector(filter: MovieDirectorFilter, order: MovieDirectorOrder, first: Int, offset: Int): [MovieDirector] + msg: String + numUids: Int } type DeleteMoviePayload { - movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - msg: String - numUids: Int + movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + msg: String + numUids: Int } type MovieAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type MovieDirectorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type UpdateMovieDirectorPayload { - movieDirector( - filter: MovieDirectorFilter - order: MovieDirectorOrder - first: Int - offset: Int - ): [MovieDirector] - numUids: Int + movieDirector(filter: MovieDirectorFilter, order: MovieDirectorOrder, first: Int, offset: Int): [MovieDirector] + numUids: Int } type UpdateMoviePayload { - movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - numUids: Int + movie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + numUids: Int } ####################### @@ -361,21 +338,21 @@ type UpdateMoviePayload { ####################### enum MovieDirectorHasFilter { - name - directed + name + directed } enum MovieDirectorOrderable { - name + name } enum MovieHasFilter { - name - director + name + director } enum MovieOrderable { - name + name } ####################### @@ -383,72 +360,72 @@ enum MovieOrderable { ####################### input AddMovieDirectorInput { - name: String! - directed: [MovieRef] + name: String! + directed: [MovieRef] } input AddMovieInput { - name: String! + name: String! } input MovieDirectorFilter { - id: [ID!] - has: [MovieDirectorHasFilter] - and: [MovieDirectorFilter] - or: [MovieDirectorFilter] - not: MovieDirectorFilter + id: [ID!] + has: [MovieDirectorHasFilter] + and: [MovieDirectorFilter] + or: [MovieDirectorFilter] + not: MovieDirectorFilter } input MovieDirectorOrder { - asc: MovieDirectorOrderable - desc: MovieDirectorOrderable - then: MovieDirectorOrder + asc: MovieDirectorOrderable + desc: MovieDirectorOrderable + then: MovieDirectorOrder } input MovieDirectorPatch { - name: String - directed: [MovieRef] + name: String + directed: [MovieRef] } input MovieDirectorRef { - id: ID - name: String - directed: [MovieRef] + id: ID + name: String + directed: [MovieRef] } input MovieFilter { - id: [ID!] - has: [MovieHasFilter] - and: [MovieFilter] - or: [MovieFilter] - not: MovieFilter + id: [ID!] + has: [MovieHasFilter] + and: [MovieFilter] + or: [MovieFilter] + not: MovieFilter } input MovieOrder { - asc: MovieOrderable - desc: MovieOrderable - then: MovieOrder + asc: MovieOrderable + desc: MovieOrderable + then: MovieOrder } input MoviePatch { - name: String + name: String } input MovieRef { - id: ID - name: String + id: ID + name: String } input UpdateMovieDirectorInput { - filter: MovieDirectorFilter! - set: MovieDirectorPatch - remove: MovieDirectorPatch + filter: MovieDirectorFilter! + set: MovieDirectorPatch + remove: MovieDirectorPatch } input UpdateMovieInput { - filter: MovieFilter! - set: MoviePatch - remove: MoviePatch + filter: MovieFilter! + set: MoviePatch + remove: MoviePatch } ####################### @@ -456,17 +433,12 @@ input UpdateMovieInput { ####################### type Query { - getMovie(id: ID!): Movie - queryMovie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] - aggregateMovie(filter: MovieFilter): MovieAggregateResult - getMovieDirector(id: ID!): MovieDirector - queryMovieDirector( - filter: MovieDirectorFilter - order: MovieDirectorOrder - first: Int - offset: Int - ): [MovieDirector] - aggregateMovieDirector(filter: MovieDirectorFilter): MovieDirectorAggregateResult + getMovie(id: ID!): Movie + queryMovie(filter: MovieFilter, order: MovieOrder, first: Int, offset: Int): [Movie] + aggregateMovie(filter: MovieFilter): MovieAggregateResult + getMovieDirector(id: ID!): MovieDirector + queryMovieDirector(filter: MovieDirectorFilter, order: MovieDirectorOrder, first: Int, offset: Int): [MovieDirector] + aggregateMovieDirector(filter: MovieDirectorFilter): MovieDirectorAggregateResult } ####################### @@ -474,10 +446,11 @@ type Query { ####################### type Mutation { - addMovie(input: [AddMovieInput!]!): AddMoviePayload - updateMovie(input: UpdateMovieInput!): UpdateMoviePayload - deleteMovie(filter: MovieFilter!): DeleteMoviePayload - addMovieDirector(input: [AddMovieDirectorInput!]!): AddMovieDirectorPayload - updateMovieDirector(input: UpdateMovieDirectorInput!): UpdateMovieDirectorPayload - deleteMovieDirector(filter: MovieDirectorFilter!): DeleteMovieDirectorPayload + addMovie(input: [AddMovieInput!]!): AddMoviePayload + updateMovie(input: UpdateMovieInput!): UpdateMoviePayload + deleteMovie(filter: MovieFilter!): DeleteMoviePayload + addMovieDirector(input: [AddMovieDirectorInput!]!): AddMovieDirectorPayload + updateMovieDirector(input: UpdateMovieDirectorInput!): UpdateMovieDirectorPayload + deleteMovieDirector(filter: MovieDirectorFilter!): DeleteMovieDirectorPayload } + diff --git a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-all-empty.graphql b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-all-empty.graphql index 675fcdcbba8..2cf10c23814 100644 --- a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-all-empty.graphql +++ b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-all-empty.graphql @@ -3,20 +3,20 @@ ####################### type X { - name(filter: YFilter, first: Int, offset: Int): [Y] - f1(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f1") - nameAggregate(filter: YFilter): YAggregateResult - f1Aggregate(filter: YFilter): YAggregateResult + name(filter: YFilter, first: Int, offset: Int): [Y] + f1(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f1") + nameAggregate(filter: YFilter): YAggregateResult + f1Aggregate(filter: YFilter): YAggregateResult } type Y { - f1(filter: XFilter, first: Int, offset: Int): [X] @dgraph(pred: "~f1") - f1Aggregate(filter: XFilter): XAggregateResult + f1(filter: XFilter, first: Int, offset: Int): [X] @dgraph(pred: "~f1") + f1Aggregate(filter: XFilter): XAggregateResult } type Z { - add(filter: XFilter, first: Int, offset: Int): [X] - addAggregate(filter: XFilter): XAggregateResult + add(filter: XFilter, first: Int, offset: Int): [X] + addAggregate(filter: XFilter): XAggregateResult } ####################### @@ -35,162 +35,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -202,12 +202,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -216,78 +215,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -295,53 +293,53 @@ input StringHashFilter { ####################### type AddXPayload { - x(filter: XFilter, first: Int, offset: Int): [X] - numUids: Int + x(filter: XFilter, first: Int, offset: Int): [X] + numUids: Int } type AddZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + numUids: Int } type DeleteXPayload { - x(filter: XFilter, first: Int, offset: Int): [X] - msg: String - numUids: Int + x(filter: XFilter, first: Int, offset: Int): [X] + msg: String + numUids: Int } type DeleteYPayload { - y(filter: YFilter, first: Int, offset: Int): [Y] - msg: String - numUids: Int + y(filter: YFilter, first: Int, offset: Int): [Y] + msg: String + numUids: Int } type DeleteZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - msg: String - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + msg: String + numUids: Int } type UpdateXPayload { - x(filter: XFilter, first: Int, offset: Int): [X] - numUids: Int + x(filter: XFilter, first: Int, offset: Int): [X] + numUids: Int } type UpdateZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + numUids: Int } type XAggregateResult { - count: Int + count: Int } type YAggregateResult { - count: Int + count: Int } type ZAggregateResult { - count: Int + count: Int } ####################### @@ -349,16 +347,16 @@ type ZAggregateResult { ####################### enum XHasFilter { - name - f1 + name + f1 } enum YHasFilter { - f1 + f1 } enum ZHasFilter { - add + add } ####################### @@ -366,21 +364,21 @@ enum ZHasFilter { ####################### input XFilter { - has: [XHasFilter] - and: [XFilter] - or: [XFilter] - not: XFilter + has: [XHasFilter] + and: [XFilter] + or: [XFilter] + not: XFilter } input YFilter { - not: YFilter + not: YFilter } input ZFilter { - has: [ZHasFilter] - and: [ZFilter] - or: [ZFilter] - not: ZFilter + has: [ZHasFilter] + and: [ZFilter] + or: [ZFilter] + not: ZFilter } ####################### @@ -388,12 +386,12 @@ input ZFilter { ####################### type Query { - queryX(filter: XFilter, first: Int, offset: Int): [X] - aggregateX(filter: XFilter): XAggregateResult - queryY(filter: YFilter, first: Int, offset: Int): [Y] - aggregateY(filter: YFilter): YAggregateResult - queryZ(filter: ZFilter, first: Int, offset: Int): [Z] - aggregateZ(filter: ZFilter): ZAggregateResult + queryX(filter: XFilter, first: Int, offset: Int): [X] + aggregateX(filter: XFilter): XAggregateResult + queryY(filter: YFilter, first: Int, offset: Int): [Y] + aggregateY(filter: YFilter): YAggregateResult + queryZ(filter: ZFilter, first: Int, offset: Int): [Z] + aggregateZ(filter: ZFilter): ZAggregateResult } ####################### @@ -401,7 +399,8 @@ type Query { ####################### type Mutation { - deleteX(filter: XFilter!): DeleteXPayload - deleteY(filter: YFilter!): DeleteYPayload - deleteZ(filter: ZFilter!): DeleteZPayload + deleteX(filter: XFilter!): DeleteXPayload + deleteY(filter: YFilter!): DeleteYPayload + deleteZ(filter: ZFilter!): DeleteZPayload } + diff --git a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-circular.graphql b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-circular.graphql index c05def0d14f..78e536d76ed 100644 --- a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-circular.graphql +++ b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-circular.graphql @@ -3,24 +3,24 @@ ####################### type X { - f1(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f1") - f3(filter: ZFilter, first: Int, offset: Int): [Z] @dgraph(pred: "~f3") - f1Aggregate(filter: YFilter): YAggregateResult - f3Aggregate(filter: ZFilter): ZAggregateResult + f1(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f1") + f3(filter: ZFilter, first: Int, offset: Int): [Z] @dgraph(pred: "~f3") + f1Aggregate(filter: YFilter): YAggregateResult + f3Aggregate(filter: ZFilter): ZAggregateResult } type Y { - f1(filter: XFilter, first: Int, offset: Int): [X] @dgraph(pred: "~f1") - f2(filter: ZFilter, first: Int, offset: Int): [Z] @dgraph(pred: "f2") - f1Aggregate(filter: XFilter): XAggregateResult - f2Aggregate(filter: ZFilter): ZAggregateResult + f1(filter: XFilter, first: Int, offset: Int): [X] @dgraph(pred: "~f1") + f2(filter: ZFilter, first: Int, offset: Int): [Z] @dgraph(pred: "f2") + f1Aggregate(filter: XFilter): XAggregateResult + f2Aggregate(filter: ZFilter): ZAggregateResult } type Z { - f2(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "~f2") - f3(filter: XFilter, first: Int, offset: Int): [X] @dgraph(pred: "f3") - f2Aggregate(filter: YFilter): YAggregateResult - f3Aggregate(filter: XFilter): XAggregateResult + f2(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "~f2") + f3(filter: XFilter, first: Int, offset: Int): [X] @dgraph(pred: "f3") + f2Aggregate(filter: YFilter): YAggregateResult + f3Aggregate(filter: XFilter): XAggregateResult } ####################### @@ -39,162 +39,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -206,12 +206,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -220,78 +219,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -299,63 +297,63 @@ input StringHashFilter { ####################### type AddXPayload { - x(filter: XFilter, first: Int, offset: Int): [X] - numUids: Int + x(filter: XFilter, first: Int, offset: Int): [X] + numUids: Int } type AddYPayload { - y(filter: YFilter, first: Int, offset: Int): [Y] - numUids: Int + y(filter: YFilter, first: Int, offset: Int): [Y] + numUids: Int } type AddZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + numUids: Int } type DeleteXPayload { - x(filter: XFilter, first: Int, offset: Int): [X] - msg: String - numUids: Int + x(filter: XFilter, first: Int, offset: Int): [X] + msg: String + numUids: Int } type DeleteYPayload { - y(filter: YFilter, first: Int, offset: Int): [Y] - msg: String - numUids: Int + y(filter: YFilter, first: Int, offset: Int): [Y] + msg: String + numUids: Int } type DeleteZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - msg: String - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + msg: String + numUids: Int } type UpdateXPayload { - x(filter: XFilter, first: Int, offset: Int): [X] - numUids: Int + x(filter: XFilter, first: Int, offset: Int): [X] + numUids: Int } type UpdateYPayload { - y(filter: YFilter, first: Int, offset: Int): [Y] - numUids: Int + y(filter: YFilter, first: Int, offset: Int): [Y] + numUids: Int } type UpdateZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + numUids: Int } type XAggregateResult { - count: Int + count: Int } type YAggregateResult { - count: Int + count: Int } type ZAggregateResult { - count: Int + count: Int } ####################### @@ -363,18 +361,18 @@ type ZAggregateResult { ####################### enum XHasFilter { - f1 - f3 + f1 + f3 } enum YHasFilter { - f1 - f2 + f1 + f2 } enum ZHasFilter { - f2 - f3 + f2 + f3 } ####################### @@ -382,78 +380,78 @@ enum ZHasFilter { ####################### input AddXInput { - f1: [YRef] + f1: [YRef] } input AddYInput { - f2: [ZRef] + f2: [ZRef] } input AddZInput { - f3: [XRef] + f3: [XRef] } input UpdateXInput { - filter: XFilter! - set: XPatch - remove: XPatch + filter: XFilter! + set: XPatch + remove: XPatch } input UpdateYInput { - filter: YFilter! - set: YPatch - remove: YPatch + filter: YFilter! + set: YPatch + remove: YPatch } input UpdateZInput { - filter: ZFilter! - set: ZPatch - remove: ZPatch + filter: ZFilter! + set: ZPatch + remove: ZPatch } input XFilter { - has: [XHasFilter] - and: [XFilter] - or: [XFilter] - not: XFilter + has: [XHasFilter] + and: [XFilter] + or: [XFilter] + not: XFilter } input XPatch { - f1: [YRef] + f1: [YRef] } input XRef { - f1: [YRef] + f1: [YRef] } input YFilter { - has: [YHasFilter] - and: [YFilter] - or: [YFilter] - not: YFilter + has: [YHasFilter] + and: [YFilter] + or: [YFilter] + not: YFilter } input YPatch { - f2: [ZRef] + f2: [ZRef] } input YRef { - f2: [ZRef] + f2: [ZRef] } input ZFilter { - has: [ZHasFilter] - and: [ZFilter] - or: [ZFilter] - not: ZFilter + has: [ZHasFilter] + and: [ZFilter] + or: [ZFilter] + not: ZFilter } input ZPatch { - f3: [XRef] + f3: [XRef] } input ZRef { - f3: [XRef] + f3: [XRef] } ####################### @@ -461,12 +459,12 @@ input ZRef { ####################### type Query { - queryX(filter: XFilter, first: Int, offset: Int): [X] - aggregateX(filter: XFilter): XAggregateResult - queryY(filter: YFilter, first: Int, offset: Int): [Y] - aggregateY(filter: YFilter): YAggregateResult - queryZ(filter: ZFilter, first: Int, offset: Int): [Z] - aggregateZ(filter: ZFilter): ZAggregateResult + queryX(filter: XFilter, first: Int, offset: Int): [X] + aggregateX(filter: XFilter): XAggregateResult + queryY(filter: YFilter, first: Int, offset: Int): [Y] + aggregateY(filter: YFilter): YAggregateResult + queryZ(filter: ZFilter, first: Int, offset: Int): [Z] + aggregateZ(filter: ZFilter): ZAggregateResult } ####################### @@ -474,13 +472,14 @@ type Query { ####################### type Mutation { - addX(input: [AddXInput!]!): AddXPayload - updateX(input: UpdateXInput!): UpdateXPayload - deleteX(filter: XFilter!): DeleteXPayload - addY(input: [AddYInput!]!): AddYPayload - updateY(input: UpdateYInput!): UpdateYPayload - deleteY(filter: YFilter!): DeleteYPayload - addZ(input: [AddZInput!]!): AddZPayload - updateZ(input: UpdateZInput!): UpdateZPayload - deleteZ(filter: ZFilter!): DeleteZPayload + addX(input: [AddXInput!]!): AddXPayload + updateX(input: UpdateXInput!): UpdateXPayload + deleteX(filter: XFilter!): DeleteXPayload + addY(input: [AddYInput!]!): AddYPayload + updateY(input: UpdateYInput!): UpdateYPayload + deleteY(filter: YFilter!): DeleteYPayload + addZ(input: [AddZInput!]!): AddZPayload + updateZ(input: UpdateZInput!): UpdateZPayload + deleteZ(filter: ZFilter!): DeleteZPayload } + diff --git a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-custom-mutation.graphql b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-custom-mutation.graphql index 63cf8e888d1..e94e759d18b 100644 --- a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-custom-mutation.graphql +++ b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-custom-mutation.graphql @@ -3,12 +3,12 @@ ####################### type User { - id: ID! - name: String! + id: ID! + name: String! } input UserInput { - name: String! + name: String! } ####################### @@ -27,162 +27,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -194,12 +194,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -208,78 +207,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -287,25 +285,25 @@ input StringHashFilter { ####################### type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } ####################### @@ -313,11 +311,11 @@ type UserAggregateResult { ####################### enum UserHasFilter { - name + name } enum UserOrderable { - name + name } ####################### @@ -325,36 +323,36 @@ enum UserOrderable { ####################### input AddUserInput { - name: String! + name: String! } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - id: [ID!] - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + id: [ID!] + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - name: String + name: String } input UserRef { - id: ID - name: String + id: ID + name: String } ####################### @@ -362,9 +360,9 @@ input UserRef { ####################### type Query { - getUser(id: ID!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getUser(id: ID!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -372,9 +370,9 @@ type Query { ####################### type Mutation { - addMyFavouriteUsers(input: [UserInput!]!): [User] - @custom(http: { url: "http://my-api.com", method: "POST", body: "{ data: $input }" }) - addUser(input: [AddUserInput!]!): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addMyFavouriteUsers(input: [UserInput!]!): [User] @custom(http: {url:"http://my-api.com",method:"POST",body:"{ data: $input }"}) + addUser(input: [AddUserInput!]!): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } + diff --git a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-directLink.graphql b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-directLink.graphql index 8d105fcc8fa..e26f5cc4672 100644 --- a/graphql/schema/testdata/schemagen/output/filter-cleanSchema-directLink.graphql +++ b/graphql/schema/testdata/schemagen/output/filter-cleanSchema-directLink.graphql @@ -3,22 +3,22 @@ ####################### type X { - f1(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f1") - name: String - id: ID - f1Aggregate(filter: YFilter): YAggregateResult + f1(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f1") + name: String + id: ID + f1Aggregate(filter: YFilter): YAggregateResult } type Y { - f2(filter: ZFilter, first: Int, offset: Int): [Z] @dgraph(pred: "~f2") - f1(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] @dgraph(pred: "~f1") - f2Aggregate(filter: ZFilter): ZAggregateResult - f1Aggregate(filter: XFilter): XAggregateResult + f2(filter: ZFilter, first: Int, offset: Int): [Z] @dgraph(pred: "~f2") + f1(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] @dgraph(pred: "~f1") + f2Aggregate(filter: ZFilter): ZAggregateResult + f1Aggregate(filter: XFilter): XAggregateResult } type Z { - f2(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f2") - f2Aggregate(filter: YFilter): YAggregateResult + f2(filter: YFilter, first: Int, offset: Int): [Y] @dgraph(pred: "f2") + f2Aggregate(filter: YFilter): YAggregateResult } ####################### @@ -37,162 +37,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -204,12 +204,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -218,78 +217,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -297,55 +295,55 @@ input StringHashFilter { ####################### type AddXPayload { - x(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] - numUids: Int + x(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] + numUids: Int } type AddZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + numUids: Int } type DeleteXPayload { - x(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] - msg: String - numUids: Int + x(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] + msg: String + numUids: Int } type DeleteYPayload { - y(filter: YFilter, first: Int, offset: Int): [Y] - msg: String - numUids: Int + y(filter: YFilter, first: Int, offset: Int): [Y] + msg: String + numUids: Int } type DeleteZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - msg: String - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + msg: String + numUids: Int } type UpdateXPayload { - x(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] - numUids: Int + x(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] + numUids: Int } type UpdateZPayload { - z(filter: ZFilter, first: Int, offset: Int): [Z] - numUids: Int + z(filter: ZFilter, first: Int, offset: Int): [Z] + numUids: Int } type XAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type YAggregateResult { - count: Int + count: Int } type ZAggregateResult { - count: Int + count: Int } ####################### @@ -353,21 +351,21 @@ type ZAggregateResult { ####################### enum XHasFilter { - f1 - name + f1 + name } enum XOrderable { - name + name } enum YHasFilter { - f2 - f1 + f2 + f1 } enum ZHasFilter { - f2 + f2 } ####################### @@ -375,47 +373,47 @@ enum ZHasFilter { ####################### input AddXInput { - name: String + name: String } input UpdateXInput { - filter: XFilter! - set: XPatch - remove: XPatch + filter: XFilter! + set: XPatch + remove: XPatch } input XFilter { - id: [ID!] - has: [XHasFilter] - and: [XFilter] - or: [XFilter] - not: XFilter + id: [ID!] + has: [XHasFilter] + and: [XFilter] + or: [XFilter] + not: XFilter } input XOrder { - asc: XOrderable - desc: XOrderable - then: XOrder + asc: XOrderable + desc: XOrderable + then: XOrder } input XPatch { - name: String + name: String } input XRef { - id: ID - name: String + id: ID + name: String } input YFilter { - not: YFilter + not: YFilter } input ZFilter { - has: [ZHasFilter] - and: [ZFilter] - or: [ZFilter] - not: ZFilter + has: [ZHasFilter] + and: [ZFilter] + or: [ZFilter] + not: ZFilter } ####################### @@ -423,13 +421,13 @@ input ZFilter { ####################### type Query { - getX(id: ID!): X - queryX(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] - aggregateX(filter: XFilter): XAggregateResult - queryY(filter: YFilter, first: Int, offset: Int): [Y] - aggregateY(filter: YFilter): YAggregateResult - queryZ(filter: ZFilter, first: Int, offset: Int): [Z] - aggregateZ(filter: ZFilter): ZAggregateResult + getX(id: ID!): X + queryX(filter: XFilter, order: XOrder, first: Int, offset: Int): [X] + aggregateX(filter: XFilter): XAggregateResult + queryY(filter: YFilter, first: Int, offset: Int): [Y] + aggregateY(filter: YFilter): YAggregateResult + queryZ(filter: ZFilter, first: Int, offset: Int): [Z] + aggregateZ(filter: ZFilter): ZAggregateResult } ####################### @@ -437,9 +435,10 @@ type Query { ####################### type Mutation { - addX(input: [AddXInput!]!): AddXPayload - updateX(input: UpdateXInput!): UpdateXPayload - deleteX(filter: XFilter!): DeleteXPayload - deleteY(filter: YFilter!): DeleteYPayload - deleteZ(filter: ZFilter!): DeleteZPayload + addX(input: [AddXInput!]!): AddXPayload + updateX(input: UpdateXInput!): UpdateXPayload + deleteX(filter: XFilter!): DeleteXPayload + deleteY(filter: YFilter!): DeleteYPayload + deleteZ(filter: ZFilter!): DeleteZPayload } + diff --git a/graphql/schema/testdata/schemagen/output/generate-directive.graphql b/graphql/schema/testdata/schemagen/output/generate-directive.graphql index cb3e0dd0406..b5cda816303 100644 --- a/graphql/schema/testdata/schemagen/output/generate-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/generate-directive.graphql @@ -2,34 +2,24 @@ # Input Schema ####################### -interface Character - @secret(field: "password") - @generate(query: { get: false, password: false }, subscription: false) { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult -} - -type Human implements Character - @generate(query: { aggregate: true }, subscription: true) - @secret(field: "password") { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - totalCredits: Int - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult -} - -type Person - @withSubscription - @generate( - query: { get: false, query: true, password: true, aggregate: false } - mutation: { add: false, delete: false } - subscription: false - ) { - id: ID! - name: String! +interface Character @secret(field: "password") @generate(query: {get:false,password:false}, subscription: false) { + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult +} + +type Human implements Character @generate(query: {aggregate:true}, subscription: true) @secret(field: "password") { + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + totalCredits: Int + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult +} + +type Person @withSubscription @generate(query: {get:false,query:true,password:true,aggregate:false}, mutation: {add:false,delete:false}, subscription: false) { + id: ID! + name: String! } ####################### @@ -48,162 +38,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -215,12 +205,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -229,78 +218,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -308,57 +296,57 @@ input StringHashFilter { ####################### type AddHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type CharacterAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - msg: String - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + msg: String + numUids: Int } type DeleteHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - msg: String - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + msg: String + numUids: Int } type HumanAggregateResult { - count: Int - nameMin: String - nameMax: String - totalCreditsMin: Int - totalCreditsMax: Int - totalCreditsSum: Int - totalCreditsAvg: Float + count: Int + nameMin: String + nameMax: String + totalCreditsMin: Int + totalCreditsMax: Int + totalCreditsSum: Int + totalCreditsAvg: Float } type PersonAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type UpdateCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + numUids: Int } type UpdateHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type UpdatePersonPayload { - person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - numUids: Int + person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + numUids: Int } ####################### @@ -366,31 +354,31 @@ type UpdatePersonPayload { ####################### enum CharacterHasFilter { - name - friends + name + friends } enum CharacterOrderable { - name + name } enum HumanHasFilter { - name - friends - totalCredits + name + friends + totalCredits } enum HumanOrderable { - name - totalCredits + name + totalCredits } enum PersonHasFilter { - name + name } enum PersonOrderable { - name + name } ####################### @@ -398,106 +386,106 @@ enum PersonOrderable { ####################### input AddHumanInput { - name: String! - friends: [CharacterRef] - totalCredits: Int - password: String! + name: String! + friends: [CharacterRef] + totalCredits: Int + password: String! } input CharacterFilter { - id: [ID!] - name: StringExactFilter - has: [CharacterHasFilter] - and: [CharacterFilter] - or: [CharacterFilter] - not: CharacterFilter + id: [ID!] + name: StringExactFilter + has: [CharacterHasFilter] + and: [CharacterFilter] + or: [CharacterFilter] + not: CharacterFilter } input CharacterOrder { - asc: CharacterOrderable - desc: CharacterOrderable - then: CharacterOrder + asc: CharacterOrderable + desc: CharacterOrderable + then: CharacterOrder } input CharacterPatch { - name: String - friends: [CharacterRef] - password: String + name: String + friends: [CharacterRef] + password: String } input CharacterRef { - id: ID! + id: ID! } input HumanFilter { - id: [ID!] - name: StringExactFilter - has: [HumanHasFilter] - and: [HumanFilter] - or: [HumanFilter] - not: HumanFilter + id: [ID!] + name: StringExactFilter + has: [HumanHasFilter] + and: [HumanFilter] + or: [HumanFilter] + not: HumanFilter } input HumanOrder { - asc: HumanOrderable - desc: HumanOrderable - then: HumanOrder + asc: HumanOrderable + desc: HumanOrderable + then: HumanOrder } input HumanPatch { - name: String - friends: [CharacterRef] - totalCredits: Int - password: String + name: String + friends: [CharacterRef] + totalCredits: Int + password: String } input HumanRef { - id: ID - name: String - friends: [CharacterRef] - totalCredits: Int - password: String + id: ID + name: String + friends: [CharacterRef] + totalCredits: Int + password: String } input PersonFilter { - id: [ID!] - has: [PersonHasFilter] - and: [PersonFilter] - or: [PersonFilter] - not: PersonFilter + id: [ID!] + has: [PersonHasFilter] + and: [PersonFilter] + or: [PersonFilter] + not: PersonFilter } input PersonOrder { - asc: PersonOrderable - desc: PersonOrderable - then: PersonOrder + asc: PersonOrderable + desc: PersonOrderable + then: PersonOrder } input PersonPatch { - name: String + name: String } input PersonRef { - id: ID - name: String + id: ID + name: String } input UpdateCharacterInput { - filter: CharacterFilter! - set: CharacterPatch - remove: CharacterPatch + filter: CharacterFilter! + set: CharacterPatch + remove: CharacterPatch } input UpdateHumanInput { - filter: HumanFilter! - set: HumanPatch - remove: HumanPatch + filter: HumanFilter! + set: HumanPatch + remove: HumanPatch } input UpdatePersonInput { - filter: PersonFilter! - set: PersonPatch - remove: PersonPatch + filter: PersonFilter! + set: PersonPatch + remove: PersonPatch } ####################### @@ -505,18 +493,13 @@ input UpdatePersonInput { ####################### type Query { - queryCharacter( - filter: CharacterFilter - order: CharacterOrder - first: Int - offset: Int - ): [Character] - aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult - getHuman(id: ID!): Human - checkHumanPassword(id: ID!, password: String!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult - queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + queryCharacter(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult + getHuman(id: ID!): Human + checkHumanPassword(id: ID!, password: String!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult + queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] } ####################### @@ -524,12 +507,12 @@ type Query { ####################### type Mutation { - updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload - deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload - addHuman(input: [AddHumanInput!]!): AddHumanPayload - updateHuman(input: UpdateHumanInput!): UpdateHumanPayload - deleteHuman(filter: HumanFilter!): DeleteHumanPayload - updatePerson(input: UpdatePersonInput!): UpdatePersonPayload + updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload + deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload + addHuman(input: [AddHumanInput!]!): AddHumanPayload + updateHuman(input: UpdateHumanInput!): UpdateHumanPayload + deleteHuman(filter: HumanFilter!): DeleteHumanPayload + updatePerson(input: UpdatePersonInput!): UpdatePersonPayload } ####################### @@ -537,8 +520,8 @@ type Mutation { ####################### type Subscription { - getHuman(id: ID!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult - queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + getHuman(id: ID!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult + queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] } diff --git a/graphql/schema/testdata/schemagen/output/geo-type.graphql b/graphql/schema/testdata/schemagen/output/geo-type.graphql index d1bda13f933..290522facbb 100644 --- a/graphql/schema/testdata/schemagen/output/geo-type.graphql +++ b/graphql/schema/testdata/schemagen/output/geo-type.graphql @@ -3,14 +3,14 @@ ####################### type Hotel { - id: ID! - name: String! - location: Point @search - secretLocation: Point - area: Polygon @search - secretArea: Polygon - branches: MultiPolygon @search - secretBranches: MultiPolygon + id: ID! + name: String! + location: Point @search + secretLocation: Point + area: Polygon @search + secretArea: Polygon + branches: MultiPolygon @search + secretBranches: MultiPolygon } ####################### @@ -29,162 +29,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -196,12 +196,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -210,78 +209,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -289,25 +287,25 @@ input StringHashFilter { ####################### type AddHotelPayload { - hotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] - numUids: Int + hotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] + numUids: Int } type DeleteHotelPayload { - hotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] - msg: String - numUids: Int + hotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] + msg: String + numUids: Int } type HotelAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type UpdateHotelPayload { - hotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] - numUids: Int + hotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] + numUids: Int } ####################### @@ -315,17 +313,17 @@ type UpdateHotelPayload { ####################### enum HotelHasFilter { - name - location - secretLocation - area - secretArea - branches - secretBranches + name + location + secretLocation + area + secretArea + branches + secretBranches } enum HotelOrderable { - name + name } ####################### @@ -333,57 +331,57 @@ enum HotelOrderable { ####################### input AddHotelInput { - name: String! - location: PointRef - secretLocation: PointRef - area: PolygonRef - secretArea: PolygonRef - branches: MultiPolygonRef - secretBranches: MultiPolygonRef + name: String! + location: PointRef + secretLocation: PointRef + area: PolygonRef + secretArea: PolygonRef + branches: MultiPolygonRef + secretBranches: MultiPolygonRef } input HotelFilter { - id: [ID!] - location: PointGeoFilter - area: PolygonGeoFilter - branches: PolygonGeoFilter - has: [HotelHasFilter] - and: [HotelFilter] - or: [HotelFilter] - not: HotelFilter + id: [ID!] + location: PointGeoFilter + area: PolygonGeoFilter + branches: PolygonGeoFilter + has: [HotelHasFilter] + and: [HotelFilter] + or: [HotelFilter] + not: HotelFilter } input HotelOrder { - asc: HotelOrderable - desc: HotelOrderable - then: HotelOrder + asc: HotelOrderable + desc: HotelOrderable + then: HotelOrder } input HotelPatch { - name: String - location: PointRef - secretLocation: PointRef - area: PolygonRef - secretArea: PolygonRef - branches: MultiPolygonRef - secretBranches: MultiPolygonRef + name: String + location: PointRef + secretLocation: PointRef + area: PolygonRef + secretArea: PolygonRef + branches: MultiPolygonRef + secretBranches: MultiPolygonRef } input HotelRef { - id: ID - name: String - location: PointRef - secretLocation: PointRef - area: PolygonRef - secretArea: PolygonRef - branches: MultiPolygonRef - secretBranches: MultiPolygonRef + id: ID + name: String + location: PointRef + secretLocation: PointRef + area: PolygonRef + secretArea: PolygonRef + branches: MultiPolygonRef + secretBranches: MultiPolygonRef } input UpdateHotelInput { - filter: HotelFilter! - set: HotelPatch - remove: HotelPatch + filter: HotelFilter! + set: HotelPatch + remove: HotelPatch } ####################### @@ -391,9 +389,9 @@ input UpdateHotelInput { ####################### type Query { - getHotel(id: ID!): Hotel - queryHotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] - aggregateHotel(filter: HotelFilter): HotelAggregateResult + getHotel(id: ID!): Hotel + queryHotel(filter: HotelFilter, order: HotelOrder, first: Int, offset: Int): [Hotel] + aggregateHotel(filter: HotelFilter): HotelAggregateResult } ####################### @@ -401,7 +399,8 @@ type Query { ####################### type Mutation { - addHotel(input: [AddHotelInput!]!): AddHotelPayload - updateHotel(input: UpdateHotelInput!): UpdateHotelPayload - deleteHotel(filter: HotelFilter!): DeleteHotelPayload + addHotel(input: [AddHotelInput!]!): AddHotelPayload + updateHotel(input: UpdateHotelInput!): UpdateHotelPayload + deleteHotel(filter: HotelFilter!): DeleteHotelPayload } + diff --git a/graphql/schema/testdata/schemagen/output/hasInverse-with-interface-having-directive.graphql b/graphql/schema/testdata/schemagen/output/hasInverse-with-interface-having-directive.graphql index 60863ef7572..4a92ac3aa88 100644 --- a/graphql/schema/testdata/schemagen/output/hasInverse-with-interface-having-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/hasInverse-with-interface-having-directive.graphql @@ -3,34 +3,33 @@ ####################### type Author { - id: ID! - name: String! @search(by: [hash]) - posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - @hasInverse(field: author) - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID! + name: String! @search(by: [hash]) + posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] @hasInverse(field: author) + postsAggregate(filter: PostFilter): PostAggregateResult } interface Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) } type Question implements Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) - answered: Boolean + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) + answered: Boolean } type Answer implements Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) - markedUseful: Boolean + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) + markedUseful: Boolean } ####################### @@ -49,162 +48,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -216,12 +215,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -230,78 +228,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -309,92 +306,92 @@ input StringHashFilter { ####################### type AddAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + numUids: Int } type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } type AnswerAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - msg: String - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + msg: String + numUids: Int } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type DeleteQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - msg: String - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type QuestionAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type UpdateAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + numUids: Int } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type UpdateQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } ####################### @@ -402,47 +399,47 @@ type UpdateQuestionPayload { ####################### enum AnswerHasFilter { - text - datePublished - author - markedUseful + text + datePublished + author + markedUseful } enum AnswerOrderable { - text - datePublished + text + datePublished } enum AuthorHasFilter { - name - posts + name + posts } enum AuthorOrderable { - name + name } enum PostHasFilter { - text - datePublished - author + text + datePublished + author } enum PostOrderable { - text - datePublished + text + datePublished } enum QuestionHasFilter { - text - datePublished - author - answered + text + datePublished + author + answered } enum QuestionOrderable { - text - datePublished + text + datePublished } ####################### @@ -450,160 +447,160 @@ enum QuestionOrderable { ####################### input AddAnswerInput { - text: String - datePublished: DateTime - author: AuthorRef! - markedUseful: Boolean + text: String + datePublished: DateTime + author: AuthorRef! + markedUseful: Boolean } input AddAuthorInput { - name: String! - posts: [PostRef] + name: String! + posts: [PostRef] } input AddQuestionInput { - text: String - datePublished: DateTime - author: AuthorRef! - answered: Boolean + text: String + datePublished: DateTime + author: AuthorRef! + answered: Boolean } input AnswerFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [AnswerHasFilter] - and: [AnswerFilter] - or: [AnswerFilter] - not: AnswerFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [AnswerHasFilter] + and: [AnswerFilter] + or: [AnswerFilter] + not: AnswerFilter } input AnswerOrder { - asc: AnswerOrderable - desc: AnswerOrderable - then: AnswerOrder + asc: AnswerOrderable + desc: AnswerOrderable + then: AnswerOrder } input AnswerPatch { - text: String - datePublished: DateTime - author: AuthorRef - markedUseful: Boolean + text: String + datePublished: DateTime + author: AuthorRef + markedUseful: Boolean } input AnswerRef { - id: ID - text: String - datePublished: DateTime - author: AuthorRef - markedUseful: Boolean + id: ID + text: String + datePublished: DateTime + author: AuthorRef + markedUseful: Boolean } input AuthorFilter { - id: [ID!] - name: StringHashFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + name: StringHashFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - posts: [PostRef] + name: String + posts: [PostRef] } input AuthorRef { - id: ID - name: String - posts: [PostRef] + id: ID + name: String + posts: [PostRef] } input PostFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - text: String - datePublished: DateTime - author: AuthorRef + text: String + datePublished: DateTime + author: AuthorRef } input PostRef { - id: ID! + id: ID! } input QuestionFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [QuestionHasFilter] - and: [QuestionFilter] - or: [QuestionFilter] - not: QuestionFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [QuestionHasFilter] + and: [QuestionFilter] + or: [QuestionFilter] + not: QuestionFilter } input QuestionOrder { - asc: QuestionOrderable - desc: QuestionOrderable - then: QuestionOrder + asc: QuestionOrderable + desc: QuestionOrderable + then: QuestionOrder } input QuestionPatch { - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean } input QuestionRef { - id: ID - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean + id: ID + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean } input UpdateAnswerInput { - filter: AnswerFilter! - set: AnswerPatch - remove: AnswerPatch + filter: AnswerFilter! + set: AnswerPatch + remove: AnswerPatch } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } input UpdateQuestionInput { - filter: QuestionFilter! - set: QuestionPatch - remove: QuestionPatch + filter: QuestionFilter! + set: QuestionPatch + remove: QuestionPatch } ####################### @@ -611,18 +608,18 @@ input UpdateQuestionInput { ####################### type Query { - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - getPost(id: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getQuestion(id: ID!): Question - queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult - getAnswer(id: ID!): Answer - queryAnswer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - aggregateAnswer(filter: AnswerFilter): AnswerAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(id: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getQuestion(id: ID!): Question + queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult + getAnswer(id: ID!): Answer + queryAnswer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + aggregateAnswer(filter: AnswerFilter): AnswerAggregateResult } ####################### @@ -630,15 +627,16 @@ type Query { ####################### type Mutation { - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload - updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload - deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload - addAnswer(input: [AddAnswerInput!]!): AddAnswerPayload - updateAnswer(input: UpdateAnswerInput!): UpdateAnswerPayload - deleteAnswer(filter: AnswerFilter!): DeleteAnswerPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload + updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload + deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload + addAnswer(input: [AddAnswerInput!]!): AddAnswerPayload + updateAnswer(input: UpdateAnswerInput!): UpdateAnswerPayload + deleteAnswer(filter: AnswerFilter!): DeleteAnswerPayload } + diff --git a/graphql/schema/testdata/schemagen/output/hasInverse-with-interface.graphql b/graphql/schema/testdata/schemagen/output/hasInverse-with-interface.graphql index ea2d33a0b0f..6a0e7001198 100644 --- a/graphql/schema/testdata/schemagen/output/hasInverse-with-interface.graphql +++ b/graphql/schema/testdata/schemagen/output/hasInverse-with-interface.graphql @@ -3,37 +3,35 @@ ####################### type Author { - id: ID! - name: String! @search(by: [hash]) - questions(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - @hasInverse(field: author) - answers(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - @hasInverse(field: author) - questionsAggregate(filter: QuestionFilter): QuestionAggregateResult - answersAggregate(filter: AnswerFilter): AnswerAggregateResult + id: ID! + name: String! @search(by: [hash]) + questions(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] @hasInverse(field: author) + answers(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] @hasInverse(field: author) + questionsAggregate(filter: QuestionFilter): QuestionAggregateResult + answersAggregate(filter: AnswerFilter): AnswerAggregateResult } interface Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! } type Question implements Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: questions) - answered: Boolean + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: questions) + answered: Boolean } type Answer implements Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: answers) - markedUseful: Boolean + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: answers) + markedUseful: Boolean } ####################### @@ -52,162 +50,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -219,12 +217,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -233,78 +230,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -312,92 +308,92 @@ input StringHashFilter { ####################### type AddAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + numUids: Int } type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } type AnswerAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - msg: String - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + msg: String + numUids: Int } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type DeleteQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - msg: String - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type QuestionAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type UpdateAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + numUids: Int } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type UpdateQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } ####################### @@ -405,48 +401,48 @@ type UpdateQuestionPayload { ####################### enum AnswerHasFilter { - text - datePublished - author - markedUseful + text + datePublished + author + markedUseful } enum AnswerOrderable { - text - datePublished + text + datePublished } enum AuthorHasFilter { - name - questions - answers + name + questions + answers } enum AuthorOrderable { - name + name } enum PostHasFilter { - text - datePublished - author + text + datePublished + author } enum PostOrderable { - text - datePublished + text + datePublished } enum QuestionHasFilter { - text - datePublished - author - answered + text + datePublished + author + answered } enum QuestionOrderable { - text - datePublished + text + datePublished } ####################### @@ -454,163 +450,163 @@ enum QuestionOrderable { ####################### input AddAnswerInput { - text: String - datePublished: DateTime - author: AuthorRef! - markedUseful: Boolean + text: String + datePublished: DateTime + author: AuthorRef! + markedUseful: Boolean } input AddAuthorInput { - name: String! - questions: [QuestionRef] - answers: [AnswerRef] + name: String! + questions: [QuestionRef] + answers: [AnswerRef] } input AddQuestionInput { - text: String - datePublished: DateTime - author: AuthorRef! - answered: Boolean + text: String + datePublished: DateTime + author: AuthorRef! + answered: Boolean } input AnswerFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [AnswerHasFilter] - and: [AnswerFilter] - or: [AnswerFilter] - not: AnswerFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [AnswerHasFilter] + and: [AnswerFilter] + or: [AnswerFilter] + not: AnswerFilter } input AnswerOrder { - asc: AnswerOrderable - desc: AnswerOrderable - then: AnswerOrder + asc: AnswerOrderable + desc: AnswerOrderable + then: AnswerOrder } input AnswerPatch { - text: String - datePublished: DateTime - author: AuthorRef - markedUseful: Boolean + text: String + datePublished: DateTime + author: AuthorRef + markedUseful: Boolean } input AnswerRef { - id: ID - text: String - datePublished: DateTime - author: AuthorRef - markedUseful: Boolean + id: ID + text: String + datePublished: DateTime + author: AuthorRef + markedUseful: Boolean } input AuthorFilter { - id: [ID!] - name: StringHashFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + name: StringHashFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - questions: [QuestionRef] - answers: [AnswerRef] + name: String + questions: [QuestionRef] + answers: [AnswerRef] } input AuthorRef { - id: ID - name: String - questions: [QuestionRef] - answers: [AnswerRef] + id: ID + name: String + questions: [QuestionRef] + answers: [AnswerRef] } input PostFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - text: String - datePublished: DateTime - author: AuthorRef + text: String + datePublished: DateTime + author: AuthorRef } input PostRef { - id: ID! + id: ID! } input QuestionFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [QuestionHasFilter] - and: [QuestionFilter] - or: [QuestionFilter] - not: QuestionFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [QuestionHasFilter] + and: [QuestionFilter] + or: [QuestionFilter] + not: QuestionFilter } input QuestionOrder { - asc: QuestionOrderable - desc: QuestionOrderable - then: QuestionOrder + asc: QuestionOrderable + desc: QuestionOrderable + then: QuestionOrder } input QuestionPatch { - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean } input QuestionRef { - id: ID - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean + id: ID + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean } input UpdateAnswerInput { - filter: AnswerFilter! - set: AnswerPatch - remove: AnswerPatch + filter: AnswerFilter! + set: AnswerPatch + remove: AnswerPatch } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } input UpdateQuestionInput { - filter: QuestionFilter! - set: QuestionPatch - remove: QuestionPatch + filter: QuestionFilter! + set: QuestionPatch + remove: QuestionPatch } ####################### @@ -618,18 +614,18 @@ input UpdateQuestionInput { ####################### type Query { - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - getPost(id: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getQuestion(id: ID!): Question - queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult - getAnswer(id: ID!): Answer - queryAnswer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - aggregateAnswer(filter: AnswerFilter): AnswerAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(id: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getQuestion(id: ID!): Question + queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult + getAnswer(id: ID!): Answer + queryAnswer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + aggregateAnswer(filter: AnswerFilter): AnswerAggregateResult } ####################### @@ -637,15 +633,16 @@ type Query { ####################### type Mutation { - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload - updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload - deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload - addAnswer(input: [AddAnswerInput!]!): AddAnswerPayload - updateAnswer(input: UpdateAnswerInput!): UpdateAnswerPayload - deleteAnswer(filter: AnswerFilter!): DeleteAnswerPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload + updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload + deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload + addAnswer(input: [AddAnswerInput!]!): AddAnswerPayload + updateAnswer(input: UpdateAnswerInput!): UpdateAnswerPayload + deleteAnswer(filter: AnswerFilter!): DeleteAnswerPayload } + diff --git a/graphql/schema/testdata/schemagen/output/hasInverse-with-type-having-directive.graphql b/graphql/schema/testdata/schemagen/output/hasInverse-with-type-having-directive.graphql index 60863ef7572..4a92ac3aa88 100644 --- a/graphql/schema/testdata/schemagen/output/hasInverse-with-type-having-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/hasInverse-with-type-having-directive.graphql @@ -3,34 +3,33 @@ ####################### type Author { - id: ID! - name: String! @search(by: [hash]) - posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - @hasInverse(field: author) - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID! + name: String! @search(by: [hash]) + posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] @hasInverse(field: author) + postsAggregate(filter: PostFilter): PostAggregateResult } interface Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) } type Question implements Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) - answered: Boolean + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) + answered: Boolean } type Answer implements Post { - id: ID! - text: String @search(by: [fulltext]) - datePublished: DateTime @search - author(filter: AuthorFilter): Author! @hasInverse(field: posts) - markedUseful: Boolean + id: ID! + text: String @search(by: [fulltext]) + datePublished: DateTime @search + author(filter: AuthorFilter): Author! @hasInverse(field: posts) + markedUseful: Boolean } ####################### @@ -49,162 +48,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -216,12 +215,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -230,78 +228,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -309,92 +306,92 @@ input StringHashFilter { ####################### type AddAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + numUids: Int } type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } type AnswerAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - msg: String - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + msg: String + numUids: Int } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type DeleteQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - msg: String - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type QuestionAggregateResult { - count: Int - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type UpdateAnswerPayload { - answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - numUids: Int + answer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + numUids: Int } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type UpdateQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } ####################### @@ -402,47 +399,47 @@ type UpdateQuestionPayload { ####################### enum AnswerHasFilter { - text - datePublished - author - markedUseful + text + datePublished + author + markedUseful } enum AnswerOrderable { - text - datePublished + text + datePublished } enum AuthorHasFilter { - name - posts + name + posts } enum AuthorOrderable { - name + name } enum PostHasFilter { - text - datePublished - author + text + datePublished + author } enum PostOrderable { - text - datePublished + text + datePublished } enum QuestionHasFilter { - text - datePublished - author - answered + text + datePublished + author + answered } enum QuestionOrderable { - text - datePublished + text + datePublished } ####################### @@ -450,160 +447,160 @@ enum QuestionOrderable { ####################### input AddAnswerInput { - text: String - datePublished: DateTime - author: AuthorRef! - markedUseful: Boolean + text: String + datePublished: DateTime + author: AuthorRef! + markedUseful: Boolean } input AddAuthorInput { - name: String! - posts: [PostRef] + name: String! + posts: [PostRef] } input AddQuestionInput { - text: String - datePublished: DateTime - author: AuthorRef! - answered: Boolean + text: String + datePublished: DateTime + author: AuthorRef! + answered: Boolean } input AnswerFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [AnswerHasFilter] - and: [AnswerFilter] - or: [AnswerFilter] - not: AnswerFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [AnswerHasFilter] + and: [AnswerFilter] + or: [AnswerFilter] + not: AnswerFilter } input AnswerOrder { - asc: AnswerOrderable - desc: AnswerOrderable - then: AnswerOrder + asc: AnswerOrderable + desc: AnswerOrderable + then: AnswerOrder } input AnswerPatch { - text: String - datePublished: DateTime - author: AuthorRef - markedUseful: Boolean + text: String + datePublished: DateTime + author: AuthorRef + markedUseful: Boolean } input AnswerRef { - id: ID - text: String - datePublished: DateTime - author: AuthorRef - markedUseful: Boolean + id: ID + text: String + datePublished: DateTime + author: AuthorRef + markedUseful: Boolean } input AuthorFilter { - id: [ID!] - name: StringHashFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + name: StringHashFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - posts: [PostRef] + name: String + posts: [PostRef] } input AuthorRef { - id: ID - name: String - posts: [PostRef] + id: ID + name: String + posts: [PostRef] } input PostFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - text: String - datePublished: DateTime - author: AuthorRef + text: String + datePublished: DateTime + author: AuthorRef } input PostRef { - id: ID! + id: ID! } input QuestionFilter { - id: [ID!] - text: StringFullTextFilter - datePublished: DateTimeFilter - has: [QuestionHasFilter] - and: [QuestionFilter] - or: [QuestionFilter] - not: QuestionFilter + id: [ID!] + text: StringFullTextFilter + datePublished: DateTimeFilter + has: [QuestionHasFilter] + and: [QuestionFilter] + or: [QuestionFilter] + not: QuestionFilter } input QuestionOrder { - asc: QuestionOrderable - desc: QuestionOrderable - then: QuestionOrder + asc: QuestionOrderable + desc: QuestionOrderable + then: QuestionOrder } input QuestionPatch { - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean } input QuestionRef { - id: ID - text: String - datePublished: DateTime - author: AuthorRef - answered: Boolean + id: ID + text: String + datePublished: DateTime + author: AuthorRef + answered: Boolean } input UpdateAnswerInput { - filter: AnswerFilter! - set: AnswerPatch - remove: AnswerPatch + filter: AnswerFilter! + set: AnswerPatch + remove: AnswerPatch } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } input UpdateQuestionInput { - filter: QuestionFilter! - set: QuestionPatch - remove: QuestionPatch + filter: QuestionFilter! + set: QuestionPatch + remove: QuestionPatch } ####################### @@ -611,18 +608,18 @@ input UpdateQuestionInput { ####################### type Query { - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - getPost(id: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getQuestion(id: ID!): Question - queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult - getAnswer(id: ID!): Answer - queryAnswer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] - aggregateAnswer(filter: AnswerFilter): AnswerAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(id: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getQuestion(id: ID!): Question + queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult + getAnswer(id: ID!): Answer + queryAnswer(filter: AnswerFilter, order: AnswerOrder, first: Int, offset: Int): [Answer] + aggregateAnswer(filter: AnswerFilter): AnswerAggregateResult } ####################### @@ -630,15 +627,16 @@ type Query { ####################### type Mutation { - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload - updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload - deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload - addAnswer(input: [AddAnswerInput!]!): AddAnswerPayload - updateAnswer(input: UpdateAnswerInput!): UpdateAnswerPayload - deleteAnswer(filter: AnswerFilter!): DeleteAnswerPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload + updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload + deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload + addAnswer(input: [AddAnswerInput!]!): AddAnswerPayload + updateAnswer(input: UpdateAnswerInput!): UpdateAnswerPayload + deleteAnswer(filter: AnswerFilter!): DeleteAnswerPayload } + diff --git a/graphql/schema/testdata/schemagen/output/hasInverse.graphql b/graphql/schema/testdata/schemagen/output/hasInverse.graphql index b6aec055aca..c9e38071c69 100644 --- a/graphql/schema/testdata/schemagen/output/hasInverse.graphql +++ b/graphql/schema/testdata/schemagen/output/hasInverse.graphql @@ -3,14 +3,14 @@ ####################### type Post { - id: ID! - author(filter: AuthorFilter): Author! @hasInverse(field: "posts") + id: ID! + author(filter: AuthorFilter): Author! @hasInverse(field: "posts") } type Author { - id: ID! - posts(filter: PostFilter, first: Int, offset: Int): [Post!]! @hasInverse(field: "author") - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID! + posts(filter: PostFilter, first: Int, offset: Int): [Post!]! @hasInverse(field: "author") + postsAggregate(filter: PostFilter): PostAggregateResult } ####################### @@ -29,162 +29,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -196,12 +196,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -210,78 +209,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -289,43 +287,43 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, first: Int, offset: Int): [Author] + numUids: Int } type AddPostPayload { - post(filter: PostFilter, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, first: Int, offset: Int): [Post] + numUids: Int } type AuthorAggregateResult { - count: Int + count: Int } type DeleteAuthorPayload { - author(filter: AuthorFilter, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type PostAggregateResult { - count: Int + count: Int } type UpdateAuthorPayload { - author(filter: AuthorFilter, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -333,11 +331,11 @@ type UpdatePostPayload { ####################### enum AuthorHasFilter { - posts + posts } enum PostHasFilter { - author + author } ####################### @@ -345,57 +343,57 @@ enum PostHasFilter { ####################### input AddAuthorInput { - posts: [PostRef!]! + posts: [PostRef!]! } input AddPostInput { - author: AuthorRef! + author: AuthorRef! } input AuthorFilter { - id: [ID!] - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorPatch { - posts: [PostRef!] + posts: [PostRef!] } input AuthorRef { - id: ID - posts: [PostRef!] + id: ID + posts: [PostRef!] } input PostFilter { - id: [ID!] - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostPatch { - author: AuthorRef + author: AuthorRef } input PostRef { - id: ID - author: AuthorRef + id: ID + author: AuthorRef } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -403,12 +401,12 @@ input UpdatePostInput { ####################### type Query { - getPost(id: ID!): Post - queryPost(filter: PostFilter, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(id: ID!): Post + queryPost(filter: PostFilter, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult } ####################### @@ -416,10 +414,11 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload } + diff --git a/graphql/schema/testdata/schemagen/output/hasInverse_withSubscription.graphql b/graphql/schema/testdata/schemagen/output/hasInverse_withSubscription.graphql index e225b95ed13..36b180d322c 100644 --- a/graphql/schema/testdata/schemagen/output/hasInverse_withSubscription.graphql +++ b/graphql/schema/testdata/schemagen/output/hasInverse_withSubscription.graphql @@ -3,14 +3,14 @@ ####################### type Post { - id: ID! - author(filter: AuthorFilter): Author! @hasInverse(field: "posts") + id: ID! + author(filter: AuthorFilter): Author! @hasInverse(field: "posts") } type Author @withSubscription { - id: ID! - posts(filter: PostFilter, first: Int, offset: Int): [Post!]! @hasInverse(field: "author") - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID! + posts(filter: PostFilter, first: Int, offset: Int): [Post!]! @hasInverse(field: "author") + postsAggregate(filter: PostFilter): PostAggregateResult } ####################### @@ -29,162 +29,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -196,12 +196,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -210,78 +209,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -289,43 +287,43 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, first: Int, offset: Int): [Author] + numUids: Int } type AddPostPayload { - post(filter: PostFilter, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, first: Int, offset: Int): [Post] + numUids: Int } type AuthorAggregateResult { - count: Int + count: Int } type DeleteAuthorPayload { - author(filter: AuthorFilter, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type PostAggregateResult { - count: Int + count: Int } type UpdateAuthorPayload { - author(filter: AuthorFilter, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -333,11 +331,11 @@ type UpdatePostPayload { ####################### enum AuthorHasFilter { - posts + posts } enum PostHasFilter { - author + author } ####################### @@ -345,57 +343,57 @@ enum PostHasFilter { ####################### input AddAuthorInput { - posts: [PostRef!]! + posts: [PostRef!]! } input AddPostInput { - author: AuthorRef! + author: AuthorRef! } input AuthorFilter { - id: [ID!] - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorPatch { - posts: [PostRef!] + posts: [PostRef!] } input AuthorRef { - id: ID - posts: [PostRef!] + id: ID + posts: [PostRef!] } input PostFilter { - id: [ID!] - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostPatch { - author: AuthorRef + author: AuthorRef } input PostRef { - id: ID - author: AuthorRef + id: ID + author: AuthorRef } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -403,12 +401,12 @@ input UpdatePostInput { ####################### type Query { - getPost(id: ID!): Post - queryPost(filter: PostFilter, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(id: ID!): Post + queryPost(filter: PostFilter, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult } ####################### @@ -416,12 +414,12 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload } ####################### @@ -429,7 +427,7 @@ type Mutation { ####################### type Subscription { - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult } diff --git a/graphql/schema/testdata/schemagen/output/hasfilter.graphql b/graphql/schema/testdata/schemagen/output/hasfilter.graphql index 9606e1900cc..41964b18b97 100644 --- a/graphql/schema/testdata/schemagen/output/hasfilter.graphql +++ b/graphql/schema/testdata/schemagen/output/hasfilter.graphql @@ -3,16 +3,16 @@ ####################### interface I { - id: ID! + id: ID! } type T implements I { - id: ID! - text: String + id: ID! + text: String } type B { - name: String + name: String } ####################### @@ -31,162 +31,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -198,12 +198,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -212,78 +211,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -291,57 +289,57 @@ input StringHashFilter { ####################### type AddBPayload { - b(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] - numUids: Int + b(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] + numUids: Int } type AddTPayload { - t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - numUids: Int + t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + numUids: Int } type BAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteBPayload { - b(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] - msg: String - numUids: Int + b(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] + msg: String + numUids: Int } type DeleteIPayload { - i(filter: IFilter, first: Int, offset: Int): [I] - msg: String - numUids: Int + i(filter: IFilter, first: Int, offset: Int): [I] + msg: String + numUids: Int } type DeleteTPayload { - t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - msg: String - numUids: Int + t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + msg: String + numUids: Int } type IAggregateResult { - count: Int + count: Int } type TAggregateResult { - count: Int - textMin: String - textMax: String + count: Int + textMin: String + textMax: String } type UpdateBPayload { - b(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] - numUids: Int + b(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] + numUids: Int } type UpdateTPayload { - t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - numUids: Int + t(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + numUids: Int } ####################### @@ -349,19 +347,19 @@ type UpdateTPayload { ####################### enum BHasFilter { - name + name } enum BOrderable { - name + name } enum THasFilter { - text + text } enum TOrderable { - text + text } ####################### @@ -369,76 +367,76 @@ enum TOrderable { ####################### input AddBInput { - name: String + name: String } input AddTInput { - text: String + text: String } input BFilter { - has: [BHasFilter] - and: [BFilter] - or: [BFilter] - not: BFilter + has: [BHasFilter] + and: [BFilter] + or: [BFilter] + not: BFilter } input BOrder { - asc: BOrderable - desc: BOrderable - then: BOrder + asc: BOrderable + desc: BOrderable + then: BOrder } input BPatch { - name: String + name: String } input BRef { - name: String + name: String } input IFilter { - id: [ID!] - not: IFilter + id: [ID!] + not: IFilter } input IRef { - id: ID! + id: ID! } input TFilter { - id: [ID!] - has: [THasFilter] - and: [TFilter] - or: [TFilter] - not: TFilter + id: [ID!] + has: [THasFilter] + and: [TFilter] + or: [TFilter] + not: TFilter } input TOrder { - asc: TOrderable - desc: TOrderable - then: TOrder + asc: TOrderable + desc: TOrderable + then: TOrder } input TPatch { - text: String + text: String } input TRef { - id: ID - text: String + id: ID + text: String } input UpdateBInput { - filter: BFilter! - set: BPatch - remove: BPatch + filter: BFilter! + set: BPatch + remove: BPatch } input UpdateTInput { - filter: TFilter! - set: TPatch - remove: TPatch + filter: TFilter! + set: TPatch + remove: TPatch } ####################### @@ -446,14 +444,14 @@ input UpdateTInput { ####################### type Query { - getI(id: ID!): I - queryI(filter: IFilter, first: Int, offset: Int): [I] - aggregateI(filter: IFilter): IAggregateResult - getT(id: ID!): T - queryT(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] - aggregateT(filter: TFilter): TAggregateResult - queryB(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] - aggregateB(filter: BFilter): BAggregateResult + getI(id: ID!): I + queryI(filter: IFilter, first: Int, offset: Int): [I] + aggregateI(filter: IFilter): IAggregateResult + getT(id: ID!): T + queryT(filter: TFilter, order: TOrder, first: Int, offset: Int): [T] + aggregateT(filter: TFilter): TAggregateResult + queryB(filter: BFilter, order: BOrder, first: Int, offset: Int): [B] + aggregateB(filter: BFilter): BAggregateResult } ####################### @@ -461,11 +459,12 @@ type Query { ####################### type Mutation { - deleteI(filter: IFilter!): DeleteIPayload - addT(input: [AddTInput!]!): AddTPayload - updateT(input: UpdateTInput!): UpdateTPayload - deleteT(filter: TFilter!): DeleteTPayload - addB(input: [AddBInput!]!): AddBPayload - updateB(input: UpdateBInput!): UpdateBPayload - deleteB(filter: BFilter!): DeleteBPayload + deleteI(filter: IFilter!): DeleteIPayload + addT(input: [AddTInput!]!): AddTPayload + updateT(input: UpdateTInput!): UpdateTPayload + deleteT(filter: TFilter!): DeleteTPayload + addB(input: [AddBInput!]!): AddBPayload + updateB(input: UpdateBInput!): UpdateBPayload + deleteB(filter: BFilter!): DeleteBPayload } + diff --git a/graphql/schema/testdata/schemagen/output/ignore-unsupported-directive.graphql b/graphql/schema/testdata/schemagen/output/ignore-unsupported-directive.graphql index 16ca925f8fc..517bca9bbe4 100644 --- a/graphql/schema/testdata/schemagen/output/ignore-unsupported-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/ignore-unsupported-directive.graphql @@ -3,15 +3,15 @@ ####################### enum Role { - Admin - User + Admin + User } type Product { - id: ID! - price: Float! @search - name: String! @search @dgraph(pred: "p") - name2: String! @search @dgraph(pred: "p") + id: ID! + price: Float! @search + name: String! @search @dgraph(pred: "p") + name2: String! @search @dgraph(pred: "p") } ####################### @@ -30,162 +30,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -197,12 +197,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -211,78 +210,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -290,31 +288,31 @@ input StringHashFilter { ####################### type AddProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } type DeleteProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - msg: String - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + msg: String + numUids: Int } type ProductAggregateResult { - count: Int - priceMin: Float - priceMax: Float - priceSum: Float - priceAvg: Float - nameMin: String - nameMax: String - name2Min: String - name2Max: String + count: Int + priceMin: Float + priceMax: Float + priceSum: Float + priceAvg: Float + nameMin: String + nameMax: String + name2Min: String + name2Max: String } type UpdateProductPayload { - product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - numUids: Int + product(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + numUids: Int } ####################### @@ -322,15 +320,15 @@ type UpdateProductPayload { ####################### enum ProductHasFilter { - price - name - name2 + price + name + name2 } enum ProductOrderable { - price - name - name2 + price + name + name2 } ####################### @@ -338,45 +336,45 @@ enum ProductOrderable { ####################### input AddProductInput { - price: Float! - name: String! - name2: String! + price: Float! + name: String! + name2: String! } input ProductFilter { - id: [ID!] - price: FloatFilter - name: StringTermFilter - name2: StringTermFilter - has: [ProductHasFilter] - and: [ProductFilter] - or: [ProductFilter] - not: ProductFilter + id: [ID!] + price: FloatFilter + name: StringTermFilter + name2: StringTermFilter + has: [ProductHasFilter] + and: [ProductFilter] + or: [ProductFilter] + not: ProductFilter } input ProductOrder { - asc: ProductOrderable - desc: ProductOrderable - then: ProductOrder + asc: ProductOrderable + desc: ProductOrderable + then: ProductOrder } input ProductPatch { - price: Float - name: String - name2: String + price: Float + name: String + name2: String } input ProductRef { - id: ID - price: Float - name: String - name2: String + id: ID + price: Float + name: String + name2: String } input UpdateProductInput { - filter: ProductFilter! - set: ProductPatch - remove: ProductPatch + filter: ProductFilter! + set: ProductPatch + remove: ProductPatch } ####################### @@ -384,9 +382,9 @@ input UpdateProductInput { ####################### type Query { - getProduct(id: ID!): Product - queryProduct(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] - aggregateProduct(filter: ProductFilter): ProductAggregateResult + getProduct(id: ID!): Product + queryProduct(filter: ProductFilter, order: ProductOrder, first: Int, offset: Int): [Product] + aggregateProduct(filter: ProductFilter): ProductAggregateResult } ####################### @@ -394,7 +392,8 @@ type Query { ####################### type Mutation { - addProduct(input: [AddProductInput!]!): AddProductPayload - updateProduct(input: UpdateProductInput!): UpdateProductPayload - deleteProduct(filter: ProductFilter!): DeleteProductPayload + addProduct(input: [AddProductInput!]!): AddProductPayload + updateProduct(input: UpdateProductInput!): UpdateProductPayload + deleteProduct(filter: ProductFilter!): DeleteProductPayload } + diff --git a/graphql/schema/testdata/schemagen/output/interface-with-dgraph-pred.graphql b/graphql/schema/testdata/schemagen/output/interface-with-dgraph-pred.graphql index cad1b0d0f77..ecd7d1905e0 100644 --- a/graphql/schema/testdata/schemagen/output/interface-with-dgraph-pred.graphql +++ b/graphql/schema/testdata/schemagen/output/interface-with-dgraph-pred.graphql @@ -3,26 +3,24 @@ ####################### type Object { - id: ID! - name: String - ownedBy(filter: PersonFilter): Person @dgraph(pred: "Object.owner") + id: ID! + name: String + ownedBy(filter: PersonFilter): Person @dgraph(pred: "Object.owner") } type BusinessMan implements Person { - id: ID! - name: String - owns(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] - @dgraph(pred: "~Object.owner") - companyName: String - ownsAggregate(filter: ObjectFilter): ObjectAggregateResult + id: ID! + name: String + owns(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] @dgraph(pred: "~Object.owner") + companyName: String + ownsAggregate(filter: ObjectFilter): ObjectAggregateResult } interface Person { - id: ID! - name: String - owns(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] - @dgraph(pred: "~Object.owner") - ownsAggregate(filter: ObjectFilter): ObjectAggregateResult + id: ID! + name: String + owns(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] @dgraph(pred: "~Object.owner") + ownsAggregate(filter: ObjectFilter): ObjectAggregateResult } ####################### @@ -41,162 +39,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -208,12 +206,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -222,78 +219,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -301,81 +297,66 @@ input StringHashFilter { ####################### type AddBusinessManPayload { - businessMan( - filter: BusinessManFilter - order: BusinessManOrder - first: Int - offset: Int - ): [BusinessMan] - numUids: Int + businessMan(filter: BusinessManFilter, order: BusinessManOrder, first: Int, offset: Int): [BusinessMan] + numUids: Int } type AddObjectPayload { - object(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] - numUids: Int + object(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] + numUids: Int } type BusinessManAggregateResult { - count: Int - nameMin: String - nameMax: String - companyNameMin: String - companyNameMax: String + count: Int + nameMin: String + nameMax: String + companyNameMin: String + companyNameMax: String } type DeleteBusinessManPayload { - businessMan( - filter: BusinessManFilter - order: BusinessManOrder - first: Int - offset: Int - ): [BusinessMan] - msg: String - numUids: Int + businessMan(filter: BusinessManFilter, order: BusinessManOrder, first: Int, offset: Int): [BusinessMan] + msg: String + numUids: Int } type DeleteObjectPayload { - object(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] - msg: String - numUids: Int + object(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] + msg: String + numUids: Int } type DeletePersonPayload { - person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - msg: String - numUids: Int + person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + msg: String + numUids: Int } type ObjectAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type PersonAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type UpdateBusinessManPayload { - businessMan( - filter: BusinessManFilter - order: BusinessManOrder - first: Int - offset: Int - ): [BusinessMan] - numUids: Int + businessMan(filter: BusinessManFilter, order: BusinessManOrder, first: Int, offset: Int): [BusinessMan] + numUids: Int } type UpdateObjectPayload { - object(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] - numUids: Int + object(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] + numUids: Int } type UpdatePersonPayload { - person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - numUids: Int + person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + numUids: Int } ####################### @@ -383,32 +364,32 @@ type UpdatePersonPayload { ####################### enum BusinessManHasFilter { - name - owns - companyName + name + owns + companyName } enum BusinessManOrderable { - name - companyName + name + companyName } enum ObjectHasFilter { - name - ownedBy + name + ownedBy } enum ObjectOrderable { - name + name } enum PersonHasFilter { - name - owns + name + owns } enum PersonOrderable { - name + name } ####################### @@ -416,103 +397,103 @@ enum PersonOrderable { ####################### input AddBusinessManInput { - name: String - companyName: String + name: String + companyName: String } input AddObjectInput { - name: String - ownedBy: PersonRef + name: String + ownedBy: PersonRef } input BusinessManFilter { - id: [ID!] - has: [BusinessManHasFilter] - and: [BusinessManFilter] - or: [BusinessManFilter] - not: BusinessManFilter + id: [ID!] + has: [BusinessManHasFilter] + and: [BusinessManFilter] + or: [BusinessManFilter] + not: BusinessManFilter } input BusinessManOrder { - asc: BusinessManOrderable - desc: BusinessManOrderable - then: BusinessManOrder + asc: BusinessManOrderable + desc: BusinessManOrderable + then: BusinessManOrder } input BusinessManPatch { - name: String - companyName: String + name: String + companyName: String } input BusinessManRef { - id: ID - name: String - companyName: String + id: ID + name: String + companyName: String } input ObjectFilter { - id: [ID!] - has: [ObjectHasFilter] - and: [ObjectFilter] - or: [ObjectFilter] - not: ObjectFilter + id: [ID!] + has: [ObjectHasFilter] + and: [ObjectFilter] + or: [ObjectFilter] + not: ObjectFilter } input ObjectOrder { - asc: ObjectOrderable - desc: ObjectOrderable - then: ObjectOrder + asc: ObjectOrderable + desc: ObjectOrderable + then: ObjectOrder } input ObjectPatch { - name: String - ownedBy: PersonRef + name: String + ownedBy: PersonRef } input ObjectRef { - id: ID - name: String - ownedBy: PersonRef + id: ID + name: String + ownedBy: PersonRef } input PersonFilter { - id: [ID!] - has: [PersonHasFilter] - and: [PersonFilter] - or: [PersonFilter] - not: PersonFilter + id: [ID!] + has: [PersonHasFilter] + and: [PersonFilter] + or: [PersonFilter] + not: PersonFilter } input PersonOrder { - asc: PersonOrderable - desc: PersonOrderable - then: PersonOrder + asc: PersonOrderable + desc: PersonOrderable + then: PersonOrder } input PersonPatch { - name: String + name: String } input PersonRef { - id: ID! + id: ID! } input UpdateBusinessManInput { - filter: BusinessManFilter! - set: BusinessManPatch - remove: BusinessManPatch + filter: BusinessManFilter! + set: BusinessManPatch + remove: BusinessManPatch } input UpdateObjectInput { - filter: ObjectFilter! - set: ObjectPatch - remove: ObjectPatch + filter: ObjectFilter! + set: ObjectPatch + remove: ObjectPatch } input UpdatePersonInput { - filter: PersonFilter! - set: PersonPatch - remove: PersonPatch + filter: PersonFilter! + set: PersonPatch + remove: PersonPatch } ####################### @@ -520,20 +501,15 @@ input UpdatePersonInput { ####################### type Query { - getObject(id: ID!): Object - queryObject(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] - aggregateObject(filter: ObjectFilter): ObjectAggregateResult - getBusinessMan(id: ID!): BusinessMan - queryBusinessMan( - filter: BusinessManFilter - order: BusinessManOrder - first: Int - offset: Int - ): [BusinessMan] - aggregateBusinessMan(filter: BusinessManFilter): BusinessManAggregateResult - getPerson(id: ID!): Person - queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - aggregatePerson(filter: PersonFilter): PersonAggregateResult + getObject(id: ID!): Object + queryObject(filter: ObjectFilter, order: ObjectOrder, first: Int, offset: Int): [Object] + aggregateObject(filter: ObjectFilter): ObjectAggregateResult + getBusinessMan(id: ID!): BusinessMan + queryBusinessMan(filter: BusinessManFilter, order: BusinessManOrder, first: Int, offset: Int): [BusinessMan] + aggregateBusinessMan(filter: BusinessManFilter): BusinessManAggregateResult + getPerson(id: ID!): Person + queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + aggregatePerson(filter: PersonFilter): PersonAggregateResult } ####################### @@ -541,12 +517,13 @@ type Query { ####################### type Mutation { - addObject(input: [AddObjectInput!]!): AddObjectPayload - updateObject(input: UpdateObjectInput!): UpdateObjectPayload - deleteObject(filter: ObjectFilter!): DeleteObjectPayload - addBusinessMan(input: [AddBusinessManInput!]!): AddBusinessManPayload - updateBusinessMan(input: UpdateBusinessManInput!): UpdateBusinessManPayload - deleteBusinessMan(filter: BusinessManFilter!): DeleteBusinessManPayload - updatePerson(input: UpdatePersonInput!): UpdatePersonPayload - deletePerson(filter: PersonFilter!): DeletePersonPayload + addObject(input: [AddObjectInput!]!): AddObjectPayload + updateObject(input: UpdateObjectInput!): UpdateObjectPayload + deleteObject(filter: ObjectFilter!): DeleteObjectPayload + addBusinessMan(input: [AddBusinessManInput!]!): AddBusinessManPayload + updateBusinessMan(input: UpdateBusinessManInput!): UpdateBusinessManPayload + deleteBusinessMan(filter: BusinessManFilter!): DeleteBusinessManPayload + updatePerson(input: UpdatePersonInput!): UpdatePersonPayload + deletePerson(filter: PersonFilter!): DeletePersonPayload } + diff --git a/graphql/schema/testdata/schemagen/output/interface-with-id-directive.graphql b/graphql/schema/testdata/schemagen/output/interface-with-id-directive.graphql index 4a29180d8ff..5230262e99f 100644 --- a/graphql/schema/testdata/schemagen/output/interface-with-id-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/interface-with-id-directive.graphql @@ -3,20 +3,20 @@ ####################### interface LibraryItem { - refID: String! @id(interface: false) - itemID: String! @id(interface: true) + refID: String! @id(interface: false) + itemID: String! @id(interface: true) } type Book implements LibraryItem { - refID: String! @id(interface: false) - itemID: String! @id(interface: true) - title: String - author: String + refID: String! @id(interface: false) + itemID: String! @id(interface: true) + title: String + author: String } type Library { - items(filter: LibraryItemFilter, order: LibraryItemOrder, first: Int, offset: Int): [LibraryItem] - itemsAggregate(filter: LibraryItemFilter): LibraryItemAggregateResult + items(filter: LibraryItemFilter, order: LibraryItemOrder, first: Int, offset: Int): [LibraryItem] + itemsAggregate(filter: LibraryItemFilter): LibraryItemAggregateResult } ####################### @@ -35,162 +35,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -202,12 +202,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -216,78 +215,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -295,80 +293,70 @@ input StringHashFilter { ####################### type AddBookPayload { - book(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] - numUids: Int + book(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] + numUids: Int } type AddLibraryPayload { - library(filter: LibraryFilter, first: Int, offset: Int): [Library] - numUids: Int + library(filter: LibraryFilter, first: Int, offset: Int): [Library] + numUids: Int } type BookAggregateResult { - count: Int - refIDMin: String - refIDMax: String - itemIDMin: String - itemIDMax: String - titleMin: String - titleMax: String - authorMin: String - authorMax: String + count: Int + refIDMin: String + refIDMax: String + itemIDMin: String + itemIDMax: String + titleMin: String + titleMax: String + authorMin: String + authorMax: String } type DeleteBookPayload { - book(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] - msg: String - numUids: Int + book(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] + msg: String + numUids: Int } type DeleteLibraryItemPayload { - libraryItem( - filter: LibraryItemFilter - order: LibraryItemOrder - first: Int - offset: Int - ): [LibraryItem] - msg: String - numUids: Int + libraryItem(filter: LibraryItemFilter, order: LibraryItemOrder, first: Int, offset: Int): [LibraryItem] + msg: String + numUids: Int } type DeleteLibraryPayload { - library(filter: LibraryFilter, first: Int, offset: Int): [Library] - msg: String - numUids: Int + library(filter: LibraryFilter, first: Int, offset: Int): [Library] + msg: String + numUids: Int } type LibraryAggregateResult { - count: Int + count: Int } type LibraryItemAggregateResult { - count: Int - refIDMin: String - refIDMax: String - itemIDMin: String - itemIDMax: String + count: Int + refIDMin: String + refIDMax: String + itemIDMin: String + itemIDMax: String } type UpdateBookPayload { - book(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] - numUids: Int + book(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] + numUids: Int } type UpdateLibraryItemPayload { - libraryItem( - filter: LibraryItemFilter - order: LibraryItemOrder - first: Int - offset: Int - ): [LibraryItem] - numUids: Int + libraryItem(filter: LibraryItemFilter, order: LibraryItemOrder, first: Int, offset: Int): [LibraryItem] + numUids: Int } type UpdateLibraryPayload { - library(filter: LibraryFilter, first: Int, offset: Int): [Library] - numUids: Int + library(filter: LibraryFilter, first: Int, offset: Int): [Library] + numUids: Int } ####################### @@ -376,31 +364,31 @@ type UpdateLibraryPayload { ####################### enum BookHasFilter { - refID - itemID - title - author + refID + itemID + title + author } enum BookOrderable { - refID - itemID - title - author + refID + itemID + title + author } enum LibraryHasFilter { - items + items } enum LibraryItemHasFilter { - refID - itemID + refID + itemID } enum LibraryItemOrderable { - refID - itemID + refID + itemID } ####################### @@ -408,100 +396,100 @@ enum LibraryItemOrderable { ####################### input AddBookInput { - refID: String! - itemID: String! - title: String - author: String + refID: String! + itemID: String! + title: String + author: String } input AddLibraryInput { - items: [LibraryItemRef] + items: [LibraryItemRef] } input BookFilter { - refID: StringHashFilter - itemID: StringHashFilter - has: [BookHasFilter] - and: [BookFilter] - or: [BookFilter] - not: BookFilter + refID: StringHashFilter + itemID: StringHashFilter + has: [BookHasFilter] + and: [BookFilter] + or: [BookFilter] + not: BookFilter } input BookOrder { - asc: BookOrderable - desc: BookOrderable - then: BookOrder + asc: BookOrderable + desc: BookOrderable + then: BookOrder } input BookPatch { - refID: String - itemID: String - title: String - author: String + refID: String + itemID: String + title: String + author: String } input BookRef { - refID: String - itemID: String - title: String - author: String + refID: String + itemID: String + title: String + author: String } input LibraryFilter { - has: [LibraryHasFilter] - and: [LibraryFilter] - or: [LibraryFilter] - not: LibraryFilter + has: [LibraryHasFilter] + and: [LibraryFilter] + or: [LibraryFilter] + not: LibraryFilter } input LibraryItemFilter { - refID: StringHashFilter - itemID: StringHashFilter - has: [LibraryItemHasFilter] - and: [LibraryItemFilter] - or: [LibraryItemFilter] - not: LibraryItemFilter + refID: StringHashFilter + itemID: StringHashFilter + has: [LibraryItemHasFilter] + and: [LibraryItemFilter] + or: [LibraryItemFilter] + not: LibraryItemFilter } input LibraryItemOrder { - asc: LibraryItemOrderable - desc: LibraryItemOrderable - then: LibraryItemOrder + asc: LibraryItemOrderable + desc: LibraryItemOrderable + then: LibraryItemOrder } input LibraryItemPatch { - refID: String - itemID: String + refID: String + itemID: String } input LibraryItemRef { - refID: String! + refID: String! } input LibraryPatch { - items: [LibraryItemRef] + items: [LibraryItemRef] } input LibraryRef { - items: [LibraryItemRef] + items: [LibraryItemRef] } input UpdateBookInput { - filter: BookFilter! - set: BookPatch - remove: BookPatch + filter: BookFilter! + set: BookPatch + remove: BookPatch } input UpdateLibraryInput { - filter: LibraryFilter! - set: LibraryPatch - remove: LibraryPatch + filter: LibraryFilter! + set: LibraryPatch + remove: LibraryPatch } input UpdateLibraryItemInput { - filter: LibraryItemFilter! - set: LibraryItemPatch - remove: LibraryItemPatch + filter: LibraryItemFilter! + set: LibraryItemPatch + remove: LibraryItemPatch } ####################### @@ -509,22 +497,14 @@ input UpdateLibraryItemInput { ####################### type Query { - getLibraryItem(refID: String, itemID: String): LibraryItem - @deprecated( - reason: "@id argument for get query on interface is being deprecated. Only those @id fields which have interface argument set to true will be available in getQuery argument on interface post v21.11.0, please update your schema accordingly." - ) - queryLibraryItem( - filter: LibraryItemFilter - order: LibraryItemOrder - first: Int - offset: Int - ): [LibraryItem] - aggregateLibraryItem(filter: LibraryItemFilter): LibraryItemAggregateResult - getBook(refID: String, itemID: String): Book - queryBook(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] - aggregateBook(filter: BookFilter): BookAggregateResult - queryLibrary(filter: LibraryFilter, first: Int, offset: Int): [Library] - aggregateLibrary(filter: LibraryFilter): LibraryAggregateResult + getLibraryItem(refID: String, itemID: String): LibraryItem @deprecated(reason: "@id argument for get query on interface is being deprecated. Only those @id fields which have interface argument set to true will be available in getQuery argument on interface post v21.11.0, please update your schema accordingly.") + queryLibraryItem(filter: LibraryItemFilter, order: LibraryItemOrder, first: Int, offset: Int): [LibraryItem] + aggregateLibraryItem(filter: LibraryItemFilter): LibraryItemAggregateResult + getBook(refID: String, itemID: String): Book + queryBook(filter: BookFilter, order: BookOrder, first: Int, offset: Int): [Book] + aggregateBook(filter: BookFilter): BookAggregateResult + queryLibrary(filter: LibraryFilter, first: Int, offset: Int): [Library] + aggregateLibrary(filter: LibraryFilter): LibraryAggregateResult } ####################### @@ -532,12 +512,13 @@ type Query { ####################### type Mutation { - updateLibraryItem(input: UpdateLibraryItemInput!): UpdateLibraryItemPayload - deleteLibraryItem(filter: LibraryItemFilter!): DeleteLibraryItemPayload - addBook(input: [AddBookInput!]!, upsert: Boolean): AddBookPayload - updateBook(input: UpdateBookInput!): UpdateBookPayload - deleteBook(filter: BookFilter!): DeleteBookPayload - addLibrary(input: [AddLibraryInput!]!): AddLibraryPayload - updateLibrary(input: UpdateLibraryInput!): UpdateLibraryPayload - deleteLibrary(filter: LibraryFilter!): DeleteLibraryPayload + updateLibraryItem(input: UpdateLibraryItemInput!): UpdateLibraryItemPayload + deleteLibraryItem(filter: LibraryItemFilter!): DeleteLibraryItemPayload + addBook(input: [AddBookInput!]!, upsert: Boolean): AddBookPayload + updateBook(input: UpdateBookInput!): UpdateBookPayload + deleteBook(filter: BookFilter!): DeleteBookPayload + addLibrary(input: [AddLibraryInput!]!): AddLibraryPayload + updateLibrary(input: UpdateLibraryInput!): UpdateLibraryPayload + deleteLibrary(filter: LibraryFilter!): DeleteLibraryPayload } + diff --git a/graphql/schema/testdata/schemagen/output/interface-with-no-ids.graphql b/graphql/schema/testdata/schemagen/output/interface-with-no-ids.graphql index 581845221d5..229a55e6141 100644 --- a/graphql/schema/testdata/schemagen/output/interface-with-no-ids.graphql +++ b/graphql/schema/testdata/schemagen/output/interface-with-no-ids.graphql @@ -3,18 +3,18 @@ ####################### interface Message { - text: String + text: String } type Question implements Message { - text: String - askedBy(filter: UserFilter): User + text: String + askedBy(filter: UserFilter): User } type User { - name: String - messages(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - messagesAggregate(filter: MessageFilter): MessageAggregateResult + name: String + messages(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + messagesAggregate(filter: MessageFilter): MessageAggregateResult } ####################### @@ -33,162 +33,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -200,12 +200,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -214,78 +213,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -293,64 +291,64 @@ input StringHashFilter { ####################### type AddQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - msg: String - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + msg: String + numUids: Int } type DeleteQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - msg: String - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + msg: String + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type MessageAggregateResult { - count: Int - textMin: String - textMax: String + count: Int + textMin: String + textMax: String } type QuestionAggregateResult { - count: Int - textMin: String - textMax: String + count: Int + textMin: String + textMax: String } type UpdateMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + numUids: Int } type UpdateQuestionPayload { - question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - numUids: Int + question(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } ####################### @@ -358,29 +356,29 @@ type UserAggregateResult { ####################### enum MessageHasFilter { - text + text } enum MessageOrderable { - text + text } enum QuestionHasFilter { - text - askedBy + text + askedBy } enum QuestionOrderable { - text + text } enum UserHasFilter { - name - messages + name + messages } enum UserOrderable { - name + name } ####################### @@ -388,91 +386,91 @@ enum UserOrderable { ####################### input AddQuestionInput { - text: String - askedBy: UserRef + text: String + askedBy: UserRef } input AddUserInput { - name: String + name: String } input MessageFilter { - has: [MessageHasFilter] - and: [MessageFilter] - or: [MessageFilter] - not: MessageFilter + has: [MessageHasFilter] + and: [MessageFilter] + or: [MessageFilter] + not: MessageFilter } input MessageOrder { - asc: MessageOrderable - desc: MessageOrderable - then: MessageOrder + asc: MessageOrderable + desc: MessageOrderable + then: MessageOrder } input MessagePatch { - text: String + text: String } input QuestionFilter { - has: [QuestionHasFilter] - and: [QuestionFilter] - or: [QuestionFilter] - not: QuestionFilter + has: [QuestionHasFilter] + and: [QuestionFilter] + or: [QuestionFilter] + not: QuestionFilter } input QuestionOrder { - asc: QuestionOrderable - desc: QuestionOrderable - then: QuestionOrder + asc: QuestionOrderable + desc: QuestionOrderable + then: QuestionOrder } input QuestionPatch { - text: String - askedBy: UserRef + text: String + askedBy: UserRef } input QuestionRef { - text: String - askedBy: UserRef + text: String + askedBy: UserRef } input UpdateMessageInput { - filter: MessageFilter! - set: MessagePatch - remove: MessagePatch + filter: MessageFilter! + set: MessagePatch + remove: MessagePatch } input UpdateQuestionInput { - filter: QuestionFilter! - set: QuestionPatch - remove: QuestionPatch + filter: QuestionFilter! + set: QuestionPatch + remove: QuestionPatch } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - name: String + name: String } input UserRef { - name: String + name: String } ####################### @@ -480,12 +478,12 @@ input UserRef { ####################### type Query { - queryMessage(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - aggregateMessage(filter: MessageFilter): MessageAggregateResult - queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] - aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + queryMessage(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + aggregateMessage(filter: MessageFilter): MessageAggregateResult + queryQuestion(filter: QuestionFilter, order: QuestionOrder, first: Int, offset: Int): [Question] + aggregateQuestion(filter: QuestionFilter): QuestionAggregateResult + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -493,12 +491,13 @@ type Query { ####################### type Mutation { - updateMessage(input: UpdateMessageInput!): UpdateMessagePayload - deleteMessage(filter: MessageFilter!): DeleteMessagePayload - addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload - updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload - deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload - addUser(input: [AddUserInput!]!): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + updateMessage(input: UpdateMessageInput!): UpdateMessagePayload + deleteMessage(filter: MessageFilter!): DeleteMessagePayload + addQuestion(input: [AddQuestionInput!]!): AddQuestionPayload + updateQuestion(input: UpdateQuestionInput!): UpdateQuestionPayload + deleteQuestion(filter: QuestionFilter!): DeleteQuestionPayload + addUser(input: [AddUserInput!]!): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } + diff --git a/graphql/schema/testdata/schemagen/output/interfaces-with-types-and-password.graphql b/graphql/schema/testdata/schemagen/output/interfaces-with-types-and-password.graphql index 8599070e74a..d274d2470db 100644 --- a/graphql/schema/testdata/schemagen/output/interfaces-with-types-and-password.graphql +++ b/graphql/schema/testdata/schemagen/output/interfaces-with-types-and-password.graphql @@ -3,43 +3,43 @@ ####################### interface Character @secret(field: "password") { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - appearsIn: [Episode!]! @search - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + appearsIn: [Episode!]! @search + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } type Human implements Character @secret(field: "password") { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - appearsIn: [Episode!]! @search - starships(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - totalCredits: Int - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult - starshipsAggregate(filter: StarshipFilter): StarshipAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + appearsIn: [Episode!]! @search + starships(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + totalCredits: Int + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + starshipsAggregate(filter: StarshipFilter): StarshipAggregateResult } type Droid implements Character @secret(field: "password") { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - appearsIn: [Episode!]! @search - primaryFunction: String - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + appearsIn: [Episode!]! @search + primaryFunction: String + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } enum Episode { - NEWHOPE - EMPIRE - JEDI + NEWHOPE + EMPIRE + JEDI } type Starship { - id: ID! - name: String! @search(by: [term]) - length: Float + id: ID! + name: String! @search(by: [term]) + length: Float } ####################### @@ -58,162 +58,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -225,12 +225,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -239,78 +238,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -318,96 +316,96 @@ input StringHashFilter { ####################### type AddDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + numUids: Int } type AddHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type AddStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + numUids: Int } type CharacterAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - msg: String - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + msg: String + numUids: Int } type DeleteDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - msg: String - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + msg: String + numUids: Int } type DeleteHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - msg: String - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + msg: String + numUids: Int } type DeleteStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - msg: String - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + msg: String + numUids: Int } type DroidAggregateResult { - count: Int - nameMin: String - nameMax: String - primaryFunctionMin: String - primaryFunctionMax: String + count: Int + nameMin: String + nameMax: String + primaryFunctionMin: String + primaryFunctionMax: String } type HumanAggregateResult { - count: Int - nameMin: String - nameMax: String - totalCreditsMin: Int - totalCreditsMax: Int - totalCreditsSum: Int - totalCreditsAvg: Float + count: Int + nameMin: String + nameMax: String + totalCreditsMin: Int + totalCreditsMax: Int + totalCreditsSum: Int + totalCreditsAvg: Float } type StarshipAggregateResult { - count: Int - nameMin: String - nameMax: String - lengthMin: Float - lengthMax: Float - lengthSum: Float - lengthAvg: Float + count: Int + nameMin: String + nameMax: String + lengthMin: Float + lengthMax: Float + lengthSum: Float + lengthAvg: Float } type UpdateCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + numUids: Int } type UpdateDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + numUids: Int } type UpdateHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type UpdateStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + numUids: Int } ####################### @@ -415,48 +413,48 @@ type UpdateStarshipPayload { ####################### enum CharacterHasFilter { - name - friends - appearsIn + name + friends + appearsIn } enum CharacterOrderable { - name + name } enum DroidHasFilter { - name - friends - appearsIn - primaryFunction + name + friends + appearsIn + primaryFunction } enum DroidOrderable { - name - primaryFunction + name + primaryFunction } enum HumanHasFilter { - name - friends - appearsIn - starships - totalCredits + name + friends + appearsIn + starships + totalCredits } enum HumanOrderable { - name - totalCredits + name + totalCredits } enum StarshipHasFilter { - name - length + name + length } enum StarshipOrderable { - name - length + name + length } ####################### @@ -464,175 +462,175 @@ enum StarshipOrderable { ####################### input AddDroidInput { - name: String! - friends: [CharacterRef] - appearsIn: [Episode!]! - primaryFunction: String - password: String! + name: String! + friends: [CharacterRef] + appearsIn: [Episode!]! + primaryFunction: String + password: String! } input AddHumanInput { - name: String! - friends: [CharacterRef] - appearsIn: [Episode!]! - starships: [StarshipRef] - totalCredits: Int - password: String! + name: String! + friends: [CharacterRef] + appearsIn: [Episode!]! + starships: [StarshipRef] + totalCredits: Int + password: String! } input AddStarshipInput { - name: String! - length: Float + name: String! + length: Float } input CharacterFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [CharacterHasFilter] - and: [CharacterFilter] - or: [CharacterFilter] - not: CharacterFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [CharacterHasFilter] + and: [CharacterFilter] + or: [CharacterFilter] + not: CharacterFilter } input CharacterOrder { - asc: CharacterOrderable - desc: CharacterOrderable - then: CharacterOrder + asc: CharacterOrderable + desc: CharacterOrderable + then: CharacterOrder } input CharacterPatch { - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - password: String + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + password: String } input CharacterRef { - id: ID! + id: ID! } input DroidFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [DroidHasFilter] - and: [DroidFilter] - or: [DroidFilter] - not: DroidFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [DroidHasFilter] + and: [DroidFilter] + or: [DroidFilter] + not: DroidFilter } input DroidOrder { - asc: DroidOrderable - desc: DroidOrderable - then: DroidOrder + asc: DroidOrderable + desc: DroidOrderable + then: DroidOrder } input DroidPatch { - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - primaryFunction: String - password: String + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + primaryFunction: String + password: String } input DroidRef { - id: ID - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - primaryFunction: String - password: String + id: ID + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + primaryFunction: String + password: String } input Episode_hash { - eq: Episode - in: [Episode] + eq: Episode + in: [Episode] } input HumanFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [HumanHasFilter] - and: [HumanFilter] - or: [HumanFilter] - not: HumanFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [HumanHasFilter] + and: [HumanFilter] + or: [HumanFilter] + not: HumanFilter } input HumanOrder { - asc: HumanOrderable - desc: HumanOrderable - then: HumanOrder + asc: HumanOrderable + desc: HumanOrderable + then: HumanOrder } input HumanPatch { - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - starships: [StarshipRef] - totalCredits: Int - password: String + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + starships: [StarshipRef] + totalCredits: Int + password: String } input HumanRef { - id: ID - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - starships: [StarshipRef] - totalCredits: Int - password: String + id: ID + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + starships: [StarshipRef] + totalCredits: Int + password: String } input StarshipFilter { - id: [ID!] - name: StringTermFilter - has: [StarshipHasFilter] - and: [StarshipFilter] - or: [StarshipFilter] - not: StarshipFilter + id: [ID!] + name: StringTermFilter + has: [StarshipHasFilter] + and: [StarshipFilter] + or: [StarshipFilter] + not: StarshipFilter } input StarshipOrder { - asc: StarshipOrderable - desc: StarshipOrderable - then: StarshipOrder + asc: StarshipOrderable + desc: StarshipOrderable + then: StarshipOrder } input StarshipPatch { - name: String - length: Float + name: String + length: Float } input StarshipRef { - id: ID - name: String - length: Float + id: ID + name: String + length: Float } input UpdateCharacterInput { - filter: CharacterFilter! - set: CharacterPatch - remove: CharacterPatch + filter: CharacterFilter! + set: CharacterPatch + remove: CharacterPatch } input UpdateDroidInput { - filter: DroidFilter! - set: DroidPatch - remove: DroidPatch + filter: DroidFilter! + set: DroidPatch + remove: DroidPatch } input UpdateHumanInput { - filter: HumanFilter! - set: HumanPatch - remove: HumanPatch + filter: HumanFilter! + set: HumanPatch + remove: HumanPatch } input UpdateStarshipInput { - filter: StarshipFilter! - set: StarshipPatch - remove: StarshipPatch + filter: StarshipFilter! + set: StarshipPatch + remove: StarshipPatch } ####################### @@ -640,26 +638,21 @@ input UpdateStarshipInput { ####################### type Query { - getCharacter(id: ID!): Character - checkCharacterPassword(id: ID!, password: String!): Character - queryCharacter( - filter: CharacterFilter - order: CharacterOrder - first: Int - offset: Int - ): [Character] - aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult - getHuman(id: ID!): Human - checkHumanPassword(id: ID!, password: String!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult - getDroid(id: ID!): Droid - checkDroidPassword(id: ID!, password: String!): Droid - queryDroid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - aggregateDroid(filter: DroidFilter): DroidAggregateResult - getStarship(id: ID!): Starship - queryStarship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - aggregateStarship(filter: StarshipFilter): StarshipAggregateResult + getCharacter(id: ID!): Character + checkCharacterPassword(id: ID!, password: String!): Character + queryCharacter(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult + getHuman(id: ID!): Human + checkHumanPassword(id: ID!, password: String!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult + getDroid(id: ID!): Droid + checkDroidPassword(id: ID!, password: String!): Droid + queryDroid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + aggregateDroid(filter: DroidFilter): DroidAggregateResult + getStarship(id: ID!): Starship + queryStarship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + aggregateStarship(filter: StarshipFilter): StarshipAggregateResult } ####################### @@ -667,15 +660,16 @@ type Query { ####################### type Mutation { - updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload - deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload - addHuman(input: [AddHumanInput!]!): AddHumanPayload - updateHuman(input: UpdateHumanInput!): UpdateHumanPayload - deleteHuman(filter: HumanFilter!): DeleteHumanPayload - addDroid(input: [AddDroidInput!]!): AddDroidPayload - updateDroid(input: UpdateDroidInput!): UpdateDroidPayload - deleteDroid(filter: DroidFilter!): DeleteDroidPayload - addStarship(input: [AddStarshipInput!]!): AddStarshipPayload - updateStarship(input: UpdateStarshipInput!): UpdateStarshipPayload - deleteStarship(filter: StarshipFilter!): DeleteStarshipPayload + updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload + deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload + addHuman(input: [AddHumanInput!]!): AddHumanPayload + updateHuman(input: UpdateHumanInput!): UpdateHumanPayload + deleteHuman(filter: HumanFilter!): DeleteHumanPayload + addDroid(input: [AddDroidInput!]!): AddDroidPayload + updateDroid(input: UpdateDroidInput!): UpdateDroidPayload + deleteDroid(filter: DroidFilter!): DeleteDroidPayload + addStarship(input: [AddStarshipInput!]!): AddStarshipPayload + updateStarship(input: UpdateStarshipInput!): UpdateStarshipPayload + deleteStarship(filter: StarshipFilter!): DeleteStarshipPayload } + diff --git a/graphql/schema/testdata/schemagen/output/interfaces-with-types.graphql b/graphql/schema/testdata/schemagen/output/interfaces-with-types.graphql index 488ed7779b6..5557ee1e3df 100644 --- a/graphql/schema/testdata/schemagen/output/interfaces-with-types.graphql +++ b/graphql/schema/testdata/schemagen/output/interfaces-with-types.graphql @@ -3,43 +3,43 @@ ####################### interface Character { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - appearsIn: [Episode!]! @search - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + appearsIn: [Episode!]! @search + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } type Human implements Character { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - appearsIn: [Episode!]! @search - starships(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - totalCredits: Int - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult - starshipsAggregate(filter: StarshipFilter): StarshipAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + appearsIn: [Episode!]! @search + starships(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + totalCredits: Int + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + starshipsAggregate(filter: StarshipFilter): StarshipAggregateResult } type Droid implements Character { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - appearsIn: [Episode!]! @search - primaryFunction: String - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + appearsIn: [Episode!]! @search + primaryFunction: String + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } enum Episode { - NEWHOPE - EMPIRE - JEDI + NEWHOPE + EMPIRE + JEDI } type Starship { - id: ID! - name: String! @search(by: [term]) - length: Float + id: ID! + name: String! @search(by: [term]) + length: Float } ####################### @@ -58,162 +58,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -225,12 +225,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -239,78 +238,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -318,96 +316,96 @@ input StringHashFilter { ####################### type AddDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + numUids: Int } type AddHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type AddStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + numUids: Int } type CharacterAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - msg: String - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + msg: String + numUids: Int } type DeleteDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - msg: String - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + msg: String + numUids: Int } type DeleteHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - msg: String - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + msg: String + numUids: Int } type DeleteStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - msg: String - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + msg: String + numUids: Int } type DroidAggregateResult { - count: Int - nameMin: String - nameMax: String - primaryFunctionMin: String - primaryFunctionMax: String + count: Int + nameMin: String + nameMax: String + primaryFunctionMin: String + primaryFunctionMax: String } type HumanAggregateResult { - count: Int - nameMin: String - nameMax: String - totalCreditsMin: Int - totalCreditsMax: Int - totalCreditsSum: Int - totalCreditsAvg: Float + count: Int + nameMin: String + nameMax: String + totalCreditsMin: Int + totalCreditsMax: Int + totalCreditsSum: Int + totalCreditsAvg: Float } type StarshipAggregateResult { - count: Int - nameMin: String - nameMax: String - lengthMin: Float - lengthMax: Float - lengthSum: Float - lengthAvg: Float + count: Int + nameMin: String + nameMax: String + lengthMin: Float + lengthMax: Float + lengthSum: Float + lengthAvg: Float } type UpdateCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + numUids: Int } type UpdateDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + numUids: Int } type UpdateHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type UpdateStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + numUids: Int } ####################### @@ -415,48 +413,48 @@ type UpdateStarshipPayload { ####################### enum CharacterHasFilter { - name - friends - appearsIn + name + friends + appearsIn } enum CharacterOrderable { - name + name } enum DroidHasFilter { - name - friends - appearsIn - primaryFunction + name + friends + appearsIn + primaryFunction } enum DroidOrderable { - name - primaryFunction + name + primaryFunction } enum HumanHasFilter { - name - friends - appearsIn - starships - totalCredits + name + friends + appearsIn + starships + totalCredits } enum HumanOrderable { - name - totalCredits + name + totalCredits } enum StarshipHasFilter { - name - length + name + length } enum StarshipOrderable { - name - length + name + length } ####################### @@ -464,168 +462,168 @@ enum StarshipOrderable { ####################### input AddDroidInput { - name: String! - friends: [CharacterRef] - appearsIn: [Episode!]! - primaryFunction: String + name: String! + friends: [CharacterRef] + appearsIn: [Episode!]! + primaryFunction: String } input AddHumanInput { - name: String! - friends: [CharacterRef] - appearsIn: [Episode!]! - starships: [StarshipRef] - totalCredits: Int + name: String! + friends: [CharacterRef] + appearsIn: [Episode!]! + starships: [StarshipRef] + totalCredits: Int } input AddStarshipInput { - name: String! - length: Float + name: String! + length: Float } input CharacterFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [CharacterHasFilter] - and: [CharacterFilter] - or: [CharacterFilter] - not: CharacterFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [CharacterHasFilter] + and: [CharacterFilter] + or: [CharacterFilter] + not: CharacterFilter } input CharacterOrder { - asc: CharacterOrderable - desc: CharacterOrderable - then: CharacterOrder + asc: CharacterOrderable + desc: CharacterOrderable + then: CharacterOrder } input CharacterPatch { - name: String - friends: [CharacterRef] - appearsIn: [Episode!] + name: String + friends: [CharacterRef] + appearsIn: [Episode!] } input CharacterRef { - id: ID! + id: ID! } input DroidFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [DroidHasFilter] - and: [DroidFilter] - or: [DroidFilter] - not: DroidFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [DroidHasFilter] + and: [DroidFilter] + or: [DroidFilter] + not: DroidFilter } input DroidOrder { - asc: DroidOrderable - desc: DroidOrderable - then: DroidOrder + asc: DroidOrderable + desc: DroidOrderable + then: DroidOrder } input DroidPatch { - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - primaryFunction: String + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + primaryFunction: String } input DroidRef { - id: ID - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - primaryFunction: String + id: ID + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + primaryFunction: String } input Episode_hash { - eq: Episode - in: [Episode] + eq: Episode + in: [Episode] } input HumanFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [HumanHasFilter] - and: [HumanFilter] - or: [HumanFilter] - not: HumanFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [HumanHasFilter] + and: [HumanFilter] + or: [HumanFilter] + not: HumanFilter } input HumanOrder { - asc: HumanOrderable - desc: HumanOrderable - then: HumanOrder + asc: HumanOrderable + desc: HumanOrderable + then: HumanOrder } input HumanPatch { - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - starships: [StarshipRef] - totalCredits: Int + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + starships: [StarshipRef] + totalCredits: Int } input HumanRef { - id: ID - name: String - friends: [CharacterRef] - appearsIn: [Episode!] - starships: [StarshipRef] - totalCredits: Int + id: ID + name: String + friends: [CharacterRef] + appearsIn: [Episode!] + starships: [StarshipRef] + totalCredits: Int } input StarshipFilter { - id: [ID!] - name: StringTermFilter - has: [StarshipHasFilter] - and: [StarshipFilter] - or: [StarshipFilter] - not: StarshipFilter + id: [ID!] + name: StringTermFilter + has: [StarshipHasFilter] + and: [StarshipFilter] + or: [StarshipFilter] + not: StarshipFilter } input StarshipOrder { - asc: StarshipOrderable - desc: StarshipOrderable - then: StarshipOrder + asc: StarshipOrderable + desc: StarshipOrderable + then: StarshipOrder } input StarshipPatch { - name: String - length: Float + name: String + length: Float } input StarshipRef { - id: ID - name: String - length: Float + id: ID + name: String + length: Float } input UpdateCharacterInput { - filter: CharacterFilter! - set: CharacterPatch - remove: CharacterPatch + filter: CharacterFilter! + set: CharacterPatch + remove: CharacterPatch } input UpdateDroidInput { - filter: DroidFilter! - set: DroidPatch - remove: DroidPatch + filter: DroidFilter! + set: DroidPatch + remove: DroidPatch } input UpdateHumanInput { - filter: HumanFilter! - set: HumanPatch - remove: HumanPatch + filter: HumanFilter! + set: HumanPatch + remove: HumanPatch } input UpdateStarshipInput { - filter: StarshipFilter! - set: StarshipPatch - remove: StarshipPatch + filter: StarshipFilter! + set: StarshipPatch + remove: StarshipPatch } ####################### @@ -633,23 +631,18 @@ input UpdateStarshipInput { ####################### type Query { - getCharacter(id: ID!): Character - queryCharacter( - filter: CharacterFilter - order: CharacterOrder - first: Int - offset: Int - ): [Character] - aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult - getHuman(id: ID!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult - getDroid(id: ID!): Droid - queryDroid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - aggregateDroid(filter: DroidFilter): DroidAggregateResult - getStarship(id: ID!): Starship - queryStarship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - aggregateStarship(filter: StarshipFilter): StarshipAggregateResult + getCharacter(id: ID!): Character + queryCharacter(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult + getHuman(id: ID!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult + getDroid(id: ID!): Droid + queryDroid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + aggregateDroid(filter: DroidFilter): DroidAggregateResult + getStarship(id: ID!): Starship + queryStarship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + aggregateStarship(filter: StarshipFilter): StarshipAggregateResult } ####################### @@ -657,15 +650,16 @@ type Query { ####################### type Mutation { - updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload - deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload - addHuman(input: [AddHumanInput!]!): AddHumanPayload - updateHuman(input: UpdateHumanInput!): UpdateHumanPayload - deleteHuman(filter: HumanFilter!): DeleteHumanPayload - addDroid(input: [AddDroidInput!]!): AddDroidPayload - updateDroid(input: UpdateDroidInput!): UpdateDroidPayload - deleteDroid(filter: DroidFilter!): DeleteDroidPayload - addStarship(input: [AddStarshipInput!]!): AddStarshipPayload - updateStarship(input: UpdateStarshipInput!): UpdateStarshipPayload - deleteStarship(filter: StarshipFilter!): DeleteStarshipPayload + updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload + deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload + addHuman(input: [AddHumanInput!]!): AddHumanPayload + updateHuman(input: UpdateHumanInput!): UpdateHumanPayload + deleteHuman(filter: HumanFilter!): DeleteHumanPayload + addDroid(input: [AddDroidInput!]!): AddDroidPayload + updateDroid(input: UpdateDroidInput!): UpdateDroidPayload + deleteDroid(filter: DroidFilter!): DeleteDroidPayload + addStarship(input: [AddStarshipInput!]!): AddStarshipPayload + updateStarship(input: UpdateStarshipInput!): UpdateStarshipPayload + deleteStarship(filter: StarshipFilter!): DeleteStarshipPayload } + diff --git a/graphql/schema/testdata/schemagen/output/lambda-directive.graphql b/graphql/schema/testdata/schemagen/output/lambda-directive.graphql index 1f0f4eee988..2b81f7d964e 100644 --- a/graphql/schema/testdata/schemagen/output/lambda-directive.graphql +++ b/graphql/schema/testdata/schemagen/output/lambda-directive.graphql @@ -3,10 +3,10 @@ ####################### type User { - id: ID! - firstName: String! - lastName: String! - fullName: String @lambda + id: ID! + firstName: String! + lastName: String! + fullName: String @lambda } ####################### @@ -25,162 +25,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -192,12 +192,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -206,78 +205,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -285,27 +283,27 @@ input StringHashFilter { ####################### type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - firstNameMin: String - firstNameMax: String - lastNameMin: String - lastNameMax: String + count: Int + firstNameMin: String + firstNameMax: String + lastNameMin: String + lastNameMax: String } ####################### @@ -313,13 +311,13 @@ type UserAggregateResult { ####################### enum UserHasFilter { - firstName - lastName + firstName + lastName } enum UserOrderable { - firstName - lastName + firstName + lastName } ####################### @@ -327,39 +325,39 @@ enum UserOrderable { ####################### input AddUserInput { - firstName: String! - lastName: String! + firstName: String! + lastName: String! } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - id: [ID!] - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + id: [ID!] + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - firstName: String - lastName: String + firstName: String + lastName: String } input UserRef { - id: ID - firstName: String - lastName: String + id: ID + firstName: String + lastName: String } ####################### @@ -367,10 +365,10 @@ input UserRef { ####################### type Query { - queryUserNames(id: [ID!]!): [String] @lambda - getUser(id: ID!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + queryUserNames(id: [ID!]!): [String] @lambda + getUser(id: ID!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -378,8 +376,9 @@ type Query { ####################### type Mutation { - createUser(firstName: String!, lastName: String!): User @lambda - addUser(input: [AddUserInput!]!): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + createUser(firstName: String!, lastName: String!): User @lambda + addUser(input: [AddUserInput!]!): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } + diff --git a/graphql/schema/testdata/schemagen/output/language-tags.graphql b/graphql/schema/testdata/schemagen/output/language-tags.graphql index 2e21d265153..174a6cde433 100644 --- a/graphql/schema/testdata/schemagen/output/language-tags.graphql +++ b/graphql/schema/testdata/schemagen/output/language-tags.graphql @@ -3,23 +3,23 @@ ####################### interface Node { - f1: String + f1: String } type Person implements Node { - f1: String - f1Hi: String @dgraph(pred: "Node.f1@hi") - f2: String @dgraph(pred: "T.f@no") - f3: String @dgraph(pred: "f3@en") - name: String! @id - nameHi: String @dgraph(pred: "Person.name@hi") @search(by: ["term", "exact"]) - nameEn: String @dgraph(pred: "Person.name@en") @search(by: [regexp]) - nameHiEn: String @dgraph(pred: "Person.name@hi:en") - nameHi_En_Untag: String @dgraph(pred: "Person.name@hi:en:.") - name_Untag_AnyLang: String @dgraph(pred: "Person.name@.") - address: String @search(by: [fulltext]) - addressHi: String @dgraph(pred: "Person.address@hi") - professionEn: String @dgraph(pred: "Person.profession@en") + f1: String + f1Hi: String @dgraph(pred: "Node.f1@hi") + f2: String @dgraph(pred: "T.f@no") + f3: String @dgraph(pred: "f3@en") + name: String! @id + nameHi: String @dgraph(pred: "Person.name@hi") @search(by: ["term","exact"]) + nameEn: String @dgraph(pred: "Person.name@en") @search(by: [regexp]) + nameHiEn: String @dgraph(pred: "Person.name@hi:en") + nameHi_En_Untag: String @dgraph(pred: "Person.name@hi:en:.") + name_Untag_AnyLang: String @dgraph(pred: "Person.name@.") + address: String @search(by: [fulltext]) + addressHi: String @dgraph(pred: "Person.address@hi") + professionEn: String @dgraph(pred: "Person.profession@en") } ####################### @@ -38,162 +38,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -205,12 +205,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -219,78 +218,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -298,66 +296,66 @@ input StringHashFilter { ####################### type AddPersonPayload { - person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - numUids: Int + person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + numUids: Int } type DeleteNodePayload { - node(filter: NodeFilter, order: NodeOrder, first: Int, offset: Int): [Node] - msg: String - numUids: Int + node(filter: NodeFilter, order: NodeOrder, first: Int, offset: Int): [Node] + msg: String + numUids: Int } type DeletePersonPayload { - person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - msg: String - numUids: Int + person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + msg: String + numUids: Int } type NodeAggregateResult { - count: Int - f1Min: String - f1Max: String + count: Int + f1Min: String + f1Max: String } type PersonAggregateResult { - count: Int - f1Min: String - f1Max: String - f1HiMin: String - f1HiMax: String - f2Min: String - f2Max: String - f3Min: String - f3Max: String - nameMin: String - nameMax: String - nameHiMin: String - nameHiMax: String - nameEnMin: String - nameEnMax: String - nameHiEnMin: String - nameHiEnMax: String - nameHi_En_UntagMin: String - nameHi_En_UntagMax: String - name_Untag_AnyLangMin: String - name_Untag_AnyLangMax: String - addressMin: String - addressMax: String - addressHiMin: String - addressHiMax: String - professionEnMin: String - professionEnMax: String + count: Int + f1Min: String + f1Max: String + f1HiMin: String + f1HiMax: String + f2Min: String + f2Max: String + f3Min: String + f3Max: String + nameMin: String + nameMax: String + nameHiMin: String + nameHiMax: String + nameEnMin: String + nameEnMax: String + nameHiEnMin: String + nameHiEnMax: String + nameHi_En_UntagMin: String + nameHi_En_UntagMax: String + name_Untag_AnyLangMin: String + name_Untag_AnyLangMax: String + addressMin: String + addressMax: String + addressHiMin: String + addressHiMax: String + professionEnMin: String + professionEnMax: String } type UpdateNodePayload { - node(filter: NodeFilter, order: NodeOrder, first: Int, offset: Int): [Node] - numUids: Int + node(filter: NodeFilter, order: NodeOrder, first: Int, offset: Int): [Node] + numUids: Int } type UpdatePersonPayload { - person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - numUids: Int + person(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + numUids: Int } ####################### @@ -365,39 +363,39 @@ type UpdatePersonPayload { ####################### enum NodeHasFilter { - f1 + f1 } enum NodeOrderable { - f1 + f1 } enum PersonHasFilter { - f1 - f1Hi - f2 - f3 - name - nameHi - nameEn - name_Untag_AnyLang - address - addressHi - professionEn + f1 + f1Hi + f2 + f3 + name + nameHi + nameEn + name_Untag_AnyLang + address + addressHi + professionEn } enum PersonOrderable { - f1 - f1Hi - f2 - f3 - name - nameHi - nameEn - name_Untag_AnyLang - address - addressHi - professionEn + f1 + f1Hi + f2 + f3 + name + nameHi + nameEn + name_Untag_AnyLang + address + addressHi + professionEn } ####################### @@ -405,100 +403,100 @@ enum PersonOrderable { ####################### input AddPersonInput { - f1: String - f1Hi: String - f2: String - f3: String - name: String! - nameHi: String - nameEn: String - address: String - addressHi: String - professionEn: String + f1: String + f1Hi: String + f2: String + f3: String + name: String! + nameHi: String + nameEn: String + address: String + addressHi: String + professionEn: String } input NodeFilter { - has: [NodeHasFilter] - and: [NodeFilter] - or: [NodeFilter] - not: NodeFilter + has: [NodeHasFilter] + and: [NodeFilter] + or: [NodeFilter] + not: NodeFilter } input NodeOrder { - asc: NodeOrderable - desc: NodeOrderable - then: NodeOrder + asc: NodeOrderable + desc: NodeOrderable + then: NodeOrder } input NodePatch { - f1: String + f1: String } input PersonFilter { - name: StringHashFilter - nameHi: StringExactFilter_StringTermFilter - nameEn: StringRegExpFilter - address: StringFullTextFilter - has: [PersonHasFilter] - and: [PersonFilter] - or: [PersonFilter] - not: PersonFilter + name: StringHashFilter + nameHi: StringExactFilter_StringTermFilter + nameEn: StringRegExpFilter + address: StringFullTextFilter + has: [PersonHasFilter] + and: [PersonFilter] + or: [PersonFilter] + not: PersonFilter } input PersonOrder { - asc: PersonOrderable - desc: PersonOrderable - then: PersonOrder + asc: PersonOrderable + desc: PersonOrderable + then: PersonOrder } input PersonPatch { - f1: String - f1Hi: String - f2: String - f3: String - name: String - nameHi: String - nameEn: String - address: String - addressHi: String - professionEn: String + f1: String + f1Hi: String + f2: String + f3: String + name: String + nameHi: String + nameEn: String + address: String + addressHi: String + professionEn: String } input PersonRef { - f1: String - f1Hi: String - f2: String - f3: String - name: String - nameHi: String - nameEn: String - address: String - addressHi: String - professionEn: String + f1: String + f1Hi: String + f2: String + f3: String + name: String + nameHi: String + nameEn: String + address: String + addressHi: String + professionEn: String } input StringExactFilter_StringTermFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange - allofterms: String - anyofterms: String + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange + allofterms: String + anyofterms: String } input UpdateNodeInput { - filter: NodeFilter! - set: NodePatch - remove: NodePatch + filter: NodeFilter! + set: NodePatch + remove: NodePatch } input UpdatePersonInput { - filter: PersonFilter! - set: PersonPatch - remove: PersonPatch + filter: PersonFilter! + set: PersonPatch + remove: PersonPatch } ####################### @@ -506,11 +504,11 @@ input UpdatePersonInput { ####################### type Query { - queryNode(filter: NodeFilter, order: NodeOrder, first: Int, offset: Int): [Node] - aggregateNode(filter: NodeFilter): NodeAggregateResult - getPerson(name: String!): Person - queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] - aggregatePerson(filter: PersonFilter): PersonAggregateResult + queryNode(filter: NodeFilter, order: NodeOrder, first: Int, offset: Int): [Node] + aggregateNode(filter: NodeFilter): NodeAggregateResult + getPerson(name: String!): Person + queryPerson(filter: PersonFilter, order: PersonOrder, first: Int, offset: Int): [Person] + aggregatePerson(filter: PersonFilter): PersonAggregateResult } ####################### @@ -518,9 +516,10 @@ type Query { ####################### type Mutation { - updateNode(input: UpdateNodeInput!): UpdateNodePayload - deleteNode(filter: NodeFilter!): DeleteNodePayload - addPerson(input: [AddPersonInput!]!, upsert: Boolean): AddPersonPayload - updatePerson(input: UpdatePersonInput!): UpdatePersonPayload - deletePerson(filter: PersonFilter!): DeletePersonPayload + updateNode(input: UpdateNodeInput!): UpdateNodePayload + deleteNode(filter: NodeFilter!): DeleteNodePayload + addPerson(input: [AddPersonInput!]!, upsert: Boolean): AddPersonPayload + updatePerson(input: UpdatePersonInput!): UpdatePersonPayload + deletePerson(filter: PersonFilter!): DeletePersonPayload } + diff --git a/graphql/schema/testdata/schemagen/output/no-id-field-with-searchables.graphql b/graphql/schema/testdata/schemagen/output/no-id-field-with-searchables.graphql index d2a6d41a48e..66f3178e52c 100644 --- a/graphql/schema/testdata/schemagen/output/no-id-field-with-searchables.graphql +++ b/graphql/schema/testdata/schemagen/output/no-id-field-with-searchables.graphql @@ -3,7 +3,7 @@ ####################### type Post { - content: String! @search + content: String! @search } ####################### @@ -22,162 +22,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -189,12 +189,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -203,78 +202,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -282,25 +280,25 @@ input StringHashFilter { ####################### type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - contentMin: String - contentMax: String + count: Int + contentMin: String + contentMax: String } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -308,11 +306,11 @@ type UpdatePostPayload { ####################### enum PostHasFilter { - content + content } enum PostOrderable { - content + content } ####################### @@ -320,35 +318,35 @@ enum PostOrderable { ####################### input AddPostInput { - content: String! + content: String! } input PostFilter { - content: StringTermFilter - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + content: StringTermFilter + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - content: String + content: String } input PostRef { - content: String + content: String } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -356,8 +354,8 @@ input UpdatePostInput { ####################### type Query { - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult } ####################### @@ -365,7 +363,8 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload } + diff --git a/graphql/schema/testdata/schemagen/output/no-id-field.graphql b/graphql/schema/testdata/schemagen/output/no-id-field.graphql index 994156cfb62..1b45c328a3a 100644 --- a/graphql/schema/testdata/schemagen/output/no-id-field.graphql +++ b/graphql/schema/testdata/schemagen/output/no-id-field.graphql @@ -3,20 +3,20 @@ ####################### type Post { - content: String! - author(filter: AuthorFilter): Author! - genre(filter: GenreFilter): Genre + content: String! + author(filter: AuthorFilter): Author! + genre(filter: GenreFilter): Genre } type Author { - id: ID - name: String - posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID + name: String + posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + postsAggregate(filter: PostFilter): PostAggregateResult } type Genre { - name: String! + name: String! } ####################### @@ -35,162 +35,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -202,12 +202,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -216,78 +215,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -295,69 +293,69 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + numUids: Int } type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeleteGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - msg: String - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type GenreAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type PostAggregateResult { - count: Int - contentMin: String - contentMax: String + count: Int + contentMin: String + contentMax: String } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdateGenrePayload { - genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - numUids: Int + genre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -365,30 +363,30 @@ type UpdatePostPayload { ####################### enum AuthorHasFilter { - name - posts + name + posts } enum AuthorOrderable { - name + name } enum GenreHasFilter { - name + name } enum GenreOrderable { - name + name } enum PostHasFilter { - content - author - genre + content + author + genre } enum PostOrderable { - content + content } ####################### @@ -396,107 +394,107 @@ enum PostOrderable { ####################### input AddAuthorInput { - name: String - posts: [PostRef] + name: String + posts: [PostRef] } input AddGenreInput { - name: String! + name: String! } input AddPostInput { - content: String! - author: AuthorRef! - genre: GenreRef + content: String! + author: AuthorRef! + genre: GenreRef } input AuthorFilter { - id: [ID!] - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - posts: [PostRef] + name: String + posts: [PostRef] } input AuthorRef { - id: ID - name: String - posts: [PostRef] + id: ID + name: String + posts: [PostRef] } input GenreFilter { - has: [GenreHasFilter] - and: [GenreFilter] - or: [GenreFilter] - not: GenreFilter + has: [GenreHasFilter] + and: [GenreFilter] + or: [GenreFilter] + not: GenreFilter } input GenreOrder { - asc: GenreOrderable - desc: GenreOrderable - then: GenreOrder + asc: GenreOrderable + desc: GenreOrderable + then: GenreOrder } input GenrePatch { - name: String + name: String } input GenreRef { - name: String + name: String } input PostFilter { - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - content: String - author: AuthorRef - genre: GenreRef + content: String + author: AuthorRef + genre: GenreRef } input PostRef { - content: String - author: AuthorRef - genre: GenreRef + content: String + author: AuthorRef + genre: GenreRef } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdateGenreInput { - filter: GenreFilter! - set: GenrePatch - remove: GenrePatch + filter: GenreFilter! + set: GenrePatch + remove: GenrePatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -504,13 +502,13 @@ input UpdatePostInput { ####################### type Query { - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - queryGenre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] - aggregateGenre(filter: GenreFilter): GenreAggregateResult + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + queryGenre(filter: GenreFilter, order: GenreOrder, first: Int, offset: Int): [Genre] + aggregateGenre(filter: GenreFilter): GenreAggregateResult } ####################### @@ -518,13 +516,14 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - addGenre(input: [AddGenreInput!]!): AddGenrePayload - updateGenre(input: UpdateGenreInput!): UpdateGenrePayload - deleteGenre(filter: GenreFilter!): DeleteGenrePayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addGenre(input: [AddGenreInput!]!): AddGenrePayload + updateGenre(input: UpdateGenreInput!): UpdateGenrePayload + deleteGenre(filter: GenreFilter!): DeleteGenrePayload } + diff --git a/graphql/schema/testdata/schemagen/output/password-type.graphql b/graphql/schema/testdata/schemagen/output/password-type.graphql index 2ac7bb558e9..9b637e1796e 100644 --- a/graphql/schema/testdata/schemagen/output/password-type.graphql +++ b/graphql/schema/testdata/schemagen/output/password-type.graphql @@ -3,8 +3,8 @@ ####################### type Author @secret(field: "pwd") { - name: String! @id - token: String + name: String! @id + token: String } ####################### @@ -23,162 +23,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -190,12 +190,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -204,78 +203,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -283,27 +281,27 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String - tokenMin: String - tokenMax: String + count: Int + nameMin: String + nameMax: String + tokenMin: String + tokenMax: String } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } ####################### @@ -311,13 +309,13 @@ type UpdateAuthorPayload { ####################### enum AuthorHasFilter { - name - token + name + token } enum AuthorOrderable { - name - token + name + token } ####################### @@ -325,41 +323,41 @@ enum AuthorOrderable { ####################### input AddAuthorInput { - name: String! - token: String - pwd: String! + name: String! + token: String + pwd: String! } input AuthorFilter { - name: StringHashFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + name: StringHashFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - token: String - pwd: String + name: String + token: String + pwd: String } input AuthorRef { - name: String - token: String - pwd: String + name: String + token: String + pwd: String } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } ####################### @@ -367,10 +365,10 @@ input UpdateAuthorInput { ####################### type Query { - getAuthor(name: String!): Author - checkAuthorPassword(name: String!, pwd: String!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getAuthor(name: String!): Author + checkAuthorPassword(name: String!, pwd: String!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult } ####################### @@ -378,7 +376,8 @@ type Query { ####################### type Mutation { - addAuthor(input: [AddAuthorInput!]!, upsert: Boolean): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addAuthor(input: [AddAuthorInput!]!, upsert: Boolean): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload } + diff --git a/graphql/schema/testdata/schemagen/output/random.graphql b/graphql/schema/testdata/schemagen/output/random.graphql index a15b78d4ee0..3d0c9112385 100644 --- a/graphql/schema/testdata/schemagen/output/random.graphql +++ b/graphql/schema/testdata/schemagen/output/random.graphql @@ -3,26 +3,26 @@ ####################### type Mission { - id: ID! - crew: [Astronaut] - designation: String! - startDate: String - endDate: String + id: ID! + crew: [Astronaut] + designation: String! + startDate: String + endDate: String } type Astronaut @key(fields: "id") @extends { - id: ID! @external - missions: [Mission] + id: ID! @external + missions: [Mission] } type User @remote { - id: ID! - name: String! + id: ID! + name: String! } type Car { - id: ID! - name: String! + id: ID! + name: String! } ####################### @@ -41,162 +41,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -214,68 +214,68 @@ directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJ directive @cacheControl(maxAge: Int!) on QUERY input IntFilter { - eq: Int - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -283,19 +283,19 @@ input StringHashFilter { ####################### type CarAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type MissionAggregateResult { - count: Int - designationMin: String - designationMax: String - startDateMin: String - startDateMax: String - endDateMin: String - endDateMax: String + count: Int + designationMin: String + designationMax: String + startDateMin: String + startDateMax: String + endDateMin: String + endDateMax: String } ####################### @@ -303,24 +303,24 @@ type MissionAggregateResult { ####################### enum CarHasFilter { - name + name } enum CarOrderable { - name + name } enum MissionHasFilter { - crew - designation - startDate - endDate + crew + designation + startDate + endDate } enum MissionOrderable { - designation - startDate - endDate + designation + startDate + endDate } ####################### @@ -328,31 +328,31 @@ enum MissionOrderable { ####################### input CarFilter { - id: [ID!] - has: CarHasFilter - and: [CarFilter] - or: [CarFilter] - not: CarFilter + id: [ID!] + has: CarHasFilter + and: [CarFilter] + or: [CarFilter] + not: CarFilter } input CarOrder { - asc: CarOrderable - desc: CarOrderable - then: CarOrder + asc: CarOrderable + desc: CarOrderable + then: CarOrder } input MissionFilter { - id: [ID!] - has: MissionHasFilter - and: [MissionFilter] - or: [MissionFilter] - not: MissionFilter + id: [ID!] + has: MissionHasFilter + and: [MissionFilter] + or: [MissionFilter] + not: MissionFilter } input MissionOrder { - asc: MissionOrderable - desc: MissionOrderable - then: MissionOrder + asc: MissionOrderable + desc: MissionOrderable + then: MissionOrder } ####################### @@ -360,11 +360,12 @@ input MissionOrder { ####################### type Query { - getMyFavoriteUsers(id: ID!): [User] - getMission(id: ID!): Mission - queryMission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] - aggregateMission(filter: MissionFilter): MissionAggregateResult - getCar(id: ID!): Car - queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - aggregateCar(filter: CarFilter): CarAggregateResult + getMyFavoriteUsers(id: ID!): [User] + getMission(id: ID!): Mission + queryMission(filter: MissionFilter, order: MissionOrder, first: Int, offset: Int): [Mission] + aggregateMission(filter: MissionFilter): MissionAggregateResult + getCar(id: ID!): Car + queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + aggregateCar(filter: CarFilter): CarAggregateResult } + diff --git a/graphql/schema/testdata/schemagen/output/searchables-references.graphql b/graphql/schema/testdata/schemagen/output/searchables-references.graphql index 7a04645004e..783620de915 100644 --- a/graphql/schema/testdata/schemagen/output/searchables-references.graphql +++ b/graphql/schema/testdata/schemagen/output/searchables-references.graphql @@ -3,18 +3,18 @@ ####################### type Author { - id: ID! - name: String! @search(by: [hash]) - dob: DateTime - posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - postsAggregate(filter: PostFilter): PostAggregateResult + id: ID! + name: String! @search(by: [hash]) + dob: DateTime + posts(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + postsAggregate(filter: PostFilter): PostAggregateResult } type Post { - postID: ID! - title: String! @search(by: ["term", "fulltext"]) - text: String @search(by: ["fulltext", "term"]) - datePublished: DateTime + postID: ID! + title: String! @search(by: ["term","fulltext"]) + text: String @search(by: ["fulltext","term"]) + datePublished: DateTime } ####################### @@ -33,162 +33,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -200,12 +200,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -214,78 +213,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -293,53 +291,53 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String - dobMin: DateTime - dobMax: DateTime + count: Int + nameMin: String + nameMax: String + dobMin: DateTime + dobMax: DateTime } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - titleMin: String - titleMax: String - textMin: String - textMax: String - datePublishedMin: DateTime - datePublishedMax: DateTime + count: Int + titleMin: String + titleMax: String + textMin: String + textMax: String + datePublishedMin: DateTime + datePublishedMax: DateTime } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -347,26 +345,26 @@ type UpdatePostPayload { ####################### enum AuthorHasFilter { - name - dob - posts + name + dob + posts } enum AuthorOrderable { - name - dob + name + dob } enum PostHasFilter { - title - text - datePublished + title + text + datePublished } enum PostOrderable { - title - text - datePublished + title + text + datePublished } ####################### @@ -374,91 +372,91 @@ enum PostOrderable { ####################### input AddAuthorInput { - name: String! - dob: DateTime - posts: [PostRef] + name: String! + dob: DateTime + posts: [PostRef] } input AddPostInput { - title: String! - text: String - datePublished: DateTime + title: String! + text: String + datePublished: DateTime } input AuthorFilter { - id: [ID!] - name: StringHashFilter - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + name: StringHashFilter + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String - dob: DateTime - posts: [PostRef] + name: String + dob: DateTime + posts: [PostRef] } input AuthorRef { - id: ID - name: String - dob: DateTime - posts: [PostRef] + id: ID + name: String + dob: DateTime + posts: [PostRef] } input PostFilter { - postID: [ID!] - title: StringFullTextFilter_StringTermFilter - text: StringFullTextFilter_StringTermFilter - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + postID: [ID!] + title: StringFullTextFilter_StringTermFilter + text: StringFullTextFilter_StringTermFilter + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - title: String - text: String - datePublished: DateTime + title: String + text: String + datePublished: DateTime } input PostRef { - postID: ID - title: String - text: String - datePublished: DateTime + postID: ID + title: String + text: String + datePublished: DateTime } input StringFullTextFilter_StringTermFilter { - alloftext: String - anyoftext: String - allofterms: String - anyofterms: String + alloftext: String + anyoftext: String + allofterms: String + anyofterms: String } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -466,12 +464,12 @@ input UpdatePostInput { ####################### type Query { - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult - getPost(postID: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(postID: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult } ####################### @@ -479,10 +477,11 @@ type Query { ####################### type Mutation { - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload } + diff --git a/graphql/schema/testdata/schemagen/output/searchables.graphql b/graphql/schema/testdata/schemagen/output/searchables.graphql index 355030a84f5..ac2387bae25 100644 --- a/graphql/schema/testdata/schemagen/output/searchables.graphql +++ b/graphql/schema/testdata/schemagen/output/searchables.graphql @@ -3,38 +3,38 @@ ####################### type Post { - postID: ID! - title: String! @search(by: [term]) - titleByEverything: String! @search(by: ["term", "fulltext", "trigram", "hash"]) - text: String @search(by: [fulltext]) - tags: [String] @search(by: [trigram]) - tagsHash: [String] @search(by: [hash]) - tagsExact: [String] @search(by: [exact]) - publishByYear: DateTime @search(by: [year]) - publishByMonth: DateTime @search(by: [month]) - publishByDay: DateTime @search(by: [day]) - publishByHour: DateTime @search(by: [hour]) - publishTimestamp: Int64 @search - numViewers: Int64 @search(by: [int64]) - numLikes: Int @search - score: Float @search - isPublished: Boolean @search - postType: PostType @search - postTypeNonNull: PostType! @search - postTypeList: [PostType] @search - postTypeTrigram: PostType @search(by: [trigram]) - postTypeRegexp: PostType @search(by: [regexp]) - postTypeExact: [PostType] @search(by: [exact]) - postTypeHash: PostType @search(by: [hash]) - postTypeRegexpExact: PostType @search(by: ["exact", "regexp"]) - postTypeHashRegexp: PostType @search(by: ["hash", "regexp"]) - postTypeNone: PostType @search(by: []) + postID: ID! + title: String! @search(by: [term]) + titleByEverything: String! @search(by: ["term","fulltext","trigram","hash"]) + text: String @search(by: [fulltext]) + tags: [String] @search(by: [trigram]) + tagsHash: [String] @search(by: [hash]) + tagsExact: [String] @search(by: [exact]) + publishByYear: DateTime @search(by: [year]) + publishByMonth: DateTime @search(by: [month]) + publishByDay: DateTime @search(by: [day]) + publishByHour: DateTime @search(by: [hour]) + publishTimestamp: Int64 @search + numViewers: Int64 @search(by: [int64]) + numLikes: Int @search + score: Float @search + isPublished: Boolean @search + postType: PostType @search + postTypeNonNull: PostType! @search + postTypeList: [PostType] @search + postTypeTrigram: PostType @search(by: [trigram]) + postTypeRegexp: PostType @search(by: [regexp]) + postTypeExact: [PostType] @search(by: [exact]) + postTypeHash: PostType @search(by: [hash]) + postTypeRegexpExact: PostType @search(by: ["exact","regexp"]) + postTypeHashRegexp: PostType @search(by: ["hash","regexp"]) + postTypeNone: PostType @search(by: []) } enum PostType { - Fact - Question - Opinion + Fact + Question + Opinion } ####################### @@ -53,162 +53,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -220,12 +220,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -234,78 +233,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -313,53 +311,53 @@ input StringHashFilter { ####################### type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - titleMin: String - titleMax: String - titleByEverythingMin: String - titleByEverythingMax: String - textMin: String - textMax: String - publishByYearMin: DateTime - publishByYearMax: DateTime - publishByMonthMin: DateTime - publishByMonthMax: DateTime - publishByDayMin: DateTime - publishByDayMax: DateTime - publishByHourMin: DateTime - publishByHourMax: DateTime - publishTimestampMin: Int64 - publishTimestampMax: Int64 - publishTimestampSum: Int64 - publishTimestampAvg: Float - numViewersMin: Int64 - numViewersMax: Int64 - numViewersSum: Int64 - numViewersAvg: Float - numLikesMin: Int - numLikesMax: Int - numLikesSum: Int - numLikesAvg: Float - scoreMin: Float - scoreMax: Float - scoreSum: Float - scoreAvg: Float + count: Int + titleMin: String + titleMax: String + titleByEverythingMin: String + titleByEverythingMax: String + textMin: String + textMax: String + publishByYearMin: DateTime + publishByYearMax: DateTime + publishByMonthMin: DateTime + publishByMonthMax: DateTime + publishByDayMin: DateTime + publishByDayMax: DateTime + publishByHourMin: DateTime + publishByHourMax: DateTime + publishTimestampMin: Int64 + publishTimestampMax: Int64 + publishTimestampSum: Int64 + publishTimestampAvg: Float + numViewersMin: Int64 + numViewersMax: Int64 + numViewersSum: Int64 + numViewersAvg: Float + numLikesMin: Int + numLikesMax: Int + numLikesSum: Int + numLikesAvg: Float + scoreMin: Float + scoreMax: Float + scoreSum: Float + scoreAvg: Float } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -367,45 +365,45 @@ type UpdatePostPayload { ####################### enum PostHasFilter { - title - titleByEverything - text - tags - tagsHash - tagsExact - publishByYear - publishByMonth - publishByDay - publishByHour - publishTimestamp - numViewers - numLikes - score - isPublished - postType - postTypeNonNull - postTypeList - postTypeTrigram - postTypeRegexp - postTypeExact - postTypeHash - postTypeRegexpExact - postTypeHashRegexp - postTypeNone + title + titleByEverything + text + tags + tagsHash + tagsExact + publishByYear + publishByMonth + publishByDay + publishByHour + publishTimestamp + numViewers + numLikes + score + isPublished + postType + postTypeNonNull + postTypeList + postTypeTrigram + postTypeRegexp + postTypeExact + postTypeHash + postTypeRegexpExact + postTypeHashRegexp + postTypeNone } enum PostOrderable { - title - titleByEverything - text - publishByYear - publishByMonth - publishByDay - publishByHour - publishTimestamp - numViewers - numLikes - score + title + titleByEverything + text + publishByYear + publishByMonth + publishByDay + publishByHour + publishTimestamp + numViewers + numLikes + score } ####################### @@ -413,175 +411,175 @@ enum PostOrderable { ####################### input AddPostInput { - title: String! - titleByEverything: String! - text: String - tags: [String] - tagsHash: [String] - tagsExact: [String] - publishByYear: DateTime - publishByMonth: DateTime - publishByDay: DateTime - publishByHour: DateTime - publishTimestamp: Int64 - numViewers: Int64 - numLikes: Int - score: Float - isPublished: Boolean - postType: PostType - postTypeNonNull: PostType! - postTypeList: [PostType] - postTypeTrigram: PostType - postTypeRegexp: PostType - postTypeExact: [PostType] - postTypeHash: PostType - postTypeRegexpExact: PostType - postTypeHashRegexp: PostType - postTypeNone: PostType + title: String! + titleByEverything: String! + text: String + tags: [String] + tagsHash: [String] + tagsExact: [String] + publishByYear: DateTime + publishByMonth: DateTime + publishByDay: DateTime + publishByHour: DateTime + publishTimestamp: Int64 + numViewers: Int64 + numLikes: Int + score: Float + isPublished: Boolean + postType: PostType + postTypeNonNull: PostType! + postTypeList: [PostType] + postTypeTrigram: PostType + postTypeRegexp: PostType + postTypeExact: [PostType] + postTypeHash: PostType + postTypeRegexpExact: PostType + postTypeHashRegexp: PostType + postTypeNone: PostType } input PostFilter { - postID: [ID!] - title: StringTermFilter - titleByEverything: StringFullTextFilter_StringHashFilter_StringTermFilter_StringRegExpFilter - text: StringFullTextFilter - tags: StringRegExpFilter - tagsHash: StringHashFilter - tagsExact: StringExactFilter - publishByYear: DateTimeFilter - publishByMonth: DateTimeFilter - publishByDay: DateTimeFilter - publishByHour: DateTimeFilter - publishTimestamp: Int64Filter - numViewers: Int64Filter - numLikes: IntFilter - score: FloatFilter - isPublished: Boolean - postType: PostType_hash - postTypeNonNull: PostType_hash - postTypeList: PostType_hash - postTypeTrigram: StringRegExpFilter - postTypeRegexp: StringRegExpFilter - postTypeExact: PostType_exact - postTypeHash: PostType_hash - postTypeRegexpExact: PostType_exact_StringRegExpFilter - postTypeHashRegexp: PostType_hash_StringRegExpFilter - postTypeNone: PostType_hash - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + postID: [ID!] + title: StringTermFilter + titleByEverything: StringFullTextFilter_StringHashFilter_StringTermFilter_StringRegExpFilter + text: StringFullTextFilter + tags: StringRegExpFilter + tagsHash: StringHashFilter + tagsExact: StringExactFilter + publishByYear: DateTimeFilter + publishByMonth: DateTimeFilter + publishByDay: DateTimeFilter + publishByHour: DateTimeFilter + publishTimestamp: Int64Filter + numViewers: Int64Filter + numLikes: IntFilter + score: FloatFilter + isPublished: Boolean + postType: PostType_hash + postTypeNonNull: PostType_hash + postTypeList: PostType_hash + postTypeTrigram: StringRegExpFilter + postTypeRegexp: StringRegExpFilter + postTypeExact: PostType_exact + postTypeHash: PostType_hash + postTypeRegexpExact: PostType_exact_StringRegExpFilter + postTypeHashRegexp: PostType_hash_StringRegExpFilter + postTypeNone: PostType_hash + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - title: String - titleByEverything: String - text: String - tags: [String] - tagsHash: [String] - tagsExact: [String] - publishByYear: DateTime - publishByMonth: DateTime - publishByDay: DateTime - publishByHour: DateTime - publishTimestamp: Int64 - numViewers: Int64 - numLikes: Int - score: Float - isPublished: Boolean - postType: PostType - postTypeNonNull: PostType - postTypeList: [PostType] - postTypeTrigram: PostType - postTypeRegexp: PostType - postTypeExact: [PostType] - postTypeHash: PostType - postTypeRegexpExact: PostType - postTypeHashRegexp: PostType - postTypeNone: PostType + title: String + titleByEverything: String + text: String + tags: [String] + tagsHash: [String] + tagsExact: [String] + publishByYear: DateTime + publishByMonth: DateTime + publishByDay: DateTime + publishByHour: DateTime + publishTimestamp: Int64 + numViewers: Int64 + numLikes: Int + score: Float + isPublished: Boolean + postType: PostType + postTypeNonNull: PostType + postTypeList: [PostType] + postTypeTrigram: PostType + postTypeRegexp: PostType + postTypeExact: [PostType] + postTypeHash: PostType + postTypeRegexpExact: PostType + postTypeHashRegexp: PostType + postTypeNone: PostType } input PostRef { - postID: ID - title: String - titleByEverything: String - text: String - tags: [String] - tagsHash: [String] - tagsExact: [String] - publishByYear: DateTime - publishByMonth: DateTime - publishByDay: DateTime - publishByHour: DateTime - publishTimestamp: Int64 - numViewers: Int64 - numLikes: Int - score: Float - isPublished: Boolean - postType: PostType - postTypeNonNull: PostType - postTypeList: [PostType] - postTypeTrigram: PostType - postTypeRegexp: PostType - postTypeExact: [PostType] - postTypeHash: PostType - postTypeRegexpExact: PostType - postTypeHashRegexp: PostType - postTypeNone: PostType + postID: ID + title: String + titleByEverything: String + text: String + tags: [String] + tagsHash: [String] + tagsExact: [String] + publishByYear: DateTime + publishByMonth: DateTime + publishByDay: DateTime + publishByHour: DateTime + publishTimestamp: Int64 + numViewers: Int64 + numLikes: Int + score: Float + isPublished: Boolean + postType: PostType + postTypeNonNull: PostType + postTypeList: [PostType] + postTypeTrigram: PostType + postTypeRegexp: PostType + postTypeExact: [PostType] + postTypeHash: PostType + postTypeRegexpExact: PostType + postTypeHashRegexp: PostType + postTypeNone: PostType } input PostType_exact { - eq: PostType - in: [PostType] - le: PostType - lt: PostType - ge: PostType - gt: PostType - between: PostType + eq: PostType + in: [PostType] + le: PostType + lt: PostType + ge: PostType + gt: PostType + between: PostType } input PostType_exact_StringRegExpFilter { - eq: PostType - in: [PostType] - le: PostType - lt: PostType - ge: PostType - gt: PostType - between: PostType - regexp: String + eq: PostType + in: [PostType] + le: PostType + lt: PostType + ge: PostType + gt: PostType + between: PostType + regexp: String } input PostType_hash { - eq: PostType - in: [PostType] + eq: PostType + in: [PostType] } input PostType_hash_StringRegExpFilter { - eq: PostType - in: [PostType] - regexp: String + eq: PostType + in: [PostType] + regexp: String } input StringFullTextFilter_StringHashFilter_StringTermFilter_StringRegExpFilter { - alloftext: String - anyoftext: String - eq: String - in: [String] - allofterms: String - anyofterms: String - regexp: String + alloftext: String + anyoftext: String + eq: String + in: [String] + allofterms: String + anyofterms: String + regexp: String } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -589,9 +587,9 @@ input UpdatePostInput { ####################### type Query { - getPost(postID: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult + getPost(postID: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult } ####################### @@ -599,7 +597,8 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload } + diff --git a/graphql/schema/testdata/schemagen/output/single-type-with-enum.graphql b/graphql/schema/testdata/schemagen/output/single-type-with-enum.graphql index 5405db1dde2..0645d3f34ae 100644 --- a/graphql/schema/testdata/schemagen/output/single-type-with-enum.graphql +++ b/graphql/schema/testdata/schemagen/output/single-type-with-enum.graphql @@ -3,16 +3,16 @@ ####################### type Post { - id: ID! - title: String! - text: String - postType: PostType! + id: ID! + title: String! + text: String + postType: PostType! } enum PostType { - Statement - Question - Answer + Statement + Question + Answer } ####################### @@ -31,162 +31,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -198,12 +198,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -212,78 +211,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -291,27 +289,27 @@ input StringHashFilter { ####################### type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - titleMin: String - titleMax: String - textMin: String - textMax: String + count: Int + titleMin: String + titleMax: String + textMin: String + textMax: String } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -319,14 +317,14 @@ type UpdatePostPayload { ####################### enum PostHasFilter { - title - text - postType + title + text + postType } enum PostOrderable { - title - text + title + text } ####################### @@ -334,42 +332,42 @@ enum PostOrderable { ####################### input AddPostInput { - title: String! - text: String - postType: PostType! + title: String! + text: String + postType: PostType! } input PostFilter { - id: [ID!] - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - title: String - text: String - postType: PostType + title: String + text: String + postType: PostType } input PostRef { - id: ID - title: String - text: String - postType: PostType + id: ID + title: String + text: String + postType: PostType } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -377,9 +375,9 @@ input UpdatePostInput { ####################### type Query { - getPost(id: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult + getPost(id: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult } ####################### @@ -387,7 +385,8 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload } + diff --git a/graphql/schema/testdata/schemagen/output/single-type.graphql b/graphql/schema/testdata/schemagen/output/single-type.graphql index cf2c87d1bf8..cd8dcc92926 100644 --- a/graphql/schema/testdata/schemagen/output/single-type.graphql +++ b/graphql/schema/testdata/schemagen/output/single-type.graphql @@ -3,11 +3,11 @@ ####################### type Message { - id: ID! - content: String! - author: String - uniqueId: Int64 - datePosted: DateTime + id: ID! + content: String! + author: String + uniqueId: Int64 + datePosted: DateTime } ####################### @@ -26,162 +26,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -193,12 +193,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -207,78 +206,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -286,33 +284,33 @@ input StringHashFilter { ####################### type AddMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + numUids: Int } type DeleteMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - msg: String - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + msg: String + numUids: Int } type MessageAggregateResult { - count: Int - contentMin: String - contentMax: String - authorMin: String - authorMax: String - uniqueIdMin: Int64 - uniqueIdMax: Int64 - uniqueIdSum: Int64 - uniqueIdAvg: Float - datePostedMin: DateTime - datePostedMax: DateTime + count: Int + contentMin: String + contentMax: String + authorMin: String + authorMax: String + uniqueIdMin: Int64 + uniqueIdMax: Int64 + uniqueIdSum: Int64 + uniqueIdAvg: Float + datePostedMin: DateTime + datePostedMax: DateTime } type UpdateMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + numUids: Int } ####################### @@ -320,17 +318,17 @@ type UpdateMessagePayload { ####################### enum MessageHasFilter { - content - author - uniqueId - datePosted + content + author + uniqueId + datePosted } enum MessageOrderable { - content - author - uniqueId - datePosted + content + author + uniqueId + datePosted } ####################### @@ -338,45 +336,45 @@ enum MessageOrderable { ####################### input AddMessageInput { - content: String! - author: String - uniqueId: Int64 - datePosted: DateTime + content: String! + author: String + uniqueId: Int64 + datePosted: DateTime } input MessageFilter { - id: [ID!] - has: [MessageHasFilter] - and: [MessageFilter] - or: [MessageFilter] - not: MessageFilter + id: [ID!] + has: [MessageHasFilter] + and: [MessageFilter] + or: [MessageFilter] + not: MessageFilter } input MessageOrder { - asc: MessageOrderable - desc: MessageOrderable - then: MessageOrder + asc: MessageOrderable + desc: MessageOrderable + then: MessageOrder } input MessagePatch { - content: String - author: String - uniqueId: Int64 - datePosted: DateTime + content: String + author: String + uniqueId: Int64 + datePosted: DateTime } input MessageRef { - id: ID - content: String - author: String - uniqueId: Int64 - datePosted: DateTime + id: ID + content: String + author: String + uniqueId: Int64 + datePosted: DateTime } input UpdateMessageInput { - filter: MessageFilter! - set: MessagePatch - remove: MessagePatch + filter: MessageFilter! + set: MessagePatch + remove: MessagePatch } ####################### @@ -384,9 +382,9 @@ input UpdateMessageInput { ####################### type Query { - getMessage(id: ID!): Message - queryMessage(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - aggregateMessage(filter: MessageFilter): MessageAggregateResult + getMessage(id: ID!): Message + queryMessage(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + aggregateMessage(filter: MessageFilter): MessageAggregateResult } ####################### @@ -394,7 +392,8 @@ type Query { ####################### type Mutation { - addMessage(input: [AddMessageInput!]!): AddMessagePayload - updateMessage(input: UpdateMessageInput!): UpdateMessagePayload - deleteMessage(filter: MessageFilter!): DeleteMessagePayload + addMessage(input: [AddMessageInput!]!): AddMessagePayload + updateMessage(input: UpdateMessageInput!): UpdateMessagePayload + deleteMessage(filter: MessageFilter!): DeleteMessagePayload } + diff --git a/graphql/schema/testdata/schemagen/output/type-implements-multiple-interfaces.graphql b/graphql/schema/testdata/schemagen/output/type-implements-multiple-interfaces.graphql index 1d5f2c3975c..fb367928dd7 100644 --- a/graphql/schema/testdata/schemagen/output/type-implements-multiple-interfaces.graphql +++ b/graphql/schema/testdata/schemagen/output/type-implements-multiple-interfaces.graphql @@ -3,25 +3,25 @@ ####################### interface Character { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } interface Employee { - employeeId: String! - title: String! + employeeId: String! + title: String! } type Human implements Character & Employee { - employeeId: String! - title: String! - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - totalCredits: Int - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + employeeId: String! + title: String! + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + totalCredits: Int + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } ####################### @@ -40,162 +40,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -207,12 +207,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -221,78 +220,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -300,69 +298,69 @@ input StringHashFilter { ####################### type AddHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type CharacterAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - msg: String - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + msg: String + numUids: Int } type DeleteEmployeePayload { - employee(filter: EmployeeFilter, order: EmployeeOrder, first: Int, offset: Int): [Employee] - msg: String - numUids: Int + employee(filter: EmployeeFilter, order: EmployeeOrder, first: Int, offset: Int): [Employee] + msg: String + numUids: Int } type DeleteHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - msg: String - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + msg: String + numUids: Int } type EmployeeAggregateResult { - count: Int - employeeIdMin: String - employeeIdMax: String - titleMin: String - titleMax: String + count: Int + employeeIdMin: String + employeeIdMax: String + titleMin: String + titleMax: String } type HumanAggregateResult { - count: Int - employeeIdMin: String - employeeIdMax: String - titleMin: String - titleMax: String - nameMin: String - nameMax: String - totalCreditsMin: Int - totalCreditsMax: Int - totalCreditsSum: Int - totalCreditsAvg: Float + count: Int + employeeIdMin: String + employeeIdMax: String + titleMin: String + titleMax: String + nameMin: String + nameMax: String + totalCreditsMin: Int + totalCreditsMax: Int + totalCreditsSum: Int + totalCreditsAvg: Float } type UpdateCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + numUids: Int } type UpdateEmployeePayload { - employee(filter: EmployeeFilter, order: EmployeeOrder, first: Int, offset: Int): [Employee] - numUids: Int + employee(filter: EmployeeFilter, order: EmployeeOrder, first: Int, offset: Int): [Employee] + numUids: Int } type UpdateHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } ####################### @@ -370,37 +368,37 @@ type UpdateHumanPayload { ####################### enum CharacterHasFilter { - name - friends + name + friends } enum CharacterOrderable { - name + name } enum EmployeeHasFilter { - employeeId - title + employeeId + title } enum EmployeeOrderable { - employeeId - title + employeeId + title } enum HumanHasFilter { - employeeId - title - name - friends - totalCredits + employeeId + title + name + friends + totalCredits } enum HumanOrderable { - employeeId - title - name - totalCredits + employeeId + title + name + totalCredits } ####################### @@ -408,103 +406,103 @@ enum HumanOrderable { ####################### input AddHumanInput { - employeeId: String! - title: String! - name: String! - friends: [CharacterRef] - totalCredits: Int + employeeId: String! + title: String! + name: String! + friends: [CharacterRef] + totalCredits: Int } input CharacterFilter { - id: [ID!] - name: StringExactFilter - has: [CharacterHasFilter] - and: [CharacterFilter] - or: [CharacterFilter] - not: CharacterFilter + id: [ID!] + name: StringExactFilter + has: [CharacterHasFilter] + and: [CharacterFilter] + or: [CharacterFilter] + not: CharacterFilter } input CharacterOrder { - asc: CharacterOrderable - desc: CharacterOrderable - then: CharacterOrder + asc: CharacterOrderable + desc: CharacterOrderable + then: CharacterOrder } input CharacterPatch { - name: String - friends: [CharacterRef] + name: String + friends: [CharacterRef] } input CharacterRef { - id: ID! + id: ID! } input EmployeeFilter { - has: [EmployeeHasFilter] - and: [EmployeeFilter] - or: [EmployeeFilter] - not: EmployeeFilter + has: [EmployeeHasFilter] + and: [EmployeeFilter] + or: [EmployeeFilter] + not: EmployeeFilter } input EmployeeOrder { - asc: EmployeeOrderable - desc: EmployeeOrderable - then: EmployeeOrder + asc: EmployeeOrderable + desc: EmployeeOrderable + then: EmployeeOrder } input EmployeePatch { - employeeId: String - title: String + employeeId: String + title: String } input HumanFilter { - id: [ID!] - name: StringExactFilter - has: [HumanHasFilter] - and: [HumanFilter] - or: [HumanFilter] - not: HumanFilter + id: [ID!] + name: StringExactFilter + has: [HumanHasFilter] + and: [HumanFilter] + or: [HumanFilter] + not: HumanFilter } input HumanOrder { - asc: HumanOrderable - desc: HumanOrderable - then: HumanOrder + asc: HumanOrderable + desc: HumanOrderable + then: HumanOrder } input HumanPatch { - employeeId: String - title: String - name: String - friends: [CharacterRef] - totalCredits: Int + employeeId: String + title: String + name: String + friends: [CharacterRef] + totalCredits: Int } input HumanRef { - id: ID - employeeId: String - title: String - name: String - friends: [CharacterRef] - totalCredits: Int + id: ID + employeeId: String + title: String + name: String + friends: [CharacterRef] + totalCredits: Int } input UpdateCharacterInput { - filter: CharacterFilter! - set: CharacterPatch - remove: CharacterPatch + filter: CharacterFilter! + set: CharacterPatch + remove: CharacterPatch } input UpdateEmployeeInput { - filter: EmployeeFilter! - set: EmployeePatch - remove: EmployeePatch + filter: EmployeeFilter! + set: EmployeePatch + remove: EmployeePatch } input UpdateHumanInput { - filter: HumanFilter! - set: HumanPatch - remove: HumanPatch + filter: HumanFilter! + set: HumanPatch + remove: HumanPatch } ####################### @@ -512,19 +510,14 @@ input UpdateHumanInput { ####################### type Query { - getCharacter(id: ID!): Character - queryCharacter( - filter: CharacterFilter - order: CharacterOrder - first: Int - offset: Int - ): [Character] - aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult - queryEmployee(filter: EmployeeFilter, order: EmployeeOrder, first: Int, offset: Int): [Employee] - aggregateEmployee(filter: EmployeeFilter): EmployeeAggregateResult - getHuman(id: ID!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult + getCharacter(id: ID!): Character + queryCharacter(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult + queryEmployee(filter: EmployeeFilter, order: EmployeeOrder, first: Int, offset: Int): [Employee] + aggregateEmployee(filter: EmployeeFilter): EmployeeAggregateResult + getHuman(id: ID!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult } ####################### @@ -532,11 +525,12 @@ type Query { ####################### type Mutation { - updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload - deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload - updateEmployee(input: UpdateEmployeeInput!): UpdateEmployeePayload - deleteEmployee(filter: EmployeeFilter!): DeleteEmployeePayload - addHuman(input: [AddHumanInput!]!): AddHumanPayload - updateHuman(input: UpdateHumanInput!): UpdateHumanPayload - deleteHuman(filter: HumanFilter!): DeleteHumanPayload + updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload + deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload + updateEmployee(input: UpdateEmployeeInput!): UpdateEmployeePayload + deleteEmployee(filter: EmployeeFilter!): DeleteEmployeePayload + addHuman(input: [AddHumanInput!]!): AddHumanPayload + updateHuman(input: UpdateHumanInput!): UpdateHumanPayload + deleteHuman(filter: HumanFilter!): DeleteHumanPayload } + diff --git a/graphql/schema/testdata/schemagen/output/type-reference.graphql b/graphql/schema/testdata/schemagen/output/type-reference.graphql index 51b252900dc..6cd97099546 100644 --- a/graphql/schema/testdata/schemagen/output/type-reference.graphql +++ b/graphql/schema/testdata/schemagen/output/type-reference.graphql @@ -3,15 +3,15 @@ ####################### type Post { - id: ID! - title: String! - text: String - author(filter: AuthorFilter): Author! + id: ID! + title: String! + text: String + author(filter: AuthorFilter): Author! } type Author { - id: ID! - name: String! + id: ID! + name: String! } ####################### @@ -30,162 +30,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -197,12 +197,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -211,78 +210,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -290,49 +288,49 @@ input StringHashFilter { ####################### type AddAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type AddPostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } type AuthorAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - msg: String - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + msg: String + numUids: Int } type DeletePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - msg: String - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + msg: String + numUids: Int } type PostAggregateResult { - count: Int - titleMin: String - titleMax: String - textMin: String - textMax: String + count: Int + titleMin: String + titleMax: String + textMin: String + textMax: String } type UpdateAuthorPayload { - author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - numUids: Int + author(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + numUids: Int } type UpdatePostPayload { - post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - numUids: Int + post(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + numUids: Int } ####################### @@ -340,22 +338,22 @@ type UpdatePostPayload { ####################### enum AuthorHasFilter { - name + name } enum AuthorOrderable { - name + name } enum PostHasFilter { - title - text - author + title + text + author } enum PostOrderable { - title - text + title + text } ####################### @@ -363,75 +361,75 @@ enum PostOrderable { ####################### input AddAuthorInput { - name: String! + name: String! } input AddPostInput { - title: String! - text: String - author: AuthorRef! + title: String! + text: String + author: AuthorRef! } input AuthorFilter { - id: [ID!] - has: [AuthorHasFilter] - and: [AuthorFilter] - or: [AuthorFilter] - not: AuthorFilter + id: [ID!] + has: [AuthorHasFilter] + and: [AuthorFilter] + or: [AuthorFilter] + not: AuthorFilter } input AuthorOrder { - asc: AuthorOrderable - desc: AuthorOrderable - then: AuthorOrder + asc: AuthorOrderable + desc: AuthorOrderable + then: AuthorOrder } input AuthorPatch { - name: String + name: String } input AuthorRef { - id: ID - name: String + id: ID + name: String } input PostFilter { - id: [ID!] - has: [PostHasFilter] - and: [PostFilter] - or: [PostFilter] - not: PostFilter + id: [ID!] + has: [PostHasFilter] + and: [PostFilter] + or: [PostFilter] + not: PostFilter } input PostOrder { - asc: PostOrderable - desc: PostOrderable - then: PostOrder + asc: PostOrderable + desc: PostOrderable + then: PostOrder } input PostPatch { - title: String - text: String - author: AuthorRef + title: String + text: String + author: AuthorRef } input PostRef { - id: ID - title: String - text: String - author: AuthorRef + id: ID + title: String + text: String + author: AuthorRef } input UpdateAuthorInput { - filter: AuthorFilter! - set: AuthorPatch - remove: AuthorPatch + filter: AuthorFilter! + set: AuthorPatch + remove: AuthorPatch } input UpdatePostInput { - filter: PostFilter! - set: PostPatch - remove: PostPatch + filter: PostFilter! + set: PostPatch + remove: PostPatch } ####################### @@ -439,12 +437,12 @@ input UpdatePostInput { ####################### type Query { - getPost(id: ID!): Post - queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] - aggregatePost(filter: PostFilter): PostAggregateResult - getAuthor(id: ID!): Author - queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] - aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult + getPost(id: ID!): Post + queryPost(filter: PostFilter, order: PostOrder, first: Int, offset: Int): [Post] + aggregatePost(filter: PostFilter): PostAggregateResult + getAuthor(id: ID!): Author + queryAuthor(filter: AuthorFilter, order: AuthorOrder, first: Int, offset: Int): [Author] + aggregateAuthor(filter: AuthorFilter): AuthorAggregateResult } ####################### @@ -452,10 +450,11 @@ type Query { ####################### type Mutation { - addPost(input: [AddPostInput!]!): AddPostPayload - updatePost(input: UpdatePostInput!): UpdatePostPayload - deletePost(filter: PostFilter!): DeletePostPayload - addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload - updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload - deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload + addPost(input: [AddPostInput!]!): AddPostPayload + updatePost(input: UpdatePostInput!): UpdatePostPayload + deletePost(filter: PostFilter!): DeletePostPayload + addAuthor(input: [AddAuthorInput!]!): AddAuthorPayload + updateAuthor(input: UpdateAuthorInput!): UpdateAuthorPayload + deleteAuthor(filter: AuthorFilter!): DeleteAuthorPayload } + diff --git a/graphql/schema/testdata/schemagen/output/type-with-arguments-on-field.graphql b/graphql/schema/testdata/schemagen/output/type-with-arguments-on-field.graphql index a92c589fdcc..8e1aebb77bc 100644 --- a/graphql/schema/testdata/schemagen/output/type-with-arguments-on-field.graphql +++ b/graphql/schema/testdata/schemagen/output/type-with-arguments-on-field.graphql @@ -3,16 +3,16 @@ ####################### interface Abstract { - id: ID! - name(random: Int!, size: String): String! + id: ID! + name(random: Int!, size: String): String! } type Message implements Abstract { - id: ID! - name(random: Int!, size: String): String! - content(pick: Int!, name: String): String! - author: String - datePosted: DateTime + id: ID! + name(random: Int!, size: String): String! + content(pick: Int!, name: String): String! + author: String + datePosted: DateTime } ####################### @@ -31,162 +31,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -198,12 +198,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -212,78 +211,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -291,48 +289,48 @@ input StringHashFilter { ####################### type AbstractAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type AddMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + numUids: Int } type DeleteAbstractPayload { - abstract(filter: AbstractFilter, order: AbstractOrder, first: Int, offset: Int): [Abstract] - msg: String - numUids: Int + abstract(filter: AbstractFilter, order: AbstractOrder, first: Int, offset: Int): [Abstract] + msg: String + numUids: Int } type DeleteMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - msg: String - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + msg: String + numUids: Int } type MessageAggregateResult { - count: Int - nameMin: String - nameMax: String - contentMin: String - contentMax: String - authorMin: String - authorMax: String - datePostedMin: DateTime - datePostedMax: DateTime + count: Int + nameMin: String + nameMax: String + contentMin: String + contentMax: String + authorMin: String + authorMax: String + datePostedMin: DateTime + datePostedMax: DateTime } type UpdateAbstractPayload { - abstract(filter: AbstractFilter, order: AbstractOrder, first: Int, offset: Int): [Abstract] - numUids: Int + abstract(filter: AbstractFilter, order: AbstractOrder, first: Int, offset: Int): [Abstract] + numUids: Int } type UpdateMessagePayload { - message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - numUids: Int + message(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + numUids: Int } ####################### @@ -340,25 +338,25 @@ type UpdateMessagePayload { ####################### enum AbstractHasFilter { - name + name } enum AbstractOrderable { - name + name } enum MessageHasFilter { - name - content - author - datePosted + name + content + author + datePosted } enum MessageOrderable { - name - content - author - datePosted + name + content + author + datePosted } ####################### @@ -366,73 +364,73 @@ enum MessageOrderable { ####################### input AbstractFilter { - id: [ID!] - has: [AbstractHasFilter] - and: [AbstractFilter] - or: [AbstractFilter] - not: AbstractFilter + id: [ID!] + has: [AbstractHasFilter] + and: [AbstractFilter] + or: [AbstractFilter] + not: AbstractFilter } input AbstractOrder { - asc: AbstractOrderable - desc: AbstractOrderable - then: AbstractOrder + asc: AbstractOrderable + desc: AbstractOrderable + then: AbstractOrder } input AbstractPatch { - name: String + name: String } input AbstractRef { - id: ID! + id: ID! } input AddMessageInput { - name: String! - content: String! - author: String - datePosted: DateTime + name: String! + content: String! + author: String + datePosted: DateTime } input MessageFilter { - id: [ID!] - has: [MessageHasFilter] - and: [MessageFilter] - or: [MessageFilter] - not: MessageFilter + id: [ID!] + has: [MessageHasFilter] + and: [MessageFilter] + or: [MessageFilter] + not: MessageFilter } input MessageOrder { - asc: MessageOrderable - desc: MessageOrderable - then: MessageOrder + asc: MessageOrderable + desc: MessageOrderable + then: MessageOrder } input MessagePatch { - name: String - content: String - author: String - datePosted: DateTime + name: String + content: String + author: String + datePosted: DateTime } input MessageRef { - id: ID - name: String - content: String - author: String - datePosted: DateTime + id: ID + name: String + content: String + author: String + datePosted: DateTime } input UpdateAbstractInput { - filter: AbstractFilter! - set: AbstractPatch - remove: AbstractPatch + filter: AbstractFilter! + set: AbstractPatch + remove: AbstractPatch } input UpdateMessageInput { - filter: MessageFilter! - set: MessagePatch - remove: MessagePatch + filter: MessageFilter! + set: MessagePatch + remove: MessagePatch } ####################### @@ -440,12 +438,12 @@ input UpdateMessageInput { ####################### type Query { - getAbstract(id: ID!): Abstract - queryAbstract(filter: AbstractFilter, order: AbstractOrder, first: Int, offset: Int): [Abstract] - aggregateAbstract(filter: AbstractFilter): AbstractAggregateResult - getMessage(id: ID!): Message - queryMessage(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] - aggregateMessage(filter: MessageFilter): MessageAggregateResult + getAbstract(id: ID!): Abstract + queryAbstract(filter: AbstractFilter, order: AbstractOrder, first: Int, offset: Int): [Abstract] + aggregateAbstract(filter: AbstractFilter): AbstractAggregateResult + getMessage(id: ID!): Message + queryMessage(filter: MessageFilter, order: MessageOrder, first: Int, offset: Int): [Message] + aggregateMessage(filter: MessageFilter): MessageAggregateResult } ####################### @@ -453,9 +451,10 @@ type Query { ####################### type Mutation { - updateAbstract(input: UpdateAbstractInput!): UpdateAbstractPayload - deleteAbstract(filter: AbstractFilter!): DeleteAbstractPayload - addMessage(input: [AddMessageInput!]!): AddMessagePayload - updateMessage(input: UpdateMessageInput!): UpdateMessagePayload - deleteMessage(filter: MessageFilter!): DeleteMessagePayload + updateAbstract(input: UpdateAbstractInput!): UpdateAbstractPayload + deleteAbstract(filter: AbstractFilter!): DeleteAbstractPayload + addMessage(input: [AddMessageInput!]!): AddMessagePayload + updateMessage(input: UpdateMessageInput!): UpdateMessagePayload + deleteMessage(filter: MessageFilter!): DeleteMessagePayload } + diff --git a/graphql/schema/testdata/schemagen/output/type-with-custom-field-on-dgraph-type.graphql b/graphql/schema/testdata/schemagen/output/type-with-custom-field-on-dgraph-type.graphql index a0b7f564819..b530551a062 100644 --- a/graphql/schema/testdata/schemagen/output/type-with-custom-field-on-dgraph-type.graphql +++ b/graphql/schema/testdata/schemagen/output/type-with-custom-field-on-dgraph-type.graphql @@ -3,16 +3,15 @@ ####################### type Car { - id: ID! - name: String! + id: ID! + name: String! } type User { - id: ID! - name: String - @custom(http: { url: "http://mock:8888/userNames", method: "GET", body: "{uid: $id}" }) - age: Int! @search - cars: [Car] @custom(http: { url: "http://mock:8888/cars", method: "GET", body: "{uid: $id}" }) + id: ID! + name: String @custom(http: {url:"http://mock:8888/userNames",method:"GET",body:"{uid: $id}"}) + age: Int! @search + cars: [Car] @custom(http: {url:"http://mock:8888/cars",method:"GET",body:"{uid: $id}"}) } ####################### @@ -31,162 +30,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -198,12 +197,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -212,78 +210,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -291,49 +288,49 @@ input StringHashFilter { ####################### type AddCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + numUids: Int } type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type CarAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - msg: String - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + msg: String + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type UpdateCarPayload { - car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - numUids: Int + car(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - ageMin: Int - ageMax: Int - ageSum: Int - ageAvg: Float + count: Int + ageMin: Int + ageMax: Int + ageSum: Int + ageAvg: Float } ####################### @@ -341,19 +338,19 @@ type UserAggregateResult { ####################### enum CarHasFilter { - name + name } enum CarOrderable { - name + name } enum UserHasFilter { - age + age } enum UserOrderable { - age + age } ####################### @@ -361,70 +358,70 @@ enum UserOrderable { ####################### input AddCarInput { - name: String! + name: String! } input AddUserInput { - age: Int! + age: Int! } input CarFilter { - id: [ID!] - has: [CarHasFilter] - and: [CarFilter] - or: [CarFilter] - not: CarFilter + id: [ID!] + has: [CarHasFilter] + and: [CarFilter] + or: [CarFilter] + not: CarFilter } input CarOrder { - asc: CarOrderable - desc: CarOrderable - then: CarOrder + asc: CarOrderable + desc: CarOrderable + then: CarOrder } input CarPatch { - name: String + name: String } input CarRef { - id: ID - name: String + id: ID + name: String } input UpdateCarInput { - filter: CarFilter! - set: CarPatch - remove: CarPatch + filter: CarFilter! + set: CarPatch + remove: CarPatch } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - id: [ID!] - age: IntFilter - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + id: [ID!] + age: IntFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - age: Int + age: Int } input UserRef { - id: ID - age: Int + id: ID + age: Int } ####################### @@ -432,12 +429,12 @@ input UserRef { ####################### type Query { - getCar(id: ID!): Car - queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] - aggregateCar(filter: CarFilter): CarAggregateResult - getUser(id: ID!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getCar(id: ID!): Car + queryCar(filter: CarFilter, order: CarOrder, first: Int, offset: Int): [Car] + aggregateCar(filter: CarFilter): CarAggregateResult + getUser(id: ID!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -445,10 +442,11 @@ type Query { ####################### type Mutation { - addCar(input: [AddCarInput!]!): AddCarPayload - updateCar(input: UpdateCarInput!): UpdateCarPayload - deleteCar(filter: CarFilter!): DeleteCarPayload - addUser(input: [AddUserInput!]!): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addCar(input: [AddCarInput!]!): AddCarPayload + updateCar(input: UpdateCarInput!): UpdateCarPayload + deleteCar(filter: CarFilter!): DeleteCarPayload + addUser(input: [AddUserInput!]!): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } + diff --git a/graphql/schema/testdata/schemagen/output/type-with-custom-fields-on-remote-type.graphql b/graphql/schema/testdata/schemagen/output/type-with-custom-fields-on-remote-type.graphql index b3607aaeec1..e2f05334889 100644 --- a/graphql/schema/testdata/schemagen/output/type-with-custom-fields-on-remote-type.graphql +++ b/graphql/schema/testdata/schemagen/output/type-with-custom-fields-on-remote-type.graphql @@ -3,16 +3,15 @@ ####################### type Car @remote { - id: ID! - name: String! + id: ID! + name: String! } type User { - id: ID! - name: String - @custom(http: { url: "http://mock:8888/userNames", method: "GET", body: "{uid: $id}" }) - age: Int! @search - cars: [Car] @custom(http: { url: "http://mock:8888/cars", method: "GET", body: "{uid: $id}" }) + id: ID! + name: String @custom(http: {url:"http://mock:8888/userNames",method:"GET",body:"{uid: $id}"}) + age: Int! @search + cars: [Car] @custom(http: {url:"http://mock:8888/cars",method:"GET",body:"{uid: $id}"}) } ####################### @@ -31,162 +30,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -198,12 +197,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -212,78 +210,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -291,27 +288,27 @@ input StringHashFilter { ####################### type AddUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type DeleteUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - msg: String - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + msg: String + numUids: Int } type UpdateUserPayload { - user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - numUids: Int + user(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + numUids: Int } type UserAggregateResult { - count: Int - ageMin: Int - ageMax: Int - ageSum: Int - ageAvg: Float + count: Int + ageMin: Int + ageMax: Int + ageSum: Int + ageAvg: Float } ####################### @@ -319,11 +316,11 @@ type UserAggregateResult { ####################### enum UserHasFilter { - age + age } enum UserOrderable { - age + age } ####################### @@ -331,37 +328,37 @@ enum UserOrderable { ####################### input AddUserInput { - age: Int! + age: Int! } input UpdateUserInput { - filter: UserFilter! - set: UserPatch - remove: UserPatch + filter: UserFilter! + set: UserPatch + remove: UserPatch } input UserFilter { - id: [ID!] - age: IntFilter - has: [UserHasFilter] - and: [UserFilter] - or: [UserFilter] - not: UserFilter + id: [ID!] + age: IntFilter + has: [UserHasFilter] + and: [UserFilter] + or: [UserFilter] + not: UserFilter } input UserOrder { - asc: UserOrderable - desc: UserOrderable - then: UserOrder + asc: UserOrderable + desc: UserOrderable + then: UserOrder } input UserPatch { - age: Int + age: Int } input UserRef { - id: ID - age: Int + id: ID + age: Int } ####################### @@ -369,9 +366,9 @@ input UserRef { ####################### type Query { - getUser(id: ID!): User - queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] - aggregateUser(filter: UserFilter): UserAggregateResult + getUser(id: ID!): User + queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User] + aggregateUser(filter: UserFilter): UserAggregateResult } ####################### @@ -379,7 +376,8 @@ type Query { ####################### type Mutation { - addUser(input: [AddUserInput!]!): AddUserPayload - updateUser(input: UpdateUserInput!): UpdateUserPayload - deleteUser(filter: UserFilter!): DeleteUserPayload + addUser(input: [AddUserInput!]!): AddUserPayload + updateUser(input: UpdateUserInput!): UpdateUserPayload + deleteUser(filter: UserFilter!): DeleteUserPayload } + diff --git a/graphql/schema/testdata/schemagen/output/type-without-orderables.graphql b/graphql/schema/testdata/schemagen/output/type-without-orderables.graphql index 281b3651bae..7dc66b26104 100644 --- a/graphql/schema/testdata/schemagen/output/type-without-orderables.graphql +++ b/graphql/schema/testdata/schemagen/output/type-without-orderables.graphql @@ -3,10 +3,10 @@ ####################### type Data { - id: ID! - intList: [Int] - stringList: [String] - metaData(filter: DataFilter): Data + id: ID! + intList: [Int] + stringList: [String] + metaData(filter: DataFilter): Data } ####################### @@ -25,162 +25,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -192,12 +192,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -206,78 +205,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -285,23 +283,23 @@ input StringHashFilter { ####################### type AddDataPayload { - data(filter: DataFilter, first: Int, offset: Int): [Data] - numUids: Int + data(filter: DataFilter, first: Int, offset: Int): [Data] + numUids: Int } type DataAggregateResult { - count: Int + count: Int } type DeleteDataPayload { - data(filter: DataFilter, first: Int, offset: Int): [Data] - msg: String - numUids: Int + data(filter: DataFilter, first: Int, offset: Int): [Data] + msg: String + numUids: Int } type UpdateDataPayload { - data(filter: DataFilter, first: Int, offset: Int): [Data] - numUids: Int + data(filter: DataFilter, first: Int, offset: Int): [Data] + numUids: Int } ####################### @@ -309,9 +307,9 @@ type UpdateDataPayload { ####################### enum DataHasFilter { - intList - stringList - metaData + intList + stringList + metaData } ####################### @@ -319,36 +317,36 @@ enum DataHasFilter { ####################### input AddDataInput { - intList: [Int] - stringList: [String] - metaData: DataRef + intList: [Int] + stringList: [String] + metaData: DataRef } input DataFilter { - id: [ID!] - has: [DataHasFilter] - and: [DataFilter] - or: [DataFilter] - not: DataFilter + id: [ID!] + has: [DataHasFilter] + and: [DataFilter] + or: [DataFilter] + not: DataFilter } input DataPatch { - intList: [Int] - stringList: [String] - metaData: DataRef + intList: [Int] + stringList: [String] + metaData: DataRef } input DataRef { - id: ID - intList: [Int] - stringList: [String] - metaData: DataRef + id: ID + intList: [Int] + stringList: [String] + metaData: DataRef } input UpdateDataInput { - filter: DataFilter! - set: DataPatch - remove: DataPatch + filter: DataFilter! + set: DataPatch + remove: DataPatch } ####################### @@ -356,9 +354,9 @@ input UpdateDataInput { ####################### type Query { - getData(id: ID!): Data - queryData(filter: DataFilter, first: Int, offset: Int): [Data] - aggregateData(filter: DataFilter): DataAggregateResult + getData(id: ID!): Data + queryData(filter: DataFilter, first: Int, offset: Int): [Data] + aggregateData(filter: DataFilter): DataAggregateResult } ####################### @@ -366,7 +364,8 @@ type Query { ####################### type Mutation { - addData(input: [AddDataInput!]!): AddDataPayload - updateData(input: UpdateDataInput!): UpdateDataPayload - deleteData(filter: DataFilter!): DeleteDataPayload + addData(input: [AddDataInput!]!): AddDataPayload + updateData(input: UpdateDataInput!): UpdateDataPayload + deleteData(filter: DataFilter!): DeleteDataPayload } + diff --git a/graphql/schema/testdata/schemagen/output/union.graphql b/graphql/schema/testdata/schemagen/output/union.graphql index d0d9664120f..a9fcb67dcae 100644 --- a/graphql/schema/testdata/schemagen/output/union.graphql +++ b/graphql/schema/testdata/schemagen/output/union.graphql @@ -3,46 +3,46 @@ ####################### interface Character { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - enemyOf(filter: ResidentFilter): Resident - appearsIn: [Episode!]! @search - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + enemyOf(filter: ResidentFilter): Resident + appearsIn: [Episode!]! @search + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } type Human implements Character { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - enemyOf(filter: ResidentFilter): Resident - appearsIn: [Episode!]! @search - starships(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - totalCredits: Int - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult - starshipsAggregate(filter: StarshipFilter): StarshipAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + enemyOf(filter: ResidentFilter): Resident + appearsIn: [Episode!]! @search + starships(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + totalCredits: Int + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + starshipsAggregate(filter: StarshipFilter): StarshipAggregateResult } type Droid implements Character { - id: ID! - name: String! @search(by: [exact]) - friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - enemyOf(filter: ResidentFilter): Resident - appearsIn: [Episode!]! @search - primaryFunction: String - friendsAggregate(filter: CharacterFilter): CharacterAggregateResult + id: ID! + name: String! @search(by: [exact]) + friends(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + enemyOf(filter: ResidentFilter): Resident + appearsIn: [Episode!]! @search + primaryFunction: String + friendsAggregate(filter: CharacterFilter): CharacterAggregateResult } enum Episode { - NEWHOPE - EMPIRE - JEDI + NEWHOPE + EMPIRE + JEDI } type Starship { - id: ID! - name: String! @search(by: [term]) - length: Float + id: ID! + name: String! @search(by: [term]) + length: Float } union Resident = Human | Droid | Starship @@ -50,10 +50,10 @@ union Resident = Human | Droid | Starship union Tool @remote = Droid | Starship type Planet { - id: ID! - name: String! - residents(filter: ResidentFilter, first: Int, offset: Int): [Resident!] @dgraph(pred: "residents") - bestTool: Tool @custom(http: { url: "http://mock:8888/tool/$id", method: "GET" }) + id: ID! + name: String! + residents(filter: ResidentFilter, first: Int, offset: Int): [Resident!] @dgraph(pred: "residents") + bestTool: Tool @custom(http: {url:"http://mock:8888/tool/$id",method:"GET"}) } ####################### @@ -72,162 +72,162 @@ For example: "1985-04-12T23:20:50.52Z" represents 20 mins 50.52 secs after the 2 """ scalar DateTime -input IntRange { - min: Int! - max: Int! +input IntRange{ + min: Int! + max: Int! } -input FloatRange { - min: Float! - max: Float! +input FloatRange{ + min: Float! + max: Float! } -input Int64Range { - min: Int64! - max: Int64! +input Int64Range{ + min: Int64! + max: Int64! } -input DateTimeRange { - min: DateTime! - max: DateTime! +input DateTimeRange{ + min: DateTime! + max: DateTime! } -input StringRange { - min: String! - max: String! +input StringRange{ + min: String! + max: String! } enum DgraphIndex { - int - int64 - float - bool - hash - exact - term - fulltext - trigram - regexp - year - month - day - hour - geo - hnsw + int + int64 + float + bool + hash + exact + term + fulltext + trigram + regexp + year + month + day + hour + geo + hnsw } input AuthRule { - and: [AuthRule] - or: [AuthRule] - not: AuthRule - rule: String + and: [AuthRule] + or: [AuthRule] + not: AuthRule + rule: String } enum HTTPMethod { - GET - POST - PUT - PATCH - DELETE + GET + POST + PUT + PATCH + DELETE } enum Mode { - BATCH - SINGLE + BATCH + SINGLE } input CustomHTTP { - url: String! - method: HTTPMethod! - body: String - graphql: String - mode: Mode - forwardHeaders: [String!] - secretHeaders: [String!] - introspectionHeaders: [String!] - skipIntrospection: Boolean + url: String! + method: HTTPMethod! + body: String + graphql: String + mode: Mode + forwardHeaders: [String!] + secretHeaders: [String!] + introspectionHeaders: [String!] + skipIntrospection: Boolean } input DgraphDefault { - value: String + value: String } type Point { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input PointRef { - longitude: Float! - latitude: Float! + longitude: Float! + latitude: Float! } input NearFilter { - distance: Float! - coordinate: PointRef! + distance: Float! + coordinate: PointRef! } input PointGeoFilter { - near: NearFilter - within: WithinFilter + near: NearFilter + within: WithinFilter } type PointList { - points: [Point!]! + points: [Point!]! } input PointListRef { - points: [PointRef!]! + points: [PointRef!]! } type Polygon { - coordinates: [PointList!]! + coordinates: [PointList!]! } input PolygonRef { - coordinates: [PointListRef!]! + coordinates: [PointListRef!]! } type MultiPolygon { - polygons: [Polygon!]! + polygons: [Polygon!]! } input MultiPolygonRef { - polygons: [PolygonRef!]! + polygons: [PolygonRef!]! } input WithinFilter { - polygon: PolygonRef! + polygon: PolygonRef! } input ContainsFilter { - point: PointRef - polygon: PolygonRef + point: PointRef + polygon: PolygonRef } input IntersectsFilter { - polygon: PolygonRef - multiPolygon: MultiPolygonRef + polygon: PolygonRef + multiPolygon: MultiPolygonRef } input PolygonGeoFilter { - near: NearFilter - within: WithinFilter - contains: ContainsFilter - intersects: IntersectsFilter + near: NearFilter + within: WithinFilter + contains: ContainsFilter + intersects: IntersectsFilter } input GenerateQueryParams { - get: Boolean - query: Boolean - password: Boolean - aggregate: Boolean + get: Boolean + query: Boolean + password: Boolean + aggregate: Boolean } input GenerateMutationParams { - add: Boolean - update: Boolean - delete: Boolean + add: Boolean + update: Boolean + delete: Boolean } directive @hasInverse(field: String!) on FIELD_DEFINITION @@ -239,12 +239,11 @@ directive @default(add: DgraphDefault, update: DgraphDefault) on FIELD_DEFINITIO directive @withSubscription on OBJECT | INTERFACE | FIELD_DEFINITION directive @secret(field: String!, pred: String) on OBJECT | INTERFACE directive @auth( - password: AuthRule - query: AuthRule - add: AuthRule - update: AuthRule - delete: AuthRule -) on OBJECT | INTERFACE + password: AuthRule + query: AuthRule, + add: AuthRule, + update: AuthRule, + delete: AuthRule) on OBJECT | INTERFACE directive @custom(http: CustomHTTP, dql: String) on FIELD_DEFINITION directive @remote on OBJECT | INTERFACE | UNION | INPUT_OBJECT | ENUM directive @remoteResponse(name: String) on FIELD_DEFINITION @@ -253,78 +252,77 @@ directive @lambda on FIELD_DEFINITION directive @lambdaOnMutate(add: Boolean, update: Boolean, delete: Boolean) on OBJECT | INTERFACE directive @cacheControl(maxAge: Int!) on QUERY directive @generate( - query: GenerateQueryParams - mutation: GenerateMutationParams - subscription: Boolean -) on OBJECT | INTERFACE + query: GenerateQueryParams, + mutation: GenerateMutationParams, + subscription: Boolean) on OBJECT | INTERFACE input IntFilter { - eq: Int - in: [Int] - le: Int - lt: Int - ge: Int - gt: Int - between: IntRange + eq: Int + in: [Int] + le: Int + lt: Int + ge: Int + gt: Int + between: IntRange } input Int64Filter { - eq: Int64 - in: [Int64] - le: Int64 - lt: Int64 - ge: Int64 - gt: Int64 - between: Int64Range + eq: Int64 + in: [Int64] + le: Int64 + lt: Int64 + ge: Int64 + gt: Int64 + between: Int64Range } input FloatFilter { - eq: Float - in: [Float] - le: Float - lt: Float - ge: Float - gt: Float - between: FloatRange + eq: Float + in: [Float] + le: Float + lt: Float + ge: Float + gt: Float + between: FloatRange } input DateTimeFilter { - eq: DateTime - in: [DateTime] - le: DateTime - lt: DateTime - ge: DateTime - gt: DateTime - between: DateTimeRange + eq: DateTime + in: [DateTime] + le: DateTime + lt: DateTime + ge: DateTime + gt: DateTime + between: DateTimeRange } input StringTermFilter { - allofterms: String - anyofterms: String + allofterms: String + anyofterms: String } input StringRegExpFilter { - regexp: String + regexp: String } input StringFullTextFilter { - alloftext: String - anyoftext: String + alloftext: String + anyoftext: String } input StringExactFilter { - eq: String - in: [String] - le: String - lt: String - ge: String - gt: String - between: StringRange + eq: String + in: [String] + le: String + lt: String + ge: String + gt: String + between: StringRange } input StringHashFilter { - eq: String - in: [String] + eq: String + in: [String] } ####################### @@ -332,118 +330,118 @@ input StringHashFilter { ####################### type AddDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + numUids: Int } type AddHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type AddPlanetPayload { - planet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] - numUids: Int + planet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] + numUids: Int } type AddStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + numUids: Int } type CharacterAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type DeleteCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - msg: String - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + msg: String + numUids: Int } type DeleteDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - msg: String - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + msg: String + numUids: Int } type DeleteHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - msg: String - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + msg: String + numUids: Int } type DeletePlanetPayload { - planet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] - msg: String - numUids: Int + planet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] + msg: String + numUids: Int } type DeleteStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - msg: String - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + msg: String + numUids: Int } type DroidAggregateResult { - count: Int - nameMin: String - nameMax: String - primaryFunctionMin: String - primaryFunctionMax: String + count: Int + nameMin: String + nameMax: String + primaryFunctionMin: String + primaryFunctionMax: String } type HumanAggregateResult { - count: Int - nameMin: String - nameMax: String - totalCreditsMin: Int - totalCreditsMax: Int - totalCreditsSum: Int - totalCreditsAvg: Float + count: Int + nameMin: String + nameMax: String + totalCreditsMin: Int + totalCreditsMax: Int + totalCreditsSum: Int + totalCreditsAvg: Float } type PlanetAggregateResult { - count: Int - nameMin: String - nameMax: String + count: Int + nameMin: String + nameMax: String } type StarshipAggregateResult { - count: Int - nameMin: String - nameMax: String - lengthMin: Float - lengthMax: Float - lengthSum: Float - lengthAvg: Float + count: Int + nameMin: String + nameMax: String + lengthMin: Float + lengthMax: Float + lengthSum: Float + lengthAvg: Float } type UpdateCharacterPayload { - character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] - numUids: Int + character(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + numUids: Int } type UpdateDroidPayload { - droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - numUids: Int + droid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + numUids: Int } type UpdateHumanPayload { - human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - numUids: Int + human(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + numUids: Int } type UpdatePlanetPayload { - planet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] - numUids: Int + planet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] + numUids: Int } type UpdateStarshipPayload { - starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - numUids: Int + starship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + numUids: Int } ####################### @@ -451,66 +449,66 @@ type UpdateStarshipPayload { ####################### enum CharacterHasFilter { - name - friends - enemyOf - appearsIn + name + friends + enemyOf + appearsIn } enum CharacterOrderable { - name + name } enum DroidHasFilter { - name - friends - enemyOf - appearsIn - primaryFunction + name + friends + enemyOf + appearsIn + primaryFunction } enum DroidOrderable { - name - primaryFunction + name + primaryFunction } enum HumanHasFilter { - name - friends - enemyOf - appearsIn - starships - totalCredits + name + friends + enemyOf + appearsIn + starships + totalCredits } enum HumanOrderable { - name - totalCredits + name + totalCredits } enum PlanetHasFilter { - name - residents + name + residents } enum PlanetOrderable { - name + name } enum ResidentType { - Human - Droid - Starship + Human + Droid + Starship } enum StarshipHasFilter { - name - length + name + length } enum StarshipOrderable { - name - length + name + length } ####################### @@ -518,224 +516,224 @@ enum StarshipOrderable { ####################### input AddDroidInput { - name: String! - friends: [CharacterRef] - enemyOf: ResidentRef - appearsIn: [Episode!]! - primaryFunction: String + name: String! + friends: [CharacterRef] + enemyOf: ResidentRef + appearsIn: [Episode!]! + primaryFunction: String } input AddHumanInput { - name: String! - friends: [CharacterRef] - enemyOf: ResidentRef - appearsIn: [Episode!]! - starships: [StarshipRef] - totalCredits: Int + name: String! + friends: [CharacterRef] + enemyOf: ResidentRef + appearsIn: [Episode!]! + starships: [StarshipRef] + totalCredits: Int } input AddPlanetInput { - name: String! - residents: [ResidentRef!] + name: String! + residents: [ResidentRef!] } input AddStarshipInput { - name: String! - length: Float + name: String! + length: Float } input CharacterFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [CharacterHasFilter] - and: [CharacterFilter] - or: [CharacterFilter] - not: CharacterFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [CharacterHasFilter] + and: [CharacterFilter] + or: [CharacterFilter] + not: CharacterFilter } input CharacterOrder { - asc: CharacterOrderable - desc: CharacterOrderable - then: CharacterOrder + asc: CharacterOrderable + desc: CharacterOrderable + then: CharacterOrder } input CharacterPatch { - name: String - friends: [CharacterRef] - enemyOf: ResidentRef - appearsIn: [Episode!] + name: String + friends: [CharacterRef] + enemyOf: ResidentRef + appearsIn: [Episode!] } input CharacterRef { - id: ID! + id: ID! } input DroidFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [DroidHasFilter] - and: [DroidFilter] - or: [DroidFilter] - not: DroidFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [DroidHasFilter] + and: [DroidFilter] + or: [DroidFilter] + not: DroidFilter } input DroidOrder { - asc: DroidOrderable - desc: DroidOrderable - then: DroidOrder + asc: DroidOrderable + desc: DroidOrderable + then: DroidOrder } input DroidPatch { - name: String - friends: [CharacterRef] - enemyOf: ResidentRef - appearsIn: [Episode!] - primaryFunction: String + name: String + friends: [CharacterRef] + enemyOf: ResidentRef + appearsIn: [Episode!] + primaryFunction: String } input DroidRef { - id: ID - name: String - friends: [CharacterRef] - enemyOf: ResidentRef - appearsIn: [Episode!] - primaryFunction: String + id: ID + name: String + friends: [CharacterRef] + enemyOf: ResidentRef + appearsIn: [Episode!] + primaryFunction: String } input Episode_hash { - eq: Episode - in: [Episode] + eq: Episode + in: [Episode] } input HumanFilter { - id: [ID!] - name: StringExactFilter - appearsIn: Episode_hash - has: [HumanHasFilter] - and: [HumanFilter] - or: [HumanFilter] - not: HumanFilter + id: [ID!] + name: StringExactFilter + appearsIn: Episode_hash + has: [HumanHasFilter] + and: [HumanFilter] + or: [HumanFilter] + not: HumanFilter } input HumanOrder { - asc: HumanOrderable - desc: HumanOrderable - then: HumanOrder + asc: HumanOrderable + desc: HumanOrderable + then: HumanOrder } input HumanPatch { - name: String - friends: [CharacterRef] - enemyOf: ResidentRef - appearsIn: [Episode!] - starships: [StarshipRef] - totalCredits: Int + name: String + friends: [CharacterRef] + enemyOf: ResidentRef + appearsIn: [Episode!] + starships: [StarshipRef] + totalCredits: Int } input HumanRef { - id: ID - name: String - friends: [CharacterRef] - enemyOf: ResidentRef - appearsIn: [Episode!] - starships: [StarshipRef] - totalCredits: Int + id: ID + name: String + friends: [CharacterRef] + enemyOf: ResidentRef + appearsIn: [Episode!] + starships: [StarshipRef] + totalCredits: Int } input PlanetFilter { - id: [ID!] - has: [PlanetHasFilter] - and: [PlanetFilter] - or: [PlanetFilter] - not: PlanetFilter + id: [ID!] + has: [PlanetHasFilter] + and: [PlanetFilter] + or: [PlanetFilter] + not: PlanetFilter } input PlanetOrder { - asc: PlanetOrderable - desc: PlanetOrderable - then: PlanetOrder + asc: PlanetOrderable + desc: PlanetOrderable + then: PlanetOrder } input PlanetPatch { - name: String - residents: [ResidentRef!] + name: String + residents: [ResidentRef!] } input PlanetRef { - id: ID - name: String - residents: [ResidentRef!] + id: ID + name: String + residents: [ResidentRef!] } input ResidentFilter { - memberTypes: [ResidentType!] - humanFilter: HumanFilter - droidFilter: DroidFilter - starshipFilter: StarshipFilter + memberTypes: [ResidentType!] + humanFilter: HumanFilter + droidFilter: DroidFilter + starshipFilter: StarshipFilter } input ResidentRef { - humanRef: HumanRef - droidRef: DroidRef - starshipRef: StarshipRef + humanRef: HumanRef + droidRef: DroidRef + starshipRef: StarshipRef } input StarshipFilter { - id: [ID!] - name: StringTermFilter - has: [StarshipHasFilter] - and: [StarshipFilter] - or: [StarshipFilter] - not: StarshipFilter + id: [ID!] + name: StringTermFilter + has: [StarshipHasFilter] + and: [StarshipFilter] + or: [StarshipFilter] + not: StarshipFilter } input StarshipOrder { - asc: StarshipOrderable - desc: StarshipOrderable - then: StarshipOrder + asc: StarshipOrderable + desc: StarshipOrderable + then: StarshipOrder } input StarshipPatch { - name: String - length: Float + name: String + length: Float } input StarshipRef { - id: ID - name: String - length: Float + id: ID + name: String + length: Float } input UpdateCharacterInput { - filter: CharacterFilter! - set: CharacterPatch - remove: CharacterPatch + filter: CharacterFilter! + set: CharacterPatch + remove: CharacterPatch } input UpdateDroidInput { - filter: DroidFilter! - set: DroidPatch - remove: DroidPatch + filter: DroidFilter! + set: DroidPatch + remove: DroidPatch } input UpdateHumanInput { - filter: HumanFilter! - set: HumanPatch - remove: HumanPatch + filter: HumanFilter! + set: HumanPatch + remove: HumanPatch } input UpdatePlanetInput { - filter: PlanetFilter! - set: PlanetPatch - remove: PlanetPatch + filter: PlanetFilter! + set: PlanetPatch + remove: PlanetPatch } input UpdateStarshipInput { - filter: StarshipFilter! - set: StarshipPatch - remove: StarshipPatch + filter: StarshipFilter! + set: StarshipPatch + remove: StarshipPatch } ####################### @@ -743,26 +741,21 @@ input UpdateStarshipInput { ####################### type Query { - getCharacter(id: ID!): Character - queryCharacter( - filter: CharacterFilter - order: CharacterOrder - first: Int - offset: Int - ): [Character] - aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult - getHuman(id: ID!): Human - queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] - aggregateHuman(filter: HumanFilter): HumanAggregateResult - getDroid(id: ID!): Droid - queryDroid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] - aggregateDroid(filter: DroidFilter): DroidAggregateResult - getStarship(id: ID!): Starship - queryStarship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] - aggregateStarship(filter: StarshipFilter): StarshipAggregateResult - getPlanet(id: ID!): Planet - queryPlanet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] - aggregatePlanet(filter: PlanetFilter): PlanetAggregateResult + getCharacter(id: ID!): Character + queryCharacter(filter: CharacterFilter, order: CharacterOrder, first: Int, offset: Int): [Character] + aggregateCharacter(filter: CharacterFilter): CharacterAggregateResult + getHuman(id: ID!): Human + queryHuman(filter: HumanFilter, order: HumanOrder, first: Int, offset: Int): [Human] + aggregateHuman(filter: HumanFilter): HumanAggregateResult + getDroid(id: ID!): Droid + queryDroid(filter: DroidFilter, order: DroidOrder, first: Int, offset: Int): [Droid] + aggregateDroid(filter: DroidFilter): DroidAggregateResult + getStarship(id: ID!): Starship + queryStarship(filter: StarshipFilter, order: StarshipOrder, first: Int, offset: Int): [Starship] + aggregateStarship(filter: StarshipFilter): StarshipAggregateResult + getPlanet(id: ID!): Planet + queryPlanet(filter: PlanetFilter, order: PlanetOrder, first: Int, offset: Int): [Planet] + aggregatePlanet(filter: PlanetFilter): PlanetAggregateResult } ####################### @@ -770,18 +763,19 @@ type Query { ####################### type Mutation { - updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload - deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload - addHuman(input: [AddHumanInput!]!): AddHumanPayload - updateHuman(input: UpdateHumanInput!): UpdateHumanPayload - deleteHuman(filter: HumanFilter!): DeleteHumanPayload - addDroid(input: [AddDroidInput!]!): AddDroidPayload - updateDroid(input: UpdateDroidInput!): UpdateDroidPayload - deleteDroid(filter: DroidFilter!): DeleteDroidPayload - addStarship(input: [AddStarshipInput!]!): AddStarshipPayload - updateStarship(input: UpdateStarshipInput!): UpdateStarshipPayload - deleteStarship(filter: StarshipFilter!): DeleteStarshipPayload - addPlanet(input: [AddPlanetInput!]!): AddPlanetPayload - updatePlanet(input: UpdatePlanetInput!): UpdatePlanetPayload - deletePlanet(filter: PlanetFilter!): DeletePlanetPayload + updateCharacter(input: UpdateCharacterInput!): UpdateCharacterPayload + deleteCharacter(filter: CharacterFilter!): DeleteCharacterPayload + addHuman(input: [AddHumanInput!]!): AddHumanPayload + updateHuman(input: UpdateHumanInput!): UpdateHumanPayload + deleteHuman(filter: HumanFilter!): DeleteHumanPayload + addDroid(input: [AddDroidInput!]!): AddDroidPayload + updateDroid(input: UpdateDroidInput!): UpdateDroidPayload + deleteDroid(filter: DroidFilter!): DeleteDroidPayload + addStarship(input: [AddStarshipInput!]!): AddStarshipPayload + updateStarship(input: UpdateStarshipInput!): UpdateStarshipPayload + deleteStarship(filter: StarshipFilter!): DeleteStarshipPayload + addPlanet(input: [AddPlanetInput!]!): AddPlanetPayload + updatePlanet(input: UpdatePlanetInput!): UpdatePlanetPayload + deletePlanet(filter: PlanetFilter!): DeletePlanetPayload } + From 545b8a2b372293db5ee44fd118a581c5e5ce3940 Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 15:59:45 -0500 Subject: [PATCH 12/16] revert toolchain --- .trunk/trunk.yaml | 2 +- go.mod | 2 -- graphql/e2e/custom_logic/cmd/go.mod | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index ac5f84c284d..b0f2c62d042 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -14,7 +14,7 @@ plugins: # Many linters and tools depend on runtimes - configure them here. (https://docs.trunk.io/runtimes) runtimes: enabled: - - go@1.23.4 + - go@1.22.7 - node@18.20.5 - python@3.10.8 diff --git a/go.mod b/go.mod index ab678ae103d..906f0bff6f1 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,6 @@ module github.com/hypermodeinc/dgraph/v24 go 1.22.7 -toolchain go1.23.4 - require ( contrib.go.opencensus.io/exporter/jaeger v0.2.1 contrib.go.opencensus.io/exporter/prometheus v0.4.2 diff --git a/graphql/e2e/custom_logic/cmd/go.mod b/graphql/e2e/custom_logic/cmd/go.mod index dead160ff45..da7af65a331 100644 --- a/graphql/e2e/custom_logic/cmd/go.mod +++ b/graphql/e2e/custom_logic/cmd/go.mod @@ -5,4 +5,4 @@ go 1.22.7 require ( github.com/graph-gophers/graphql-go v1.5.0 gopkg.in/yaml.v2 v2.4.0 -) \ No newline at end of file +) From 57d9c40a0504f379a789d46c1f3f4a3e01d7390f Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 18:03:29 -0500 Subject: [PATCH 13/16] Update Dockerfile --- graphql/e2e/custom_logic/cmd/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql/e2e/custom_logic/cmd/Dockerfile b/graphql/e2e/custom_logic/cmd/Dockerfile index f604fc0af64..aed3b68d7c9 100644 --- a/graphql/e2e/custom_logic/cmd/Dockerfile +++ b/graphql/e2e/custom_logic/cmd/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.19.5-alpine3.17 +FROM golang:1.22-alpine COPY . /go/src/cmd/ From a3c9223f89364885fe6bf792592ada779fe191cb Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 19:32:33 -0500 Subject: [PATCH 14/16] Update error_test.yaml --- graphql/e2e/common/error_test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql/e2e/common/error_test.yaml b/graphql/e2e/common/error_test.yaml index a1cf9db8b65..34f6be69529 100644 --- a/graphql/e2e/common/error_test.yaml +++ b/graphql/e2e/common/error_test.yaml @@ -65,7 +65,7 @@ errors: [ { - message": + "message": Variable type provided AuthorFiltarzzz! is incompatible with expected type AuthorFilter, "locations": [{ "line": 2, "column": 23 }], }, From 568869d41490669016961fabaea0d94bc79e4920 Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Fri, 10 Jan 2025 19:59:34 -0500 Subject: [PATCH 15/16] Update protos_test.go --- protos/protos_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protos/protos_test.go b/protos/protos_test.go index bf6ad08492c..41023055228 100644 --- a/protos/protos_test.go +++ b/protos/protos_test.go @@ -31,6 +31,6 @@ func TestProtosRegenerate(t *testing.T) { require.NoError(t, err, "Got error while regenerating protos: %v\n", err) generatedProtos := filepath.Join("pb", "pb.pb.go") - err = testutil.Exec("git", "diff", "--quiet", "--", generatedProtos) + err = testutil.Exec("git", "diff", "-b", "--quiet", "--", generatedProtos) require.NoError(t, err, "pb.pb.go changed after regenerating") } From fb3208fc9c50f940102b6d2f1629cfa535324019 Mon Sep 17 00:00:00 2001 From: Ryan Fox-Tyler <60440289+ryanfoxtyler@users.noreply.github.com> Date: Mon, 13 Jan 2025 07:59:32 -0500 Subject: [PATCH 16/16] add workflow timeouts --- .github/workflows/cd-dgraph.yml | 6 +++++- .github/workflows/ci-dgraph-code-coverage.yml | 1 + .github/workflows/ci-dgraph-core-tests.yml | 1 + .github/workflows/ci-dgraph-core-upgrade-tests.yml | 1 + .github/workflows/ci-dgraph-fuzz.yml | 1 + .github/workflows/ci-dgraph-integration2-tests.yml | 1 + .github/workflows/ci-dgraph-jepsen-tests.yml | 1 + .github/workflows/ci-dgraph-ldbc-tests.yml | 1 + .github/workflows/ci-dgraph-load-tests.yml | 1 + .github/workflows/ci-dgraph-oss-build.yml | 1 + .github/workflows/ci-dgraph-system-upgrade-tests.yml | 1 + .github/workflows/ci-dgraph-systest-tests.yml | 1 + .github/workflows/ci-dgraph-tests-arm64.yml | 1 + .../workflows/ci-dgraph-upgrade-fixed-versions-tests.yml | 2 +- .github/workflows/ci-dgraph-vector-tests.yml | 1 + CONTRIBUTING.md | 8 +++----- 16 files changed, 22 insertions(+), 7 deletions(-) diff --git a/.github/workflows/cd-dgraph.yml b/.github/workflows/cd-dgraph.yml index d5fe6f8ea6b..2a56bfe3586 100644 --- a/.github/workflows/cd-dgraph.yml +++ b/.github/workflows/cd-dgraph.yml @@ -22,6 +22,7 @@ permissions: jobs: dgraph-build-amd64: runs-on: warp-ubuntu-latest-x64-16x + timeout-minutes: 15 steps: - uses: actions/checkout@v4 with: @@ -121,6 +122,7 @@ jobs: dgraph-build-arm64: runs-on: warp-ubuntu-latest-arm64-16x + timeout-minutes: 15 steps: - uses: actions/checkout@v4 with: @@ -217,9 +219,11 @@ jobs: with: name: dgraph-standalone-arm64 path: dgraph-standalone-arm64.tar - dgraph-docker-image-and-manifests-push: + + graph-docker-image-and-manifests-push: needs: [dgraph-build-amd64, dgraph-build-arm64] runs-on: warp-ubuntu-latest-x64-16x + timeout-minutes: 15 steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/ci-dgraph-code-coverage.yml b/.github/workflows/ci-dgraph-code-coverage.yml index 1bc85ab99eb..6331d3b6700 100644 --- a/.github/workflows/ci-dgraph-code-coverage.yml +++ b/.github/workflows/ci-dgraph-code-coverage.yml @@ -15,6 +15,7 @@ permissions: jobs: dgraph-code-coverage: runs-on: warp-ubuntu-latest-x64-4x + timeout-minutes: 60 steps: - uses: actions/checkout@v4 # defaults to SHA of event that triggered workflow - name: Set up Go diff --git a/.github/workflows/ci-dgraph-core-tests.yml b/.github/workflows/ci-dgraph-core-tests.yml index 02f66f2231e..dca29adf772 100644 --- a/.github/workflows/ci-dgraph-core-tests.yml +++ b/.github/workflows/ci-dgraph-core-tests.yml @@ -23,6 +23,7 @@ jobs: dgraph-core-tests: if: github.event.pull_request.draft == false runs-on: warp-ubuntu-latest-x64-4x + timeout-minutes: 30 steps: - uses: actions/checkout@v4 - name: Set up Go diff --git a/.github/workflows/ci-dgraph-core-upgrade-tests.yml b/.github/workflows/ci-dgraph-core-upgrade-tests.yml index ec6353ae1ca..594b8af4700 100644 --- a/.github/workflows/ci-dgraph-core-upgrade-tests.yml +++ b/.github/workflows/ci-dgraph-core-upgrade-tests.yml @@ -21,6 +21,7 @@ jobs: dgraph-upgrade-tests: if: github.event.pull_request.draft == false runs-on: warp-ubuntu-latest-x64-4x + timeout-minutes: 60 steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/ci-dgraph-fuzz.yml b/.github/workflows/ci-dgraph-fuzz.yml index 10f312499de..9c7f8256bce 100644 --- a/.github/workflows/ci-dgraph-fuzz.yml +++ b/.github/workflows/ci-dgraph-fuzz.yml @@ -21,6 +21,7 @@ jobs: fuzz-test: if: github.event.pull_request.draft == false runs-on: warp-ubuntu-latest-x64-4x + timeout-minutes: 10 steps: - uses: actions/checkout@v4 - name: Set up Go diff --git a/.github/workflows/ci-dgraph-integration2-tests.yml b/.github/workflows/ci-dgraph-integration2-tests.yml index 44a5e246be5..a08b64be6d4 100644 --- a/.github/workflows/ci-dgraph-integration2-tests.yml +++ b/.github/workflows/ci-dgraph-integration2-tests.yml @@ -21,6 +21,7 @@ jobs: dgraph-integration2-tests: if: github.event.pull_request.draft == false runs-on: warp-ubuntu-latest-x64-4x + timeout-minutes: 15 steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/ci-dgraph-jepsen-tests.yml b/.github/workflows/ci-dgraph-jepsen-tests.yml index e85992d7f76..4b86a06f209 100644 --- a/.github/workflows/ci-dgraph-jepsen-tests.yml +++ b/.github/workflows/ci-dgraph-jepsen-tests.yml @@ -13,6 +13,7 @@ permissions: jobs: dgraph-jepsen-tests: runs-on: warp-ubuntu-latest-x64-4x + timeout-minutes: 60 steps: - name: Checkout dgraph repo uses: actions/checkout@v4 diff --git a/.github/workflows/ci-dgraph-ldbc-tests.yml b/.github/workflows/ci-dgraph-ldbc-tests.yml index bb98a0bf9ed..edc9cbbf4c1 100644 --- a/.github/workflows/ci-dgraph-ldbc-tests.yml +++ b/.github/workflows/ci-dgraph-ldbc-tests.yml @@ -21,6 +21,7 @@ jobs: dgraph-ldbc-tests: if: github.event.pull_request.draft == false runs-on: warp-ubuntu-latest-x64-4x + timeout-minutes: 10 steps: - name: Checkout Dgraph uses: actions/checkout@v4 diff --git a/.github/workflows/ci-dgraph-load-tests.yml b/.github/workflows/ci-dgraph-load-tests.yml index f5822e7d642..2487fea869c 100644 --- a/.github/workflows/ci-dgraph-load-tests.yml +++ b/.github/workflows/ci-dgraph-load-tests.yml @@ -21,6 +21,7 @@ jobs: dgraph-load-tests: if: github.event.pull_request.draft == false runs-on: warp-ubuntu-latest-x64-4x + timeout-minutes: 30 steps: - uses: actions/checkout@v4 - name: Set up Go diff --git a/.github/workflows/ci-dgraph-oss-build.yml b/.github/workflows/ci-dgraph-oss-build.yml index 771a7c01d45..f66f934b075 100644 --- a/.github/workflows/ci-dgraph-oss-build.yml +++ b/.github/workflows/ci-dgraph-oss-build.yml @@ -21,6 +21,7 @@ jobs: dgraph-oss-build: if: github.event.pull_request.draft == false runs-on: warp-ubuntu-latest-x64-4x + timeout-minutes: 10 steps: - uses: actions/checkout@v4 - name: Set up Go diff --git a/.github/workflows/ci-dgraph-system-upgrade-tests.yml b/.github/workflows/ci-dgraph-system-upgrade-tests.yml index 766877595bd..34315253831 100644 --- a/.github/workflows/ci-dgraph-system-upgrade-tests.yml +++ b/.github/workflows/ci-dgraph-system-upgrade-tests.yml @@ -21,6 +21,7 @@ jobs: dgraph-upgrade-tests: if: github.event.pull_request.draft == false runs-on: warp-ubuntu-latest-x64-4x + timeout-minutes: 60 steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/ci-dgraph-systest-tests.yml b/.github/workflows/ci-dgraph-systest-tests.yml index f4b8bc133bb..c8da07a5616 100644 --- a/.github/workflows/ci-dgraph-systest-tests.yml +++ b/.github/workflows/ci-dgraph-systest-tests.yml @@ -23,6 +23,7 @@ jobs: dgraph-systest-tests: if: github.event.pull_request.draft == false runs-on: warp-ubuntu-latest-x64-4x + timeout-minutes: 60 steps: - uses: actions/checkout@v4 - name: Set up Go diff --git a/.github/workflows/ci-dgraph-tests-arm64.yml b/.github/workflows/ci-dgraph-tests-arm64.yml index 824bcde9582..f9e2520c660 100644 --- a/.github/workflows/ci-dgraph-tests-arm64.yml +++ b/.github/workflows/ci-dgraph-tests-arm64.yml @@ -21,6 +21,7 @@ jobs: dgraph-tests: if: github.event.pull_request.draft == false runs-on: warp-ubuntu-latest-arm64-4x + timeout-minutes: 60 steps: - uses: actions/checkout@v4 - name: Set up Go diff --git a/.github/workflows/ci-dgraph-upgrade-fixed-versions-tests.yml b/.github/workflows/ci-dgraph-upgrade-fixed-versions-tests.yml index 23105cbdf2c..d25ec215159 100644 --- a/.github/workflows/ci-dgraph-upgrade-fixed-versions-tests.yml +++ b/.github/workflows/ci-dgraph-upgrade-fixed-versions-tests.yml @@ -10,7 +10,7 @@ permissions: jobs: dgraph-upgrade-fixed-versions-tests: runs-on: warp-ubuntu-latest-x64-4x - timeout-minutes: 720 + timeout-minutes: 60 steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/ci-dgraph-vector-tests.yml b/.github/workflows/ci-dgraph-vector-tests.yml index 921026eb914..716485c5eb9 100644 --- a/.github/workflows/ci-dgraph-vector-tests.yml +++ b/.github/workflows/ci-dgraph-vector-tests.yml @@ -23,6 +23,7 @@ jobs: dgraph-vector-tests: if: github.event.pull_request.draft == false runs-on: warp-ubuntu-latest-x64-4x + timeout-minutes: 30 steps: - uses: actions/checkout@v4 - name: Set up Go diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 749fda70d92..31bc239135a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -37,14 +37,14 @@ It's best to put the Dgraph repo somewhere in `$GOPATH`. ```bash -mkdir -p "$(go env GOPATH)/src/github.com/dgraph-io" -cd "$(go env GOPATH)/src/github.com/dgraph-io" +mkdir -p "$(go env GOPATH)/src/github.com/hypermodeinc" +cd "$(go env GOPATH)/src/github.com/hypermodeinc" git clone https://github.com/hypermodeinc/dgraph.git cd ./dgraph make install ``` -This will put the source code in a Git repo under `$GOPATH/src/github.com/dgraph-io/dgraph` and +This will put the source code in a Git repo under `$GOPATH/src/github.com/hypermodeinc/dgraph` and compile the binaries to `$GOPATH/bin`. ### Setup Badger from source repo @@ -198,8 +198,6 @@ yesterday. - **Pull requests are welcome**, as long as you're willing to put in the effort to meet the guidelines. After you fork dgraph, create your pull request against our `main` branch -- Contributors are required to execute our - [Individual Contributor License Agreement](https://cla-assistant.io/dgraph-io/dgraph) - Aim for clear, well written, maintainable code - Simple and minimal approach to features, like Go - New features must include passing unit tests, and integration tests when appropriate